Skip to main content
Email validation classifies addresses before sending. In the dashboard, open Addons → Email validator. Validation credits are separate from sending credits.

Authentication

Base URL: https://pro.api.serversmtp.com/api/v2 Send consumerKey and consumerSecret headers with Statistics & Management APIs (APIS) permission. Its IP restrictions must allow your server. See authentication.

Check the validation balance

GET /emailvalidation/subscription returns:
Terminal

Validate one address

POST /emailvalidation/validateEmail accepts an email field:
Terminal
The response includes email, status, sub_status, free_email, domain, domain_age_days, smtp_provider, mx_found, and mx_record. Additional fields can include did_you_mean, account, firstname, lastname, gender, country, region, city, zipcode, and processed_at. Some enrichment fields can be null.

Classification values

API status strings are lowercase: sub_status gives detail such as mailbox_not_found, no_dns_entries, failed_syntax_check, greylisted, role_based, or disposable. It can be an empty string. Validation does not establish consent to receive email.

Validate a list

1. Upload the file

POST /emailvalidation/upload accepts a multipart file field containing a CSV or TXT file with one address per line. Let curl set the multipart content type and boundary.
Terminal
The 201 response contains a numeric list_id and total_emails:
Uploading creates the list. It does not start validation.

2. Start validation

Call POST /emailvalidation/lists/{Id}/validate with the returned list_id. No request body is required.
Terminal
The API reports list_already_validated or insufficient_credit with 400 when validation cannot start.

3. Read progress and results

GET /emailvalidation/lists/{Id} returns the list summary. Use is_processed, percentage, total_emails, and total_processed to check progress. Other fields are id, creation_time, file_name, and status_summary (an array of {status, total} objects).
Terminal
GET /emailvalidation/lists/{Id}/emails accepts optional positive page and limit parameters, defaulting to 1 and 10. It returns count, processed, and results. Each result includes email, numeric id, and validation details such as status, sub_status, and MX information. Before validation, processed can be 0 and results empty. For a full record, call GET /emailvalidation/lists/{Id}/emails/{emailId} using the result’s id. The detail schema includes account_id, list_id, id, email, created_at, did_you_mean, and the shared validation fields.

4. Download the CSV

Terminal

List and delete uploaded lists

GET /emailvalidation/lists requires from and to dates in YYYY-MM-DD format. It accepts optional positive integer page and limit, plus tz, and returns {count, results} containing the list summaries described above. Invalid parameters return 400 with missing_required_parameter_from, missing_required_parameter_to, from_format_should_be_yyyy-mm-dd, to_format_should_be_yyyy-mm-dd, page_should_be_integer, page_should_be_greater_than_0, limit_should_be_integer, or limit_should_be_greater_than_0.
Terminal
DELETE /emailvalidation/lists/{Id} deletes an uploaded list and returns {"success":true}. An unknown list returns 404 with message: "list_not_found".

Buy additional validation credit

POST /billing/buy_emailvalidation_credits accepts integer amount from 15 to 1800. This is a monetary purchase amount, not a validation count. An active plan is required.
Terminal
The response contains url, the billing link where you complete payment. Check the current pricing and your subscription balance before purchasing.