Enabling webhooks
Include awebhook_url field when creating a job. All async endpoints — entity resolution, firmographic enrichment, and resolve parent — support webhooks:
Entity resolution:
curl
curl
curl
Webhook payload
When a job completes or fails, Kernel sends a POST request to yourwebhook_url with the following JSON body:
data matches the result you get when polling the job’s GET endpoint. If you included an external_id in the original request, it is echoed back on data.record.external_id so you can correlate the callback with the record you submitted.
For failed jobs, status is "failed", record is null, and error_message with error_type are included:
error_message field is sanitized — internal details like stack traces, UUIDs, and kernel IDs are stripped before delivery.
Event types
Request headers
Verifying signatures
Your signing secret is generated when you create an API key and is shown once. To verify a webhook:- Compute the HMAC-SHA256 of the raw request body using your signing secret
- Compare the result (as hex) to the value in the
X-Kernel-Signatureheader (after removing thesha256=prefix) - Use a constant-time comparison to prevent timing attacks
Retry policy
If your endpoint returns a non-2xx status or times out (5 second limit), Kernel retries up to 3 times with exponential backoff:
After 3 failed attempts, the delivery is marked as permanently failed.

