Skip to main content
Payments take time: your customer has to pay, banks have to clear, blockchains have to confirm. Instead of asking us over and over “is it done yet?”, you give us a URL, and we tell you the moment something changes.

The basics

1

Something happens

A payment moves to a new step. For example, your customer’s money arrives.
2

We send a message

We send a POST request to your URL with a JSON body describing what happened. This is called an event.
3

You reply

Your server replies with any 2xx status code, such as 200, within 10 seconds. That tells us you got it.
4

You act on it

Update your database, notify your customer, and so on.
To add your URL, see Set up webhooks.

What a webhook looks like

Headers

Body

The webhook tells you what changed. For the full payment, such as amounts and the transaction_hash, call Get a payment with decode=true.

Order of events

For each payment, we send events one at a time, in order. We don’t send fiat_pending until you’ve accepted initiated. If one delivery is being retried, the next events for that payment wait for it. See the full event timeline.

Retries

If your server doesn’t reply with 2xx within 10 seconds, or can’t be reached, we try again. We make up to 5 attempts: Each retry can be up to 15 seconds later than shown. After 5 failed attempts, we stop. You can see every attempt in the Bridge app under Webhooks, in the endpoint’s delivery list.
Redirects (3xx) count as a failure. Make sure your URL is the final one.

Best practices

Reply 200 as soon as you’ve checked the signature and saved the event. Do slow work, such as sending emails, afterwards. Otherwise you may hit the 10-second limit and get the same event again.
You might receive the same event more than once, for example if your reply was lost. Save each id (wbd_…) you’ve handled and skip ones you’ve seen.
Anyone can send a request to your URL. Check X-Webhook-Signature before trusting it. See Verify webhooks.
Decide success or failure from data.status. Use data.state to show progress.
If your server was down for a long time, call List payments to catch up on anything you missed.

Test events

From the Bridge app you can send a test.webhook.ping event to check your URL works. See Send a test message.
Last modified on October 29, 2026