Developer Documentation
NexMailPro API
Use the NexMailPro API to verify individual email addresses, upload bulk email lists, monitor progress, and retrieve validation results from your own applications.
https://nexmailpro.com/api/v1
Quick start
- Create an API key from your dashboard.
- Send it as a Bearer token in the Authorization header.
- Call the single verification endpoint for one email address.
- Upload a CSV file or JSON email list for bulk verification.
1. Introduction
The NexMailPro API returns standard JSON responses and uses API keys tied to your dashboard workspace. API endpoints are designed to reuse the same verification, credit, and queue workflows used by the NexMailPro web application.
2. Authentication
Send your API key as a Bearer token on every request.
Authorization: Bearer nmp_exampleprefix.exampleSecretValue
API keys are resolved to a user and workspace. Requests without a valid active key return a standard JSON error response.
3. API key creation from dashboard
- Sign in to your NexMailPro dashboard.
- Open
https://nexmailpro.com/app/api-keys. - Create a named API key for your integration.
- Copy the full API key immediately. The secret is shown only once.
- Store the key in a secure environment variable or secret manager.
4. Single email verification endpoint
{
"email": "[email protected]"
}
{
"success": true,
"message": "Verification completed",
"data": {
"email": "[email protected]",
"status": "valid",
"sub_status": "deliverable",
"score": 90,
"is_syntax_valid": true,
"has_mx": true,
"domain_exists": true
},
"meta": {
"credits_charged": 1
}
}
5. Bulk verification upload endpoint
Upload a CSV file or send a JSON email array. CSV files must include an email column when
has_header is true.
POST /verify/bulk
{
"title": "May newsletter list",
"emails": [
"[email protected]",
"[email protected]"
],
"smtp_mode": "safe"
}
{
"success": true,
"message": "Bulk verification accepted for analysis.",
"data": {
"uuid": "00000000-0000-0000-0000-000000000000",
"status": "analyzing",
"status_url": "/api/v1/verify/bulk/00000000-0000-0000-0000-000000000000/status",
"quote_url": "/api/v1/verify/bulk/00000000-0000-0000-0000-000000000000/status",
"start_url": "/api/v1/verify/bulk/00000000-0000-0000-0000-000000000000/start",
"results_url": "/api/v1/verify/bulk/00000000-0000-0000-0000-000000000000/results"
}
}
6. Bulk status endpoint
GET /verify/bulk/{uuid}/status
{
"success": true,
"message": "Bulk verification status retrieved.",
"data": {
"uuid": "00000000-0000-0000-0000-000000000000",
"status": "ready",
"analysis_status": "completed",
"total": 2500,
"processable_total": 2400,
"processed": 0,
"valid": 0,
"invalid": 0,
"risky": 0,
"unknown": 0,
"duplicate": 75,
"syntax_invalid": 25,
"estimated_credits": 2400,
"credits_reserved": 0,
"credits_charged": 0,
"percent": 0,
"can_start": true
}
}
7. Bulk start endpoint
Start processing after analysis is complete. Starting a list reserves credits using the same credit workflow as the dashboard.
POST /verify/bulk/{uuid}/start
8. Bulk results endpoint
Retrieve paginated results. Optional filters include
status,
deliverability,
page, and
per_page.
GET /verify/bulk/{uuid}/results?per_page=100&page=1
9. Credit rules
- Single verification may charge one credit when a new verification is performed.
- Duplicate single verification behavior follows the dashboard workflow.
- Bulk analysis estimates credits before processing starts.
- Bulk start reserves credits, and finalization records actual consumed credits.
- Rows skipped as duplicates or empty are not intended to consume verification credits.
10. Rate limits
API keys are rate limited per key. Workspace plan limits may also apply, including daily API calls, monthly API calls, maximum file size, maximum emails per file, and concurrent bulk jobs.
Rate limit responses use HTTP 429.
11. Error codes
| Code | Meaning |
|---|---|
| missing_api_key | Authorization header is missing. |
| invalid_api_key_format | Bearer token format is invalid. |
| invalid_api_key | API key is invalid, inactive, or revoked. |
| expired_api_key | API key has expired. |
| validation_failed | Request payload failed validation. |
| insufficient_credits | Workspace does not have enough credits. |
| rate_limit_exceeded | Per-key rate limit exceeded. |
| daily_limit_exceeded | Plan daily API call limit exceeded. |
| monthly_limit_exceeded | Plan monthly API call limit exceeded. |
| bulk_list_not_found | Bulk list does not exist or is not owned by the API workspace. |
| bulk_start_failed | Bulk list cannot be started yet or has already started. |
{
"success": false,
"message": "Invalid API bearer token.",
"code": "invalid_api_key"
}
12. cURL examples
curl -X POST "https://nexmailpro.com/api/v1/verify/email" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]"}'
curl -X POST "https://nexmailpro.com/api/v1/verify/bulk" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "title=May newsletter list" \
-F "has_header=1" \
-F "smtp_mode=safe" \
-F "[email protected]"
13. PHP example
<?php
$apiKey = getenv('NEXMAILPRO_API_KEY');
$payload = json_encode([
'email' => '[email protected]',
]);
$ch = curl_init('https://nexmailpro.com/api/v1/verify/email');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => $payload,
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
14. JavaScript fetch example
const response = await fetch('https://nexmailpro.com/api/v1/verify/email', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.NEXMAILPRO_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
email: '[email protected]'
})
});
const result = await response.json();
console.log(result);
15. Python example
import os
import requests
response = requests.post(
"https://nexmailpro.com/api/v1/verify/email",
headers={
"Authorization": f"Bearer {os.environ['NEXMAILPRO_API_KEY']}",
"Content-Type": "application/json",
},
json={"email": "[email protected]"},
timeout=30,
)
print(response.json())
16. Security notes
- Never expose API keys in browser-side code, mobile apps, public repositories, or logs.
- Use server-side environment variables or a secret manager.
- Rotate and revoke keys from the dashboard when access changes.
- Use separate keys for separate applications or environments.
- Bulk API logs store safe request metadata, not full uploaded CSV content.
- All requests should be sent over HTTPS.