Browser callbacks fire only if the customer’s tab is still open. Webhooks arrive regardless. Fulfil from webhooks.
Set up
Build an endpoint
A public HTTPS URL that accepts POST and responds 2xx quickly.
Register it
Settings → Webhooks in the dashboard. Add the URL and copy the signing secret.
Verify every delivery
Reject anything that fails. Signatures.
Test it
Use Send test event, then make a real testnet payment.
The payload
Every webhook has the same envelope:string
Stable per transition. Use it as your idempotency key.
string
ISO 8601 timestamp.
object
Event-specific payload.
Headers
A correct handler
Raw body
Parsing and re-serialising changes the bytes and breaks the signature.
Verify first
Before parsing, before touching your database.
Acknowledge fast
We time out at 10 seconds. Do slow work in a queue.
Signature verification in detail
With replay protection and language examples.