Email verification API
One POST request tells you whether an address is real, disposable, role-based, or a catch-all — before it reaches your database. JSON in, JSON out, no SDK required.
500 credits free · no credit card · keys work on the free tier
curl -X POST https://pingovo.com/api/v1/verify \
-H "X-API-Key: $PINGOVO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email": "[email protected]"}'How do I verify an email address via API?
Send a POST request to https://pingovo.com/api/v1/verify with your API key in an X-API-Key header and a JSON body of {"email": "..."}. The response returns a status of valid, invalid, catch_all, risky, or unknown, along with every individual check that produced it. Each verification costs one credit; cached repeat lookups cost none.
Prefer to try it without writing code first? The free email verification tool runs the same checks in the browser, minus the SMTP step.
POSThttps://pingovo.com/api/v1/verify
X-API-Key: $PINGOVO_API_KEY
Content-Type: application/json
{ "email": "[email protected]" }200 OK{ "status": "valid", "credits_used": 1 }
Full responseWhat comes back
A single verification response. Every check that contributed to the status is included, so you can apply your own threshold rather than trusting one label.
{
"success": true,
"data": {
"email": "[email protected]",
"status": "valid",
"syntax": { "isValid": true },
"mx": { "acceptsMail": true, "records": ["aspmx.l.google.com"] },
"smtp": { "isDeliverable": true, "mailboxConfirmed": true },
"misc": {
"isDisposable": false,
"isRoleAccount": false,
"isFreeEmail": false,
"hasCatchAll": false
},
"verification_time_ms": 842,
"cached": false
},
"credits_used": 1,
"credits_remaining": 4999
}Read smtp.mailboxConfirmed, not smtp.isDeliverable, when you need to know a mailbox is real. isDeliverable is the raw SMTP response code, and some servers return a positive one for addresses that do not exist. mailboxConfirmed is true only when the exchange actually proved it.
Endpoints
| Endpoint | What it does | Cost |
|---|---|---|
POST/verify | Verify one address. Returns a status, every underlying check, and your remaining credit balance. | 1 credit |
POST/verify/batch | Verify up to 50 addresses in a single request. Returns one result object per address. | 1 credit per address |
GET/credits | Read your remaining credits, lifetime verified count, and current plan. | Free |
Base URL https://pingovo.com/api/v1. All requests are authenticated with an X-API-Key header.
Result statuses
- valid
- The mailbox was confirmed to exist by the SMTP check. Safe to send.
- invalid
- The address cannot receive mail — bad syntax, no MX, or the server rejected the mailbox.
- catch_all
- The domain accepts every address, so existence could not be proven. Send with caution.
- risky
- Disposable, role-based, spamtrap-pattern, or otherwise unsafe to send to.
- unknown
- The check could not be completed — usually greylisting or a timeout. Retry later.
Errors
- HTTP 401
- Missing or invalid X-API-Key header.
- HTTP 400
- EMAIL_REQUIRED, INVALID_EMAIL, EMAILS_REQUIRED, EMPTY_ARRAY, or BATCH_LIMIT_EXCEEDED.
- HTTP 402
- INSUFFICIENT_CREDITS — the response includes how many were required and available.
Every error response carries success: false, a machine-readable error code, and a human-readable message.
Getting started in three steps
Create a free account and an API key
Sign up, open the API section of your dashboard, and generate a key. It is shown once — store it in your secrets manager, not in your repository.
Send your first request
Copy the cURL example above, replace the key, and run it. A 401 means the header name or key is wrong; a 402 means the account is out of credits.
Wire it into your signup flow
Verify at the point of capture so bad addresses never enter your list, and fall back to accepting the address on an unknown status rather than blocking a real user.
Email verification API FAQ
Send a POST request to https://pingovo.com/api/v1/verify with your API key in an X-API-Key header and a JSON body of {"email": "[email protected]"}. The response contains a status field (valid, invalid, catch_all, risky, or unknown), the result of every individual check, and your remaining credit balance. Each verification costs one credit.
Every request carries your key in an X-API-Key header. Keys are created in the API section of your dashboard, can be rotated or deactivated at any time, and are shown only once at creation. Keep the key server-side — it spends credits, so it must never ship in browser or mobile client code.
Yes. POST to https://pingovo.com/api/v1/verify/batch with {"emails": [...]}, up to 50 addresses per request. Each address costs one credit and the response returns a result object per address. For lists larger than a few thousand, the bulk CSV upload in the dashboard is faster and easier to resume.
A free Pingovo account needs no card to create, and API keys work as soon as you add credits or pick a plan. There is also a free browser-based checker that needs no account at all, though it does not run the SMTP mailbox step.
A typical single verification completes in under two seconds; repeat lookups of a recently seen address return from cache almost immediately and cost no credit. The exact time depends on the receiving mail server, since the SMTP step is a real conversation with it. Batch requests are processed sequentially, so budget accordingly.
Check the smtp.mailboxConfirmed flag rather than inferring existence from smtp.isDeliverable. isDeliverable reflects the raw SMTP response code, which some servers return for addresses that do not exist. mailboxConfirmed is only true when the exchange actually proved the mailbox is there.
Start with 500 free credits
Generate a key and make your first call in under a minute. No credit card required.