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.

Base Production URL: https://api.mailveri.com/v1
Authentication Header: Auth-Token: <api_key>

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.

HTTP Header
Auth-Token: mv_3f9a12bc4e89712a...
Multi-Key Support & Lifecycle:
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.

GET /v1/get-balance/
Free • 0 Credits
cURL Example
curl -H "Auth-Token: YOUR_API_KEY" \
     https://api.mailveri.com/v1/get-balance/
JSON Response (HTTP 200)
{
  "error": 0,
  "message": "You have 5000 credits",
  "balance": 5000
}

2. Verify Single Email

Verify delivery status for a single email address in real time.

POST /v1/verify-mail/
1 Credit (Refunded if UNKNOWN)

Parameters (Form Data or URL-encoded)

Field Type Required Description
mail string Required The email address to verify (e.g. [email protected]).
cURL Example
curl -H "Auth-Token: YOUR_API_KEY" \
     -F "[email protected]" \
     https://api.mailveri.com/v1/verify-mail/
JSON Response (HTTP 200)
{
  "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.

POST /v1/verify-mails/
1 Credit / Unique Email

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 Example
curl -H "Auth-Token: YOUR_API_KEY" \
     -F "[email protected]" \
     https://api.mailveri.com/v1/verify-mails/
JSON Response (HTTP 200)
{
  "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.

GET /v1/get-status/
Free • 0 Credits

Query Parameters

Param Type Required Description
id string Required The batch verification job ID returned from /v1/verify-mails/.
cURL Example
curl -H "Auth-Token: YOUR_API_KEY" \
     "https://api.mailveri.com/v1/get-status/?id=sample_batch_id_9x8y7z"
In-Progress Response
{
  "error": 0,
  "status": "PROCESSING",
  "percent": 65,
  "download_link": ""
}
Completed Response
{
  "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.

GET /v1/download-result/
Free • 0 Credits
Download with cURL or wget
# 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.

DELETE /v1/delete-list/
Free • 0 Credits
cURL Example
curl -X DELETE -H "Auth-Token: YOUR_API_KEY" \
     "https://api.mailveri.com/v1/delete-list/?id=sample_batch_id_9x8y7z"
JSON Response (HTTP 200)
{
  "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.

Looking for client setup guides (Claude Desktop, Claude Code, Codex, Cursor, Windsurf, Antigravity, OpenCode, Pi, Oh My Pi, VS Code/Cline) and detailed tool input/output JSON schemas? View the dedicated MailVeri MCP v1 Documentation →
Claude Desktop / Claude Code / Codex / Cursor Config (.cursor/mcp.json)
{
  "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

POST Request sent to your Webhook URL
{
  "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>.

Python HMAC Verification
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.