POST to your subscribed URL. Each request carries:event_idevent_type and a created_at timestamp2xx. An unacknowledged event is retried.| Family | Answers | Guide |
|---|---|---|
| Subscriptions | Which of my endpoints receive which events, and what signs them | Webhook Subscriptions Guide |
| Events | What did the platform raise, and can I have it again | Webhook Events Guide |
| Delivery attempts | What happened when it was sent to one endpoint | Webhook Delivery Attempts Guide |
2xx on successful receiptevent_idpending_verification and receives nothing until you update its status to active. There is no separate verification step to wait for.| Header | Value |
|---|---|
X-Webhook-Signature | v1=<hex digest> |
X-Webhook-Timestamp | Unix epoch seconds, as a string |
X-Webhook-Delivery-Id | Unique per delivery attempt, so a retry of the same event carries a new one |
., then the raw request body:message = "{X-Webhook-Timestamp}.{raw request body}"
signature = "v1=" + hex(HMAC_SHA256(signing_secret, message))X-Webhook-Timestamp is far from your own clock, so a captured request cannot be replayed later.whsec_ followed by 64 hexadecimal characters. It is returned in exactly two places:event_id.| Setting | Value |
|---|---|
| Attempts after the first | max_retries on the subscription, 8 by default |
| Backoff | Exponential: 30 seconds, then doubling on each attempt |
| Maximum delay between attempts | 4 hours |
| Connect timeout | 10 seconds |
| Read timeout | 30 seconds |
4xx or 5xx, or the connection or TLS handshake fails. Once the attempts are exhausted the event moves to dead_letter and CrossFX stops. Nothing is lost: fix your endpoint, then replay the event. See the Webhook Events Guide.auto_disabled and stops receiving events. Watch consecutive_failures on the subscription, and set it back to active yourself once your endpoint is healthy. The platform does not re-enable it for you.| Event type | Description |
|---|---|
deposit.succeeded | A deposit was received and confirmed. |
deposit.failed | A deposit failed or expired. |
payout.succeeded | A payout was delivered. |
payout.failed | A payout failed. |
refund.succeeded | A refund succeeded. |
refund.failed | A refund failed. |
transfer.status.changed | A transfer moved to a new status. |
data.| Key | Description |
|---|---|
event_id | evt_ followed by 24 hexadecimal characters. Deduplicate on this. |
event_type | One of the event types above |
created_at | When the event was raised, ISO-8601 UTC |
data | The deposit, payout, refund, or transfer that changed |
details is opaque. On a deposit, data.details is a passthrough of method-specific funding detail. Its keys vary by funding path and are not a stable contract. Read the named fields beside it, and treat details as diagnostic only.pending_payout.{
"event_id":"evt_1M8abc2eZvKYlo2Cg6vY7aBc",
"event_type":"deposit.succeeded",
"created_at":"2026-04-28T09:22:03.840890+00:00",
"data": {
"cbtx_tracking_id":"bb88884b-5555-4eb6-ad36-6c888841b6e4",
"deposit_id":"bb88884b-2222-4eb6-ad36-6c888841b6e4",
"status":"succeeded",
"method":"CRYPTO",
"amount_expected":"102.00",
"amount_received":"102.00",
"currency_code":"USDT",
"details":{
"transaction_hash":"0xaae9f30931c20f69c7c6974cd4fcbf6392692242a661d9a2206a2ed0d55eff49",
"chain":"POLYGON",
"method":"CRYPTO",
"user_id":48213
},
"provider_reference":"0xaae9f30931c20f69c7c6974cd4fcbf6392692242a661d9a2206a2ed0d55eff49",
"failure_reason":null,
"received_at":"2026-04-28T09:20:03.840890+00:00",
"initiated_at":"2026-04-28T09:20:03.840890+00:00",
"failed_at":null,
"created_at":"2026-04-28T09:20:03.840890+00:00"
}
}failed.{
"event_id":"evt_1M8def2eZvKYlo2Cg7vY8cDe",
"event_type":"deposit.failed",
"created_at":"2026-04-28T06:39:13.344039+00:00",
"data": {
"cbtx_tracking_id":"bb88884b-5555-4eb6-ad36-6c888841b6e4",
"deposit_id":"bb88884b-2222-4eb6-ad36-6c888841b6e4",
"status":"failed",
"method":"CRYPTO",
"amount_expected":"102.00",
"amount_received":"102.00",
"currency_code":"USDT",
"details":{
"transaction_hash":"0xaae9f30931c20f69c7c6974cd4fcbf6392692242a661d9a2206a2ed0d55eff49",
"chain":"POLYGON",
"method":"CRYPTO",
"user_id":51774
},
"provider_reference":"0xaae9f30931c20f69c7c6974cd4fcbf6392692242a661d9a2206a2ed0d55eff49",
"failure_reason":"Network error",
"received_at":"2026-04-28T06:37:10.320221+00:00",
"initiated_at":"2026-04-28T06:37:12.320221+00:00",
"failed_at":"2026-04-28T06:37:13.320221+00:00",
"created_at":"2026-04-28T06:37:04.568509+00:00"
}
}completed.{
"event_id": "evt_1M8fgh2eZvKYlo2Ch7iJ0kFg",
"event_type": "payout.succeeded",
"created_at": "2026-04-29T13:33:16.938723+00:00",
"data": {
"cbtx_tracking_id":"bb88884b-9999-4eb6-ad36-6c888841b6e4",
"payout_id":"bb88884b-2222-4eb6-ad36-6c888841b6e4",
"status":"succeeded",
"amount":"12900.00",
"currency_code":"KES",
"provider_reference":"reference_001",
"beneficiary_id":"b0953e06-4444-4e00-9600-e99d22eff9c4",
"created_at":"2026-04-29T13:33:15.766744+00:00",
"paid_at":"2026-04-29T13:33:16.887975+00:00",
"initiated_at":"2026-04-29T13:33:15.874079+00:00",
"failed_at":null,
"failure_reason":null
}
}refunding. This transfer is now eligible for a refund.{
"event_id": "evt_1M8ijk2eZvKYlo2Ci8jK1lGh",
"event_type": "payout.failed",
"created_at": "2026-04-29T13:39:51.094603+00:00",
"data": {
"payout_id": "bb88884b-2222-4eb6-ad36-6c888841b6e4",
"cbtx_tracking_id": "bb88884b-9999-4eb6-ad36-6c888841b6e4",
"status": "failed",
"amount": "130.00",
"currency_code": "KES",
"beneficiary_id": "b0953e06-4444-4e00-9600-e99d22eff9c4",
"failure_reason":"Provider rejected the payout",
"provider_reference": "reference_001",
"created_at": "2026-04-29T13:39:29.686921+00:00",
"paid_at":null,
"initiated_at":"2026-04-29T13:39:32.922633+00:00",
"failed_at": "2026-04-29T13:39:51.060240+00:00"
}
}refunded.{
"data":{
"amount":"1.00",
"status":"succeeded",
"failed_at":null,
"refund_id":"fda02b85-dddd-48dc-9c7d-11a96d98d19b",
"created_at":"2026-04-29T13:42:49.501420+00:00",
"refunded_at":"2026-04-29T13:49:14.144880+00:00",
"initiated_at":"2026-04-29T13:42:53.480430+00:00",
"currency_code":"USDC",
"beneficiary_id":"21b1a7bd-3248-4c73-6666-20c93bcfa3a8",
"failure_reason":null,
"cbtx_tracking_id":"b47d984a-d90b-cccc-a35d-c6405bfcdf64",
"provider_reference":"8d9b2723-3333-40f4-a0c8-a61e0be1963c"
},
"event_id":"evt_c4109e67rrrr42a4885b003b",
"created_at":"2026-04-29T13:49:14.164389+00:00",
"event_type":"refund.succeeded"
}refund_failed.{
"data":{
"amount":"1.00",
"status":"failed",
"failed_at":"2026-04-29T13:43:17.406046+00:00",
"refund_id":"fda02b85-2222-48dc-9c7d-11a96d98d19b",
"created_at":"2026-04-29T13:42:49.501420+00:00",
"refunded_at":null,
"initiated_at":"2026-04-29T13:42:53.480430+00:00",
"currency_code":"USDC",
"beneficiary_id":"21b1a7bd-3248-4c73-8888-20c93bcfa3a8",
"failure_reason":"Refund rejected by the provider",
"cbtx_tracking_id":"b47d984a-6666-4b1c-a35d-c6405bfcdf64",
"provider_reference":"8d9b2723-aaaa-40f4-a0c8-a61e0be1963c"
},
"event_id":"evt_61fcaa6f746555afb5a5a112",
"created_at":"2026-04-29T13:43:17.424393+00:00",
"event_type":"refund.failed"
}{
"data":{
"payout":{
"amount":"130.00",
"status":"succeeded",
"paid_at":"2026-04-29T13:33:16.887975+00:00",
"failed_at":null,
"payout_id":"4fe98bfa-4444-4e4d-91c8-bdaf6e385074",
"created_at":"2026-04-29T13:33:15.766744+00:00",
"initiated_at":"2026-04-29T13:33:15.874079+00:00",
"currency_code":"KES",
"beneficiary_id":"b0953e06-044d-0000-9600-e99d22eff9c4",
"failure_reason":null,
"cbtx_tracking_id":"7782e623-16c7-7777-9d70-6f701399caf7",
"provider_reference":"reference_001"
},
"refund":null,
"status":"completed",
"deposit":{
"method":"CRYPTO",
"status":"succeeded",
"details":{
"chain":"POLYGON",
"method":"CRYPTO",
"user_id":48213,
"transaction_hash":"0xaae9f30931c20f5dc7c6974cd4fcbf6392472242a661d9a3336a2ed0d55eff49"
},
"failed_at":null,
"created_at":"2026-04-29T13:33:00.586441+00:00",
"deposit_id":"26685d7b-30b9-4019-9460-5176fca6cf16",
"received_at":"2026-04-29T13:33:05.221840+00:00",
"initiated_at":"2026-04-29T13:33:03.559304+00:00",
"currency_code":"USDC",
"failure_reason":null,
"amount_expected":"1.00",
"amount_received":"1.00",
"cbtx_tracking_id":"7782e623-16c7-7777-9d70-6f701399caf7",
"provider_reference":"0xaae9f30931c20f5dc7c6974cd4fcbf6392472242a661d9a3336a2ed0d55eff49"
},
"fx_rate":"130.0000",
"last_name":"LastName",
"created_at":"2026-04-29T13:32:50.751325+00:00",
"first_name":"FirstName",
"entity_type":"individual",
"completed_at":"2026-04-29T13:34:33.029858+00:00",
"date_of_birth":null,
"source_amount":"1.00",
"beneficiary_id":"b0953e06-044d-0000-9600-e99d22eff9c4",
"cbtx_tracking_id":"7782e623-16c7-7777-9d70-6f701399caf7",
"destination_amount":"130.00",
"source_currency_code":"USDC",
"destination_currency_code":"KES"
},
"event_id":"evt_839cafbf3a5e77777d0ed1",
"created_at":"2026-04-29T13:34:33.925669+00:00",
"event_type":"transfer.status.changed"
}{
"data":{
"payout":{
"amount":"130.00",
"status":"failed",
"paid_at":null,
"failed_at":"2026-04-29T13:42:49.452765+00:00",
"payout_id":"2a6579f8-23a1-ffff-bbc6-c0c75111d24d",
"created_at":"2026-04-29T13:42:30.032960+00:00",
"initiated_at":"2026-04-29T13:42:30.107757+00:00",
"currency_code":"KES",
"beneficiary_id":"21b1a7bd-3248-3333-9dde-20c93bcfa3a8",
"failure_reason":"Provider rejected the payout",
"cbtx_tracking_id":"b47d984a-d90b-cccc-a35d-c6405bfcdf64",
"provider_reference":"reference_001"
},
"refund":{
"amount":"1.00",
"reason":"Payout failed",
"status":"succeeded",
"failed_at":null,
"refund_id":"fda02b85-6cbb-48dc-9c7d-11a96d98d19b",
"created_at":"2026-04-29T13:42:49.501420+00:00",
"refunded_at":"2026-04-29T13:49:14.144880+00:00",
"initiated_at":"2026-04-29T13:42:53.480430+00:00",
"currency_code":"USDC",
"beneficiary_id":"21b1a7bd-3248-3333-9dde-20c93bcfa3a8",
"failure_reason":null,
"cbtx_tracking_id":"b47d984a-d90b-cccc-a35d-c6405bfcdf64",
"provider_reference":"8d9b2723-29da-4444-a0c8-a61e0be1963c"
},
"status":"refunded",
"deposit":{
"method":"CRYPTO",
"status":"succeeded",
"details":{
"chain":"POLYGON",
"method":"CRYPTO",
"user_id":48213,
"transaction_hash":"0xaae9f30931c20f5dc7c6974cd4fcbf6392472242a661d9a3336a2ed0d55eff49"
},
"failed_at":null,
"created_at":"2026-04-29T13:42:14.823115+00:00",
"deposit_id":"67f657f9-4a1c-41a7-b2d6-e607634ec06a",
"received_at":"2026-04-29T13:42:20.114905+00:00",
"initiated_at":"2026-04-29T13:42:17.790207+00:00",
"currency_code":"USDC",
"failure_reason":null,
"amount_expected":"1.00",
"amount_received":"1.00",
"cbtx_tracking_id":"b47d984a-d90b-cccc-a35d-c6405bfcdf64",
"provider_reference":"0xaae9f30931c20f5dc7c6974cd4fcbf6392472242a661d9a3336a2ed0d55eff49"
},
"fx_rate":"130.0000",
"last_name":"LastName",
"created_at":"2026-04-29T13:42:05.040860+00:00",
"first_name":"FirstName",
"entity_type":"individual",
"completed_at":null,
"date_of_birth":null,
"source_amount":"1.00",
"beneficiary_id":"21b1a7bd-3248-3333-9dde-20c93bcfa3a8",
"cbtx_tracking_id":"b47d984a-d90b-cccc-a35d-c6405bfcdf64",
"destination_amount":"130.00",
"source_currency_code":"USDC",
"destination_currency_code":"KES"
},
"event_id":"evt_408affa2d2378ea394d0da91",
"created_at":"2026-04-29T13:49:14.175072+00:00",
"event_type":"transfer.status.changed"
}