Infrastructure
Events you can verify, and never sent to an internal address
A webhook sender is an SSRF primitive wearing a friendly name: you hand a service a URL and it fetches it. The guard against that is the load-bearing part of this feature, and it is checked twice on purpose.
14-day evaluation · no card · start before you connect anything
How it works
- 1
Every delivery is signed
Each is signed with your endpoint’s secret over a timestamp and the raw body, so your receiver can reject anything forged or replayed rather than trusting that the request looks right.
- 2
Secrets rotate with an overlap
During rotation both secrets sign, so you can move to the new one without a window where deliveries fail verification.
- 3
The address is checked when you save it, and again before every send
Twice, because DNS can change in between. No webhook is ever sent to a private or internal address, and the check that matters is the last one taken.
- 4
A failing endpoint is backed off, not hammered
Delivery retries with backoff and breaks the circuit on an endpoint that keeps failing, so your outage does not become a flood when you recover.
POST https://your-app.example/hooks/xyranik
X-Xyranik-Signature: t=1758…,v1=9c4b…
Content-Type: application/json
{ "event": "decision.recorded", "id": "evt_…" }Signature
Over the timestamp and the raw body, so a forgery or a replay failsRotation
Both secrets sign during the overlap, so nothing breaks mid-changeAddress check
Run when you save it and again before every send — DNS can change betweenCircuit breaker
A failing endpoint is backed off, not hammered
What you can build with it
Send yourself a test event
You can trigger a test delivery to confirm your receiver answers correctly before relying on it.
Choose only the events you want
Endpoints subscribe to specific events rather than receiving everything, and the full list with its payloads is in the developer reference.
Deliveries are recorded
What was attempted, what answered and what failed is on record, so a missing event is a question with an answer.
Limits, and what is not served
Listed here rather than discovered against a rate limiter at three in the morning.
Delivery is at-least-once
A delivery can arrive twice — for instance when your endpoint answered slowly. Your receiver needs to be idempotent, and we would rather say so than imply exactly-once semantics nobody can offer.
No replay from the interface
Failed deliveries are recorded and retried automatically, but there is no button to replay an arbitrary past event on demand.
Build an agent that can act without a blank cheque
Your agents ask the same gateway ours do, on a credential of their own, and are held to the same permissions, limits and record. The endpoint list is served by the API itself rather than written out here.