An email verification API that tells you why
Send an address, get back a category, a plain reason and a typo suggestion. One endpoint for real time, two for lists.
curl "https://simplecold.com/api/v1/api-validation/[email protected]" \ -H "Authorization: Bearer <key>"
const res = await fetch( "https://simplecold.com/api/v1/api-validation/[email protected]", { headers: { Authorization: `Bearer ${process.env.SIMPLECOLD_KEY}` } } ); const result = await res.json();
import requests
res = requests.get(
"https://simplecold.com/api/v1/api-validation/single",
params={"email": "[email protected]"},
headers={"Authorization": f"Bearer {KEY}"},
)
result = res.json(){
"email": "[email protected]",
"status": "possible_typo",
"category": "undeliverable",
"statusMessage": "Possible typo. Did you mean [email protected]?",
"failType": "permanent",
"suggestion": "[email protected]"
}- Six checks on every address
- A plain reason with every result
- Slow servers never cost a second credit
- 200 free credits, no card
For developers
Three endpoints for every volume
Authenticate with your API key as a Bearer token. Every response is JSON.
Real-time checks
One address, answered in seconds. Built for sign-up forms and lead capture.
DocsSmall lists
Send a list in one request. Slow servers come back as processing and finish on their own.
DocsBig files
Upload a CSV, check the job's status and download the results when it finishes.
DocsResponse
What every result contains
The same fields for single and batch results. Results sit inside the payload of the response. Bulk downloads show them as readable columns such as Result, Reason and Reason code.
| Field | Example | What it means |
|---|---|---|
| "[email protected]" | The address you sent. | |
| domain | "gmial.com" | The domain part of the address. |
| category | "undeliverable" | deliverable, risky or undeliverable, or pending while a slow server is still being checked. Build your logic on this. |
| status | "possible_typo" | The reason code, such as mailbox_found, accept_all, role_address, disposable, mailbox_not_found or no_mail_server. |
| statusMessage | "Possible typo. Did you mean [email protected]?" | The plain reason, safe to show to people. |
| failType | "permanent" | permanent, temporary or none. It follows the reason code: temporary means a later check may give a different answer. |
| suggestion | "[email protected]" | The likely fix when we spot a typo in the domain, otherwise null. |
| mxLocation, siteLocation, siteLanguage | "US", "US", "en" | Where the mail servers and the website appear to be, and the site's language. |
Reason codes
Every reason code maps to one category
Build your logic on category. Show statusMessage to people.
| category | Reason codes in status | What to do |
|---|---|---|
| deliverable | mailbox_found | The mailbox exists. Safe to accept. |
| risky | accept_all, role_address, disposable, mailbox_unconfirmed, blocked_by_server, no_response | Catch-all, role, throwaway, or the server wouldn't confirm. Read statusMessage, then decide. |
| undeliverable | mailbox_not_found, mailbox_disabled, rejected, server_error, no_mail_server, invalid_format, possible_typo | Will bounce. Show the suggestion if there is one. |
| pending | processing | The server is slow. Ask again with GET /api-validation/single/result. Asking about that address within 30 minutes doesn't use another credit. |
A pending result reads: "Still checking this mailbox. Ask again in about a minute; you will not be charged again."
Build against the sandbox first
Test API keys (sc_test_) return a fixed result for each reason code, slow checks to practise polling, simulated 429 and 500 errors, small bulk jobs and test webhooks. Nothing is really checked and no credits are used.
FAQ
API questions
Authentication, speed and limits.
Still have a question? Talk to us.
Check your list before you send it
Start with 200 free credits. Pay per credit after that.