POST signed incident events to it. It takes one tool call. The user sets nothing up.
Use this when you build an app on top of Sentivel. To send alerts to a tool your team already uses, add a Webhook integration instead.
Subscribe
Callsentivel_create_webhook_subscription with an https URL you control.
Request
Response
secret. Sentivel shows it once. Calling again with the same URL keeps the id and returns a new secret, which is also how you recover a lost one.
- The URL must be
httpsand publicly reachable. Private, loopback, link-local and cloud metadata addresses are refused, and the host is checked again on every send. - Each connection or token can hold up to 10 subscriptions.
- An OAuth connection or an org token can subscribe. A personal token can’t.
What a subscription receives
Every incident event in the workspaces the credential can use at the moment of delivery:- For an OAuth connection, the workspaces the user granted, that they still belong to, and whose owner allows connected apps. Sentivel checks this on every attempt.
- For an org token, its own workspace, while the token is live and can read incidents.
incident.updated when an incident gets a new update or changes status. An incident first seen already resolved sends nothing.
Revoking the connection under Account → Connections deletes its subscriptions. So does revoking the org token.
Handle a delivery
Each event arrives as aPOST.
Headers
Body
Verify the signature
Sentivel-Signature is t=<unix seconds>,v1=<hex HMAC-SHA256>. The HMAC is keyed with the whole whsec_… secret over "<t>.<raw body>".
- Read the raw body before parsing it.
- Compute the HMAC and compare it with
v1in constant time. - Refuse a
tmore than 5 minutes from your clock, so a captured request can’t be replayed.
verify.ts
t. The body doesn’t change.
Respond
- Answer with any
2xxwithin 10 seconds. Redirects aren’t followed. - A timeout, a connection error,
408,429or any5xxis retried with backoff for 30 minutes. - Any other
4xxstops that event. 410 Gonealso deletes the subscription. Return it when the subscriber no longer exists on your side.
Delivery is at least once, and a retried event can arrive out of order. Deduplicate on
id, and use status or created_at to order what you show.