A webhook is a URL on your server where Enrow sends the result of each search as soon as it's done. Set a default URL in Webhook URL on the API page, or send one with a request in settings.webhook.
Why use a webhook
You don't need to ask for the result again and again: it comes to you as soon as it's ready.
Webhooks don't count toward your rate limits.
Webhooks are free. You pay only for the search itself.
Set your default webhook URL
Go to API in the left menu.
In Webhook URL, type the address of your endpoint, for example
https://your-domain.com/api/webhooks/enrow.Click Save. The button appears once you change the field.
Enrow sends a verification request to your endpoint (see below). If it passes, a green Valid badge appears in the field.
Enrow uses this URL for every request that doesn't include its own webhook.
Pass the verification
When you save a URL, Enrow sends one POST request to it, with a __challenge__ field in the body. To pass the check, your endpoint must:
reply with a 2xx status code (for example 200) within 5 seconds;
send back the same
__challenge__field, with the same value, in a JSON body:{"__challenge__": "<value you received>"}.
If the check fails, the app shows "We couldn't verify" with the reason. Your existing webhook stays active until the new URL passes. The most common reasons:
"Your endpoint returned a non-2xx status code." Make your endpoint reply with 200.
"Your endpoint didn't echo the challenge value within 5 seconds." Add the code that sends back the
__challenge__value."We couldn't reach your endpoint." Check the URL, the DNS, and that your endpoint accepts POST requests.
"Your endpoint didn't reply within 5 seconds." Reply first, then do the slow work.
"The URL is malformed or uses an unsupported scheme." The URL must start with
http://orhttps://."The URL points to a private or internal address." Addresses such as
localhostor a local network IP are refused. Use a public URL.
Use another URL for one request
To send one result somewhere else, add webhook to the settings of the request. This URL takes priority over your default URL:
{
"fullname": "Jane Doe",
"company_domain": "example.com",
"settings": { "webhook": "https://your-domain.com/webhooks/enrow" }
}What Enrow sends
Each webhook has an event field that says what finished, for example single_search_finished or bulk_search_finished. There is one event for each feature, in single and in bulk mode.
Single search: the webhook contains the full result: the email or the number, the
qualification, yourcustomdata and the final cost. You don't need to call the GET endpoint.Bulk search: the webhook only tells you that the batch is finished, with its
id. Then call the GET endpoint of the batch with thisidto get the results.
See the list of events and examples of each webhook in How webhooks work.
Make your endpoint reliable
Reply 200 right away, within 5 seconds, then process the data in the background.
Use HTTPS. HTTP URLs are accepted, but HTTPS protects the data you receive.
Keep the
idof each search. Enrow doesn't send a webhook again if the delivery fails. If your server was down, get the result with the GET endpoint and theid.Ignore duplicates. In rare cases, the same webhook can arrive twice. Use the
idto process it only once.Send
customdata with each search, such as your CRM record ID. It comes back as-is in the webhook, so you know which record the result belongs to.
You don't receive webhooks
Check that your URL is public, accepts POST requests and replies with 200 within 5 seconds.
Check which URLs are saved on your account:
GET /account/inforeturns them in thewebhooksfield.If your request includes
settings.webhook, check that URL: it replaces your default one.For a bulk search, remember that the webhook only contains the
idof the batch, not the results.Get the missing results with the GET endpoint and the
idof each search.
If it still doesn't work, contact support with the id of a search. Never send your API key.

