API

Email verification API

Check an address before it enters your CRM, signup form or campaign. One REST call returns a clear status, the reasons behind it, and you pay only when the address is Valid or Risky.

Request · POST /api/v2/verify-email
curl -X POST "https://api.skrap.ai/api/v2/verify-email" \  -H "x-api-key: $SKRAP_API_KEY" \  -H "Content-Type: application/json" \  -d '{"email":"[email protected]"}'
Response
200 OK
1{2  "email": "[email protected]",3  "status": "valid",            // valid | risky | invalid | unknown4  "retryable": false,           // true: unknown for a temporary reason — try later5  "domainInfo": { "domain": "example.com", "hasMxRecords": true },6  "score": 95,                  // 95 valid · 10–70 risky (by risk reason) · 0 invalid · null unknown7  "checks": {8    "syntax": true,9    "mxFound": true,10    "smtp": "accepted",         // accepted | rejected | inconclusive | not_checked11    "catchAll": false,12    "disposable": false,13    "roleAccount": false,14    "freeProvider": false15  },16  "riskReasons": [],            // risky only: catch_all, catch_all_unconfirmed, role_account, disposable17  "didYouMean": null            // typo hint, e.g. "[email protected]" for "[email protected]"18}
  • Four clear statuses

    Valid, Risky, Invalid or Unknown, with a score and the checks behind it: syntax, MX, mailbox, catch-all, role and disposable.

  • Pay for useful answers only

    1 credit for Valid or Risky. Invalid and Unknown results cost nothing, in real time and in bulk.

  • Real time or bulk

    One address per call for forms and CRMs, or up to 25,000 rows per bulk job with progress polling and a completion webhook.

  • Typo hints

    didYouMean suggests the likely address for common domain typos such as gmial.com, so signup forms can ask before saving.

  • Fits your stack

    cURL, Node.js and Python samples, an OpenAPI 3.1 spec, webhooks, Zapier, Clay, Google Sheets and an MCP server for AI assistants.

  • Your keys, your rules

    Per-key IP allowlists and expiry dates; keys on a team spend the team's shared credits.

What every verification checks

  1. 1Syntax: the address is well formed (and common typos get a didYouMean hint).
  2. 2Domain and MX: the domain exists and publishes mail servers. No MX means Invalid.
  3. 3Mailbox: Skrap.ai asks the domain's mail server whether the mailbox exists, without sending an email.
  4. 4Catch-all detection: some domains accept every address. Those results come back Risky with a catch_all reason instead of a false Valid.
  5. 5Disposable and role flags: throwaway domains and shared inboxes such as info@ are flagged in checks and riskReasons.
  6. 6Published-address check: when a mail server won't confirm a mailbox, Skrap.ai checks whether the exact address is published on the company's own website or public pages, and can return Valid when it is.

Statuses

StatusMeaning
validThe mailbox exists and accepts mail.
riskyDeliverable but uncertain — catch-all domains, full mailboxes, mail servers that would not confirm the mailbox, and best guesses in the company's email format. Send with care.
invalidThe address or domain cannot receive mail. Free.
unknownWe could not confirm the domain has a mail server (its DNS did not answer), or there was no address to give. Free. When retryable is true, the cause was temporary (try again later).

Credits

ResultCost
Verify — Valid or Risky1 credit
Verify — Invalid or UnknownFree

New accounts get 100 free credits to try the product, and the free email verifier works without an account. API keys come with every paid plan and credit pack: create one in the app under Settings → API keys & MCP and send it in the x-api-key header. See pricing for plans.

Rate limits

PlanRequests
Free30 requests / minute per key
Professional120 requests / minute per key
Enterprise600 requests / minute per key
CustomAgreed with sales

Over the limit you get 429 RATE_LIMITED with a Retry-After header. For large lists use bulk jobs instead of looping the single endpoint: they run in the background and charge the same way.

Frequently asked questions

Is there a free email verification API?

New accounts get 100 free credits, and the free email verifier checks addresses without an account. API keys come with any paid plan or credit pack; Invalid and Unknown results are always free.

How fast is a single verification?

Single verifications run in real time and most answer within seconds. Some mail servers are slow or rate-limit lookups; then the result says so (Unknown with retryable: true) and costs nothing.

How do you handle catch-all domains?

A catch-all domain accepts mail for any address, so a mailbox check can't prove the person exists. Skrap.ai returns Risky with a catch_all reason rather than calling it Valid. See catch-all domains.

Can I verify a whole list through the API?

Yes. POST up to 25,000 addresses to /api/v1/bulk-verify, poll the task or subscribe to the bulk_job.completed webhook, then page through results or download a CSV.

Does verification send an email to the address?

No. Skrap.ai talks to the receiving mail server and stops before any message is sent, so the person never sees anything.

Can AI assistants use it?

Yes. The MCP server exposes verify_email and bulk_verify_emails to Claude, ChatGPT, Cursor and other MCP clients, using the same credits as the API.

Your Next Customer Is JustOne Search Away

No credit card required100 one-time free credits