Triggered whenever a payment session’s status changes. Your API will receive a POST request at the webhook URL you configured when subscribing to payment session events.
Each status transition has its own event type in the acceptance.payment_session.* family, allowing you to subscribe to only the events you care about:
acceptance.payment_session.created, acceptance.payment_session.canceledacceptance.payment_session.authorization_pending, acceptance.payment_session.authorization_succeeded, acceptance.payment_session.authorization_failedacceptance.payment_session.capture_pending, acceptance.payment_session.capture_succeeded, acceptance.payment_session.capture_failedacceptance.payment_session.void_pending, acceptance.payment_session.void_succeeded, acceptance.payment_session.void_failed (reserved — not yet emitted)acceptance.payment_session.refund_pending, acceptance.payment_session.refund_succeeded, acceptance.payment_session.refund_failedFor action-triggered events, the corresponding action detail field (authorization, capture, void, or refund) is included in data alongside the session summary.
Security: Webhook requests include an X-Hook0-Signature header containing an HMAC-SHA256 signature of the request body using your webhook secret. Always verify this signature before processing webhook events.
A JWT signed using your CDP API Key Secret, encoded in base64. Refer to the Generate Bearer Token section of our Authentication docs for information on how to generate your Bearer Token.
The payment session summary with optional action details. The paymentSession field is always present. When the status change was triggered by an action, the corresponding detail field is also present.
Webhook event payload sent whenever a payment session's status changes. Each status transition has its own event type, allowing subscribers to selectively receive only the events they care about. When the transition was triggered by an action, the corresponding field (authorization, capture, void, or refund) is present with details.
The type of webhook event. Each payment session status transition maps to a distinct event type in the acceptance.payment_session.* family. Void event types are reserved for future use and are not yet emitted.
acceptance.payment_session.created, acceptance.payment_session.canceled, acceptance.payment_session.authorization_pending, acceptance.payment_session.authorization_succeeded, acceptance.payment_session.authorization_failed, acceptance.payment_session.capture_pending, acceptance.payment_session.capture_succeeded, acceptance.payment_session.capture_failed, acceptance.payment_session.refund_pending, acceptance.payment_session.refund_succeeded, acceptance.payment_session.refund_failed, acceptance.payment_session.void_pending, acceptance.payment_session.void_succeeded, acceptance.payment_session.void_failed "acceptance.payment_session.authorization_succeeded"
Unique identifier for this webhook event. Use this for idempotency.
"123e4567-e89b-12d3-a456-426614174000"
When this event occurred (ISO 8601 format).
"2025-06-15T12:01:00.000Z"
The data payload for a payment session webhook event. Always contains the paymentSession summary reflecting the session's current state. When the event was triggered by an action (authorization, capture, void, or refund), the corresponding optional field is present with the action details. For session-level events (created, canceled) no action field is included — the paymentSession.status value is sufficient.
{
"paymentSession": {
"paymentSessionId": "paymentSession_82c879c1-84e1-44ed-a8c2-1ac239cf09ad",
"entityId": "entity_af2937b0-9846-4fe7-bfe9-ccc22d935114",
"amount": "1.00",
"asset": "usdc",
"source": {
"address": "0xAbC1234567890aBcDeF1234567890AbCdEf123456",
"network": "base",
"asset": "usdc"
},
"target": {
"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"network": "base"
},
"autoCapture": false,
"expiries": {
"authorizationExpiresAt": "2025-12-31T23:59:59.000Z",
"captureExpiresAt": "2026-01-15T23:59:59.000Z",
"refundExpiresAt": "2026-02-15T23:59:59.000Z"
},
"status": "authorization_succeeded",
"balances": {
"capturable": "1.00",
"captured": "0",
"refundable": "0",
"refunded": "0"
},
"externalReferenceId": "merchant-order-abc123",
"metadata": {
"customer_id": "cust_12345",
"order_reference": "order-67890"
},
"createdAt": "2025-06-15T12:00:00.000Z",
"updatedAt": "2025-06-15T12:01:00.000Z"
},
"authorization": {
"authorizationId": "authorization_82c879c1-84e1-44ed-a8c2-1ac239cf09ad",
"status": "succeeded",
"amount": "1.00",
"source": {
"address": "0xAbC1234567890aBcDeF1234567890AbCdEf123456",
"network": "base",
"asset": "usdc"
},
"onchainTransactions": [
{
"transactionHash": "0xabc123def456789012345678901234567890abcdef1234567890abcdef123456",
"network": "base"
}
],
"createdAt": "2025-06-15T12:00:30.000Z",
"updatedAt": "2025-06-15T12:01:00.000Z"
}
}Webhook received and processed successfully. Return a 200 status code to acknowledge receipt. If your endpoint does not return a 2xx status code, the webhook will be retried with exponential backoff.