Overview
BoxBilling sends webhook notifications when key events occur. Webhooks are delivered as HTTP POST requests with JSON payloads to your configured endpoints.Setting up webhooks
Create a webhook endpoint
List endpoints
Webhook events
Invoice events
| Event | Trigger |
|---|---|
invoice.created | New invoice generated |
invoice.finalized | Invoice finalized and ready for payment |
invoice.paid | Invoice fully paid |
invoice.voided | Invoice voided |
Payment events
| Event | Trigger |
|---|---|
payment.created | Payment record created |
payment.succeeded | Payment completed successfully |
payment.failed | Payment failed |
Subscription events
| Event | Trigger |
|---|---|
subscription.created | New subscription created |
subscription.started | Subscription activated |
subscription.plan_changed | Plan upgrade or downgrade applied |
subscription.trial_ended | Trial period expired |
subscription.canceled | Subscription canceled |
subscription.terminated | Subscription terminated |
Customer events
| Event | Trigger |
|---|---|
customer.created | New customer created |
customer.updated | Customer record updated |
Credit note events
| Event | Trigger |
|---|---|
credit_note.created | Credit note created |
credit_note.finalized | Credit note finalized |
Wallet events
| Event | Trigger |
|---|---|
wallet.created | Wallet created |
wallet.terminated | Wallet terminated |
wallet.transaction.created | Wallet transaction recorded |
Usage events
| Event | Trigger |
|---|---|
usage_threshold.crossed | Usage threshold exceeded |
Payment request events
| Event | Trigger |
|---|---|
payment_request.created | Dunning payment request created |
payment_request.payment_succeeded | Dunning payment succeeded |
payment_request.payment_failed | Dunning payment failed |
Payload format
Signature verification
Every webhook includes signature headers for verification:| Header | Description |
|---|---|
X-Bxb-Signature | HMAC-SHA256 hex digest of the payload |
X-Bxb-Signature-Algorithm | Signature algorithm (default: hmac) |
X-Bxb-Webhook-Id | Unique webhook delivery ID |
Verifying signatures
Retry logic
Failed webhook deliveries are automatically retried with exponential backoff:| Retry | Delay |
|---|---|
| 1st | 2 minutes |
| 2nd | 4 minutes |
| 3rd | 8 minutes |
| 4th | 16 minutes |
| 5th | 32 minutes |
delay = 2^retries minutes
The retry task runs every 5 minutes. After the maximum number of retries (default: 5), the webhook is marked as permanently failed.
Webhook statuses
| Status | Description |
|---|---|
pending | Queued for delivery |
succeeded | Delivered successfully (2xx response) |
failed | Delivery failed after all retries |
Monitoring webhooks
List webhook deliveries
Retry a failed webhook
API endpoints
| Method | Path | Description |
|---|---|---|
POST | /v1/webhook_endpoints | Create endpoint |
GET | /v1/webhook_endpoints | List endpoints |
GET | /v1/webhook_endpoints/{id} | Get endpoint |
PUT | /v1/webhook_endpoints/{id} | Update endpoint |
DELETE | /v1/webhook_endpoints/{id} | Delete endpoint |
GET | /v1/webhook_endpoints/hooks/list | List deliveries |
GET | /v1/webhook_endpoints/hooks/{id} | Get delivery details |
POST | /v1/webhook_endpoints/hooks/{id}/retry | Retry a delivery |