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

# FedNow / RTP bank deposit via the REST API

> Send near-instant USD withdrawals via FedNow and RTP using the Uphold REST API: create an external bank account, generate a quote, submit the payout, and monitor settlement.

This guide walks you through the steps to support FedNow / RTP bank deposits using the REST API. FedNow / RTP uses the same bank account and routing number as ACH — the deposit method setup is identical.

## Prerequisites

* The user has [completed onboarding](/developer-guides/user-onboarding/overview) and has the required capabilities enabled.

## Walkthrough

```mermaid theme={null}
sequenceDiagram
  autonumber
  participant Usr as User
  participant U as Your App
  participant B as Your Backend
  participant A as Uphold
  participant F as Bank

  Usr->>U: Request deposit instructions
  U->>B: Set up deposit method
  B->>A: Set up account deposit method
  A-->>B: { depositMethod }
  B-->>U: { depositMethod }
  U-->>Usr: Display bank instructions
  Usr->>F: Initiate FedNow / RTP transfer
  F-->>A: Incoming transfer received
  A-->>B: Transaction created (processing)
  F-->>A: Settlement confirmed
  A-->>B: Transaction completed/failed
  B-->>Usr: Notify the user
```

***

## Check available rails

Call [List Rails](/rest-apis/core-api/assets/list-rails) to verify FedNow supports the `deposit` feature before proceeding.

```http theme={null}
GET /core/rails?type=bank&network=fednow&asset=USD
```

A successful response includes the rail details. The `constraints` field indicates deposits are credited to the user's default USD account.

```json theme={null}
{
  "rails": [
    {
      "type": "bank",
      "network": "fednow",
      "method": "bank-transfer",
      "asset": "USD",
      "decimals": 2,
      "features": [
        "deposit"
      ],
      "constraints": [
        {
          "rule": "allowed-deposit-accounts",
          "allowed": "default-only"
        }
      ]
    }
  ]
}
```

## Select destination account

USD bank deposits can only be credited to the user's default USD account.

### Find the default account

Call [List default accounts](/rest-apis/core-api/accounts/list-default-accounts) to retrieve it.

```http theme={null}
GET /core/accounts/defaults?asset=USD
```

```json theme={null}
{
  "accounts": [
    {
      "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
      "ownerId": "1e32fca3-23f7-40ed-bc1b-de10c790182d",
      "label": "My USD account",
      "asset": "USD",
      "balance": {
        "total": "100.00",
        "available": "100.00"
      }
    }
  ]
}
```

### Create a new account

If the user has no default USD account, create one with [Create account](/rest-apis/core-api/accounts/create-account) before proceeding.

```http theme={null}
POST /core/accounts
{
  "label": "My USD account",
  "asset": "USD"
}
```

```json theme={null}
{
  "account": {
    "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
    "ownerId": "1e32fca3-23f7-40ed-bc1b-de10c790182d",
    "label": "My USD account",
    "asset": "USD",
    "balance": {
      "total": "0",
      "available": "0"
    }
  }
}
```

## Generate deposit method

For US bank rails, the same account and routing number are shared across all networks (ACH, FedNow / RTP, and Wire), so the same deposit method is generated and can be used for any of these networks.

Call [Set up account deposit method](/rest-apis/core-api/accounts/set-up-account-deposit-method) with the target account id and the desired network. For subsequent calls, use [Get account deposit method](/rest-apis/core-api/accounts/get-account-deposit-method) instead.

```http theme={null}
PUT /core/accounts/{accountId}/deposit-method?type=bank&network=fednow&asset=USD
```

A successful response includes the bank details. These are the same routing and account numbers as ACH — the sender uses them to initiate a FedNow / RTP push.

```json theme={null}
{
  "depositMethod": {
    "type": "bank",
    "status": "ok",
    "details": {
      "network": "fednow",
      "asset": "USD",
      "routingNumber": "021000021",
      "accountNumber": "123456789",
      "accountType": "checking",
      "beneficiary": "John Doe",
      "bankName": "Cross River Bank",
      "bankAddress": {
        "line1": "2 Riverview Dr",
        "line2": "Fort Lee, NJ 07024"
      }
    }
  }
}
```

<Note>The deposit method may initially return `status: processing` while the details are being prepared. Call [Get account deposit method](/rest-apis/core-api/accounts/get-account-deposit-method) to confirm it is ready (`status: ok`) before displaying instructions to the user.</Note>

Provide the **routing number**, **account number** and **account type**. Include the **beneficiary name**, **bank name**, and **bank address** to help the user confirm the legitimacy of the instructions.

## Monitor for the incoming transfer

Prefer **webhooks** for real-time updates, or fall back to **polling** if webhooks are not feasible.

* Webhook events (recommended):
  * [core.transaction.created](/rest-apis/core-api/transactions/webhooks/transaction-created)
    * `status: processing` → bank transfer received, pending posting
  * [core.transaction.status-changed](/rest-apis/core-api/transactions/webhooks/transaction-status-changed)
    * `status: completed` → funds settled
    * `status: failed` → irrecoverable error
* Polling (fallback): [Get transaction](/rest-apis/core-api/transactions/get-transaction)

## Sample transaction

In a successful FedNow / RTP bank deposit, the origin is represented as a `bank-address` node. The destination is the user's default USD account.

```json [expandable] theme={null}
{
  "transaction": {
    "id": "a2b3c4d5-e6f7-8a9b-c0d1-e2f3a4b5c6d7",
    "origin": {
      "asset": "USD",
      "amount": "500.00",
      "node": {
        "type": "bank-address",
        "network": "fednow"
      }
    },
    "destination": {
      "asset": "USD",
      "amount": "500.00",
      "node": {
        "type": "account",
        "id": "a00507fe-628c-4f27-ae81-e1c40b2a8fb8",
        "ownerId": "e4ce04dc-67b7-4e9f-af91-482cb6f9fc4a"
      }
    },
    "status": "completed",
    "quotedAt": "2025-06-15T14:00:00Z",
    "createdAt": "2025-06-15T14:10:00Z",
    "updatedAt": "2025-06-15T14:30:00Z",
    "denomination": {
      "asset": "USD",
      "amount": "500.00",
      "target": "origin"
    }
  }
}
```

## Notify the user

Display an in-app confirmation when the transaction is `completed`, and send an email if applicable.

<Check>You now support FedNow / RTP bank deposits via the REST API.</Check>
