How webhooks work
- Register a webhook endpoint URL and subscribe to event types
- When an event occurs, Bluum sends a
POSTrequest with the event payload - Your server processes the event and responds with a
2xxstatus code - If delivery fails, Bluum retries with exponential backoff
Event types
Events follow the naming convention{domain}.{action}:
| Event | Description |
|---|---|
account.created | New account created |
account.updated | Account details changed |
order.accepted | Order accepted for execution |
order.filled | Order fully filled |
order.partially_filled | Order partially filled |
order.canceled | Order canceled |
order.rejected | Order rejected |
transfer.deposit.initiated | Deposit initiated |
transfer.deposit.completed | Deposit completed, funds available |
transfer.deposit.failed | Deposit failed |
transfer.withdrawal.initiated | Withdrawal initiated |
transfer.withdrawal.completed | Withdrawal completed |
transfer.withdrawal.failed | Withdrawal failed |
document.approved | KYC document approved |
document.rejected | KYC document rejected |
Wildcards
Subscribe to all events in a domain with*:
order.*— All order eventstransfer.*— All transfer events
List available event types
Registering a webhook
Managing webhooks
Webhook payload format
Retry behavior
If your endpoint doesn’t respond with2xx within 30 seconds, Bluum retries with exponential backoff:
| Attempt | Delay |
|---|---|
| 1st retry | ~1 minute |
| 2nd retry | ~5 minutes |
| 3rd retry | ~30 minutes |
| 4th retry | ~2 hours |
| 5th retry | ~8 hours |
Best practices
- Respond quickly — Return
2xxwithin 30 seconds. Process the event asynchronously if your logic takes longer. - Handle duplicates — The same event may be delivered more than once. Use the event ID for deduplication.
- Verify signatures — Validate the webhook signature header to ensure the request came from Bluum.
- Use HTTPS — Webhook endpoints must use HTTPS in production.
- Monitor failures — Set up alerts if your endpoint starts returning errors.
Testing webhooks
In sandbox, webhooks fire exactly like production. Use these tools for local development:- webhook.site — Inspect payloads without a server
- ngrok — Expose your local server to the internet
Key endpoints
| Method | Path | Description |
|---|---|---|
GET | /webhooks/event-types | List available event types |
POST | /webhooks | Register a webhook |
GET | /webhooks | List webhooks |
PATCH | /webhooks/{webhook_id} | Update a webhook |
DELETE | /webhooks/{webhook_id} | Delete a webhook |