# Instant payments with RTP & FedNow

> Send instant payments (RTP or FedNow) from a Moov wallet to an eligible bank account, including eligibility, statuses, failure codes, and payout fees.

> AI agents: search and read all Moov docs with the docs MCP server at https://docs.moov.io/mcp (no API key). Setup: https://docs.moov.io/guides/developer-tools/mcp-ai/docs-mcp/index.md

Instant payments (RTP or FedNow) move funds from a Moov wallet to a bank account in seconds, 24/7/365, including weekends and bank holidays. Moov picks the network; you use one payment method, `instant-bank-credit`.

**Before you start**

- The source account has the `send-funds.instant-bank` and `wallet.balance` [capabilities](/guides/accounts/capabilities/reference/index.md)
- The source is a `moov-wallet` with enough `availableBalance` for the amount and any [payout fee](/guides/send-payments/payout-fees/index.md). Instant payments can't be funded directly from a bank account.
- The recipient's [linked bank account](/guides/sources/bank-accounts/link-bank-accounts/index.md) is eligible, which gives it an `instant-bank-credit` payment method
- API version `v2026.04.00` or later to create `instant-bank-credit` transfers

|                    | Instant payments                                                                                                                       |
|--------------------|----------------------------------------------------------------------------------------------------------------------------------------|
| Speed              | Seconds, 24/7/365                                                                                                                      |
| Networks           | [RTP](https://www.theclearinghouse.org/) (The Clearing House) or [FedNow](https://explore.fednow.org/) (Federal Reserve)               |
| Per-transfer limit | $100,000 for `instant-bank-credit`; $10,000,000 for `rtp-credit`                                                                       |
| Reversible         | No. A completed instant payment is final.                                                                                              |
| Fee                | Set by your [fee plan](/guides/billing/plan-options/index.md); the recipient can pay it with [`feePaidBy`](/guides/send-payments/payout-fees/index.md) |

![Standard instant funds flow diagram](./images/moov-instantbank-funds-flow-light.png)

## Bank account eligibility

When a bank account is linked, Moov checks whether its bank can receive payments on RTP or FedNow. If it can, Moov adds an `instant-bank-credit` payment method to the bank account. If a bank account has no `instant-bank-credit` payment method, send with [same-day ACH](/guides/money-movement/ach/index.md) instead.

## Send an instant payment

Create a [transfer](/api/money-movement/transfers/create/index.md) with the sender's `moov-wallet` payment method as the source and the recipient's `instant-bank-credit` payment method as the destination. Include `X-Wait-For: rail-response` to get the network result in the response. The source wallet balance decreases immediately. See [send funds](/guides/send-payments/send-funds/index.md#send-funds-to-a-recipient) for the full request.

## Check the result

The transfer response, the transfers `GET` [endpoint](/api/money-movement/transfers/get/index.md), and `transfer.updated` [webhooks](/guides/webhooks/webhook-events/index.md#transfers) include `instantBankDetails`, with the `network` used, a rail-specific `status`, and a `failureCode` if it failed.

**RTP**

```json
{
  "instantBankDetails": {
    "network": "rtp",
    "status": "completed",
    "initiatedOn": "2025-08-08T19:45:12Z",
    "completedOn": "2025-08-08T19:45:45Z",
    "failedOn": null, 
    "acceptedWithoutPostingOn": null,
    "failureCode": null, 
    "networkResponseCode": "ACTC", 
    "endToEndID": "E2E123456789"
  }
}
```

### Statuses

Find rail-specific transfer status information within `instantBankDetails`:

| Transfer status            | Description                                                                                                                                                                                   |
|----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `initiated`                | The payment has reached the rail, but Moov has not yet received a response                                                                                                                    |
| `accepted-without-posting` | Moov has received an accepted without posting message from the receiving bank, as they need more time to process the payment. The funds are moved but are not yet available to the recipient. |
| `completed`                | Moov has received an accepted message from the receiving bank, and funds are available to the recipient                                                                                       |
| `failed`                   | Moov has received a rejected message from the receiving bank. The failure code, reason, and description is provided in the transfer response.                                                 |

### Failure codes

Some failures set the bank account status to `errored`. The recipient then needs to link a new bank account (or [contact Moov](https://support.moov.io/)) before you can pay them again.

| Failure code                | Description                                                   | Status: action             |
|-----------------------------|---------------------------------------------------------------|----------------------------|
| `account-blocked`           | Account is blocked. Transactions cannot be posted against it. | `errored`: Add new account |
| `account-closed`            | Account is closed.                                            | `errored`: Add new account |
| `customer-deceased`         | Customer is deceased.                                         | `errored`: Add new account |
| `invalid-account`           | Account number is invalid or missing.                         | `errored`: Add new account |
| `invalid-amount`            | Amount entered is invalid.                                    | No action needed           |
| `invalid-field`             | A field entry could not be validated.                         | No action needed           |
| `limit-exceeded`            | Amount entered exceeds approved amount.                       | No action needed           |
| `processing-error`          | Transaction could not be processed due to processing error.   | No action needed           |
| `transaction-not-supported` | Transaction is not supported.                                 | No action needed           |

Refer to the [The Clearing House's](https://www.theclearinghouse.org/payment-systems/rtp/technical-documentation) **Message Status Report appendix** for the latest ISO RTP error codes (`networkReasonCode`).

## RTP credit

> **Note:** The `rtp-credit` payment method is still currently supported, though Moov strongly suggests using `instant-bank-credit` instead. The `rtp-credit` payment method will be deprecated in the future.
> 
> Creating transfers with the `instant-bank-credit` payment method is supported for API versions `2026.04.00` and higher.

Instant payments on the RTP rail are enabled by [The Clearing House](https://www.theclearinghouse.org/) and processed almost immediately, 24/7/365. The `rtp-credit` payment method is added to qualifying bank accounts.

![Wallet to bank RTP flow diagram](./images/wallet-to-bank-rtp-light.png)

Once funds are sent, the transfer is final and cannot be reversed. Moov has a platform transaction limit of $10,000,000.00 for RTP credit. If a transfer uses the `rtp-credit` payment method, the response will include `rtpDetails`:

```json
{
  "rtpDetails": {
    "status": "completed",
    "initiatedOn": "2025-08-08T19:45:12Z",
    "completedOn": "2025-08-08T19:45:45Z",
    "failedOn": null, 
    "acceptedWithoutPostingOn": null,
    "failureCode": null, 
    "networkResponseCode": "ACTC"
  }
}
```

Additionally, you can obtain details about a transfer through the transfers `GET` [endpoint](/api/money-movement/transfers/get/index.md).

## Next steps

- [Payout fees](/guides/send-payments/payout-fees/index.md): pass the instant payment fee to the recipient
- [Payment links](/guides/accept-payments/payment-links/index.md): let recipients choose instant or ACH themselves
- [Sweeps](/guides/wallets/sweeps/index.md): settle a wallet balance by instant payment every day

