Two channels
You can also point Ops URL at a Slack incoming webhook — we detect
hooks.slack.com
and format the payload as a Slack block.
Signature
Every request carries:Secret rotation
Rotate from the dashboard. We dual-sign with old and new secret for 5 minutes to give your handler time to deploy the new value. After 5 min the old secret is rejected.Retry schedule
7 attempts over 24 h:1m, 5m, 15m, 1h, 4h, 12h, 24h. After 50 failures in 6 h
the webhook URL is auto-paused — you get a webhook_paused ops event, and the
order events queue up but are not dropped (they replay on resume).
Resume manually with:
URL requirements
- HTTPS required in production. HTTP allowed only when URL is
http://localhost:*with apk_test_key. - Public IP. We block private ranges, cloud metadata endpoints (
169.254.169.254,metadata.google.internal) and link-local addresses via SSRF guard at registration. - DNS rebinding protection: we resolve and pin the IP for 5 min on first delivery.
Event payload
Sandbox
Webhooks fire from sandbox orders too, but with"sandbox": true field at the
top level. Filter or accept based on your testing strategy. Sandbox webhook
signatures use a separate whsec_test_... secret.