If you’re using Zapier, Make, Clay, or n8n, webhooks are handled automatically by these platforms. You can skip this section.
Why Webhooks?
Webhooks are notifications sent directly to your server when results are ready. Instead of you having to check for results, we push them to you immediately. Benefits:- Fastest method to receive results
- No need to keep a connection open
- No HTTP timeouts or retries to manage
- Simpler and more reliable than polling
How It Works
- When you start an enrichment or reverse lookup, include a
webhook_urlin your request - We process your contacts (typically 30-90 seconds per contact)
- When done, we POST the results directly to your webhook URL
Webhook Parameters
webhook_url — Batch Completion
Your webhook URL receives a POST request when the entire batch is finished, lacks credits, or is canceled.
Verifying Webhook Authenticity
Every webhook we send is signed so you can confirm it genuinely comes from FullEnrich and wasn’t tampered with in transit. We include anX-Signature-SHA1 header on each request — an HMAC-SHA1 signature of the request body, using your FullEnrich API key as the secret.
To verify a webhook:
- Get the signature — read the
X-Signature-SHA1value from the request headers. - Read the raw body — use the raw request body bytes exactly as received (UTF-8). Don’t re-serialize the parsed JSON, as key ordering or whitespace changes will break the check.
- Compute the HMAC — create an HMAC-SHA1 hash of the body using your API key as the secret, and hex-encode the result (lowercase).
- Compare — if your computed hash matches the
X-Signature-SHA1header, the request is authentic. Use a constant-time comparison to avoid timing attacks.
Reliability & Retries
Webhooks are reliable by design. If we can’t deliver your result (for example, receiving a non-2xx status code), we’ll automatically retry every minute, up to 5 times. For most use cases, you can treat webhooks as “guaranteed delivery.” If there’s ever a question about a specific result or missed event, our team can check our delivery logs on request.Tracking Requests with custom
You can easily keep track of which result belongs to which user or request by using the custom parameter. Include any identifier you need (User ID, CRM contact ID, etc.), and it will be returned exactly as provided in the webhook payload.
Custom field values must be strings. Numbers will return an error.
Testing Webhooks
Polling (Not Recommended)
Polling means repeatedly calling the GET endpoint to check if the operation is finished. This is not recommended because:- It consumes your rate limit quota
- Results come slower than with webhooks
- More complex to implement reliably
Real-Time Webhook Events
webhook_events.contact_finished
If you need results as fast as possible, use this parameter. It fires a webhook immediately after each individual contact is enriched, without waiting for the entire batch to complete.
This is perfect for real-time integrations where you want to process results as they come in.
Event Payload
The webhook receives the enriched profile immediately after processing. The payload follows the standard response format with a single contact in thedata array:
The
status will be IN_PROGRESS since individual contacts are sent as they complete, before the entire batch finishes.