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.

Base URL: https://nexmailpro.com/api/v1

Quick start

  1. Create an API key from your dashboard.
  2. Send it as a Bearer token in the Authorization header.
  3. Call the single verification endpoint for one email address.
  4. 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

  1. Sign in to your NexMailPro dashboard.
  2. Open https://nexmailpro.com/app/api-keys.
  3. Create a named API key for your integration.
  4. Copy the full API key immediately. The secret is shown only once.
  5. Store the key in a secure environment variable or secret manager.

4. Single email verification endpoint

POST /verify/email
{
  "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_keyAuthorization header is missing.
invalid_api_key_formatBearer token format is invalid.
invalid_api_keyAPI key is invalid, inactive, or revoked.
expired_api_keyAPI key has expired.
validation_failedRequest payload failed validation.
insufficient_creditsWorkspace does not have enough credits.
rate_limit_exceededPer-key rate limit exceeded.
daily_limit_exceededPlan daily API call limit exceeded.
monthly_limit_exceededPlan monthly API call limit exceeded.
bulk_list_not_foundBulk list does not exist or is not owned by the API workspace.
bulk_start_failedBulk 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.