Skip to main content

Single Email Verification

Verify a single email address in real-time.

Endpoint​

POST /api/v1/verify

Request​

Headers​

HeaderRequiredDescription
Content-TypeYesMust be application/json
X-API-KeyYesYour ClearBounce API key

Body​

{
"email": "user@example.com"
}
FieldTypeRequiredDescription
emailstringYesEmail address to verify

Response​

Success Response​

{
"success": true,
"data": {
"email": "user@example.com",
"status": "deliverable",
"subStatus": "accepted_email",
"reason": "accepted_email",
"score": 95,
"isDeliverable": true,
"toxicity": 0,
"checks": {
"syntax": true,
"mxRecords": true,
"smtpValid": true,
"isDisposable": false,
"isRoleBased": false,
"isFreeProvider": false,
"isCatchAll": false,
"hasTypo": null,
"patternAnalysis": {
"suspicionScore": 0,
"patterns": []
},
"account": {
"fullMailbox": false,
"disabled": false
}
},
"meta": {
"domain": "example.com",
"localPart": "user",
"mxHost": "mail.example.com",
"smtpResponse": "250 2.1.5 OK",
"verifiedAt": "2026-02-03T20:25:21.962Z",
"processingTimeMs": 412,
"provider": "example.com",
"dnsType": "MX"
},
"riskFactors": []
},
"creditsRemaining": 999
}

Response Fields​

Top Level​

FieldTypeDescription
successbooleanWhether the request succeeded
dataobjectVerification result
creditsRemainingnumberYour remaining credits

Data Object​

FieldTypeDescription
emailstringThe verified email (lowercase)
statusstringdeliverable, undeliverable, risky, unknown
subStatusstring | nullMore specific status code
reasonstring | nullSame as subStatus - human-friendly reason
scorenumberDeliverability score (0-100)
isDeliverablebooleanWhether email can receive mail (true only for deliverable)
toxicitynumberToxicity score (0-5 scale)
checksobjectIndividual check results
metaobjectAdditional metadata
riskFactorsarrayList of risk factor strings

Checks Object​

FieldTypeDescription
syntaxbooleanEmail format is valid
mxRecordsbooleanDomain has MX records
smtpValidboolean | nullMailbox exists (null = unknown)
isDisposablebooleanIs temporary email service
isRoleBasedbooleanIs generic address (info@, etc.)
isFreeProviderbooleanIs free email provider
isCatchAllboolean | nullDomain accepts all emails
hasTypoobject | nullTypo suggestion if detected
account.fullMailboxboolean | nullMailbox storage exceeded
account.disabledboolean | nullAccount is deactivated

Meta Object​

FieldTypeDescription
domainstringEmail domain
localPartstringPart before @
mxHoststring | nullMail server hostname
smtpResponsestring | nullRaw SMTP response
verifiedAtstringISO 8601 timestamp
processingTimeMsnumberVerification time in ms
providerstring | nullEmail service provider
dnsTypestring | nullMX or A record

Code Examples​

cURL​

curl -X POST https://api.clearbounce.net/api/v1/verify \
-H "Content-Type: application/json" \
-H "X-API-Key: cb_live_your_api_key" \
-d '{"email": "user@example.com"}'

JavaScript (Node.js)​

const response = await fetch('https://api.clearbounce.net/api/v1/verify', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': process.env.CLEARBOUNCE_API_KEY
},
body: JSON.stringify({ email: 'user@example.com' })
});

const result = await response.json();

if (result.success) {
console.log('Status:', result.data.status);
console.log('Score:', result.data.score);
console.log('Provider:', result.data.meta.provider);
} else {
console.error('Error:', result.error.message);
}

Python​

import requests
import os

response = requests.post(
'https://api.clearbounce.net/api/v1/verify',
headers={
'Content-Type': 'application/json',
'X-API-Key': os.environ['CLEARBOUNCE_API_KEY']
},
json={'email': 'user@example.com'}
)

result = response.json()

if result['success']:
print(f"Status: {result['data']['status']}")
print(f"Score: {result['data']['score']}")
print(f"Provider: {result['data']['meta']['provider']}")
else:
print(f"Error: {result['error']['message']}")

PHP​

<?php
$apiKey = getenv('CLEARBOUNCE_API_KEY');

$ch = curl_init();

curl_setopt_array($ch, [
CURLOPT_URL => 'https://api.clearbounce.net/api/v1/verify',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'X-API-Key: ' . $apiKey
],
CURLOPT_POSTFIELDS => json_encode(['email' => 'user@example.com'])
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$result = json_decode($response, true);

if ($result['success']) {
echo "Status: " . $result['data']['status'] . "\n";
echo "Score: " . $result['data']['score'] . "\n";
echo "Provider: " . $result['data']['meta']['provider'] . "\n";
} else {
echo "Error: " . $result['error']['message'] . "\n";
}

Error Responses​

Invalid Email Format​

{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid email format"
}
}

Missing Email​

{
"success": false,
"error": {
"code": "REQUEST_ERROR",
"message": "Email is required"
}
}

Insufficient Credits​

{
"statusCode": 402,
"code": "INSUFFICIENT_CREDITS",
"error": "Payment Required",
"message": "Insufficient credits"
}