Skip to main content
Kernel can send HTTP callbacks (webhooks) when jobs complete or fail. This lets you receive results without polling.

Enabling webhooks

Include a webhook_url field when creating a job. All async endpoints — entity resolution, firmographic enrichment, and resolve parent — support webhooks: Entity resolution:
curl
Firmographic enrichment (via the service API):
curl
Resolve parent:
curl
The URL must be an HTTPS URL that accepts POST requests.

Webhook payload

When a job completes or fails, Kernel sends a POST request to your webhook_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:
The 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:
  1. Compute the HMAC-SHA256 of the raw request body using your signing secret
  2. Compare the result (as hex) to the value in the X-Kernel-Signature header (after removing the sha256= prefix)
  3. 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.