Skip to content

Quickstart

Verify your first email address in a few minutes.

  1. Get an API key. In the dashboard, open API keys and create a key. Copy the secret key (it starts with sk_) — you won’t be able to see it again.

  2. Make a verification request. Replace sk_your_api_key with your key. timeout is how many seconds the request waits for the verdict (default 5, up to 90); source is an optional label stored with the result so you can tell your integrations apart.

    Terminal window
    curl -X POST "https://api.tryverifyemail.com/v1/email-verifications?timeout=25" \
    -H "Authorization: Bearer sk_your_api_key" \
    -H "Content-Type: application/json" \
    -d '{"email":"jane@example.com","source":"quickstart"}'
  3. Read the response. A 200 means the check finished; the verdict is nested under result.

    {
    "id": "5f1c9d2e-8b1a-4f5e-9c3d-2a7b6e4d1f08",
    "status": "completed",
    "result": {
    "email": "jane@example.com",
    "normalized_email": "jane@example.com",
    "verdict": "deliverable",
    "sub_status": "mailbox_exists",
    "quality_score": 95,
    "confidence": 92,
    "provider": "google",
    "primary_mx": "aspmx.l.google.com",
    "signals": {
    "syntax": "pass",
    "domain": "pass",
    "mx": "pass",
    "smtp": "pass",
    "catch_all": "pass",
    "role_account": "pass",
    "disposable": "pass",
    "dnsbl": "pass",
    "toxic": "pass",
    "greylisting": "pass"
    },
    "verified_at": "2026-09-05T06:35:01.000Z"
    }
    }

    If the mail server has not answered when your timeout runs out you get a 202 with "status": "pending" instead, and no result yet:

    {
    "id": "5f1c9d2e-8b1a-4f5e-9c3d-2a7b6e4d1f08",
    "status": "pending",
    "poll_after_ms": 2000,
    "next_retry_at": "2026-09-05T06:35:03.000Z"
    }

    The check keeps running. Wait poll_after_ms milliseconds, then GET the URL in the response’s Location header (/v1/email-verifications/{id}), optionally with its own ?timeout=, until it answers 200. The poll reference has a complete loop.

    A mail server that never answers inside our 180-second budget closes the check as "verdict": "unknown", "sub_status": "timeout". That result is terminal and costs nothing.

    See Understanding results for what each field means.

  4. Check your balance. GET /v1/me returns the account behind the key, its plan and the credits it can spend:

    Terminal window
    curl https://api.tryverifyemail.com/v1/me \
    -H "Authorization: Bearer sk_your_api_key"
    {
    "email": "you@example.com",
    "plan": "growth",
    "credits_available": 48210,
    "api_key": { "id": "key_01J8YV3Q2M7X9K4R6T1W5N8B0D", "label": "Quickstart", "mode": "live" }
    }