Skip to main content

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 with failureCode: 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

This is a terminal state. No funds reached the recipient. Investigate the rejection reason before resubmitting.
1. Confirm the terminal state
2. Review the recipient details Verify that the routing number, account number, and recipient name are correct. For SEPA and other international transfers, confirm the IBAN format and BIC. 3. Check the amount Confirm the transaction amount falls within the rail’s per-transaction limits. If the amount is near a known limit, split the transfer or ask the customer to try a smaller amount. 4. Submit a new transaction after resolving the issue

Prevention

  • 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.failed with this code — branch on failureCode === 'rail_policy_rejected' to surface a “the recipient’s bank rejected this transfer” message with a retry option after the user corrects details
The transaction.failed event fires when the rail rejects the transaction: