Webhooks
A webhook sends the events of a workspace to an address you choose: n8n, Zapier, Make or your own code. Each event is
a JSON POST, signed with the webhook’s secret.
Set one up
Owners and admins manage webhooks in Settings > Integrations > Webhooks:
- Add webhook with the receiving address and the events to send (none selected means all events).
- Copy the signing secret (
whsec_...). It is shown once; New signing secret replaces it later. - Send a test event to check the address, then follow the recent deliveries of each webhook.
A webhook can be paused and resumed. On a self-hosted instance, addresses on your own network are refused unless you
set WEBHOOKS_ALLOW_PRIVATE_NETWORK=true.
Events
The request
ididentifies the event, andX-TaskForce-Deliverythe delivery: both stay the same when a delivery is retried.urlopens the issue or the cycle in the app, when there is one.actoris the person who made the change.
Check the signature
X-TaskForce-Signature is sha256= followed by the hexadecimal HMAC-SHA256 of the timestamp, a dot and the raw body,
with the whole secret as key (whsec_ included). Compute it on the body exactly as received, before parsing it, and
reject old timestamps so that a captured request cannot be replayed later.
In Node.js, with Express:
In Python, with Flask:
Delivery and retries
A delivery succeeds when your endpoint answers with a 2xx status within 10 seconds. Otherwise TaskForce tries again
after 1 minute, 5 minutes, 30 minutes, 2 hours and 6 hours, then marks the delivery as failed. The test event is sent
once.
Because of these retries, the same event can arrive more than once: use its id to process it only once, answer
quickly, and do the slow work after answering.