Email Reputation API
curl --request GET \
--url https://emailreputation.abstractapi.com/v1import requests
url = "https://emailreputation.abstractapi.com/v1"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://emailreputation.abstractapi.com/v1', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://emailreputation.abstractapi.com/v1",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://emailreputation.abstractapi.com/v1"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://emailreputation.abstractapi.com/v1")
.asString();require 'uri'
require 'net/http'
url = URI("https://emailreputation.abstractapi.com/v1")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"email_address": "benjamin.richard@abstractapi.com",
"suggested_correction": null,
"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" }
]
}
}
Popular APIs
Email Reputation API
Improve your delivery rates, clean your email lists, and block fraudulent users with Abstract’s industry-leading Email Reputation API.
GET
/
v1
Email Reputation API
curl --request GET \
--url https://emailreputation.abstractapi.com/v1import requests
url = "https://emailreputation.abstractapi.com/v1"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://emailreputation.abstractapi.com/v1', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://emailreputation.abstractapi.com/v1",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://emailreputation.abstractapi.com/v1"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://emailreputation.abstractapi.com/v1")
.asString();require 'uri'
require 'net/http'
url = URI("https://emailreputation.abstractapi.com/v1")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"email_address": "benjamin.richard@abstractapi.com",
"suggested_correction": null,
"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 keyapi_key and a single email email:
https://emailreputation.abstractapi.com/v1/
? api_key = YOUR_UNIQUE_API_KEY
& email = johnsmith@gmail.com
{
"email_address": "benjamin.richard@abstractapi.com",
"suggested_correction": null,
"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" }
]
}
}
Authentication Methods
The Email Reputation API supports multiple ways to authenticate your requests. You can use whichever method best fits your application.Query parameter (default)
Pass your API key as a query parameter. This is the simplest method and is shown in the Getting Started example above.curl 'https://emailreputation.abstractapi.com/v1/?api_key=YOUR_UNIQUE_API_KEY&email=johnsmith@gmail.com'
Bearer token header
Instead of passingapi_key as a query parameter, you can send it in the Authorization header as a Bearer token. This keeps your API key out of URLs and server logs.
curl -X GET 'https://emailreputation.abstractapi.com/v1/?email=johnsmith@gmail.com' \
-H 'Authorization: Bearer YOUR_UNIQUE_API_KEY'
api_key from the query string — only the email parameter is needed.
POST Method
In addition to GET requests, you can send POST requests to the Email Reputation API. This is useful when you prefer to send parameters in the request body rather than the URL.POST with form-encoded data
Send bothapi_key and email as form-encoded fields in the request body:
curl -X POST 'https://emailreputation.abstractapi.com/v1/' \
-d 'email=johnsmith@gmail.com' \
-d 'api_key=YOUR_UNIQUE_API_KEY'
POST with Bearer token and JSON body
Authenticate via theAuthorization header and send email in a JSON request body:
curl -X POST 'https://emailreputation.abstractapi.com/v1/' \
-H 'Authorization: Bearer YOUR_UNIQUE_API_KEY' \
-H 'Content-Type: application/json' \
-d '{ "email": "johnsmith@gmail.com" }'
email field. Send the Content-Type: application/json header with a JSON body, otherwise the body is read as form data and email is not detected.
Request parameters
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.
Response parameters
The API response is returned in a universal and lightweight JSON format.If a typo has been detected, this returns a suggestion of the correct email
(e.g.,
johnsmith@gmial.com => johnsmith@gmail.com). If no typo is detected,
this is null.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 theis_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
{
"email_address": "johnsmith",
"suggested_correction": null,
"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.
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.| Code | Type | Details |
|---|---|---|
| 200 | OK | Everything worked as expected. |
| 400 | Bad request | Bad request. |
| 401 | Unauthorized | The request was unacceptable. Typically due to the API key missing or incorrect. |
| 422/403 | Quota reached | The request was aborted due to insufficient API credits. |
| 429 | Too many requests | The 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. |
| 500 | Internal server error | The request could not be completed due to an error on the server side. |
| 503 | Service unavailable | The server was unavailable. |