API Documentation - BounceZero Email Verification

API Documentation

Everything you need to integrate BounceZero email verification into your application.

Base URL: https://api.bouncezero.io

Authentication

All API requests require an API key passed in the X-API-Key header.

  1. Log in to your dashboard
  2. Navigate to Settings > API Keys
  3. Click Generate API Key
  4. Copy your key (starts with bz_live_)
X-API-Key: bz_live_your_key_here

Keep your API key secret. Do not expose it in client-side code or public repositories.

Single Email Verification

POST /api/v1/verify

JSON Body

ParameterTypeDescription
emailstringEmail address to verify (required)
depthstringVerification depth: standard (default), deep, ultra

Example Response

{
  "email": "[email protected]",
  "score": 95,
  "classification": "valid",
  "is_deliverable": true,
  "risk_level": "low",
  "checks": {
    "syntax": true,
    "domain_valid": true,
    "not_disposable": true,
    "not_catch_all": true,
    "mailbox_verified": true
  },
  "metadata": {
    "internal_classification": "verified",
    "refunded": null,
    "catch_all_unresolved": null
  },
  "explanation": "Mailbox exists and is deliverable"
}

Bulk Verification

Upload a CSV file of emails for batch verification. Three endpoints are used in sequence. To send a JSON list instead (up to 10,000 emails), POST /api/v1/verify/bulk with {"emails": [...]} and an optional Idempotency-Key header.

1. Upload CSV

POST /api/v1/verify/bulk/upload

Send a multipart/form-data request with a CSV file (form field file) containing one email per row, or a header row with an email column.

# Response
{
  "job_id": "a1b2c3d4-e5f6-...",
  "total_emails": 5000,
  "deduplicated": 4812,
  "status": "queued"
}

2. Check Status

GET /api/v1/verify/bulk/{job_id}/status
{
  "job_id": "a1b2c3d4-e5f6-...",
  "status": "processing",
  "progress": {
    "total": 4812,
    "completed": 3200,
    "percent": 66.5
  }
}

Statuses: queued, processing, interrupted (resumes automatically, keep polling), and the final states completed, failed, stopped, credits_exhausted.

3. Get Results

GET /api/v1/verify/bulk/{job_id}/results

Returns results as JSON, paginated with ?limit= (max 5000) and ?offset=. For a CSV file use GET /api/v1/verify/bulk/{job_id}/download.

Response Fields

FieldTypeDescription
classificationstringVerification result: valid or invalid
scoreintegerDeliverability score from 0 to 100
is_deliverablebooleanTrue when classification is valid
risk_levelstringlow, medium or high
checks.mailbox_verifiedbooleanWhether the mailbox was confirmed by the SMTP RCPT TO probe or provider check
checks.domain_validbooleanWhether the domain has valid MX records
checks.not_disposablebooleanFalse when the email uses a disposable/temporary domain
checks.not_catch_allbooleanFalse when the domain accepts all email addresses
metadata.internal_classificationstringDetailed verdict: verified, likely_valid, catch_all, invalid, disposable, risky, spamtrap, unknown or error
metadata.refundedbooleanTrue when the address could not be verified (reported invalid, credit refunded automatically)
explanationstringHuman-readable explanation of the result

Result Values

ValueMeaning
validThe email address exists and is deliverable
invalidThe email address does not exist or is undeliverable
catch_all_unresolvedMetadata flag on a valid result: the domain is a catch-all and the individual mailbox could not be resolved
refundedMetadata flag on an invalid result: the address could not be verified and the credit was refunded automatically

Score

Each email receives a deliverability score from 0 to 100. This score combines SMTP probing, DNS validation, provider-specific checks, and machine learning signals.

70 - 100
Safe to send
40 - 69
Use caution
0 - 39
Do not send

Error Codes

StatusMeaningWhat to do
401Invalid or missing API keyCheck your X-API-Key header
402Insufficient creditsTop up credits at bouncezero.io/pricing
422Invalid inputCheck the email format or request body
429Rate limit exceededSlow down requests. Limits depend on your plan.

Webhooks

Receive notifications when bulk jobs complete. Configure your webhook URL in Dashboard > Settings > Webhooks.

Payload

{
  "event": "bulk.completed",
  "job_id": "a1b2c3d4-e5f6-...",
  "timestamp": "2026-04-22T14:30:00Z",
  "stats": {
    "total": 4812,
    "valid": 3901,
    "invalid": 911
  }
}

Webhooks include an X-BounceZero-Signature header for HMAC-SHA256 verification using your webhook signing secret.

Sandbox Mode

Test your integration without consuming credits. Grab a sandbox key instantly below, or generate one from Dashboard > Settings > API Keys > Create Sandbox Key.

Try it instantly — no account needed

Get a temporary sandbox key in one click. It only supports POST /api/v1/verify, returns mock results, never consumes credits, and expires in 24 hours.

Test Addresses

EmailReturns
[email protected]valid (score 98)
[email protected]invalid (score 2)
[email protected]valid + catch_all_unresolved (score 50)
[email protected]invalid + refunded (score 50)

Sandbox keys are rate-limited to 30 requests per minute. The local part selects the result; also try disposable@ and risky@.

Code Examples

curl -X POST "https://api.bouncezero.io/api/v1/verify" \
  -H "X-API-Key: bz_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"email":"[email protected]"}'
import requests

API_KEY = "bz_live_your_key_here"

response = requests.post(
    "https://api.bouncezero.io/api/v1/verify",
    json={"email": "[email protected]"},
    headers={"X-API-Key": API_KEY},
)

data = response.json()
print(f"Result: {data['classification']}, Score: {data['score']}")
const API_KEY = "bz_live_your_key_here";

const res = await fetch("https://api.bouncezero.io/api/v1/verify", {
  method: "POST",
  headers: {
    "X-API-Key": API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ email: "[email protected]" }),
});

const data = await res.json();
console.log(`Result: ${data.classification}, Score: ${data.score}`);
<?php
$apiKey = "bz_live_your_key_here";

$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => "https://api.bouncezero.io/api/v1/verify",
    CURLOPT_HTTPHEADER => ["X-API-Key: $apiKey", "Content-Type: application/json"],
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => json_encode(["email" => "[email protected]"]),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_USERAGENT => "MyApp/1.0",
]);
$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
echo "Result: {$data['classification']}, Score: {$data['score']}";

Ready to get started?

Get 100 free verification credits. No credit card required.

Get API Key

Build with the BounceZero API

Endpoints, code samples, and language guides

Continue through related topics