Create a webhook
["*"] to subscribe to all events, or specify individual event types.
Events
Customer events
| Event | When it fires |
|---|---|
customer.created | New customer created via the API |
customer.updated | Customer status, KYC status, or capabilities changed |
Transaction events
| Event | When it fires |
|---|---|
transaction.created | New transaction recorded — transfer initiated or crypto deposited to a wallet |
transaction.updated | Transaction status changed (e.g. funds_received → payment_submitted) |
transaction.completed | Transaction reached a terminal state: completed, payment_processed, failed, returned, or refunded |
Wallet events
| Event | When it fires |
|---|---|
wallet.created | Crypto wallet provisioned |
wallet.updated | Wallet status changed |
Virtual account events
| Event | When it fires |
|---|---|
virtual_account.created | Virtual account opened with deposit instructions |
virtual_account.updated | Virtual account status changed |
Counterparty events
| Event | When it fires |
|---|---|
counterparty.created | Payout account added for a customer |
Other
| Event | When it fires |
|---|---|
webhook.test | Manually triggered via POST /v1/webhooks/:id/test |
Event payload
Every event is delivered as aPOST request with this body:
data object matches the same shape as the corresponding GET endpoint response.
Test your webhook
Retry policy
If your endpoint returns a non-2xx status code, Ledger retries with exponential backoff up to 10 attempts. View delivery history viaGET /v1/webhooks/:id/deliveries.
Next steps
- Webhook Overview — delivery headers
- Signature Verification — verify events came from Ledger