/status too.
Register a URL
Set anhttps:// URL with your secret key:
webhookSecret signs every delivery. It stays the same when you change the URL, and every
registration returns it. Enterprise keys don’t support webhooks yet.
The payload
event:swap.settled,swap.refundedorswap.failed. Each swap gets one.swapId: theswapId/executereturned.requestIdis the same value.deliveredOutandslippageBpscan benullwhen the venue doesn’t report them.ts: delivery time, epoch milliseconds.
Delivery
- Any
2xxwithin 5 seconds counts as delivered. Otherwise it’s retried 5, 20, 45, 80 minutes later and so on, for a day, then dropped. - It can arrive twice. Deduplicate on
swapIdandevent. - Webhooks come from a job that runs about every 5 minutes, so they lag
/statusby up to that. A swap whose fee RAVN is still confirming can take up to a day.
Verify the signature
Each request carriesx-ravn-signature: sha256=<hex>, an HMAC-SHA256 of the raw body with your
webhookSecret. Check it against the raw bytes, before parsing.

