> For the complete documentation index, see [llms.txt](https://developers.bead.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.bead.xyz/faqs-and-troubleshooting/webhooks-and-error-codes/can-i-send-webhook-events-to-multiple-urls.md).

# Can I send webhook events to multiple URLs?

**Yes.** Bead supports two layers of webhook delivery, and you can combine them to fan-out each event to several destinations:

| Layer                     | How to set it                                  | Scope                                | Typical use-cases                                      |
| ------------------------- | ---------------------------------------------- | ------------------------------------ | ------------------------------------------------------ |
| **Terminal webhook**      | `PUT /Terminals/{terminalId}/webhook`          | All payments created by the terminal | Core order-management system, accounting queue         |
| **Per-payment overrides** | `webhookUrls` array in `POST /payments/crypto` | Only the payment being created       | A/B testing, partner-specific listener, analytics hook |

When you include a `webhookUrls` array, **Bead POSTs the same JSON payload to&#x20;*****all*****&#x20;of these endpoints**:

1. The terminal’s default webhook URL
2. Every URL listed in `webhookUrls`

No extra configuration is needed—just add the array to your create-payment request:

```json
{
  "...": "...other fields...",
  "webhookUrls": [
    "https://orders.example.com/bead/events",
    "https://analytics.example.com/hooks/bead"
  ]
}
```

**Delivery behaviour**

* **Fan-out**: events are sent to every destination in parallel.
* **Success criteria**: each URL must return **HTTP 2xx**; any non-2xx triggers retries for that endpoint only (exponential back-off, 24 h window).
* **Same payload**: the JSON body and `x-webhook-signature` are identical for every recipient, so you can reuse the same verification code.

**Tips & best practices**

* **Idempotency** – process webhooks idempotently (e.g., by `trackingId` + `statusCode`) in case one URL retries while another succeeds.
* **Environment isolation** – point sandbox terminals to test URLs, then add production URLs in `webhookUrls` only when you go live.
* **Signing secrets** – the HMAC uses the **terminal’s `signingSecret`**, even for `webhookUrls`. Share that secret securely with every service that needs to verify events.
* **Performance** – acknowledge quickly (under 1 s) and offload heavy work to background jobs.

**Testing multiple endpoints**

1. **Sandbox first** – set a sandbox webhook URL on the terminal.
2. Include a second test URL in `webhookUrls`.
3. Create a payment in sandbox and complete it with a test wallet.
4. Confirm both endpoints receive the same event, signature verifies, and retries stop after 2xx.

Need more help? Email [**developers@bead.xyz**](mailto:developers@bead.xyz).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developers.bead.xyz/faqs-and-troubleshooting/webhooks-and-error-codes/can-i-send-webhook-events-to-multiple-urls.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
