batch_id and a requests array. Results are delivered later by webhook or retrieved by polling. Webhooks are the recommended way to receive results because they do not count against your rate limit.
Why webhooks
Webhooks push results to your server as soon as they are ready. You do not need to poll or keep a connection open. They are faster than polling and do not consume your rate limit.How it works
- Include a
webhookobject in your single or bulk submit request. - Dmand processes the NPI and resolves or verifies the email.
- Dmand POSTs the result to your callback URL in the same envelope format used by polling.
Webhook modes
Choose how you want to receive notifications with thewebhook.mode field.
real-time(default): One webhook per NPI as it resolves. Use this when you want to act on each result immediately.batch: One webhook when the entire batch completes. Use this when you only need the final summary.
Submit with a webhook
Webhook payload
The payload uses the same envelope as polling and batch poll responses. Thewebhook object describes the delivery configuration, and data contains the per-NPI results.
webhook was provided, the webhook field is null.
Echoing custom data with custom_data
Includecustom_data in the submit body to attach any JSON object. It is echoed verbatim in every poll response and webhook payload. Use it to pass internal identifiers, correlation IDs, or tags so you can match results to your own records.
Responding to webhooks and retry behavior
Your endpoint must return an HTTP 2xx response as quickly as possible. Perform heavy processing asynchronously so you do not block the response. If your endpoint returns a non-2xx response, Dmand retries delivery with backoff. Make your handler idempotent and deduplicate byrequest_id to avoid processing the same result more than once.
Testing webhooks
Use webhook.site to get a temporary URL and inspect real payloads without setting up your own server.Polling fallback
If you cannot receive webhooks, you can pollGET /api/v1/email/{request_id} or GET /api/v1/batch/{batch_id}. Polling consumes your rate limit and delivers results more slowly. If you must poll, space requests at reasonable intervals. Do not rely solely on webhooks; poll as a fallback if a webhook does not arrive.