Skip to main content

When it fires

The cash_out webhook type receives the lifecycle events of a transfer created via POST /api/spei/cash-out:
The return of an already settled cash-out (transaction.cash_out.returned) — when the counterparty’s bank returns the transfer — is delivered on the refund_out webhook type, not on cash_out.

Payload

On status: REJECTED, the receipt fields (reference, voucher) may be null — the SPEI network never confirmed the transaction.

Headers

Behavior

  • At-least-once: you may receive the same event more than once. Deduplicate by x-event-id.
  • Failure after success: does not happen. A transaction never moves from LIQUIDATED to REJECTED.
  • Return: if the counterparty returns the transfer after settlement, you receive transaction.cash_out.returned on the refund_out webhook, with the same transactionId.

Expected Response

200 OK within 10 seconds.

Processing

For the complete handler with HMAC validation and dedupe in Node.js, Python, Java, and Go, see Implementation.