Get started in two curls.
Create a key, then post an email. Cache hits return in under 50ms. New emails that need SMTP typically resolve in 3–15s, but you'll get an immediate partial score either way — the tier tells you which layer answered.
# Create a key in the dashboard first.
# Then:
curl -X POST https://api.verification.netrionlabs.com/v1/verify \
-H 'Authorization: Bearer ev_live_xxx...' \
-H 'Content-Type: application/json' \
-d '{"email":"john@ibm.com"}'Authentication
Pass your key as a Bearer token. Each key is hashed with SHA-256 in our database — we never store the raw value, which is why we can only show it once on creation. Rotate keys freely; active revocation takes effect immediately.
Authorization: Bearer ev_live_<48 hex chars>Single verify
Returns a score 0–100, a letter grade A+/A/B/C/D/F, the tier that resolved it, and the individual signal contributions.
// request
{ "email": "john@ibm.com" }
// response
{
"email": "john@ibm.com",
"domain": "ibm.com",
"score": 93,
"label": "A+",
"tier": "data_join",
"duration_ms": 87,
"smtp_status": "valid",
"vendor_status": "Valid (Esp)",
"employment_status": "current",
"is_catch_all": false,
"source_count": 3,
"signals": {
"vendor_esp_30d": 25,
"smtp_valid_90d": 15,
"employed_current": 12,
"multi_source_3": 10,
"pattern_strong": 5
}
}Bulk verify
curl -X POST https://api.verification.netrionlabs.com/v1/verify/bulk \
-H 'Authorization: Bearer ev_live_xxx...' \
-d '{
"emails": ["a@x.com","b@y.com","c@z.com"],
"webhook_url": "https://yourapp/webhook/verify"
}'
// response: { "job_id": "...", "count": 3, "status": "queued" }Poll GET /v1/verify/bulk/:id or supply a webhook URL. Results stream as they're scored — you won't wait for the whole batch.
Scoring reference
Scores aren't opaque. Every response includes a signals object with the individual contributions so you know why.