Validate email addresses in real-time with a single API call. Create a free account to get your API key.
Authenticate with your API key via Authorization: Bearer <key> or x-api-key header.
curl -X POST https://hermes.leutsch.dev/v1/validate \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email": "user@example.com", "checkSmtp": true}'POST /v1/validateValidate a single emailPOST /api/v1/validateSame endpoint (prefixed)POST /api/v1/batchPro| Field | Type | Default | Description |
|---|---|---|---|
| string | — | Email address to validate (required) | |
| checkMx | boolean | true | Check MX records for the domain |
| checkSmtp | boolean | false | Verify mailbox via SMTP (Starter+) |
| checkDisposable | boolean | true | Check against disposable blocklist |
For batch validation, send emails: string[] instead of email (max 100).
{
"email": "user@example.com",
"valid": true,
"score": 0.95,
"deliverability": "deliverable",
"syntax": {
"valid": true
},
"mx": {
"checked": true,
"records": ["alt1.gmail-smtp-in.l.google.com", "..."],
"valid": true
},
"smtp": {
"checked": true,
"valid": true,
"message": "Email accepted"
},
"disposable": {
"checked": true,
"isDisposable": false
},
"catchAll": {
"checked": true,
"isCatchAll": false
},
"role": {
"checked": true,
"isRole": false
},
"freeProvider": {
"checked": true,
"isFree": true
},
"typo": {
"checked": true,
"hasSuggestion": false
},
"subAddress": {
"checked": true,
"hasSubAddress": false
},
"spf": {
"checked": true,
"hasRecord": true,
"record": "v=spf1 include:_spf.google.com ~all"
},
"dmarc": {
"checked": true,
"hasRecord": true,
"policy": "reject"
},
"highRiskTld": {
"checked": true,
"isHighRisk": false
},
"details": {
"localPart": "user",
"domain": "example.com",
"mxPreferences": [5, 10, 20]
}
}Fields gated by plan show checked: false on lower plans. Upgrade to unlock full results.
syntaxAllmxAlldisposableAllsmtpStarter+roleStarter+freeProviderStarter+subAddressStarter+highRiskTldStarter+deliverabilityStarter+catchAllProspfProdmarcProtypoPro400Invalid JSON body or missing email401Invalid or missing API key403Feature not available on your plan / request limit reached429Rate limit exceeded