> ## Documentation Index
> Fetch the complete documentation index at: https://docs.conduit.financial/llms.txt
> Use this file to discover all available pages before exploring further.

# RAIL_POLICY_REJECTED error

> The payment rail rejected the transaction per its own policy; no funds reached the recipient

## 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`.

```json theme={null}
{
  "type": "RAIL_POLICY_REJECTED",
  "title": "Payment rail rejected the transaction",
  "status": 422,
  "detail": "The payment rail's policy rejected the transaction.",
  "resolution": "Adjust the amount, recipient, or wait period and submit a new transaction.",
  "docs": "/errors#rail-policy-rejected",
  "instance": "/v2/transactions/txn_034A0gCCVmVhsfuR8SfVwM",
  "correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
  "timestamp": "2026-01-15T09:30:00.000Z"
}
```

## 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](/guides/send-payout#tempo-destinations))

## Recovery

<Warning>
  This is a terminal state. No funds reached the recipient. Investigate the rejection reason
  before resubmitting.
</Warning>

**1. Confirm the terminal state**

```bash theme={null}
curl -X GET https://api.conduit.financial/v2/transactions/txn_034A0gCCVmVhsfuR8SfVwM \
  -H "x-api-key: YOUR_API_KEY"
```

**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**

```bash theme={null}
curl -X POST https://api.conduit.financial/v2/payouts \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Idempotency-Key: idem_NEW_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customerId": "cus_034A0gCCVsxdV2PjHLx9k1",
    "virtualAccountId": "vac_034A0gCCW1I7ZiTVLb0G7I",
    "assetAmount": {"code": "USD", "amount": "500.00"},
    "destination": {
      "type": "fiat",
      "rail": "fedwire",
      "recipient": {
        "type": "individual",
        "firstName": "Jane",
        "lastName": "Doe",
        "accountNumber": "1234567890",
        "routingNumber": "021000021",
        "accountType": "checking"
      }
    }
  }'
```

## 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

## Related webhooks

The `transaction.failed` event fires when the rail rejects the transaction:

```json theme={null}
{
  "type": "transaction.failed",
  "data": {
    "transactionId": "txn_034A0gCCVmVhsfuR8SfVwM",
    "failureCode": "rail_policy_rejected"
  }
}
```

## Related endpoints

* [GET /v2/transactions/:id](/api-reference/transactions/get-a-transaction-by-id) -- read transaction state
* [POST /v2/payouts](/api-reference/payouts/create-a-payout) -- submit a new payout
* [GET /v2/payouts/requirements](/api-reference/payouts/discover-payout-requirements) -- check recipient field requirements per rail


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.