The Sieve API
Three JSON endpoints: validate one address, validate up to 100 in a batch, or get a send/caution/suppress decision that also weighs your own sending domain. Every live verdict ships with its receipt: the MX host that answered and the SMTP reply code. AI agents get the same verdicts over an official MCP server.
Not a developer? You never need this page: the app cleans lists with no code at all. This reference is for teams wiring Sieve into their own software.
Authentication
Create a key under API Access in the app. API access comes with Pro or any credit pack. Send it on every request as Authorization: Bearer sv_… (an x-api-key header also works). Keys are shown once at creation; treat them like passwords.
Each key is limited to 120 requests per minute. Past the limit you get 429 with a Retry-After header.
/v1/validateValidate a single address through the full 8-layer pipeline. Consumes one live verification only when the mailbox layer actually runs.
/v1/validate/batchValidate 1 to 100 addresses in one synchronous call. The response is a JSON array of the same result objects, in input order.
Probing runs at deliberately modest concurrency to stay gentle on receiving mail servers, so a full batch of 100 can take a couple of minutes when many domains need a live probe. One malformed address never fails the batch. Its slot comes back as category: "rejected" with status: "error". For lists beyond 100, use bulk jobs in the app: CSV upload, progress tracking, export, and a webhook when the job completes.
/v1/decisionThe send-readiness gate: validates one recipient, optionally grades YOUR sending domain (senderDomain), and fuses both into a single send / caution / suppress decision. Put it in front of every send.
A clean recipient is downgraded to caution or suppress when your own domain's SPF/DKIM/DMARC posture would land the message in spam anyway. The reasons array says why.
MCP for AI agents
Sieve ships an official Model Context Protocol server, so coding assistants and autonomous outreach agents can call the same verdicts the REST API serves: validate an address, gate a send, grade a domain, read domain intel. It speaks stateless Streamable HTTP at POST https://sievemails.com/api/mcp and uses the same API keys, the same metering (a live verification is charged only when a probe actually runs), and the same per-key rate limit. There is no anonymous access, and Gmail, Yahoo, Outlook and iCloud are never SMTP-probed: verdicts there are DNS-layer and say so.
Form Shield
A drop-in guard for your signup forms. Create a public site key under API Access in the app, add two lines of HTML, and every email field gets typo rescue plus disposable and undeliverable warnings, inline and accessible. It runs the same DNS-layer checks as the embeddable widget but is scoped to your site key, so usage rolls up to your account. It never opens an SMTP connection and is free.
| Attribute | Put it on | What it does |
|---|---|---|
| data-sieve-shield-key | script tag | Your public site key (shld_...). Required. Safe to put in page source. |
| data-sieve-shield | input or form | Mark an email input to protect it, or a form to protect every email field inside it. |
| data-sieve-shield-block | script tag, form, or input | Block native submit while a disposable or undeliverable address is in the field. Off by default (warn only). |
| data-endpoint | script tag | Point the script at a different Sieve host. Defaults to the host the script was loaded from. |
Under the hood the script POSTs to https://sievemails.com/api/shield/check with { key, email }. You can call it directly. The verdict is one of ok, risky or undeliverable; reasons is a short list of plain-language notes and suggestion is a corrected address when a typo is likely.
The hint warns by default and never blocks your form. Add data-sieve-shield-block to stop native submission on disposable or undeliverable addresses. Addresses are checked in memory and never stored. Per-site and per-visitor rate limits keep the endpoint fast; past a limit it returns 429 and the hint simply does not render, so signups are never interrupted.
Validation result fields
| Field | Type | Notes |
|---|---|---|
| string | The address exactly as you sent it. | |
| normalized | string | Trimmed, lowercased form that was actually validated. |
| category | "clean" | "risky" | "rejected" | The three-bucket verdict most integrations key on. |
| status | string | Granular verdict: valid, likely_valid, valid_unverifiable, role_based, risky, soft_bounce, mailbox_full, typo_suspect, disposable, no_mx, hard_bounce, mailbox_disabled, syntax_invalid, missing. |
| statusLabel | string | Human-readable label, e.g. "Valid mailbox". |
| score | number | 0 to 100 confidence in deliverability. |
| reason | string | null | One-line explanation of the verdict. |
| typoSuggestion | string | null | Corrected address when a typo is suspected (gmial.com to gmail.com). |
| suggestedDomain | string | null | Corrected provider domain when a non-deliverable domain looks like a major provider (gmail.com). Null otherwise. |
| mode | "full" | "dns_only" | full = live SMTP probing ran. dns_only = the probe path was unavailable and only DNS layers ran. The response never pretends otherwise. |
| checks[] | array | One entry per pipeline layer (syntax, typo, disposable, role, mx, auth, catch_all, smtp), each with status pass | fail | warn | skip and a detail string. |
| evidence | object | The Verdict Receipt: mxHost, smtpCode, catchAll, latencyMs, probedAt (ISO), confidence (0 to 100), recommendation (send | caution | suppress), intelObservations (prior probes of the domain that informed this verdict). |
| elapsedMs | number | Wall-clock time for the validation (single-call endpoints). |
Errors
Errors are JSON with an error message field.
Webhooks
Register an endpoint under Webhooks in the app and Sieve POSTs four event types: job.completed, job.failed and job.updated (all carrying the same job object shown below), plus domain.regressed when a monitored domain's deliverability grade drops. The x-sieve-event header tells them apart, and every delivery carries two signature headers signed with your endpoint's secret (whsec_…, shown once at creation):
- x-sieve-signature (legacy): hex HMAC-SHA256 of the raw body.
- x-sieve-signature-v1 carries t=<unix>,v1=<hex>, where v1 is the hex HMAC-SHA256 of `${t}.${body}`. Prefer this one: the timestamp lets you reject replays.
Honest limits
Free-mail providers (Gmail, Yahoo, Outlook, iCloud) block mailbox probing for every vendor. Sieve never SMTP-probes them and returns valid_unverifiable instead of pretending the mailbox was confirmed.
Catch-all domains (Microsoft 365 included) come back risky with an evidence-based evidence.confidence score: never clean, never a binary "unknown".
If the live probe path is unavailable, responses say "mode": "dns_only" and you are never charged a live verification that didn't run. Check the field; don't assume.