Official SDKs
SendSure ships official SDKs for Node.js and Python so you can add email verification to your product in a few lines — no HTTP plumbing, retry logic, or signature code to write yourself.
Both SDKs are zero-dependency, cover the same API surface, and handle rate limits for you:
verify— single email, returns verdict, score, and reasonverifyBatch/verify_batch— up to 100 emails per callverifyMany/verify_many— lists of any size, auto-chunked with progress callbackscredits— current balance for the account that owns the key- Webhook signature verification (v2 scheme) helpers
Authentication uses your API key from the dashboard (Settings → API Keys). Keys start with si_live_ and are sent in the X-API-Key header — the SDKs do this automatically.
Node.js
npm install @sendsure/sdk
import { SendSure } from '@sendsure/sdk';
const sendsure = new SendSure({ apiKey: process.env.SENDSURE_API_KEY });
const result = await sendsure.verify('jane@example.com');
// result.result → 'valid' | 'invalid' | 'unknown' | 'risky'
// result.score → 0–100 confidence
// result.reason → human-readable explanation
const batch = await sendsure.verifyBatch(['a@example.com', 'b@example.com']);
console.log(batch.valid, batch.invalid, batch.creditsRemaining);
Works from TypeScript and plain JavaScript (ESM and CommonJS), Node 18+.
Python
pip install sendsure
from sendsure import SendSure
client = SendSure(api_key="si_live_...")
result = client.verify("jane@example.com")
if result["result"] == "valid":
... # safe to send
batch = client.verify_batch(["a@example.com", "b@example.com"])
Python 3.8+, standard library only.
Large lists
Both SDKs chunk automatically and respect rate limits (Retry-After on 429 is honored, with a bounded retry budget):
const merged = await sendsure.verifyMany(emails, {
onProgress: (done, total) => console.log(`${done}/${total}`),
});
merged = client.verify_many(emails, on_progress=lambda done, total: print(done, total))
Billable requests are never auto-retried after a network failure or server error, so a retry can never double-charge you.
Verifying webhooks
If you registered a webhook endpoint, verify each delivery with the v2 signature helper before trusting the payload:
import { webhooks } from '@sendsure/sdk';
const event = webhooks.constructEvent(rawBody, signatureHeader, secret);
from sendsure import construct_event
event = construct_event(raw_body, signature_header, secret)
Both throw when the signature is invalid or the timestamp is outside the 5-minute tolerance. Deduplicate deliveries by the event id — retries reuse the same id. See the webhooks and API quickstart for the full signature scheme.
Error handling
Every non-2xx response raises a typed error with status and code:
import { SendSureError } from '@sendsure/sdk';
try {
await sendsure.verify(email);
} catch (err) {
if (err instanceof SendSureError && err.code === 'insufficient_credits') {
// top up in the dashboard
}
}
from sendsure import SendSureError
try:
client.verify(email)
except SendSureError as err:
if err.code == "insufficient_credits":
...
Other platforms
- Zapier, Make, n8n — use the no-code integrations from the dashboard's Integrations page.
- Any other language — the REST API is small and documented in the API quickstart:
POST /api/verify/singleandPOST /api/verify/batchwith theX-API-Keyheader.