1
Expose an HTTPS POST endpoint
You need an HTTPS
POST endpoint that verifies the signature and returns 2xx within 10 seconds.Private and metadata URLs are blocked. For local work, tunnel localhost (ngrok, cloudflared) so the URL Tallwatch calls is public HTTPS, not http://127.0.0.1.2
Generate a shared secret
Generate a secret (Tallwatch uses this value to compute
openssl rand -base64 32), store it as TALLWATCH_WEBHOOK_SECRET, and paste the same value into the channel.X-Tallwatch-Signature. Your process uses the same value to recompute it. If they differ, every delivery returns 401.3
Scaffold the handler
The prompt below is a spec you paste into Cursor, Claude Code, or a similar coding agent. It tells the agent to read the raw body, verify HMAC-SHA256, handle the incident events, and return
2xx without pulling in a webhook framework. Replace <REPLACE> with your stack.Copy this prompt into Cursor, Claude Code, or similar:4
Add the channel and send a test
Then add the channel in and click Send test.Send test POSTs to your URL with
event set to test. Use it to confirm TLS, the signature, and a 2xx before a real outage fires the channel.Status codes and retries
Return any2xx. 204 is enough when you finished the work inline. Return 202 if you only accepted the body and will process it asynchronously; that still counts as success and must happen within 10 seconds.
5xx / 429 / timeout retry up to 3 times; 4xx does not. A 401 on a bad signature is the right call (Tallwatch should not retry a request you rejected as forged). A 400 because your parser threw on a valid body is not retried either, so treat parse failures as 5xx only if you want another attempt.
Webhook channels need Pro or Business. See for the channel fields.