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:
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 all of these endpoints:
The terminal’s default webhook URL
Every URL listed in
webhookUrls
No extra configuration is needed—just add the array to your create-payment request:
{
"...": "...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-signatureare 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
webhookUrlsonly when you go live.Signing secrets – the HMAC uses the terminal’s
signingSecret, even forwebhookUrls. 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
Sandbox first – set a sandbox webhook URL on the terminal.
Include a second test URL in
webhookUrls.Create a payment in sandbox and complete it with a test wallet.
Confirm both endpoints receive the same event, signature verifies, and retries stop after 2xx.
Need more help? Email [email protected].
Last updated