Bulk email verification endpoint
Submit up to 100 addresses and use the task ID to retrieve bulk verification progress and complete results.
Bulk verification uses asynchronous tasks. Submit an array of addresses to receive a task_id, then use that task_id to check progress and retrieve all results when processing completes.
Authentication
Authorization: Bearer YOUR_API_KEYStep 1: Create a bulk task
/api/v1/bulk-email-verificationRequest body
emailsRequiredstring[]Array of addresses to verify. Submit between 1 and 100 per task. Duplicate addresses are removed and are not charged twice.
namestringOptional task name. Maximum length: 25 characters.
Request example
curl --request POST \ --url https://verifyemailaddress.net/api/v1/bulk-email-verification \ --header 'Authorization: Bearer YOUR_API_KEY' \ --header 'Content-Type: application/json' \ --data '{ "name": "July contacts", "emails": [ "one@example.com", "two@example.com", "three@example.com" ] }'Task created
A successfully created task returns HTTP 201. Store the task_id and use it to retrieve progress and results.
{ "status": "success", "task_id": "0195fbb8-6632-7ac0-b497-a3f4a2c349ec", "count_submitted": 3, "count_duplicates_removed": 0, "count_rejected_emails": 0, "count_processing": 3}Step 2: Retrieve progress and results
/api/v1/bulk-email-verification/{taskId}When the task status is waiting or running, query it again after a few seconds. Once status becomes completed, results contains the complete verification result for each address.
curl --request GET \ --url https://verifyemailaddress.net/api/v1/bulk-email-verification/0195fbb8-6632-7ac0-b497-a3f4a2c349ec \ --header 'Authorization: Bearer YOUR_API_KEY'Processing
{ "task_id": "0195fbb8-6632-7ac0-b497-a3f4a2c349ec", "name": "API: July contacts", "status": "running", "count_total": 3, "count_checked": 2, "progress_percentage": 66.67}Completed
{ "task_id": "0195fbb8-6632-7ac0-b497-a3f4a2c349ec", "name": "API: July contacts", "status": "completed", "count_total": 3, "count_checked": 3, "progress_percentage": 100, "results": { "one@example.com": { "email": "one@example.com", "status": "safe", "overall_score": 98, "is_safe_to_send": true, "is_deliverable": true, "is_valid_syntax": true, "mx_accepts_mail": true, "verification_mode": "power" }, "two@example.com": { "email": "two@example.com", "status": "invalid", "overall_score": 0, "is_safe_to_send": false, "is_deliverable": false, "is_valid_syntax": true, "mx_accepts_mail": true, "verification_mode": "power" }, "three@example.com": { "email": "three@example.com", "status": "catch_all", "overall_score": 75, "is_safe_to_send": false, "is_deliverable": true, "is_valid_syntax": true, "mx_accepts_mail": true, "is_catch_all": true, "verification_mode": "power" } }}Credit usage
Credits are reserved when the task is created. Credits for duplicates, rejected addresses, unprocessed addresses, and addresses without a conclusive result are returned automatically. Retrieving task progress does not consume additional credits.
Response headers
X-Request-IdstringRequest ID associated with the bulk task.
X-Credits-UsednumberCredits currently charged for the task. After completion and settlement, this reflects any returned credits.
Error responses
{ "status": "error", "reason": "invalid_batch"}400 · invalid_batchPOSTemails is missing, empty, exceeds 100 entries, or contains invalid request data.
401 · invalid_api_keyPOST / GETThe API key is missing, invalid, or deleted.
403 · subscription_requiredPOSTThe account does not have an active paid plan.
404 · task_not_foundGETThe task does not exist, has expired, or belongs to another account.
429 · insufficient_creditsPOSTThe account does not have enough credits to create the task.
502 / 503 / 504POST / GETVerification is unavailable, the service is unavailable, or the request timed out.