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
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
201 response contains a numeric list_id and total_emails:
2. Start validation
CallPOST /emailvalidation/lists/{Id}/validate with the returned list_id. No request body is required.
Terminal
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
url, the billing link where you complete payment. Check the current pricing and your subscription balance before purchasing.