The Mailtrix validates email addresses through DNS, SMTP, and disposable domain checks. Use the REST API for programmatic access or the dashboard for manual bulk verification.
Verification pipeline
Quick Start
1. Create an account
Sign up at the registration page. A verification email is sent automatically — click the link to activate your account. You start with 100 free credits.
2. Get an API key
Sign in → Dashboard → API Keys → Create Key. Copy the key — it is shown only once.
3. Verify an email
curl -X POST https://themailtrix.com/api/v1/verify \
-H "Authorization: Bearer mtx_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"email": "user@example.com"}'{
"email": "user@example.com",
"status": "valid",
"mxRecord": "mail.example.com",
"jobId": "9f4e1c2a-..."
}4. Verify a list
curl -X POST https://themailtrix.com/api/v1/bulk-verify \
-H "Authorization: Bearer mtx_live_YOUR_KEY" \
-F "file=@emails.csv"{
"jobId": "a3b8c1d2-...",
"total": 1500,
"stats": { "valid": 1123, "invalid": 210, "risky": 88, "catch_all": 60, "unknown": 19 },
"downloadUrl": "https://themailtrix.com/api/v1/jobs/a3b8c1d2-.../download",
"downloadByStatus": {
"valid": "...download?status=valid",
"invalid": "...download?status=invalid",
"risky": "...download?status=risky",
"catch_all": "...download?status=catch_all",
"unknown": "...download?status=unknown"
}
}Authentication
Pass your API key as a Bearer token on every request.
Authorization: Bearer mtx_live_YOUR_API_KEYAPI keys
Keys are prefixed mtx_live_ and stored as SHA-256 hashes — the plaintext is never saved and cannot be recovered. Each account can hold up to 3 active keys. Create a new key if you lose one.
Best practices
- Store keys in environment variables, never in source code.
- Use separate keys per environment (production, staging, CI).
- Revoke unused keys immediately from Settings.
Credits
Credits are the billing unit. 1 credit = 1 email verified.
| Event | Credit change |
|---|---|
| Email verified (single or bulk) | −1 per email |
| Duplicate emails in a CSV | Free — deduplicated automatically |
| Job fails or times out | Full refund within minutes |
| Bonus / top-up by admin | +N |
Credits are deducted upfront when a job starts. Your current balance is shown in the sidebar of every dashboard page. All transactions are logged under Billing → Transactions — history is kept for 12 months and older records are automatically purged.
Rate Limits
Limits are per user account using a sliding window. Exceeding a limit returns 429 Too Many Requests.
| Endpoint | Limit | Window |
|---|---|---|
POST /api/v1/verify | 30 requests | 60 s |
POST /api/v1/bulk-verify | 5 requests | 60 s |
POST /api/v1/jobs | 20 uploads | 60 s |
Sign-in / sign-up | 10 attempts | 60 s |
Password reset | 3 attempts | 15 min |
API Reference
All endpoints return JSON. Request bodies should be application/json unless noted. Dates are ISO 8601 UTC.
Verifies a single address synchronously (waits up to 30 s). Costs 1 credit.
Request
| Field | Type | Description |
|---|---|---|
email | string | Required. The address to verify. |
curl -X POST https://themailtrix.com/api/v1/verify \
-H "Authorization: Bearer mtx_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"email": "user@example.com"}'Response — 200
| Field | Type | Description |
|---|---|---|
| string | The verified address. | |
| status | string | Verdict — see Email Statuses. |
| mxRecord | string | null | Primary MX hostname for the domain. |
| jobId | string | UUID of the created job. |
| fromCache | boolean | true when served from cache (no queue wait). |
Timeout
Returns 504 if the worker doesn't respond within 30 s. The job keeps running — use GET /api/v1/jobs/:id to poll for the result. Credits are still charged.
Upload a CSV and receive results synchronously. Blocks up to 10 minutes. Duplicates are removed automatically — you're only charged for unique addresses.
Request — multipart/form-data
| Field | Type | Description |
|---|---|---|
| file | CSV file | Required. First column = emails. Header row optional. Max 500,000 rows. |
email
alice@example.com
bob@company.orgcurl -X POST https://themailtrix.com/api/v1/bulk-verify \
-H "Authorization: Bearer mtx_live_YOUR_KEY" \
-F "file=@emails.csv"Response — 200 (done within 10 min)
| Field | Description |
|---|---|
| jobId | Job UUID. |
| total | Unique emails processed. |
| stats | Object with valid, invalid, risky, catch_all, unknown counts. |
| downloadUrl | Download full results CSV. |
| downloadByStatus | Per-status download URLs. |
Response — 202 (still running after 10 min)
| Field | Description |
|---|---|
| jobId | Use to poll GET /api/v1/jobs/:id. |
| statusUrl | Direct URL to check job status. |
| downloadUrl | Use once job status = completed. |
Jobs
Every verification — single or bulk — creates a job. All jobs are stored permanently in your history.
Lifecycle
| Status | Meaning |
|---|---|
pending | CSV uploaded, not started. Credits not charged yet. |
queued | Credits charged, sent to workers. |
processing | Workers are actively verifying. |
completed | Done. Results available for download. |
failed | Error occurred. Credits auto-refunded. |
Jobs stuck in queued or processing for over 6 hours are automatically failed and credits refunded.
Endpoints
/api/v1/jobsList jobs. Params: limit, offset, status, type=bulk./api/v1/jobs/:idGet a single job with full stats./api/v1/jobs/:idPermanently delete a job and its results.Download results as CSV. Job must be completed.
Query params
| Param | Description |
|---|---|
| status | Filter by: valid, invalid, risky, catch_all, unknown. Omit for all. |
CSV columns
| Column | Description |
|---|---|
| Verified address. | |
| status | Verdict. |
| mx_record | Primary MX hostname, or empty. |
Email Statuses
| Status | Meaning | Send? |
|---|---|---|
| valid | Mailbox confirmed. | Yes |
| invalid | Mailbox doesn't exist. | No |
| risky | Disposable or temporary email. May vanish any time. | Carefully |
| catch_all | Domain accepts everything — can't confirm the mailbox is real. | Carefully |
| unknown | Server didn't respond or timed out. Re-verify later. | Retry |
Error Codes
All errors return { "error": "..." }.
| Code | Meaning |
|---|---|
| 400 | Bad request — missing or invalid field. |
| 401 | Missing or invalid API key. |
| 402 | Not enough credits. |
| 403 | Account banned or action not allowed. |
| 404 | Resource not found. |
| 410 | Job expired — pending lists are held for 24 h. Re-upload. |
| 429 | Rate limit exceeded. Retry after 60 s. |
| 504 | Verification timed out. Use the returned jobId to poll results. |
Dashboard Guide
The dashboard lets you verify without writing code. No API key needed.
Bulk Verify
- UploadClick Add List and select a CSV file. Duplicates are stripped automatically.
- ReviewThe job appears in your list with a credit cost. It won't start until you confirm.
- StartClick Start Verification. Credits are deducted and processing begins.
- DownloadOnce complete, use the Download button to get all results or filter by status.
Single Verify
- Enter emailType any email address in the input box.
- VerifyHit Enter or click Verify. 1 credit is charged immediately.
- ResultThe verdict appears inline in your history within a few seconds.
API Keys
- CreateGo to Settings → API Keys → Create Key. Give it a name.
- CopyCopy the key from the dialog — it is shown once only and cannot be recovered.
- UsePass it as Authorization: Bearer mtx_live_... on every API request.
- RevokeClick the trash icon next to any key to revoke it immediately.
Each account supports a maximum of 3 active keys.
Account
Email verification
After signing up, a verification link is sent to your email address. You must click it before you can log in. If you didn't receive it, use the Resend verification email option on the sign-in page.
Change password
- 1Go to Settings → Security.
- 2Enter your current password, then your new password twice.
- 3Click Save. You will remain logged in on the current device.
Sessions
Sessions expire after 7 days of inactivity. Signing out on any device invalidates that session immediately.
FAQ
Are credits refunded if a job fails?
Yes. If a job errors out or gets stuck for more than 6 hours, all credits charged for that job are automatically refunded to your account.
How long are my results stored?
Job history and results are stored indefinitely — you can download or delete them any time from the Bulk Verify page. Credit transaction history is kept for 12 months; records older than that are automatically and permanently deleted.
What's the difference between risky and catch-all?
Risky means the address is from a disposable provider — the mailbox exists today but is designed to be thrown away. Catch-all means the domain accepts any address regardless of whether a real mailbox exists.
Can I re-verify the same email?
Yes. Recently verified addresses are served from cache — the response is instant and still costs 1 credit. Otherwise a fresh verification is performed.
My email came back unknown — what should I do?
The mail server didn't respond or rate-limited the probe. Wait a few hours and re-verify. Persistent unknowns may indicate a server that deliberately blocks SMTP probes.
How do I get more credits?
Go to Dashboard → Buy Credits to purchase a plan. You can also raise a support ticket if you need a custom top-up.
Need help? Open a ticket from the dashboard.
Dashboard →