ContactLintAPIMCPPricingFree toolsGet a key

Home / Free Email Validation API: What It Checks and What It Can't Prove

Free Email Validation API: What It Checks and What It Can't Prove

Published 2026-10-13

ContactLint is an email validation API with a free tier, built for signup forms, CRM cleanup, and AI agents. Every key gets 100 checks per month, and you don't need a card to get one.

That same key validates phone numbers too, and it works with the MCP server. Below you'll find:

Get a free API key

100 checks per month. No card required. Your key is shown once, so save it.

What a free email validation API should tell you

A bad address on a signup form tends to cost you later. Maybe it's a bounced welcome email. Maybe it's a fake lead sitting in your CRM, or an agent acting on contact data nobody confirmed.

Most of the trouble comes from a short list:

A good free tier catches all five. It should also tell you plainly what it doesn't check.

What ContactLint checks on every email

Each call to POST /v1/email/validate runs these checks:

ContactLint never opens an SMTP connection to the mailbox.

What a non-SMTP check can prove, and what it can't

A passing check is useful. It is not proof that a real person reads that inbox. Here's what each check actually tells you.

Check What a pass tells you What it can't tell you
Syntax The address is in a usable format under practical RFC rules. That the address exists.
MX and A records The domain has DNS records for receiving mail. That this specific mailbox exists on that domain.
Disposable domain list Whether the domain is on the disposable-email-domains list. Whether a new disposable domain not yet on the list is a throwaway.
Role address Whether the address is a shared role like admin@ or info@. Whether a person actually reads it.
Free mail flag Whether the domain is a free mail provider. Whether the person is a real customer or a good lead.
Mailbox exists Not checked. ContactLint never opens an SMTP connection. Whether the inbox exists or accepts mail.

How to act on the results

Read a pass as "worth sending to," not "proven."

For most forms, a simple policy does the job:

Results are best effort. They come from public DNS records, open-source lists, and phone metadata at the time of the check, so they can be wrong or out of date. Don't use a result as the only basis for a decision that seriously affects a person.

No SMTP check: what that means for you

ContactLint never connects to the mailbox. It does not confirm that a mailbox exists or that a person will receive mail.

If you need that confirmation, plan it as a separate step. Sending a confirmation email to the address is one way to do it.

Make your first call

Get a key

Get a free API key on the signup page. Worth knowing first:

Send a request

Send your key as Authorization: Bearer YOUR_KEY or in an x-api-key header.

curl -X POST https://contactlint.com/v1/email/validate \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "content-type: application/json" \
  -d '{"email":"someone@example.com"}'

Read the response

You get back two objects. result holds the check outcomes. usage shows how the call was billed and where your allowance stands.

{
  "result": {
    "input": "info@example.com",
    "syntax_valid": true,
    "reason": null,
    "domain": "example.com",
    "disposable": false,
    "role_address": true,
    "free_provider": false,
    "mx_found": true,
    "a_found": true,
    "mx_records": ["..."],
    "deliverable_domain": true,
    "verdict": "valid | risky | invalid | unknown"
  },
  "usage": { "billed_as": "...", "free_used_this_month": 0, "free_limit": 100, "credits_remaining": 0 }
}

Field names follow the OpenAPI 3.1 spec served at GET /openapi.json. The values are illustrative. verdict is one of valid, risky, invalid, or unknown.

For the full endpoint list, see the ContactLint email and phone validation API overview.

Phone validation on the same key

Your key also works on POST /v1/phone/validate. Send a phone number and a country code:

{"phone": "...", "country": "US"}

ContactLint parses the number with libphonenumber metadata and returns:

Carrier lookups aren't offered today.

Phone and email checks come out of the same 100 free checks per key per month. One check is one API or MCP call to a validation tool.

{
  "result": {
    "input": "+1 816 555 0142",
    "parsed": true,
    "valid": true,
    "possible": true,
    "type": "...",
    "region": "US",
    "country_calling_code": "1",
    "e164": "+18165550142",
    "national": "...",
    "international": "..."
  },
  "usage": { "billed_as": "...", "free_used_this_month": 0, "free_limit": 100, "credits_remaining": 0 }
}

