MailVeri REST API Reference
The MailVeri API allows you to verify individual email deliverability, trigger high-speed distributed batch verification, track processing progress, download results, and subscribe to secure real-time webhooks.
Overview
MailVeri inspects mailbox existence directly against recipient mail exchangers without sending actual emails. It performs RFC syntax checks, DNS MX resolution, disposable email filtering, spam trap analysis, catch-all detection, full mailbox identification, and SMTP handshake verification.
| Status Code | Description | Deliverability Advice |
|---|---|---|
| VALID | Mailbox is verified and accepted by the destination SMTP server. | Safe to send. Lowest bounce probability. |
| INVALID | Mailbox does not exist, domain has no MX records, or address was explicitly rejected. | Do not send. Hard bounce guaranteed. |
| DISPOSABLE | Temporary, throwaway email service (e.g. GuerrillaMail, 10MinuteMail). | Block or filter out to preserve reputation. |
| ROLE_ACCOUNT | Generic role address (e.g. admin@, support@, info@, sales@). | Higher complaint risk; proceed with care. |
| CATCH_ALL | The domain accepts any email address regardless of whether the mailbox exists. | Proceed cautiously; deliverability cannot be guaranteed. |
| FULL_INBOX | Mailbox exists but its storage quota has been exceeded. | Soft bounce. May retry later. |
| UNKNOWN | Remote server timed out, greylisted the probe, or refused connection. | Free of charge. Credits are automatically refunded. |
Authentication
Authenticate all API requests by providing your API key in the Auth-Token HTTP header.
Auth-Token: mv_3f9a12bc4e89712a...
You can create up to 5 concurrent active API keys in your MailVeri Dashboard. Each key can have an optional expiration date (7, 30, 60, 90 days, or never). Keys can be renamed or revoked at any time. Revoked or expired keys immediately return
403 Forbidden.
Rate Limits & Throttling
Rate limits are enforced per account (across all API keys) to protect cluster resources:
/v1/get-balance/: 1 request per second./v1/verify-mail/: 1 request per second per account./v1/verify-mails/: Max 10 concurrent active batch jobs.
When rate limits are exceeded, the API responds with HTTP 429 Too Many Requests. Please implement exponential backoff retry strategies.
1. Get Account Balance
Retrieve your account's remaining email verification credit balance.
curl -H "Auth-Token: YOUR_API_KEY" \
https://api.mailveri.com/v1/get-balance/
{
"error": 0,
"message": "You have 5000 credits",
"balance": 5000
}
2. Verify Single Email
Verify delivery status for a single email address in real time.
Parameters (Form Data or URL-encoded)
| Field | Type | Required | Description |
|---|---|---|---|
mail |
string | Required | The email address to verify (e.g. [email protected]). |
curl -H "Auth-Token: YOUR_API_KEY" \
-F "[email protected]" \
https://api.mailveri.com/v1/verify-mail/
{
"error": 0,
"message": "Verify [email protected] successfully",
"status": "VALID",
"mail": "[email protected]",
"balance": 4999
}
3. Upload File for Bulk Verification
Submit a file containing a list of emails for distributed verification across our worker cluster.
Parameters (Multipart Form-Data)
| Field | Type | Required | Description |
|---|---|---|---|
file |
file | Required | Text (.txt) or CSV (.csv) file with one email per line. Max size: 100MB. Minimum: 2 unique emails. |
curl -H "Auth-Token: YOUR_API_KEY" \
-F "[email protected]" \
https://api.mailveri.com/v1/verify-mails/
{
"error": 0,
"message": "List leads.txt with 500 unique mails was uploaded and queued successfully",
"id": "sample_batch_id_9x8y7z",
"count": 500
}
4. Get Batch Job Status
Poll verification progress (percentage completed) and receive the final download link.
Query Parameters
| Param | Type | Required | Description |
|---|---|---|---|
id |
string | Required | The batch verification job ID returned from /v1/verify-mails/. |
curl -H "Auth-Token: YOUR_API_KEY" \
"https://api.mailveri.com/v1/get-status/?id=sample_batch_id_9x8y7z"
{
"error": 0,
"status": "PROCESSING",
"percent": 65,
"download_link": ""
}
{
"error": 0,
"status": "DONE",
"percent": 100,
"download_link": "https://api.mailveri.com/v1/download-result/?id=sample_batch_id_9x8y7z"
}
5. Download Verification Results
Download a compressed ZIP archive containing categorized result lists.
# Download using cURL
curl -H "Auth-Token: YOUR_API_KEY" \
--remote-header-name --remote-name \
"https://api.mailveri.com/v1/download-result/?id=sample_batch_id_9x8y7z"
# Or download using wget
wget --header "Auth-Token: YOUR_API_KEY" \
--content-disposition \
"https://api.mailveri.com/v1/download-result/?id=sample_batch_id_9x8y7z"
6. Delete Batch Job
Cancel an active verification or delete a completed list from storage.
curl -X DELETE -H "Auth-Token: YOUR_API_KEY" \
"https://api.mailveri.com/v1/delete-list/?id=sample_batch_id_9x8y7z"
{
"error": 0,
"message": "List leads.txt was deleted successfully",
"id": "sample_batch_id_9x8y7z"
}
Model Context Protocol (MCP) Server
Integrate MailVeri directly into AI tools (Claude Desktop, Claude Code, Codex, Cursor, Windsurf, Antigravity, OpenCode, Pi, Oh My Pi, VS Code) using the open-source MCP protocol.
{
"mcpServers": {
"mailveri": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/mailveri/mailveri-mcp",
"mailveri-mcp"
],
"env": {
"MAILVERI_API_KEY": "YOUR_API_KEY"
}
}
}
}
| MCP Tool Name | Description |
|---|---|
mailveri_verify_email |
Verify deliverability of a single email address. |
mailveri_get_balance |
Fetch current account verification credits. |
mailveri_verify_batch |
Submit a list of emails for bulk verification. |
mailveri_get_batch_status |
Check batch completion percentage and download link. |
mailveri_download_batch_result |
Get secure URL to download result ZIP archive. |
mailveri_delete_batch |
Cancel or clean up an active/completed batch job. |
Webhooks & HMAC SHA-256 Signing
Configure an HTTPS endpoint in your Webhooks Dashboard to receive instant notifications as soon as bulk verifications complete.
Event Payload Example
{
"id": "sample_batch_id_9x8y7z",
"status": "DONE",
"download_link": "https://api.mailveri.com/v1/download-result/?id=sample_batch_id_9x8y7z"
}
Verifying Signatures
When webhook signing is enabled, requests include the X-Webhook-Signature header formatted as t=<timestamp>,v1=<signature>.
import hmac
import hashlib
import json
def verify_mailveri_webhook(payload_body, sig_header: str, secret: str) -> bool:
pairs = dict(item.split('=', 1) for item in sig_header.split(','))
timestamp = pairs.get('t', '')
expected_sig = pairs.get('v1', '')
# Re-serialize to compact JSON (matches signing format)
data = json.loads(payload_body) if isinstance(payload_body, (str, bytes)) else payload_body
compact = json.dumps(data, separators=(',', ':'), sort_keys=True)
signed_payload = f"{timestamp}.{compact}"
computed_sig = hmac.new(secret.encode('utf-8'), signed_payload.encode('utf-8'), hashlib.sha256).hexdigest()
return hmac.compare_digest(computed_sig, expected_sig)
Error Codes Reference
Summary of API response error codes and HTTP status codes.
| HTTP Status | API Error Code | Message / Cause | Solution |
|---|---|---|---|
403 Forbidden |
- | Auth-Token missing or key is revoked/expired. | Generate or select an active key under API Keys. |
429 Too Many Requests |
- | Exceeded rate limits (1 req/sec on single endpoints). | Throttle requests and implement exponential backoff. |
200 OK |
error: 1 |
Missing required parameter (e.g. mail, file, id). |
Supply all mandatory request parameters. |
200 OK |
error: 2 |
Insufficient credits or batch list not found. | Check balance or verify the batch UUID provided. |
200 OK |
error: 3 |
Wrong email syntax or empty uploaded file. | Ensure the email or file complies with standard formatting. |
200 OK |
error: 4 |
Fewer than 2 unique emails in batch upload. | Minimum batch size is 2 emails. For single emails, use /v1/verify-mail/. |
200 OK |
error: 7 |
Maximum 10 concurrent active lists reached. | Wait for running jobs to finish before submitting new lists. |