What happened
The payment rail rejected the transaction based on its own rules — for example, an amount limit, a frequency cap, or a restriction on the recipient. No funds reached the recipient. The transaction is in a terminal failed state withfailureCode: rail_policy_rejected.
Common causes
- Amount limit — the transaction amount exceeds the per-transaction or daily limit on the rail
- Frequency cap — the recipient or sender has exceeded the number of transfers allowed in a given period
- Recipient restriction — the recipient’s institution does not accept transfers from this corridor or rail
- Invalid account details — the routing number, IBAN, or account number does not pass the rail’s validation rules
- Tempo receive policy — the recipient’s Tempo address blocks the incoming token (OUSD or USDC). Conduit recovered the funds and released them to the source wallet before the payout failed. Ask the recipient for an address that accepts that token (Tempo destinations)
Recovery
1. Confirm the terminal statePrevention
- Validate recipient details at collection time — use the requirements endpoint to confirm required fields and formats before accepting recipient information
- Respect per-transfer limits — check your account’s configured rail limits and enforce them in your UI before submitting
- Handle
transaction.failedwith this code — branch onfailureCode === 'rail_policy_rejected'to surface a “the recipient’s bank rejected this transfer” message with a retry option after the user corrects details
Related webhooks
Thetransaction.failed event fires when the rail rejects the transaction:
Related endpoints
- GET /v2/transactions/:id — read transaction state
- POST /v2/payouts — submit a new payout
- GET /v2/payouts/requirements — check recipient field requirements per rail