GET
/
v1
curl --request GET \
  --url https://emailreputation.abstractapi.com/v1
{
  "email_address": "benjamin.richard@abstractapi.com",
  "email_deliverability": {
    "status": "deliverable",
    "status_detail": "valid_email",
    "is_format_valid": true,
    "is_smtp_valid": true,
    "is_mx_valid": true,
    "mx_records": [
      "gmail-smtp-in.l.google.com",
      "alt3.gmail-smtp-in.l.google.com",
      "alt4.gmail-smtp-in.l.google.com",
      "alt1.gmail-smtp-in.l.google.com",
      "alt2.gmail-smtp-in.l.google.com"
    ]
  },
  "email_quality": {
    "score": 0.8,
    "is_free_email": false,
    "is_username_suspicious": false,
    "is_disposable": false,
    "is_catchall": true,
    "is_subaddress": false,
    "is_role": false,
    "is_dmarc_enforced": true,
    "is_spf_strict": true,
    "minimum_age": 1418
  },
  "email_sender": {
    "first_name": "Benjamin",
    "last_name": "Richard",
    "email_provider_name": "Google",
    "organization_name": "Abstract API",
    "organization_type": "company"
  },
  "email_domain": {
    "domain": "abstractapi.com",
    "domain_age": 1418,
    "is_live_site": true,
    "registrar": "NAMECHEAP INC",
    "registrar_url": "http://www.namecheap.com",
    "date_registered": "2020-05-13",
    "date_last_renewed": "2024-04-13",
    "date_expires": "2025-05-13",
    "is_risky_tld": false
  },
  "email_risk": {
    "address_risk_status": "low",
    "domain_risk_status": "low"
  },
  "email_breaches": {
    "total_breaches": 2,
    "date_first_breached": "2018-07-23T14:30:00Z",
    "date_last_breached": "2019-05-24T14:30:00Z",
    "breached_domains": [
      { "domain": "apollo.io", "date_breached": "2018-07-23T14:30:00Z" },
      { "domain": "canva.com", "date_breached": "2019-05-24T14:30:00Z" }
    ]
  }
}

Getting Started

Abstract’s Email Reputation API requires only your unique API key api_key and a single email email:

https://emailreputation.abstractapi.com/v1/
? api_key = YOUR_UNIQUE_API_KEY
& email = johnsmith@gmail.com

This was a successful request, and all available details about that email were returned:

{
  "email_address": "benjamin.richard@abstractapi.com",
  "email_deliverability": {
    "status": "deliverable",
    "status_detail": "valid_email",
    "is_format_valid": true,
    "is_smtp_valid": true,
    "is_mx_valid": true,
    "mx_records": [
      "gmail-smtp-in.l.google.com",
      "alt3.gmail-smtp-in.l.google.com",
      "alt4.gmail-smtp-in.l.google.com",
      "alt1.gmail-smtp-in.l.google.com",
      "alt2.gmail-smtp-in.l.google.com"
    ]
  },
  "email_quality": {
    "score": 0.8,
    "is_free_email": false,
    "is_username_suspicious": false,
    "is_disposable": false,
    "is_catchall": true,
    "is_subaddress": false,
    "is_role": false,
    "is_dmarc_enforced": true,
    "is_spf_strict": true,
    "minimum_age": 1418
  },
  "email_sender": {
    "first_name": "Benjamin",
    "last_name": "Richard",
    "email_provider_name": "Google",
    "organization_name": "Abstract API",
    "organization_type": "company"
  },
  "email_domain": {
    "domain": "abstractapi.com",
    "domain_age": 1418,
    "is_live_site": true,
    "registrar": "NAMECHEAP INC",
    "registrar_url": "http://www.namecheap.com",
    "date_registered": "2020-05-13",
    "date_last_renewed": "2024-04-13",
    "date_expires": "2025-05-13",
    "is_risky_tld": false
  },
  "email_risk": {
    "address_risk_status": "low",
    "domain_risk_status": "low"
  },
  "email_breaches": {
    "total_breaches": 2,
    "date_first_breached": "2018-07-23T14:30:00Z",
    "date_last_breached": "2019-05-24T14:30:00Z",
    "breached_domains": [
      { "domain": "apollo.io", "date_breached": "2018-07-23T14:30:00Z" },
      { "domain": "canva.com", "date_breached": "2019-05-24T14:30:00Z" }
    ]
  }
}