Field names follow the OpenAPI spec. The values are illustrative and use a 555 example number.

Use it from an AI agent with MCP

An agent should confirm contact data before it uses it. ContactLint runs an MCP server for exactly that.

To connect:

  1. Point any MCP client that supports streamable HTTP at https://contactlint.com/mcp.
  2. Send the header Authorization: Bearer YOUR_KEY.

There are two tools:

Each tool call uses one check. Your agent gets email and phone validation without you writing a wrapper around the HTTP endpoints.

Free tier and credit packs

Prices are in USD.

Plan Checks Price
Free 100 per month $0
Credit pack 5,000 $9
Credit pack 25,000 $35
Credit pack 100,000 $99

Free checks reset each calendar month and don't roll over. Credits kick in after the monthly free checks run out, and they don't expire. Stripe processes payments. Unused credits are refundable within 14 days of purchase. Email support@contactlint.com to request a refund.

To see where you stand, call GET /v1/usage. It returns the free checks used this month and your credit balance.

Get a free API key

100 checks per month. No card required. Your key is shown once, so save it.

Limits and errors

Four error codes cover it:

Validating a list in bulk? Pace requests to stay under 60 per minute per key, and retry after a short wait if you hit a 429.

Where the data comes from

The emails and phone numbers you check are not stored. Read the privacy policy for how request data is handled. Use of the API is covered by the terms of service.

The machine-readable spec is at GET /openapi.json, and the site also publishes an llms.txt file.

Questions go to support@contactlint.com.

FAQ

Is the ContactLint email validation API really free?

Yes. Every key gets 100 checks per month at no cost, and no card is required to sign up. When the free checks run out, the API returns a 402 error until the next month or until you buy a credit pack. Unused credits are refundable within 14 days of purchase.

Does ContactLint check if a mailbox actually exists?

No. ContactLint never opens an SMTP connection to the mailbox, so it cannot confirm that a specific inbox exists or accepts mail. It checks syntax, confirms the domain has MX or A records, and flags disposable domains, role addresses, and free mail providers. That catches many typos and throwaway signups without contacting the mail server.

Can I use the free tier from an AI agent?

Yes. Point any MCP client that supports streamable HTTP at https://contactlint.com/mcp and send your key as a Bearer token. The server exposes two tools, validate_email and validate_phone. Each tool call uses one check. You can check usage any time with GET /v1/usage, which shows free checks used this month and your credit balance.

Does the free tier include phone validation?

Yes. The same key works on POST /v1/phone/validate. Send a phone number and a country code, and it returns valid and possible flags, line type, region, and the number in E.164, national, and international formats. Parsing uses libphonenumber metadata. Each phone check counts as one check against your allowance.

What happens if I send too many requests?

Each key is limited to 60 requests per minute. Go over that and the API returns a 429 error, so add a short wait and retry. Other errors are simple: 401 means a missing or invalid key, 402 means free checks are used up with no credits, and 400 means bad input.

Does ContactLint store the emails and phone numbers I check?

No. ContactLint processes the emails and phone numbers you send only to return a result and does not store them in its database. Signup emails and API keys are stored only as one-way hashes. The site uses no analytics or tracking cookies. Read the privacy policy for the full list of processors, including Cloudflare and Stripe.

Get a free API key

You get 100 checks per month, usable for email, phone, or MCP. No card is required, and no email is sent.

Your key is shown once. Save it when you see it.

Get a free API key

Get a free API key. 100 checks per month, no card required.

Signup Form Validation Checklist

Every ContactLint result field mapped to Accept, Warn, or Block. Error handling for 400, 401, 402 and 429. A credits worksheet based on your own signup volume. And an embed spec for the free disposable email checker and phone number validator.

Disposable addresses are not accepted. Yes, we check with our own API.

Nothing is emailed to you automatically. The checklist opens on this page as soon as you send the form. We do not sell your data. Privacy policy.