POST /v1/email/validate · 1 credit
Request
{
"email": "jhon.doe@gmial.com"
}
| Field |
Type |
Required |
Description |
email |
string |
✓ |
The email address to validate |
Response
{
"input": "jhon.doe@gmial.com",
"valid_syntax": true,
"mx_found": true,
"disposable": false,
"role_based": false,
"free_provider": true,
"did_you_mean": "john.doe@gmail.com",
"deliverability": "risky",
"score": 61,
"credits_used": 1
}
| Field |
Type |
Description |
input |
string |
Original input value |
valid_syntax |
boolean |
RFC-5321 syntax valid |
mx_found |
boolean |
Domain has valid MX records |
disposable |
boolean |
Known disposable/throwaway provider |
role_based |
boolean |
Role address (info@, support@, etc.) |
free_provider |
boolean |
Free consumer provider (gmail, yahoo…) |
did_you_mean |
string | null |
Typo suggestion if detected |
deliverability |
enum |
deliverable risky undeliverable unknown |
score |
integer |
0–100 quality score (higher = better) |
credits_used |
integer |
Credits consumed (always 1) |
Example
curl -X POST https://api.checkharbor.com/v1/email/validate \
-H "X-Api-Key: chk_live_..." \
-H "Content-Type: application/json" \
-d '{"email": "jhon.doe@gmial.com"}'
```
const result = await checkharbor.validateEmail("jhon.doe@gmial.com");
// result.did_you_mean === "john.doe@gmail.com"
// result.score === 61
// result.deliverability === "risky"
```
result = client.validate_email("jhon.doe@gmial.com")
# result["did_you_mean"] == "john.doe@gmail.com"
# result["score"] == 61
```
Error responses
| Status |
Code |
Description |
| 400 |
validation_error |
email field missing |
| 402 |
insufficient_credits |
Zero credit balance |
| 429 |
rate_limited |
Rate limit exceeded |