Domailfix
Product
Apps
Resources
Menu
Try Domailfix free

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

GET/api/key-check Free

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

GET/api/verify?email=… 1 credit · Unknown is free

Checks whether one email address exists and can receive mail. No email is sent to it.

FieldWhereRequiredWhat it is
emailqueryYesThe 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

POST/api/bulk 1 credit per unique address · Unknown is free

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.

FieldWhereRequiredWhat it is
emailsJSON bodyYesArray 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

GET/api/bulk/{id} · /api/bulk/{id}/results Free

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.

FieldWhereRequiredWhat it is
idpathYesThe job id from Verify a list.
formatqueryNocsv 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

POST/api/report Free

Tell Domailfix that an email bounced (or was delivered). Reports from several customers make results more accurate for everyone.

FieldWhereRequiredWhat it is
email or emailsJSON bodyYesOne address, or an array of up to 1,000.
outcomeJSON bodyNo"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

POST/api/find 2 credits when found · 1 for a likely match · not found is free

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).

FieldWhereRequiredWhat it is
nameJSON bodyYesFull name, for example Priya Sharma.
websiteJSON bodyYesCompany 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

POST/api/find/bulk Same as Find, per unique person

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).

FieldWhereRequiredWhat it is
peopleJSON bodyYesArray 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

GET/api/email-format?q=… ½ credit · free when nothing is found

How a company writes its staff email addresses, searched by company name or website.

FieldWhereRequiredWhat it is
qqueryYesCompany 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

GET/api/company-contacts?website=… 1 credit when something is found · otherwise free

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.

FieldWhereRequiredWhat it is
websitequeryYesCompany 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

GET/api/phone?number=… 5 credits

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.

FieldWhereRequiredWhat it is
numberqueryYesThe number, with + and country code, or local digits.
countryqueryNoTwo-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

POST/api/phones 5 credits per unique number

Up to 10,000 numbers in one request. Add "format": "csv" to also get the results as CSV text.

FieldWhereRequiredWhat it is
numbersJSON bodyYesArray of numbers (or "text" with one per line).
countryJSON bodyNoTwo-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)

statusdeliverable (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).
reasonWhy, for example mailbox_exists, mailbox_not_found, accept_all, disposable, toxic, no_mail_server, domain_not_found, invalid_syntax, greylisted.
scoreConfidence from 0 to 100.
accept_all_scoreFor companies that accept every address: how likely this one is real, 0 to 10. Otherwise null.
did_you_meanA typo fix such as name@gmail.com for name@gmial.com, or null.
flagsdisposable, role (shared inbox like info@), free (Gmail, Yahoo…), accept_all, mailbox_full, toxic.
toxic_reasonsWhy an address should not be emailed: spam trap, abuse@, no-reply, misspelt or parked domain.
checklistPlain checks: format, type (professional or free), server_status, email_status, bounce_type, company_format (follows or different from the company's usual format).
credits_leftYour credits after this request.

Errors and limits

Errors return a JSON body with an error message you can show to people.

CodeMeaningBody
400Something is wrong with the input, for example a missing email.{"error": "Enter an email address."}
401The API key is missing, wrong or deleted.{"error": "That API key or sign-in is not valid or has expired."}
402Not enough credits. Buy more on your account page.{"error": "…", "code": "no_credits", "credits_left": 0, "signed_in": true}
404Unknown address or list id (lists expire 2 hours after they finish).{"error": "List not found or expired."}
429Too 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.