When processing completes for the Find Emails by Track ID endpoint, a POST request is sent to your webhook URL with the full results.
📘
You call the API endpoint and include a webhook field with your callback URL
The API responds immediately with a trackId and state: "PENDING"
When processing completes, a POST request is sent to your webhook URL with Content-Type: application/json
Field Type Description trackIdstring Unique identifier for tracking this request statestring Final state of the job: "DONE" descriptionstring | null Optional description statisticsobject Summary statistics of the results statistics.totalinteger Total number of records statistics.foundinteger Number of records where email was found dataarray Array of result items
Each item in data contains the input used for the search and the email finding result.
Field Type Description refIdstring Unique reference ID for this record statestring State of this individual record ("DONE") inputobject The input parameters used for email search input.firstnamestring First name of the person input.lastnamestring Last name of the person input.domainstring Company domain used for email search outputarray Array of email finding results
Field Type Description addressstring The discovered email address (only present when found: true) datestring Timestamp of the verification (ISO 8601) domainTypestring Type of domain: "SMTP", "CATCH_ALL", or "UNKNOWN" foundboolean Whether an email was found freeboolean Whether the email is on a free provider genericboolean Whether the email is a generic address (e.g., info@) statusstring Verification status: "VALID" or "INVALID" subStatusstring Detailed status: "EMPTY", "MAILBOX_NOT_FOUND", or "FAILED_SYNTAX_CHECK" mxobject MX record details mx.foundboolean Whether MX records were found mx.googleboolean Whether the domain uses Google mx.providerstring | null Email provider: "microsoft", "g-suite", "mimecast", "barracuda", "proofpoint", "cisco ironport", "other", or null mx.recordstring | null MX record value
JSON
{
"trackId": "1c83c619-8d23-4922-8b81-ad27bf78d2b2",
"state": "DONE",
"description": null,
"statistics": {
"found": 56,
"total": 100
},
"data": [
{
"refId": "d56aea1a-6b59-2cae-68f2-95952067dbca",
"state": "DONE",
"input": {
"firstname": "Rogério",
"lastname": "Veríssimo",
"domain": "estrelabet.com"
},
"output": [
{
"address": "[email protected] ",
"date": "2026-03-06T14:41:53.000474",
"domainType": "SMTP",
"found": true,
"free": true,
"generic": false,
"status": "VALID",
"subStatus": "EMPTY",
"mx": {
"found": false,
"google": false,
"provider": null,
"record": null
}
}
]
}
]
}
JSON
{
"trackId": "1c83c619-8d23-4922-8b81-ad27bf78d2b2",
"state": "DONE",
"description": null,
"statistics": {
"found": 56,
"total": 100
},
"data": [
{
"refId": "aaa4fb3e-04cf-711a-8e6c-9a8d546240ba",
"state": "DONE",
"input": {
"firstname": "Rinoy",
"lastname": "J Vincent",
"domain": "bizstaffingcomrade.com"
},
"output": [
{
"date": "2026-03-06T14:46:40.000145",
"domainType": "UNKNOWN",
"found": false,
"generic": false,
"status": "INVALID",
"subStatus": "MAILBOX_NOT_FOUND",
"mx": {
"found": false,
"google": false,
"provider": null,
"record": null
}
}
]
}
]
}
Use HTTPS for your webhook URL to ensure data is encrypted in transit
Respond quickly with a 200 OK status — process the data asynchronously on your side
Store the trackId from the initial API response so you can match it with the webhook callback
Handle duplicates in rare cases, a webhook may be delivered more than once
Automatic retries we retry webhook delivery up to 30 times. If you still need to re-trigger the webhook, use the Resend Webhook Notification endpoint