API Reference
The Zero Jump API uses the same verification engine as the dashboard. All requests and responses are JSON over HTTPS.
Authentication
Generate an API key from your dashboard (API → Generate API key). Send it on every request using either header:
Authorization: Bearer zj_live_xxxxxxxxxxxxxxxxxxxxxxxx
X-API-Key: zj_live_xxxxxxxxxxxxxxxxxxxxxxxxKeep your key secret and only call the API from your servers. Regenerating a key revokes the old one immediately.
Credits & limits
- Each verified address uses 1 credit, whatever the result. Credits reset at the start of each calendar month (UTC).
- When you don't have enough credits the API responds with
402 Payment Requiredand your current usage. - Requests are rate limited per account (default 120 requests/minute). Going over returns
429with aRetry-Afterheader in seconds. /api/verify-bulkaccepts up to 100 addresses per request. For bigger lists, send several requests (the dashboard sends batches of 25).
Endpoints
POST/api/verify-single
Verify one address. Costs 1 credit (refunded if the check can't run on our side).
| Field | Type | Description |
|---|---|---|
email | string | Required. The address to verify. |
checkSmtp | boolean | Default true. Set false for a faster DNS-only check. |
curl -X POST https://YOUR_DOMAIN/api/verify-single \
-H "Authorization: Bearer $ZEROJUMP_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email":"alex@company.com"}'POST/api/verify-bulk
Verify up to 100 addresses and get all results in one response. Costs 1 credit per address, charged up front.
| Field | Type | Description |
|---|---|---|
emails | string[] | Required. 1–100 addresses; every item must be a string. |
checkSmtp | boolean | Default true. |
concurrency | number | Parallel checks, 1–10. Default 4. |
timeoutMs | number | Per-connection SMTP timeout, 1000–8000. Default 4000. |
curl -X POST https://YOUR_DOMAIN/api/verify-bulk \
-H "Authorization: Bearer $ZEROJUMP_API_KEY" \
-H "Content-Type: application/json" \
-d '{"emails":["alex@company.com","sam@gmail.con"]}'{
"total": 2,
"results": [ { "email": "alex@company.com", "status": "VALID", ... }, ... ],
"usage": { "period": "2026-10", "used": 42, "limit": 500, "remaining": 458, "bonus": 0 }
}GET/api/me
Returns your account, plan and this month's credit usage. usage.bonus is any extra credits added to your account for this month; it is already included in usage.limit.
Result object
{
"email": "alex@company.com",
"normalized": "alex@company.com",
"status": "VALID", // VALID | RISKY | INVALID | DISPOSABLE | UNKNOWN
"score": 99, // 0–100 deliverability confidence
"reason": "Mailbox verified: active mailbox confirmed on non-catch-all mail server",
"flags": {
"syntax": true,
"mx": true,
"smtp": true, // true accepted, false rejected, null inconclusive
"isDisposable": false,
"isFree": false,
"isRole": false,
"isCatchAll": false, // null when it couldn't be determined
"isGreylisted": false,
"hasTypoSuggestion": null // e.g. "alex@gmail.com"
},
"details": {
"mxPrimary": "aspmx.l.google.com",
"mxRecords": ["aspmx.l.google.com (pri: 1)"],
"smtpChecked": true, // false when mailbox checks are off on this server
"smtpCode": 250,
"smtpMessage": "250 2.1.5 OK"
},
"verifiedAt": "2026-10-18T12:00:00.000Z"
}Statuses
| Status | Meaning | Recommendation |
|---|---|---|
VALID | Domain and mailbox confirmed (or MX confirmed where the provider hides mailbox existence). | Send. |
RISKY | Catch-all domain, greylisted server, or role-based inbox. | Send with care; monitor bounces. |
INVALID | Bad syntax, non-existent domain, no mail server, or mailbox rejected by the server. | Remove. |
DISPOSABLE | Temporary/throwaway email provider. | Remove or block at sign-up. |
UNKNOWN | We couldn't reach the domain's DNS (for example a timeout), so nothing was decided. | Retry later. |
Errors
Errors return a JSON body of the form {"error": "message"}.
| Code | Meaning |
|---|---|
400 | Missing or malformed parameters. |
401 | Missing or invalid API key. |
402 | Not enough credits left this month. |
403 | The account has been suspended. Contact us to restore access. |
413 | Too many emails in one request, or the request body is too large. |
429 | Rate limit exceeded; retry after the number of seconds in the Retry-After header. |