Verify Single Email
Verify a single email address in real-time. Returns status, substatus, and enrichment data immediately. Costs 0.2 credits.
curl --request GET \
--url "https://api.orbisearch.com/v1/verify?email=jane.doe%40acme.com" \
--header "X-API-Key: <api-key>"
import requests
response = requests.get(
"https://api.orbisearch.com/v1/verify",
params={"email": "jane.doe@acme.com"},
headers={"X-API-Key": "<api-key>"},
)
print(response.json())
const url = new URL("https://api.orbisearch.com/v1/verify");
url.searchParams.set("email", "jane.doe@acme.com");
const response = await fetch(url, {
headers: { "X-API-Key": "<api-key>" },
});
console.log(await response.json());
{
"email": "jane.doe@acme.com",
"status": "safe",
"substatus": "deliverable",
"explanation": "Safe to email. The mailbox exists and is deliverable.",
"email_provider": "Google Workspace",
"mx_record": "aspmx.l.google.com",
"is_domain_catch_all": false,
"is_secure_email_gateway": false,
"is_disposable": false,
"is_role_account": false,
"is_free": false,
"confidence": 99
}{
"detail": "API key required in X-API-Key header"
}{
"detail": "Insufficient credits. You have 0.15 credits but need 0.2."
}{
"detail": "Missing required query parameter: email.",
"errors": [
{
"loc": "query.email",
"msg": "Missing required query parameter: email.",
"type": "missing"
}
]
}{
"detail": "Rate limit exceeded. Maximum 20 requests per second per account. Contact us to discuss higher limits.",
"code": "rate_limited"
}status, a detailed substatus, a plain-English explanation, domain-level signals (mx_record, is_domain_catch_all, is_secure_email_gateway), and enrichment flags such as is_disposable and is_role_account.
See the response schema for the meaning of each status and substatus value.
Rate limits
This endpoint is rate-limited to 20 requests per second per account. Exceeding this limit returns a429 Too Many Requests response. See errors for how to handle rate limit responses.
curl --request GET \
--url "https://api.orbisearch.com/v1/verify?email=jane.doe%40acme.com" \
--header "X-API-Key: <api-key>"
import requests
response = requests.get(
"https://api.orbisearch.com/v1/verify",
params={"email": "jane.doe@acme.com"},
headers={"X-API-Key": "<api-key>"},
)
print(response.json())
const url = new URL("https://api.orbisearch.com/v1/verify");
url.searchParams.set("email", "jane.doe@acme.com");
const response = await fetch(url, {
headers: { "X-API-Key": "<api-key>" },
});
console.log(await response.json());
Authorizations
API key for authentication
Query Parameters
Email address to verify.
3 - 320"jane.doe@acme.com"
Timeout in seconds (3-97).
3 <= x <= 9770
Response
Successful Response
Verification result for a single email address.
The email address that was verified.
"jane.doe@acme.com"
Overall verification status: safe (deliverable), risky (uncertain), invalid (undeliverable), unknown (verification failed).
safe, risky, invalid, unknown ^(safe|risky|invalid|unknown)$"safe"
Plain-English explanation of the verification result.
"Safe to email. The mailbox exists and is deliverable."
Email service provider (Google Workspace, Gmail, Microsoft Outlook, etc.).
"Google Workspace"
Specific reason for the status (e.g., deliverable, catch_all, policy_blocked, mailbox_not_found, invalid_syntax, greylisted, timeout).
"deliverable"
The main mail server the domain uses to receive email. Null if the domain has no mail server configured. When that happens, substatus will be no_mx_records.
"aspmx.l.google.com"
True if the domain accepts mail for any username (catch-all). Null if we could not determine whether the domain is catch-all.
false
True if the domain is protected by a secure email gateway: Proofpoint, Mimecast, Barracuda, or Trend Micro.
false
True if this is a temporary/disposable email service, false if not, null if unknown.
false
True if this is a generic role-based email (info@, support@, etc.), false if not, null if unknown.
false
True if this is from a free email provider (gmail.com, yahoo.com, etc.), false if not, null if unknown.
false
How certain we are in the result, on a 0–100 scale. Use it alongside status to tune how aggressively you filter. For safe results: 99 = deliverable, highest certainty; 98 = deliverable, but the domain sits behind a secure email gateway (Mimecast, Proofpoint, Barracuda, Trend Micro) that may still filter the message after accepting it; 97 = the address exists, but carries some risk of bouncing after acceptance. For invalid and risky, 99 means we are certain of the negative result. For unknown, 0. null when no score could be attached to the result. Treat that as unscored, not as low confidence.
0 <= x <= 10099
curl --request GET \
--url "https://api.orbisearch.com/v1/verify?email=jane.doe%40acme.com" \
--header "X-API-Key: <api-key>"
import requests
response = requests.get(
"https://api.orbisearch.com/v1/verify",
params={"email": "jane.doe@acme.com"},
headers={"X-API-Key": "<api-key>"},
)
print(response.json())
const url = new URL("https://api.orbisearch.com/v1/verify");
url.searchParams.set("email", "jane.doe@acme.com");
const response = await fetch(url, {
headers: { "X-API-Key": "<api-key>" },
});
console.log(await response.json());
{
"email": "jane.doe@acme.com",
"status": "safe",
"substatus": "deliverable",
"explanation": "Safe to email. The mailbox exists and is deliverable.",
"email_provider": "Google Workspace",
"mx_record": "aspmx.l.google.com",
"is_domain_catch_all": false,
"is_secure_email_gateway": false,
"is_disposable": false,
"is_role_account": false,
"is_free": false,
"confidence": 99
}{
"detail": "API key required in X-API-Key header"
}{
"detail": "Insufficient credits. You have 0.15 credits but need 0.2."
}{
"detail": "Missing required query parameter: email.",
"errors": [
{
"loc": "query.email",
"msg": "Missing required query parameter: email.",
"type": "missing"
}
]
}{
"detail": "Rate limit exceeded. Maximum 20 requests per second per account. Contact us to discuss higher limits.",
"code": "rate_limited"
}