Skip to main content
CDP Transfers webhooks provide your app with real-time transfer status updates. By subscribing your webhook endpoint you receive notifications as transfers made by your users are created and move toward a final status.

Getting started

1

Subscribe

Set up a subscription to transfer webhook events.
2

Verify

Implement signature verification in your receiver.
3

Inspect payloads

See the transfer webhook example payloads for full request-body examples.

Event delivery

Design your receiver around these delivery rules:
  • Final events are always sent. When a transfer finishes, CDP sends either payments.transfers.completed or payments.transfers.failed.
  • Intermediate events are best-effort. payments.transfers.quoted and payments.transfers.processing are sent only when the transfer is recorded in that status. A transfer that settles directly to a final status, such as a fast transfer or an instant deposit, can skip them. For example, you can receive payments.transfers.completed without a preceding payments.transfers.processing.
  • Deliveries can repeat. Use eventID to deduplicate retried deliveries.
Base fulfillment, reconciliation, and other business logic on final events. Don’t wait for payments.transfers.processing before handling a final event, and don’t treat a missing processing event as an error. To confirm a transfer’s current status, call Get a transfer.

Best practices

  • Test locally first before enabling production subscriptions.
  • Support concurrent delivery at your webhook endpoint.
  • Acknowledge quickly (200), then process in the background.
  • Monitor delivery health and alert on failures.
  • Check subscriptions regularly and confirm critical ones remain isEnabled: true.
Subscriptions can be auto-disabled after sustained delivery failures. Fix the endpoint issue, then re-enable with the Update Subscription API.