Base URL: https://trymailtrue.com · Auth: Authorization: Bearer YOUR_KEY · Every new key includes 100 free credits.
POST /api/verify
Content-Type: application/json
{ "email": "jane@acme.com" }
→ 200
{
"email": "jane@acme.com",
"status": "valid", // valid | invalid | risky | unknown
"score": 95, // 0-100 deliverability confidence
"reason": "smtp: mailbox confirmed deliverable",
"checks": {
"syntax": "pass",
"mx": "pass",
"disposable": "pass",
"role": "pass",
"smtp": "pass" // pass | fail | unknown | skipped
},
"took_ms": 812
}
| Status | Meaning | Mail it? |
|---|---|---|
| valid | Mailbox confirmed (or domain accepts mail with no negative signals) | Yes |
| invalid | Bad syntax, no MX records, or the server rejected the mailbox | No |
| risky | Disposable provider or role account — deliverable but low value | Your call |
| unknown | A check couldn't complete (e.g. server greylisted our probe). We refuse to guess. | Retry later |
POST /api/bulk # multipart, field name "file"
Authorization: Bearer YOUR_KEY
→ 202 { "job_id": "job_abc123", "total": 4821, "status": "queued" }
GET /api/bulk/job_abc123 # poll status
→ 200 { "id": "job_abc123", "status": "processing", "total": 4821, "done": 1200 }
GET /api/bulk/job_abc123/results.csv
→ CSV: email,status,score,reason,syntax,mx,disposable,role,smtp
Limits: 50,000 emails per job. 1 credit per email, deducted when the job is accepted.
POST /api/keys # { "name": "prod" }
→ 201 { "api_key": "ev_…", "credits": 100 }
GET /api/me # Authorization: Bearer YOUR_KEY
→ 200 { "credits": 97, "name": "prod" }
| Endpoint | Limit |
|---|---|
POST /api/verify (no key — demo) | 10/hour per IP |
POST /api/verify (key) | 60/minute per key |
POST /api/bulk | 5 concurrent jobs per key |
400 missing/invalid parameters 401 API key required or invalid 402 insufficient credits 429 rate limit exceeded 503 billing not enabled (pre-launch)
It's JSON over HTTPS — curl works everywhere. Official SDKs (JS, Python) ship after launch; the API is stable and versioned.