What is RTP?

RTP

RTP is The Clearing House’s Real-Time Payments network in the US. Eligible banks can send and receive credit transfers in seconds, any day of the year. Once the receiver’s bank accepts, the payment is final. It is a rail, not a ledger.

How does RTP work?

The sending bank submits a credit. The network checks the receiving bank and posts in seconds. Funds are available to the receiver as soon as the bank accepts. There is no next-day batch. A request-for-pay message can ask the payer to send, but the money still moves as a credit.

RTP vs FedNow

Both are instant US credit rails that run every day. RTP is operated by The Clearing House. FedNow is operated by the Federal Reserve. Reach differs by which banks have turned each one on. For a product, treat them as two instant options, not as one network with two names.

RTP vs ACH

ACH waits for a batch and can come back as a return. RTP posts now and does not have ACH-style returns. Use ACH when you can wait and want a pull (debit). Use RTP when the receiver needs the money now and you can send a credit.

How it works with Blnk

Blnk records the instant payout. Your bank or processor still sends the RTP message.

For a payout, the source is the customer wallet and the destination is @PayoutUSD_RTP. Hold it inflight until the receiving bank accepts, then commit. Void the post if the send fails.

We use @PayoutUSD_RTP because it is a system balance that belongs to the organization. Blnk calls these internal balances.

Record an RTP payout in four steps:

  1. Name the source and destination

    The source is the customer wallet. The destination is @PayoutUSD_RTP.

  2. Record the transfer inflight

    Create the transaction with inflight: true. Settled balances stay unchanged until the receiving bank accepts.

    record-rtp.ts
    await blnk.Transactions.create({
      precise_amount: 25000,
      precision: 100,
      reference: 'rtp_out_20260816_001',
      currency: 'USD',
      source: 'customer_wallet_id',
      destination: '@PayoutUSD_RTP',
      description: 'Payout via RTP',
      inflight: true,
      meta_data: {
        rail: 'rtp',
        end_to_end_id: '20260816MMQF001',
        receiving_routing: '021000021',
        customer_id: 'cus_8f21a4',
      },
    });
  3. Commit the acceptance or void a failed send

    Commit when the receiving bank accepts. Void the post if the send fails. See update inflight.

    Commit
    await blnk.Transactions.updateStatus(
      'txn_c4e70eb8-e4d6-4e04-a2e2-92a43b969e0c',
      { status: 'commit' },
    );
    Void
    await blnk.Transactions.updateStatus(
      'txn_c4e70eb8-e4d6-4e04-a2e2-92a43b969e0c',
      { status: 'void' },
    );
  4. Match the RTP report

    Upload the RTP report in reconciliation so instant payouts and ACH use the same ledger.