Request parameters

api_key
string
required

Your unique API key. Note that each user has unique API keys for each of Abstract’s APIs, so your Email Validation API key will not work for your IP Geolocation API, for example.

email
String
required

The email address to validate.

Response parameters

The API response is returned in a universal and lightweight JSON format.

email_address
String

The email address you submitted for analysis.

email_deliverability.status
String

Whether the email is considered deliverable, undeliverable, or unknown.

email_deliverability.status_detail
String

Additional detail on deliverability (e.g., inbox_full, full_mailbox, invalid_format).

email_deliverability.is_format_valid
Boolean

Is true if the email follows the correct format.

email_deliverability.is_smtp_valid
Boolean

Is true if the SMTP check was successful.

email_deliverability.is_mx_valid
Boolean

Is true if the domain has valid MX records.

email_deliverability.mx_records
Array[String]

List of MX records associated with the domain.

email_quality.score
Float

Confidence score between 0.01 and 0.99 representing email quality.

email_quality.is_free_email
Boolean

Is true if the email is from a known free provider like Gmail or Yahoo.

email_quality.is_username_suspicious
Boolean

Is true if the username appears auto-generated or suspicious.

email_quality.is_disposable
Boolean

Is true if the email is from a disposable email provider.

email_quality.is_catchall
Boolean

Is true if the domain is configured to accept all emails.

email_quality.is_subaddress
Boolean

Is true if the email uses subaddressing (e.g., user+label@domain.com).

email_quality.is_role
Boolean

Is true if the email is a role-based address (e.g., info@domain.com, support@domain.com).

email_quality.is_dmarc_enforced
Boolean

Is true if a strict DMARC policy is enforced on the domain.

email_quality.is_spf_strict
Boolean

Is true if the domain enforces a strict SPF policy.

email_quality.minimum_age
Integer or Null

Is Estimated age of the email address in days, or null if unknown.

email_sender.first_name
String or Null

First name associated with the email address, if available.

email_sender.last_name
String or Null

Last name associated with the email address, if available.

email_sender.email_provider_name
String or Null

Name of the email provider (e.g., Google, Microsoft).

email_sender.organization_name
String or Null

Organization linked to the email or domain, if available.

email_sender.organization_type
String or Null

Type of organization (e.g., company).

email_domain.domain
String

Domain part of the submitted email address.

email_domain.domain_age
Integer

Age of the domain in days.

email_domain.is_live_site
Boolean

Is true if the domain has a live website.

email_domain.registrar
String or Null

Name of the domain registrar.

email_domain.registrar_url
String or Null

URL of the domain registrar.

email_domain.date_registered
Datetime

Date when the domain was registered.

email_domain.date_last_renewed
Datetime

Last renewal date of the domain.

email_domain.date_expires
Datetime

Expiration date of the domain registration.

email_domain.is_risky_tld
Boolean

Is true if the domain uses a top-level domain associated with risk.

email_risk.address_risk_status
String

Risk status of the email address: low, medium, or high.

email_risk.domain_risk_status
String

Risk status of the domain: low, medium, or high.

email_breaches.total_breaches
Integer

Total number of data breaches involving this email.

email_breaches.date_first_breached
Datetime

Date of the first known breach.

email_breaches.date_last_breached
Datetime

Date of the most recent breach.

email_breaches.breached_domains
Array[Object]

List of breached domains including:

email_breaches.breached_domains[].domain
String

