Skip to main content
A webhook is a subscriber: a callback URL, a signing secret and a scope (global or one account). A webhook event links that subscriber to one catalogue event. Deliveries are recorded per subscriber in webhook_dispatch.
Every call below requires a bearer token whose user holds the matching webhook:* / webhook-event:* permission. In the first release those permissions are granted to the administrator role only.

1. Create the webhook

The response is the public webhook row plus secret, returned once:
secret is never returned again: GET, list, update and export omit it. Store it in your secret manager immediately. If it is lost, call rotate-secret.

2. Choose events

Look up the catalogue ids you need, then replace the subscription set in one call. The body is the full desired list — events not included are unsubscribed (soft-deleted), events already present are kept, new ones are inserted.
events must contain at least one id. webhook.test is always kept on the set (create and replace-set prepend it) so the Test action has a subscription to record against.
Account-scoped webhooks only receive events whose account_scope is account and whose resolved owner matches. Subscribing an account-scoped webhook to a none event (e.g. general.address.updated) is allowed but will never fire — use a global webhook for those.

3. Activate and deactivate

Webhooks are created active. Toggle with:
Inactive webhooks are skipped at routing time (no dispatch rows are written for them). Activating a webhook also clears consecutive_failures, disabled_at and disabled_reason, which is how an automatically disabled subscriber is brought back — see Retries and failures.

4. Rotate the secret

Returns the public row plus the new secret, again only once. There is no overlap window: every delivery signed after the call uses the new value. Deploy the new secret on your side first, or expect a short burst of 401 responses that the platform will retry on the backoff schedule.

5. Update or remove

  • PATCH /api/v3/webhook/webhook/{id} — partial update of url, name, description, is_global, account. URL rules apply again.
  • DELETE /api/v3/webhook/webhook/{id} — soft delete; the ledger is kept.
  • DELETE /api/v3/webhook/webhook/{id}/purge — hard delete.

From Horizon Enterprise

The same flows are available under Webhooks in Horizon Enterprise (administrator role): the form shows the secret in a one-shot alert after create and rotate, the event picker groups the catalogue by domain, and the detail screen lists deliveries with filters, last_error and a Replay action.