Email Validator
Full email validation in one call. Checks RFC 5322 syntax, performs a live MX record lookup to confirm the domain can receive mail, detects disposable addresses, returns the normalized canonical form, and suggests a correction when the domain looks like a common typo.
Overview
Use Cases
- Block undeliverable addresses at signup before they reach your mailing list
- Catch typos like gmial.com and prompt users to correct them inline
- Flag disposable addresses during registration to prevent throwaway accounts
- Store the normalized canonical address alongside the original for deduplication
Features
API Endpoints
Validate Email
Validates a single email address and returns a full breakdown of syntax validity, MX record status, disposable domain check, normalized form, and any typo suggestion.
https://api.requiems.xyz/v1/validation/email
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
string |
Required | The email address to validate. |
Try it out
Live DemoRequest
The email address to validate.
Response Fields
| Field | Type | Description |
|---|---|---|
string|null |
The email address exactly as supplied in the request body; null when syntax is invalid | |
| valid | boolean |
Overall validity. True only when the address passes syntax validation and the domain has at least one MX record |
| syntax_valid | boolean |
Whether the address is syntactically valid according to RFC 5322 |
| mx_valid | boolean |
Whether the domain has at least one MX record, meaning it can receive email |
| disposable | boolean |
Whether the address uses a known disposable or temporary email domain |
| normalized | string|null |
The canonical form of the address after normalization (lowercase, plus-tag removal, alias-domain resolution). Null when syntax is invalid |
| domain | string|null |
The domain part of the address (after @). Null when syntax is invalid |
| suggestion | string |
A corrected domain name when the supplied domain looks like a typo of a well-known provider (e.g. gmial.com โ gmail.com). Null when no close match is found or the domain is already correct |
Code Examples
curl -X POST https://api.requiems.xyz/v1/validation/email \
-H "requiems-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email": "[email protected]"}'
import requests
url = "https://api.requiems.xyz/v1/validation/email"
headers = {
"requiems-api-key": "YOUR_API_KEY",
"Content-Type": "application/json"
}
payload = {"email": "[email protected]"}
response = requests.post(url, headers=headers, json=payload)
data = response.json()
result = data["data"]
print(result["valid"]) # False
print(result["suggestion"]) # "gmail.com"
const response = await fetch('https://api.requiems.xyz/v1/validation/email', {
method: 'POST',
headers: {
'requiems-api-key': 'YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({ email: '[email protected]' })
});
const { data } = await response.json();
console.log(data.valid); // false
console.log(data.suggestion); // "gmail.com"
require 'net/http'
require 'json'
uri = URI('https://api.requiems.xyz/v1/validation/email')
request = Net::HTTP::Post.new(uri)
request['requiems-api-key'] = 'YOUR_API_KEY'
request['Content-Type'] = 'application/json'
request.body = { email: '[email protected]' }.to_json
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
data = JSON.parse(response.body)['data']
puts data['valid'] # false
puts data['suggestion'] # gmail.com
Error Responses
The email field is missing from the request body.
The request body is missing, not valid JSON, or contains unknown fields.
Unexpected server error.
Validate Emails (Batch)
Validates up to 50 email addresses in a single request. Each email is processed independently and returns a full validation breakdown (syntax, MX record, disposable check, normalization, and typo suggestion). Invalid emails do not fail the request. Billing: 1 credit per email.
https://api.requiems.xyz/v1/validation/email/batch
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| emails | array |
Required | Array of email addresses to validate. Min: 1, Max: 50. |
Try it out
Live DemoRequest
Enter JSON array, e.g., ["[email protected]", "[email protected]"]
Array of email addresses to validate. Min: 1, Max: 50.
Response Fields
| Field | Type | Description |
|---|---|---|
| results | array |
List of validation results for each email, preserving input order |
| results[].email | string|null |
Original email input (null if invalid syntax) |
| results[].valid | boolean |
Overall validity (syntax + MX record) |
| results[].syntax_valid | boolean |
Whether the email is syntactically valid (RFC 5322) |
| results[].mx_valid | boolean |
Whether the domain has valid MX records |
| results[].disposable | boolean |
Whether the email comes from a disposable domain |
| results[].normalized | string|null |
Canonical normalized email (lowercase, alias handling, etc.) |
| results[].domain | string|null |
Extracted domain from email address |
| results[].suggestion | string|null |
Suggested correction for common domain typos |
| total | integer |
Number of emails processed in the batch |
Code Examples
curl -X POST https://api.requiems.xyz/v1/validation/email/batch \
-H "requiems-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"emails": ["[email protected]", "[email protected]"]}'
import requests
url = "https://api.requiems.xyz/v1/validation/email/batch"
headers = {
"requiems-api-key": "YOUR_API_KEY",
"Content-Type": "application/json"
}
payload = {"emails": ["[email protected]", "[email protected]"]}
response = requests.post(url, headers=headers, json=payload)
data = response.json()["data"]
for r in data["results"]:
print(r["email"], r["valid"])
const response = await fetch('https://api.requiems.xyz/v1/validation/email/batch', {
method: 'POST',
headers: {
'requiems-api-key': 'YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
emails: ['[email protected]', '[email protected]']
})
});
const { data } = await response.json();
data.results.forEach(r => {
console.log(r.email, r.valid);
});
require 'net/http'
require 'json'
uri = URI('https://api.requiems.xyz/v1/validation/email/batch')
request = Net::HTTP::Post.new(uri)
request['requiems-api-key'] = 'YOUR_API_KEY'
request['Content-Type'] = 'application/json'
request.body = { emails: ['[email protected]', '[email protected]'] }.to_json
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
data = JSON.parse(response.body)['data']
data['results'].each do |r|
puts "#{r['email']} #{r['valid']}"
end
Error Responses
Valid JSON body that fails field validation (empty array or more than 50 emails).
Invalid JSON, malformed request body, or unexpected field types.
Unexpected server error