POST request whenever a subscribed event occurs.
When webhooks are sent
A webhook fires when a workflow reaches a terminal state:| Event type | Sent when the workflow status becomes |
|---|---|
WORKFLOW_COMPLETED | COMPLETE |
WORKFLOW_FAILED | FAILED |
POST with a JSON body and an X-Halliday-Signature header you can use to verify it came from Halliday.
Authentication
Managing webhooks requires your secret API key (sk_...), not a public key (pk_...). Public keys cannot manage webhooks.
Your secret key is generated in the Halliday dashboard at the moment you create a key set. It is shown only once, right after you generate the key set — the dashboard never displays it again. Copy it somewhere safe when you create the key set; if you lose it, you will need to generate a new key set.
Pass the secret key as a bearer token:
Create a webhook using the API
-
Get your secret key. Generate a key set in the dashboard and copy the secret key (
sk_...) the one time it is shown. -
Register your endpoint. Send a
POSTto/orgs/webhookswith the URL Halliday should call, a uniquelabel, and the events you want to receive:
- Save the signing secret. The response includes a
signing_secret. Like your API key, it is returned only on creation (and rotation), so store it now. Use it to verify theX-Halliday-Signatureheader on each delivery.
- Acknowledge deliveries. When Halliday
POSTs an event to your URL, respond with any2xxstatus within 10 seconds. Slow or failed deliveries are retried.

