Skip to content

Responses

Every check returns the same envelope. Only details differs by endpoint; the API reference documents each one.

{
"success": true,
"data": {
"request": { "id": "req_9f1f…", "type": "email", "input": { "email": "jane@example.com" }, "timestamp": "2026-10-15T22:28:06.372Z", "processing_time_ms": 412 },
"metadata": { "api_version": "1", "credits_used": 1, "credits_remaining": 18420, "cache_hit": false, "test_mode": false, "data_sources": ["syntax", "dns", "smtp"] },
"verdict": { "status": "valid", "reason": "mailbox_exists" },
"risk": { "score": 5, "level": "low", "factors": ["free_provider"], "confidence": "high" },
"details": { "…": "product-specific" },
"recommendation": { "action": "approve", "message": "Safe to accept." },
"partial": false
}
}
Field What it’s for
verdict What we found. status is the headline; reason is a stable code you can branch on.
risk.score 0 (no risk) to 100. level buckets it: low below 25, medium below 50, high below 75, then critical.
risk.factors Every signal that added to the score.
recommendation.action approve, verify, review, or block. The simplest thing to branch on.
partial true if a data source timed out; some fields are null. Partial answers aren’t cached.
Header On Meaning
X-Request-Id Every response Same as data.request.id. Include it when you contact support.
X-Credits-Used Successful checks Credits this request used.
X-Credits-Remaining Live checks and 402s Your balance after this request.
X-RateLimit-Limit, -Remaining, -Reset Every check See Rate limits.
Idempotent-Replay Replays true when the response is a stored replay. See Idempotency.