Domain affected by the breach.

email_breaches.breached_domains[].date_breached
Datetime

Date when the breach occurred.

Request examples

Checking a malformed email

In the example below, we show the request and response for an email does not follow the proper format. If the email fails the is_format_valid check, then the other checks will not be performed and will be returned as false

https://emailreputation.abstractapi.com/v1/
? api_key = YOUR_UNIQUE_API_KEY
& email = johnsmith

The request was valid and successful, and so it returns the following:

{
  "email_address": "johnsmith",
  "email_deliverability": {
    "status": "undeliverable",
    "status_detail": "invalid_format",
    "is_format_valid": false,
    "is_smtp_valid": false,
    "is_mx_valid": false,
    "mx_records": []
  },
  "email_quality": {
    "score": null,
    "is_free_email": null,
    "is_username_suspicious": null,
    "is_disposable": null,
    "is_catchall": null,
    "is_subaddress": null,
    "is_role": null,
    "is_dmarc_enforced": null,
    "is_spf_strict": null,
    "minimum_age": null
    },
  "email_sender": {
    "first_name": null,
    "last_name": null,
    "email_provider_name": null,
    "organization_name": null,
    "organization_type": null
  },
  "email_domain": {
    "domain": null,
    "domain_age": null,
    "is_live_site": null,
    "registrar": null,
    "registrar_url": null,
    "date_registered": null,
    "date_last_renewed": null,
    "date_expires": null,
    "is_risky_tld": null
  },
  "email_risk": {
    "address_risk_status": null,
    "domain_risk_status": null
  },
  "email_breaches": {
    "total_breaches": null,
    "date_first_breached": null,
    "date_last_breached": null,
    "breached_domains": []
  }
}

Possible values for status_detail

This field provides more information about the deliverability result.

When status is deliverable:

  • valid_email: The email address exists, is valid, and can receive new emails.
  • high_traffic_email: The email is valid and exists, but the server is receiving too many messages. Your email might bounce.

When status is undeliverable:

  • invalid_mailbox: The email address doesn’t exist or is no longer active. It can’t receive new emails.
  • full_mailbox: The email exists but its mailbox is full, so new emails will bounce.
  • invalid_format: The email doesn’t follow the correct format (e.g., missing @ or domain).
  • dns_record_not_found: We couldn’t find MX records for the domain, so we couldn’t complete the SMTP check.
  • unavailable_server: The mail server for the domain is currently unreachable.

When status is unknown:

  • null

Bulk upload (CSV)

Don’t know how to or don’t want to make API calls? Use the bulk CSV uploader to easily use the API. The results will be sent to your email when ready.

Here are some best practices when bulk uploading a CSV file:

  • Ensure the selected column contains the email addresses to be analyzed.
  • Remove any empty rows from the file.
  • Include only one email address per row.
  • The maximum file size permitted is 50,000 rows.

Response and error codes

Whenever you make a request that fails for some reason, an error is returned also in the JSON format. The errors include an error code and description, which you can find in detail below.

CodeTypeDetails
200OKEverything worked as expected.
400Bad requestBad request.
401UnauthorizedThe request was unacceptable. Typically due to the API key missing or incorrect.
422Quota reachedThe request was aborted due to insufficient API credits. (Free plans)
429Too many requestsThe request was aborted due to the number of allowed requests per second being reached. This happens on free plans as requests are limited to 1 per second.
500Internal server errorThe request could not be completed due to an error on the server side.
503Service unavailableThe server was unavailable.

Code samples and libraries

Please see the top of this page for code samples for these languages and more. If we’re missing a code sample, or if you’d like to contribute a code sample or library in exchange for free credits, email us at: team@abstractapi.com

Other notes

A note on metered billing: Each individual email you submit counts as a credit used. Credits are also counted per request, not per successful response. So if you submit a request for the (invalid) email address “kasj8929hs”, that still counts as 1 credit.