Email Realtime Check
POST/v1/realtime/check/email
Synchronously check one email address against one to ten realtime email products. The engine, the billing contract and the response shape are identical to the phone endpoint; only the series and the identifier format differ.
Parameters
Section titled “Parameters”| Field | Type | Required | Description |
|---|---|---|---|
identifier | string | Yes | One email address, for example user@example.com. |
country | string | No | Must be omitted for email. Sending a country code with an email product is rejected. |
product_ids | array<int> | Yes | An array of 1 to 10 realtime email product IDs. |
Choosing the products
Section titled “Choosing the products”Email and phone products are different series and cannot be combined in one request. Read the id of an entry whose mode is realtime and whose series is email off Realtime products, which is backed by GET /v1/products. Passing a slug never works here, and a phone product ID in an email call is rejected as an unmatchable series.
Response Example
Section titled “Response Example”{ "request_id": "b7d2a1c4-9f3e-4a1b-8c5d-2e6f7a8b9c0d", "identifier": "user@example.com", "series": "email", "status": "succeeded", "request_status": "completed", "replayed": false, "total_reserved": 0.004000, "total_charged": 0.004000, "total_refunded": 0.000000, "charged_amount": 0.004000, "refunded_amount": 0.000000, "results": [ { "product_id": 49, "product": "insemailvalid-rt", "result": "valid", "cached": false, "billing_status": "charged", "charged_amount": 0.002000, "refunded_amount": 0.000000, "checked_at": "2026-09-13T10:00:00Z", "error_code": null } ]}The product_id values above are examples — confirm the current email product IDs on Realtime products before you send a real request. request_id is a UUID, and cached lives inside each result, not at the top level.
The only differences from a phone response are series: "email" and the identifier format. Every other field — including the billing and results entries — is documented field-by-field under Response fields.
cURL Example
Section titled “cURL Example”curl -X POST "https://api.zelnum.com/api/v1/realtime/check/email" \ -H "X-API-Key: YOUR_KEY_HERE" \ -H "Idempotency-Key: UNIQUE_REQUEST_ID" \ -H "Content-Type: application/json" \ -d '{"identifier":"user@example.com","product_ids":[49]}'Errors specific to email
Section titled “Errors specific to email”| HTTP | code | Meaning / action |
|---|---|---|
| 400 | invalid_realtime_request | The address is malformed, country was sent, the IDs belong to another series, or no ID was supplied. Nothing is submitted and nothing is charged. |
| 400 | idempotency_key_required | Idempotency-Key header missing. |
| 402 | insufficient_balance | Balance does not cover the reservation; no item starts. |
| 409 | request_in_progress / idempotency_conflict | Same key, still running, or same key with a different payload. |
The remaining status codes — 401, 403, 429, 503, 500 — behave exactly as documented on the phone endpoint.