API Documentation
REST API for email verification. JSON in, JSON out.
Introduction
The DebounceAPI API lets you verify email addresses in real time. Every successful verification uses 1 credit. Buy credit packs on the pricing page.
Authentication
Send your API key as a Bearer token in the Authorization header. Generate keys in your dashboard.
Authorization: Bearer dbk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Keep your keys secret. Never expose them in client-side code or public repositories.
Rate limit
Each API key is limited to 60 requests per minute. Exceeding the limit returns 429 Too Many Requests with a Retry-After header. Need more? Contact us.
Verify a single email
POST /api/v1/verify · costs 1 credit on success.
Request body
{ "email": "[email protected]" }
Example: curl
curl https://debounceapi.com/api/v1/verify \
-H "Authorization: Bearer dbk_live_…" \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]"}'
Example: Node
const r = await fetch('https://debounceapi.com/api/v1/verify', {
method: 'POST',
headers: {
'Authorization': 'Bearer dbk_live_…',
'Content-Type': 'application/json',
},
body: JSON.stringify({ email: '[email protected]' }),
});
const data = await r.json();
Example: Python
import requests
r = requests.post(
"https://debounceapi.com/api/v1/verify",
headers={"Authorization": "Bearer dbk_live_…"},
json={"email": "[email protected]"},
)
print(r.json())
Example: PHP
$response = Http::withToken('dbk_live_…')
->post('https://debounceapi.com/api/v1/verify', [
'email' => '[email protected]',
])->json();
200 OK response
{
"email": "[email protected]",
"status": "deliverable",
"sub_status": null,
"score": 92,
"free_email": true,
"role": false,
"disposable": false,
"accept_all": false,
"did_you_mean": null,
"credits_remaining": 9876
}
Verify a batch
POST /api/v1/verify/batch · costs 1 credit per email. Max 100 per request.
{ "emails": ["[email protected]", "[email protected]", "..."] }
Response is an object with a results array, one entry per input email.
Get credit balance
GET /api/v1/credits · free.
{ "balance": 9876 }
List status
GET /api/v1/lists/{id} — check the status of a bulk list you uploaded in the dashboard.
Response fields
| Field | Type | Description |
|---|---|---|
status | string | One of deliverable, undeliverable, risky, unknown. |
sub_status | string|null | Reason. e.g. invalid_syntax, disposable, mailbox_not_found, role, accept_all. |
score | integer | Confidence 0–100. |
free_email | boolean | Public email provider (gmail, yahoo, etc.). |
role | boolean | Role-based (info@, support@, etc.). |
disposable | boolean | Temporary email provider. |
accept_all | boolean | Domain accepts all addresses. |
did_you_mean | string|null | Suggested correction for likely typos. |
Errors
Errors return non-2xx HTTP codes with this shape:
{ "error": "INSUFFICIENT_CREDITS", "message": "Buy more credits to continue." }
| HTTP | Code | Meaning |
|---|---|---|
| 401 | AUTH_REQUIRED | Missing Authorization header. |
| 401 | AUTH_INVALID | Invalid or revoked API key. |
| 402 | INSUFFICIENT_CREDITS | Balance is 0 (or less than batch size). |
| 422 | VALIDATION_FAILED | Request body invalid. |
| 429 | RATE_LIMIT | Slow down. See Retry-After. |
| 500 | SERVER_ERROR | Something went wrong on our end. |