Instant payments overview
FedNow and RTP payments share one resource, the Realtime Transfer. This page covers how to send one, how the answer comes back, and the limits the bank enforces.
One resource, two rails
A Realtime Transfer is a credit transfer on the rail named in rail: fednow or rtp. Both send a pacs.008 and read a pacs.002. FedNow messages travel in the FedNow envelope under a head.001.001.02 header. RTP exchanges the same ISO 20022 documents without the envelope until The Clearing House's message specifications are loaded. Both operators are simulators today. kind is customer, liquidity or return, and direction is outbound or inbound.
Send a payment
POST /transfers/realtime requires an Idempotency-Key. A customer's token also needs a step-up within the last five minutes.
railstringRequiredfednow or rtp.
account_idstringRequiredThe account that pays. It must be open and free of debit restrictions.
amountintegerRequiredMinor units. Positive, and no more than the network limit.
currency_codestringRequiredISO 4217. It must be the account's currency.
counterpartyobjectRequiredrouting_number (nine digits with a valid check digit), account_number, name and account_type (checking or savings).
remittancestringOptionalText for the receiver.
request_idstringOptionalThe request for payment this payment settles. Its id becomes the end-to-end id.
Before anything leaves, the bank checks the approval policy and payment limits, places a pending_debit hold, screens the counterparty's name and runs the outbound fraud rules. Instant payments are irrevocable, so a payment that screening or the fraud rules stop is stored as held_for_review and leaves the bank only when a reviewer releases it.
The answer
The service answers within the request, and the response carries the result.
| Answer | Status | Meaning |
|---|---|---|
ACSC, ACTC, ACCC | accepted | Settled. The account is debited and the hold released. |
ACWP | accepted_without_posting | Settled and debited the same way. The receiver is investigating before it posts. A later ACCC makes the payment posted, BLCK makes it blocked, and RJCT makes it rejected, with a return to follow. |
RJCT | rejected_by_rail | Not settled. reason_code and reason_info say why, and the hold is released. |
| admi.002 | rejected_by_rail | The service rejected the message itself. |
| none | sent | The payment may have settled. The hold stays. |
The reason on a rejection is an ISO 20022 code: AC03 for an invalid creditor account number, AC04 for a closed account, AC06 for a blocked one, AG01 for a transaction that is not allowed, AM02 for an amount over a limit, AM11 for a currency the receiver does not take.
FedNow's payment timeout clock is 20 seconds. A payment left sent is never sent again. After 25 seconds a scheduler routine asks the service what became of it with a pacs.028 and applies the answer; POST /transfers/realtime/{id}/status-request asks at once.
Limits
- The network limit is $10,000,000 per payment on both rails. Above it the answer is
payments.limit_exceeded.GET /railsreports it astransaction_limit_amount, with each rail's cycle date. Both rails arealways_on. - The account's payment limits (per payment, per user per day, per account per day) answer the same code.
- An account's approval policy refuses a direct payment at or above its threshold with
payments.approval_required. A token issued for a customer API key is always refused that way: those payments go through a scheduled transfer and its approvers.
Liquidity and the RTP joint account
The bank moves its own position with a liquidity management transfer, a pacs.009 over FedNow: POST /rails/realtime/liquidity-transfers, open to operations staff and the operations service only. It debits a GL account and is recorded as a Realtime Transfer with kind liquidity. With purpose rtp_funding and an rtp_participant_id, the receiver is the RTP joint account (routing 021053968) and the GL defaults to 1100, the bank's prefunded RTP position. These transfers are accepted from 7 p.m. to 7 a.m. ET on weekdays and all day on weekends and holidays; outside that the answer is payments.cutoff_passed. The limit is $10,000,000 per transfer and per cycle day.
Testing
The simulated operators settle at once. They reject a payment whose creditor account number ends in 0000 with AC03 and one ending in 9999 with AC04, answer ACWP when the creditor's name contains ACWP, and give no answer when it contains TIMEOUT. Incoming payments and returns covers the other direction.