Free API · No signup

API Documentation

Integrate email verification into your app in minutes. No API key required - quota is tracked by IP.

Base URL: https://www.mailtruster.com

Endpoints

POST/api/check-emailVerify a single email address
GET/api/quotaGet your remaining daily quota
POST/api/bulk-check-emailSubmit a bulk verification job (max 100 emails)
GET/api/verification-result/:job_idPoll a bulk job result

Check a single email

POST/api/check-email

Request body

FieldTypeDescription
emailstringThe email address to verify
validation_typestringsmtp · mx · mx_blacklist · regex (default: smtp)

Example

curl -X POST https://www.mailtruster.com/api/check-email \
  -H "Content-Type: application/json" \
  -d '{"email": "user@example.com", "validation_type": "smtp"}'

Response · 200

{
  "success": true,
  "data": {
    "email": "user@example.com",
    "validation_type": "smtp",
    "valid": true,
    "checks": {
      "syntax": true,
      "dns": true
    },
    "reason": null,
    "errors": []
  },
  "meta": {
    "request_id": "018e6b3c-...",
    "timestamp": "2026-04-11T12:00:00+00:00",
    "version": "v1"
  }
}

reason is null when valid. When invalid: REGEX · DNS · BLACKLIST · SMTP

Validation types

smtpFull check - syntax + DNS + SMTP connection to the mail server. Most accurate.
mxSyntax + DNS MX record lookup. Fast, no SMTP connection.
mx_blacklistMX check + disposable domain blacklist. Ideal to block throwaway emails.
regexSyntax only. Instant, no network call.

Get quota

GET/api/quota

Example

curl https://www.mailtruster.com/api/quota

Response · 200

{
  "daily_limit": 100,
  "used": 14,
  "remaining": 86
}

Bulk verification

Async workflow - submit a list, get a job_id per email, then poll each one individually.

1 - Submit a job

POST/api/bulk-check-email
curl -X POST https://www.mailtruster.com/api/bulk-check-email \
  -H "Content-Type: application/json" \
  -d '{
    "emails": ["alice@example.com", "bob@test.com"],
    "validation_type": "mx"
  }'

Maximum 100 emails per request. Returns 202 Accepted.

{
  "success": true,
  "data": {
    "results": [
      {
        "email": "alice@example.com",
        "status": "queued",
        "message": "Queued for verification",
        "job_id": "018e6b3c-1111-..."
      },
      {
        "email": "bob@test.com",
        "status": "queued",
        "message": "Queued for verification",
        "job_id": "018e6b3c-2222-..."
      }
    ]
  },
  "meta": { ... }
}

2 - Poll a result

GET/api/verification-result/:job_id
curl https://www.mailtruster.com/api/verification-result/018e6b3c-1111-...
{
  "success": true,
  "data": {
    "job_id": "018e6b3c-1111-...",
    "result": {
      "email": "alice@example.com",
      "status": "valid",
      "message": "Email is valid",
      "details": { ... },
      "created_at": "2026-04-11T12:00:00+00:00",
      "updated_at": "2026-04-11T12:00:05+00:00"
    }
  },
  "meta": { ... }
}

Poll until status is no longer queued or processing. Recommended interval: 2s.

queuedJob received, waiting to be processed
processingVerification in progress
validEmail is valid
invalidEmail is invalid
errorVerification failed (e.g. invalid format)

Error codes

EMAIL_REQUIRED400Missing or invalid email field
INVALID_VALIDATION_TYPE400Unknown validation_type value
QUOTA_EXCEEDED429Daily limit reached - details include limit, remaining, requested
BULK_LIMIT_EXCEEDED422More than 100 emails in a single bulk request
JOB_NOT_FOUND404No result found for the given job_id
UPSTREAM_ERROR502Error from the verification service
INTERNAL_ERROR500Unexpected server error