Email Validation Error Codes

Utilities
POST /api/v1/email/validate Bearer

How Email Validation reports failures. Branch on message_code and charged, not on the HTTP status — 422 is sent both for input we rejected (free) and for a lookup the provider ran and billed us for.

Endpoint Error Response — 400

{
    "status": "FAILED",
    "status_code": 400,
    "charged": false,
    "success": false,
    "message": "Please pass valid value for 'email' in body.",
    "message_code": "REQUEST_FAILED",
    "order_id": "W2A1739512345abcdef01",
    "data": {
        "order_id": "W2A1739512345abcdef01",
        "error_code": "External API Error"
    }
}

HTTP Status Codes

Code Status Charged Description
200 OK Yes Verification result returned
202 Accepted Yes Accepted and being processed, or the provider did not respond in time — check message_code to tell the two apart, and quote the order_id
400 Bad Request No Verification failed or invalid vendor response
401 Unauthorized No Missing or invalid API key
402 Payment Required No Insufficient balance — recharge required
403 Forbidden No No access to this API service
422 Unprocessable Entity Depends — read charged Either input validation failed (not charged), or the provider ran the lookup and returned a negative result (charged). message_code distinguishes them: INVALID_INPUT vs VERIFICATION_FAILED / NO_RECORD_FOUND
429 Too Many Requests No Rate limit exceeded
404 Not Found No Unknown endpoint
500 Internal Server Error No Unexpected error on our side
503 Service Unavailable No Vendor temporarily unavailable

When You Are Charged

message_code Charged HTTP status What it means
OK Yes 200 SUCCESS Verified. The provider ran the lookup and returned a result.
ACCEPTED Yes 202 PENDING Queued at the provider. Quote the order_id to collect the result.
PROVIDER_NO_RESPONSE Yes 202 PENDING The provider did not respond in time. Held for manual review — not auto-refunded.
VERIFICATION_FAILED Yes 422 SUCCESS The provider ran the lookup and the details did not verify. The work was done, so the call is billed.
NO_RECORD_FOUND Yes 422 SUCCESS The provider ran the lookup and found no matching record. Billed for the same reason.
INVALID_INPUT No 422 FAILED Your parameters were rejected before any call was placed.
REQUEST_FAILED No 400 FAILED The call was placed and failed definitively. Refunded to your wallet automatically.
MISSING_API_KEY No 401 FAILED No API key on the request.
INVALID_API_KEY No 401 FAILED Key invalid or expired, or the calling IP is not allowed.
INSUFFICIENT_BALANCE No 402 FAILED Your wallet balance is below the price of this call.
NO_API_ACCESS No 403 FAILED Your account is not subscribed to this API.
NOT_FOUND No 404 FAILED No such endpoint.
RATE_LIMITED No 429 FAILED Per-key, per-service one-minute limit exceeded.
INTERNAL_ERROR No 500 FAILED Unexpected error on our side.
PROVIDER_UNAVAILABLE No 503 FAILED The service could not be reached.

Common Error Responses

Every response carries charged. On all of the errors below it is false — the call never reached the provider, so nothing was billed. The absence of an order_id means the same thing.

// 401 — MISSING_API_KEY
{
    "status": "FAILED",
    "status_code": 401,
    "charged": false,
    "success": false,
    "message": "API key is required.",
    "message_code": "MISSING_API_KEY"
}
// 401 — INVALID_API_KEY
{
    "status": "FAILED",
    "status_code": 401,
    "charged": false,
    "success": false,
    "message": "Invalid, expired, or IP-restricted API key.",
    "message_code": "INVALID_API_KEY"
}
// 402 — INSUFFICIENT_BALANCE
{
    "status": "FAILED",
    "status_code": 402,
    "charged": false,
    "success": false,
    "message": "Insufficient balance. Please recharge your account.",
    "message_code": "INSUFFICIENT_BALANCE"
}
// 403 — NO_API_ACCESS
{
    "status": "FAILED",
    "status_code": 403,
    "charged": false,
    "success": false,
    "message": "You do not have access to this API service.",
    "message_code": "NO_API_ACCESS"
}
// 422 — INVALID_INPUT
{
    "status": "FAILED",
    "status_code": 422,
    "charged": false,
    "success": false,
    "message": "The request could not be accepted. Check the parameters and try again.",
    "message_code": "INVALID_INPUT"
}
// 429 — RATE_LIMITED
{
    "status": "FAILED",
    "status_code": 429,
    "charged": false,
    "success": false,
    "message": "Rate limit exceeded. Please try again later.",
    "message_code": "RATE_LIMITED"
}
// 503 — PROVIDER_UNAVAILABLE
{
    "status": "FAILED",
    "status_code": 503,
    "charged": false,
    "success": false,
    "message": "Service temporarily unavailable.",
    "message_code": "PROVIDER_UNAVAILABLE"
}