Verify an email address
before you send.
The email verification API is one HTTP call that checks whether an address can receive mail: syntax, DNS, a live SMTP conversation with the receiving server, and the catch-all and disposable cases that make the answer hard. You get a classification of valid, risky, or invalid, a 0 to 100 score, and the individual check results, so your code can choose its own threshold.
The call
curl "https://peopledb.co/api/v1/email_verifications?email_address=somebody@example.com" \
-H "Authorization: Bearer $TOKEN"
// ←
{
"email": "somebody@example.com",
"valid": true,
"classification": "valid",
"score": 95,
"checks": {
"syntax": true,
"mx_record": true,
"smtp_deliverable": true,
"disposable": false,
"typo_suggestion": null,
"accepts_any_email": false
},
"warnings": [],
"errors": []
}
POST with the same parameters works too. Optional smtp_timeout (1 to 60 seconds, default 10) bounds the SMTP step. Full field reference in the API docs.
What one call checks
typo_suggestion instead of a silent failure.RCPT TO, stopping before any message is sent. This is the only check that speaks to the mailbox itself, and the one every "instant" verifier skips.accepts_any_email, which moves the result to risky rather than pretending it is valid.How the score is built
The score is additive and transparent, so a threshold means the same thing on every address. Syntax contributes 20 points. A verified MX record contributes 40 (15 if it had to be assumed). A confirmed SMTP mailbox contributes 35; a catch-all server contributes 15 and an assumed result 10. Warnings such as a disposable domain or a typo suggestion subtract up to 25. The score_details object in the response shows exactly which of these applied.
The classification is the score read against the evidence: valid when the mailbox was confirmed, invalid when a check failed outright, and risky when the server would not say. Risky is the honest answer for catch-all domains, greylisting hosts, and the biggest inbox providers, which will not tell any verifier the truth over SMTP. The long version of why includes the protocol traces.
| Signal | Points | Field |
|---|---|---|
| Syntax valid | +20 | checks.syntax |
| MX record verified (or assumed) | +40 (or +15) | checks.mx_record |
| SMTP mailbox confirmed | +35 | checks.smtp_deliverable |
| Server accepts any recipient | +15 | checks.accepts_any_email |
| SMTP result assumed (no answer) | +10 | checks.smtp_deliverable |
| Warnings (disposable, typo, other) | up to −25 | warnings[] |
Where it fits
/people endpoint included, are checked for deliverability already. Running a list through verification right before a send catches what changed since, which is what protects sender reputation.Common questions
What does a verification cost?
What does "risky" mean?
Does verifying an address send anything to it?
How long does a check take?
smtp_timeout parameter (default 10 seconds, maximum 60). Slow or greylisting servers return a risky result rather than blocking your request.Can I verify addresses that came from another tool?
Need the address first? The LinkedIn lookup and GitHub lookup tools resolve a profile to a contact record, and the contact enrichment guide explains the whole pipeline.