Domailfix API
Verify emails, find work emails, get company formats and contacts, and check phone numbers from your own software. A simple REST API with JSON, an API key, and the same credits as the website: you pay only for answers.
Authentication
Create an API key on your account page (a free account is enough). Send it with every request in the header X-API-Key, or as Authorization: Bearer YOUR_KEY. Keep it secret: it uses your credits.
Base URL: https://domailfix.com · All requests use HTTPS · Bodies are JSON (Content-Type: application/json).
Test your key
curl 'https://domailfix.com/api/key-check' -H 'X-API-Key: YOUR_KEY'
Check an API key
Confirms that a key works and shows the account and credits left. Use it to test a connection.
Request
curl 'https://domailfix.com/api/key-check' -H 'X-API-Key: YOUR_KEY'
Response
{
"ok": true,
"account": "you@company.com",
"name": "Your Name",
"credits": 100
}Verify an email
Checks whether one email address exists and can receive mail. No email is sent to it.
| Field | Where | Required | What it is |
|---|---|---|---|
email | query | Yes | The address to check. |
Request
curl 'https://domailfix.com/api/verify?email=priya.sharma@company.com' -H 'X-API-Key: YOUR_KEY'
Response
{
"email": "priya.sharma@company.com",
"status": "deliverable",
"reason": "mailbox_exists",
"score": 98,
"did_you_mean": null,
"flags": {
"disposable": false,
"role": false,
"free": false,
"accept_all": false,
"mailbox_full": false,
"toxic": false
},
"checks": {
"syntax": true,
"domain": true
},
"detail": "This mailbox exists and can receive email.",
"accept_all_score": null,
"toxic_reasons": [],
"checklist": {
"format": "valid",
"type": "professional",
"server_status": "valid",
"email_status": "valid",
"bounce_type": null,
"company_format": {
"status": "follows",
"format": "first.last"
}
},
"credits_left": 99
}Verify a list
Starts checking a list in the background (up to 50,000 addresses). Returns a job id straight away. Duplicates are checked once. Results are kept for 2 hours after the job finishes.
| Field | Where | Required | What it is |
|---|---|---|---|
emails | JSON body | Yes | Array of addresses. |
Request
curl -X POST 'https://domailfix.com/api/bulk' -H 'X-API-Key: YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"emails": ["a@company.com", "b@company.com"]}'Response
{
"id": "byyF5-OIkrwe1ioM",
"state": "running",
"total": 2,
"unique": 2,
"done": 0,
"counts": {
"deliverable": 0,
"undeliverable": 0,
"risky": 0,
"unknown": 0
},
"credits_left": 98
}List progress and results
Check progress until state is "finished", then read the results as JSON, or add ?format=csv for a CSV file. Finished lists include a health score from 0 to 100.
| Field | Where | Required | What it is |
|---|---|---|---|
id | path | Yes | The job id from Verify a list. |
format | query | No | csv for a CSV download. |
Request
curl 'https://domailfix.com/api/bulk/JOB_ID' -H 'X-API-Key: YOUR_KEY' curl 'https://domailfix.com/api/bulk/JOB_ID/results?format=csv' -H 'X-API-Key: YOUR_KEY'
Response
{
"id": "byyF5-OIkrwe1ioM",
"state": "finished",
"total": 2,
"unique": 2,
"done": 2,
"counts": {
"deliverable": 1,
"undeliverable": 1,
"risky": 0,
"unknown": 0
},
"health": {
"score": 50,
"grade": "Needs cleaning"
},
"results": [
{
"email": "a@company.com",
"status": "deliverable",
"reason": "mailbox_exists",
"score": 98,
"...": "…"
},
{
"email": "b@company.com",
"status": "undeliverable",
"reason": "mailbox_not_found",
"score": 0,
"...": "…"
}
]
}Report a bounce
Tell Domailfix that an email bounced (or was delivered). Reports from several customers make results more accurate for everyone.
| Field | Where | Required | What it is |
|---|---|---|---|
email or emails | JSON body | Yes | One address, or an array of up to 1,000. |
outcome | JSON body | No | "bounced" (default) or "delivered". |
Request
curl -X POST 'https://domailfix.com/api/report' -H 'X-API-Key: YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"email": "old.staff@company.com", "outcome": "bounced"}'Find a work email
Finds a person's work email from their full name and company website. Returns an address only when the company's mail server confirms it (found), or the most likely address clearly marked as an estimate (likely).
| Field | Where | Required | What it is |
|---|---|---|---|
name | JSON body | Yes | Full name, for example Priya Sharma. |
website | JSON body | Yes | Company website or domain, for example company.com. |
Request
curl -X POST 'https://domailfix.com/api/find' -H 'X-API-Key: YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"name": "Priya Sharma", "website": "company.com"}'Response
{
"status": "found",
"reason": "mailbox_exists",
"name": "Priya Sharma",
"domain": "company.com",
"email": "priya.sharma@company.com",
"score": 95,
"pattern": "{first}.{last}",
"detail": "This address is confirmed.",
"confirmed": true,
"credits_left": 97
}Find emails for a list
Starts finding emails for up to 500 people in the background. Then use GET /api/find/bulk/{id} for progress and /api/find/bulk/{id}/results (add ?format=csv for CSV).
| Field | Where | Required | What it is |
|---|---|---|---|
people | JSON body | Yes | Array of {"name", "website"}. Or send "text" with one "name, website" per line. |
Request
curl -X POST 'https://domailfix.com/api/find/bulk' -H 'X-API-Key: YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"people": [{"name": "Priya Sharma", "website": "company.com"}]}'Response
{
"id": "PeKynVP2rrAEZWY2",
"state": "finished",
"total": 1,
"unique": 1,
"done": 1,
"counts": {
"found": 1,
"likely": 0,
"not_found": 0,
"other": 0
},
"results": [
{
"name": "Priya Sharma",
"website": "company.com",
"status": "found",
"email": "priya.sharma@company.com",
"score": 95,
"pattern": "{first}.{last}",
"note": "This address is confirmed.",
"duplicate": false
}
]
}Company email format
How a company writes its staff email addresses, searched by company name or website.
| Field | Where | Required | What it is |
|---|---|---|---|
q | query | Yes | Company name or website. |
Request
curl 'https://domailfix.com/api/email-format?q=company.com' -H 'X-API-Key: YOUR_KEY'
Response
{
"domain": "company.com",
"formats": [
{
"format": "first.last",
"example": "jane.doe@company.com",
"share": 100,
"count": 2,
"verified": false
}
],
"sightings": 2,
"confidence": "low",
"mail_provider": "Other",
"receives_email": true,
"accept_all": false,
"credits_left": 97
}Company contacts
Public contact details from the company's own website: team emails (never one person's address), office phone numbers and social pages, each with the page it was found on.
| Field | Where | Required | What it is |
|---|---|---|---|
website | query | Yes | Company website, for example company.com. |
Request
curl 'https://domailfix.com/api/company-contacts?website=company.com' -H 'X-API-Key: YOUR_KEY'
Response
{
"domain": "company.com",
"company": "Company Inc",
"reachable": true,
"found": true,
"emails": [
{
"email": "sales@company.com",
"team": "Sales",
"source": "https://company.com/"
}
],
"phones": [
{
"number": "+1 202-555-0143",
"e164": "+12025550143",
"type": "Landline or mobile",
"country": "United States",
"source": "https://company.com/"
}
],
"social": [
{
"network": "LinkedIn",
"url": "https://www.linkedin.com/company/company-inc",
"source": "https://company.com/"
}
],
"pages_checked": [
"https://company.com/"
],
"credits_left": 96
}Check a phone number
Valid or not, the type (mobile, landline, toll-free, VoIP), country, area, original network and clean formats. Fake-looking and reported spam numbers are flagged. It does not say whether a phone is switched on.
| Field | Where | Required | What it is |
|---|---|---|---|
number | query | Yes | The number, with + and country code, or local digits. |
country | query | No | Two-letter country for numbers without +, for example IN or US. |
Request
curl 'https://domailfix.com/api/phone?number=%2B14155552671' -H 'X-API-Key: YOUR_KEY'
Response
{
"input": "+14155552671",
"status": "valid",
"reason": "valid",
"type": "landline_or_mobile",
"type_label": "Landline or mobile",
"e164": "+14155552671",
"international": "+1 415-555-2671",
"national": "(415) 555-2671",
"country": "United States",
"area": "San Francisco, CA",
"carrier": "",
"message": "A valid number.",
"credits_left": 91
}Check a list of numbers
Up to 10,000 numbers in one request. Add "format": "csv" to also get the results as CSV text.
| Field | Where | Required | What it is |
|---|---|---|---|
numbers | JSON body | Yes | Array of numbers (or "text" with one per line). |
country | JSON body | No | Two-letter country for numbers without +. |
Request
curl -X POST 'https://domailfix.com/api/phones' -H 'X-API-Key: YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"numbers": ["+14155552671", "12345"], "country": "US"}'Response
{
"count": 2,
"unique": 2,
"totals": {
"valid": 1,
"risky": 0,
"invalid": 1,
"duplicates": 0
},
"results": [
{
"input": "+14155552671",
"status": "valid",
"...": "…"
},
{
"input": "12345",
"status": "invalid",
"reason": "too_short",
"message": "The number is too short.",
"...": "…"
}
],
"credits_left": 81
}Result fields (email verification)
status | deliverable (mailbox confirmed), undeliverable (bad format, dead domain or no such mailbox), risky (accept-all domain, full mailbox, disposable or toxic address), unknown (no clear answer this time; free, try again later). |
reason | Why, for example mailbox_exists, mailbox_not_found, accept_all, disposable, toxic, no_mail_server, domain_not_found, invalid_syntax, greylisted. |
score | Confidence from 0 to 100. |
accept_all_score | For companies that accept every address: how likely this one is real, 0 to 10. Otherwise null. |
did_you_mean | A typo fix such as name@gmail.com for name@gmial.com, or null. |
flags | disposable, role (shared inbox like info@), free (Gmail, Yahoo…), accept_all, mailbox_full, toxic. |
toxic_reasons | Why an address should not be emailed: spam trap, abuse@, no-reply, misspelt or parked domain. |
checklist | Plain checks: format, type (professional or free), server_status, email_status, bounce_type, company_format (follows or different from the company's usual format). |
credits_left | Your credits after this request. |
Errors and limits
Errors return a JSON body with an error message you can show to people.
| Code | Meaning | Body |
|---|---|---|
| 400 | Something is wrong with the input, for example a missing email. | {"error": "Enter an email address."} |
| 401 | The API key is missing, wrong or deleted. | {"error": "That API key or sign-in is not valid or has expired."} |
| 402 | Not enough credits. Buy more on your account page. | {"error": "…", "code": "no_credits", "credits_left": 0, "signed_in": true} |
| 404 | Unknown address or list id (lists expire 2 hours after they finish). | {"error": "List not found or expired."} |
| 429 | Too many requests at once. Wait a little and try again. | {"error": "Too many searches. Wait a minute and try again."} |
Checks take from under a second to about 20 seconds, because Domailfix asks the company's own mail server. For more than a few addresses, use the list endpoints. On a 429, wait and try again; on Unknown results, try again later (they are free).
AI assistants (MCP)
Use Domailfix from Claude, ChatGPT or Gemini: see Claude, ChatGPT and Gemini. Other MCP clients can connect to https://domailfix.com/mcp with the header Authorization: Bearer YOUR_KEY. Tools: verify_email, verify_emails, start_bulk_verification, get_bulk_status, get_bulk_results, find_email, find_email_format, find_company_contacts, verify_phone_numbers.
No-code apps
Zapier, Make, n8n, Pabbly Connect, Google Sheets, Airtable, HubSpot, Zoho CRM, Salesforce, WordPress and a website form widget: setup steps are on the integrations page.
Questions about the API: privacy@achivix.com.