Create an endpoint
- Open Settings → Developers → Webhooks.
- Enter an HTTPS endpoint and select event types.
- Store the signing secret — it begins with
whsec_— in your secret manager. - Send a test delivery and confirm a
2xxresponse.
HARLY_ALLOW_PRIVATE_WEBHOOKS=true.
Verify the signature
Every delivery includes anx-harly-signature-256 header with the format:
${t}.${rawBody} keyed by the endpoint
secret. The timestamp lets receivers reject replayed deliveries (Harly’s
default tolerance window is 5 minutes).
Always verify the raw request body before parsing JSON.
Receiver contract
- Return
2xxafter durable acceptance, not after completing a slow workflow. - Deduplicate by
event.id— delivery is at-least-once. - Persist the event before enqueueing downstream work.
- Treat unknown event types as accepted and observable.
- Return
4xxfor an invalid signature,5xxfor a transient failure.
Event types
Delivery and retries
Failed deliveries are retried by the scheduler with exponential backoff:
After 6 failed attempts, the delivery is marked permanently failed. Owners can
inspect delivery attempts and use Replay from the delivery history after
correcting the receiver.
Secret format
Webhook secrets generated by Harly begin withwhsec_ and contain 32 bytes
of cryptographically random data encoded as base64url. Rotate the secret by
deleting and recreating the endpoint.
Webhooks are for durable external reactions. For browser UI updates inside a
Harly workspace, use realtime events.