Endpoints
| Method | Path | What it does | Billed |
|---|---|---|---|
POST | /v1/check | Check one address | 1 email |
GET | /v1/check?email=... | Same, using the query string | 1 email |
POST | /v1/check/bulk | Check up to 1,000 addresses | 1 per address answered |
POST | /v1/feedback | Report what happened to a checked address | Free |
GET | /v1/model | Live accuracy of the model | Free |
POST /v1/check
| Field | Type | Required | Description |
|---|---|---|---|
email | string | Yes | The address to check. Max 254 characters. |
ip | string | No | The user's public IP (IPv4 or IPv6). Adds cloud-server, Tor and same-IP checks. Never stored. |
explain | boolean | No | true adds an evidence list showing how each signal moved the score. |
Prefer POST over GET: addresses then stay out of URLs and server logs. The GET version takes the same fields as query parameters.
POST /v1/check/bulk
{ "emails": ["a.lee@gmail.com", "not-an-email", "test@mailinator.com"] }
Returns one entry per input, in the same order. An invalid input returns an error entry instead of failing the whole request:
{
"results": [
{ "email": "a.lee@gmail.com", "human_score": 94, "verdict": "allow", "...": "..." },
{ "input": "not-an-email", "error": "not a valid email address" },
{ "email": "test@mailinator.com", "human_score": 0, "verdict": "block", "...": "..." }
]
}
Addresses are checked in parallel, and addresses at the same domain share one lookup, so a bulk call is much faster than many single calls.
POST /v1/feedback
{ "check_id": "chk_AXDmekmC35NL1mpGtCtC...", "outcome": "fake" }
Or skip the check_id and send the address. It labels your latest check of that inbox:
{ "email": "maria.santos@gmail.com", "outcome": "confirmed" }
Returns 202 Accepted. See Teach the model with feedback.
GET /v1/model
Shows how accurate the model is, measured on real feedback before the model learned from each example. Example response (your numbers will differ):
{
"mode": "auto",
"serving": "baseline",
"healthy": false,
"learned_version": 12,
"feedback_examples": 140,
"customers": 3,
"baseline": { "accuracy": 0.91, "log_loss": 0.27, "recent_log_loss": 0.25 },
"learned": { "accuracy": 0.93, "log_loss": 0.22, "recent_log_loss": 0.21 },
"recommendation": "keep collecting feedback"
}