Enabling webhooks
Include awebhook_url field when creating a job. Both entity resolution and firmographic enrichment support webhooks:
Entity resolution:
curl
curl
Webhook payload
When a job completes or fails, Kernel sends a POST request to yourwebhook_url with the following JSON body:
status is "failed" and record is null:
Event types
| Event | Trigger |
|---|---|
entity-resolution.completed | An entity resolution job finished successfully |
entity-resolution.failed | An entity resolution job failed |
firmographic-enrichment.completed | A firmographic enrichment job finished successfully |
firmographic-enrichment.failed | A firmographic enrichment job failed |
Request headers
| Header | Description |
|---|---|
Content-Type | application/json |
X-Kernel-Signature | sha256=<HMAC-SHA256 hex digest> — verify this to confirm the payload is from Kernel |
X-Kernel-Event | The event type (e.g. entity-resolution.completed) |
X-Kernel-Delivery | A unique ID for this delivery attempt |
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:| Attempt | Delay |
|---|---|
| 1 | Immediate |
| 2 | 30 seconds |
| 3 | 2 minutes |

