Email Verification API

This endpoint enables you to verify the validity of an email address. The system deeply checks whether an email is VALID, CATCH_ALL or INVALID. A verification costs 0.5 credits per email, except if the email being validated comes from our /domain-search endpoint; in that case, we only charge the user if the email is VALID.


No credit will be deducted if you previously verified the email.



curl -X POST \
 -H "Content-Type: application/json" \
 -H "X-KEY: your_api_key" \
 -d '{"email": "[email protected]"}' \


One of those two paramaters is required:

emailstringThe email to verify.
email_anon_idstringThe ID of the email obtained from the /domain-search endpoint.


A successful request will return the following information:

    "error": false,
    "response": {
        "free": true,
        "email": "[email protected]",
        "email_anon_id": "YYWV7XB0YT",
        "domain": "",
        "email_status": "INVALID",
        "email_sub_status": "no_mx_records",
        "catch_all_recovery": false,
        "valid_format": true,
        "disposable": false,
        "gibberish": false,
        "type": "professional",
        "catch_all": false,
        "mx_record_present": true,
        "mx_record_main": "",
        "mx_record_list": [
        "smtp_provider": "Google",
        "total_emails": 194
errorbooleanIndicates if an error has occurred. If false, the request was successful. If true, an error has occurred. Please check our general error message for more details.
freebooleanIndicates whether you were charged for this verification. This is always true if you verified that email before. It's also true if the email is CATCH_ALL or INVALID and it came from the /domain-search endpoint (i.e., you used email_anon_id to perform the verification).
emailstringThe email that was verified.
email_anon_idstringThe anonymous ID of the email that was verified. This ID can be used for future verifications.
domainstringThe domain part of the email.
email_statusstringThe verification status of the email. Possible values are VALID, CATCH_ALL, INVALID.
email_sub_statusstringAdditional information about the email_status. Possible values are: no_mx_records, dns_timed_out, smtp_timed_out, smtp_unknown_response, or null.
catch_all_recoverybooleanWether we used our catch-all recovery intelligence to validate the email. Those emails are usually tagged catch-all or risky by other verification providers, but we were able to accurately validate it.
valid_formatbooleanIndicates if the email has a valid format.
disposablebooleanIndicates if the email is a disposable email (e.g., [email protected]).
gibberishbooleanIndicates if the email looks like gibberish (e.g., [email protected]).
typestringIndicates the type of email. Possible values are: professional (e.g., [email protected]), generic (e.g., [email protected]), or personal (e.g., [email protected]).
catch_allbooleanIndicates if the domain of the email is a catch-all domain.
mx_record_presentbooleanIndicates if the domain of the email has MX records.
mx_record_mainstringThe main MX record of the domain.
mx_record_listarrayThe list of all MX records of the domain, along with their preference values.
smtp_providerstringThe SMTP provider identified for the domain (this property is in beta).
total_emailsintegerThe total number of emails that we have linked to that domain in our database.

Please note that the email_status indicates the validity of the email:

  • VALID: The email has been verified and is a valid email address.
  • CATCH_ALL: The domain is a catch-all domain, meaning it accepts any email on the domain, making it impossible to verify the existence of a specific email.
  • INVALID: The email doesn't exist or is invalid.

Deep catch-all detection and recovery

Our Email Verification API at Prospeo features a special tool called "Deep Catch-All Detection", which is represented by the catch_all_recovery property. This feature helps us check CATCH_ALL email addresses. These email addresses are often seen as "risky" or "unverifiable".

CATCH_ALL servers make it hard to check if a specific email exists. Prospeo’s technology changes this by working out the details of email servers to confirm if an email really exists. Simply put, even on a CATCH_ALL server, we use very intensive and deep intelligence such as response timing and other to determin the status of unverifiable emails.

While we can't get rid of all CATCH_ALL or RISKY emails, the accuracy of Propseo email verification goes way beyond other verification providers. Try it for yourself.

Error handling

Error messages follow the general structure as explained in the Error Codes section.

Rate limit

The rate limits are:

  • 400 call per minute
  • 10 call per second (burst allowance)

When the limit is reached, we will return a 429 error code.


If you need your rate limit to be increased, feel free to contact us at [email protected]. The rate limit can easily be increased to 30+ requests per second (2000+ per minute).

Response time

On average, a request take around 2 seconds but can extend up to 10 seconds.

Given that this product performs all of its test in real-time, the response time largely depends on the SMTP server of the targeted domain/company.

We don't just make attempts to validate emails through SMTP; but we also execute much more complex operations to uncover catch-all emails, which are beyond the scope of standard SMTP-pinging approaches.

While a majority of SMTP servers have quick response times, when encountering a catch-all SMTP, we delve deeper and elsewhere on the web to verify the email. This additional investigation can increase the response time.

We recommend not setting a timeout.


In any case, rest assured that we have established hard limits on our response time. There's no need to worry about your system hanging indefinitely while waiting for our response.