Production Board
Webhooks
Subscribe an HTTPS endpoint to Production Board events.
Webhooks let your own service react to changes in Production Board the moment they happen - no polling. Each subscription picks the events it cares about and ships a signed JSON payload to your URL. Failed deliveries retry with exponential backoff (up to 12 attempts); a subscription that fails consistently is auto-paused so it can't tail-spin your receiver. Manage your subscriptions from the Webhooks menu in the user dropdown.
How it works
- Create a subscription from the Webhooks menu in the top-right. Pick an endpoint URL and the events you care about.
- Copy the secret. The
whsec_…value is shown exactly once on create (and on rotate). - Verify each delivery using the secret + the
X-Webhook-Signatureheader. Your endpoint replies 2xx within 10 seconds. - Failures retry automatically with exponential backoff up to 12 attempts; after that the subscription is auto-paused.
What's in the contract?
Sign every payload
Each delivery carries X-Webhook-Signature: v1=<hex>,t=<unix>. Verify with hmac_sha256(secret, "v1." + t + "." + body). Reject any request whose t is more than 300 seconds away from your server clock to block replays. The signing secret is shown exactly once on create + on rotate.
Idempotent receivers
Retries fire with the same id (and the same data) but a new X-Webhook-Delivery header per attempt. Dedupe on id so a retried success doesn't reapply the side-effect.
Reply within 10 seconds
Return any 2xx response within 10 seconds to confirm receipt. Anything else (timeout, 4xx, 5xx) counts as a failure and schedules the next retry.
Test before you ship
Use the Send test button on the Webhooks page to fire a synthetic webhook.test delivery. Lets you verify your signature check + payload parser without waiting for a real event to happen.
Examples
{"id": "<delivery uuid>","event": "<type>.<after_create|after_update|after_delete>","type": "<type>","app": "prod","timestamp": 1714501234,"attempt": 1,"actor_id": "<user id or null>","object": { "id": "…", "data": { } }}
Event names
Event names use the <type>.<after_create|after_update|after_delete> shape. A subscription can also wildcard a single type (<type>.*) or every event in the deployment (*). The synthetic webhook.test value is fired only by the Send-test button.