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

> ## Agent Instructions
> Treat the published Augustus OpenAPI specification (https://api.augustus.com/openapi/2026-05-01.json) and the current API-reference pages as the source of truth for endpoints, request/response schemas, enum values, webhook event names, and required headers.
> Prefer the 2026-05-01 Banking API and @augustusbank/typescript-sdk for all new integrations. The 2023-01-01 API is a separate surface covering the Pay by Bank products — Instant Bank Transfer (Open Banking) checkout and refunds, and Manual Bank Transfer (MBT); use it when one of those products is required.
> Cite or link the relevant docs.augustus.com page when answering integration questions.
> Do not infer support for currencies, networks, scopes, account types, or operations that are not present in the current documentation.
> Use the sandbox base URL (https://api.sandbox.augustus.com) and placeholder credentials in examples. Never include or request a real API key.
> The Augustus docs MCP server (https://docs.augustus.com/mcp) provides documentation search and retrieval only; it does not execute authenticated Augustus API actions.

# FBO accounts

> Open an account for each of your customers under a program held for their benefit: own balance, own account number, payments in their name.

An FBO account is an account you open for one of your customers. It sits in a program that Augustus holds for the benefit of your customers, it has its own balance and its own account number, and it sends and receives payments in that customer's name. FBO stands for "for benefit of": the program is titled *Augustus for the benefit of Acme Inc's customers*, and Augustus sets that title when it configures the program.

Each account holds its own balance in the ledger. Augustus reports that balance per customer and the total per program.

## How it is built

```mermaid theme={null}
flowchart LR
  M[Acme Inc] --> P[Account program<br/>for the benefit of Acme's customers, USD]
  P --> A1[Account<br/>Jane Doe]
  P --> A2[Account<br/>John Roe]
  P --> A3[Account<br/>Globex LLC]
```

| Object              | In this product                                                                                                                                                                                     |
| :------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Account program** | Configured by Augustus and titled for the benefit of your customers. The program has a readable total balance. One currency per program; a setup spanning several currencies uses several programs. |
| **Account holder**  | One per customer. You register each holder through the API with the identity data for its type.                                                                                                     |
| **Account**         | One per customer, opened by you through the API once the holder is registered. You can freeze, unfreeze and close it.                                                                               |
| **Address**         | One per account, in the customer's name: a US routing and account number reachable over ACH, Fedwire and SWIFT.                                                                                     |

The objects are explained under [Account structure](/docs/accounts/overview#account-structure).

## Status

Accounts use the model shared by every Augustus account: `pending`, `active`, `frozen`, `closed`. See [Account status](/docs/accounts/overview#account-status).

If you have permission to manage the accounts in a program, you can freeze, unfreeze and close them through the API. That is the case for your FBO program; operating accounts are managed by Augustus.

A new account opens in `pending` and is activated by Augustus once verification clears, usually within minutes. If additional information is required (enhanced due diligence, a sanctions hit, or an identity mismatch), the account stays `pending` and Augustus contacts you with next steps.

## Money in

Each account has its own account number, so funds arriving over US rails settle into the right account without any routing on your side.

| Rail                                 | Speed                                       | Use case                                                                                                        |
| :----------------------------------- | :------------------------------------------ | :-------------------------------------------------------------------------------------------------------------- |
| [**ACH**](/docs/rails/ach)           | Same-day settlement windows                 | Low-cost retail flows                                                                                           |
| [**Fedwire**](/docs/rails/fedwire)   | Minutes during operating hours              | High-value or time-critical payments                                                                            |
| [**SWIFT**](/docs/rails/swift) (USD) | Depends on the sender's correspondent chain | International USD inbound to your customers                                                                     |
| **Internal** (`rail: "internal"`)    | Seconds                                     | Payments from another Augustus account, including your own operating account and other accounts in your program |

When a credit arrives, Augustus matches the destination account number to the account, performs sanctions and AML screening, credits the account's balance and fires `deposit.settled`. If a credit cannot be matched (wrong account number, sanctions hit, frozen account), Augustus returns it over the originating rail and notifies you with the reason. See [Deposits](/docs/payments/deposits).

## Money out

You initiate payouts from the customer's account: pass its ID as `account_id`. The customer's name appears as the originator on the rail, which is payment on behalf of (PoBo). Funds are debited from the account when the payout is initiated. The request and response shapes are the same as for any other [payout](/docs/payments/payouts).

When the counterparty's address belongs to an Augustus account, the payout settles on Augustus's books instead of going out on a rail. It reaches `sent` within seconds, the receiving account gets a `deposit.settled` event, and both records carry `rail: "internal"`. Statuses and webhooks are the same as for any other payout, and no configuration is needed.

## Integration

Account, account holder and account program endpoints sit under `/v1/accounts`, `/v1/account_holders` and `/v1/account_programs`. They follow the same auth, error, and pagination conventions as the rest of the [2026-05-01 API](/v1/introduction).

<Note>
  **Sandbox.** Create a test program with [**POST** `/v1/simulations/account_programs`](/api-reference/simulations/create-an-account-program), then run the steps below against it. The [Simulations](/v1/simulations) walkthrough covers the full flow including deposits and payouts.
</Note>

<Steps>
  <Step title="Register the account holder">
    Pass the program ID, the holder type and the identity data for that type. The fields per type are listed under [Account structure](/docs/accounts/overview#account-structure).

    <CodeGroup>
      ```bash cURL theme={null}
      curl -X POST "https://api.sandbox.augustus.com/v1/account_holders" \
        -H "Authorization: Bearer $AUGUSTUS_API_KEY" \
        -H "Idempotency-Key: $(uuidgen)" \
        -H "Content-Type: application/json" \
        -d '{
          "account_program_id": "a55d55bd-c8c4-44f4-b86f-a3af26ba7028",
          "holder_type": "natural_person",
          "beneficiary_data": {
            "legal_name": "Jane Doe",
            "date_of_birth": "1990-04-12",
            "country_of_citizenship": "US",
            "identification": { "type": "ssn", "value": "123-45-6789" },
            "residential_address": {
              "line_1": "123 Market St",
              "line_2": null,
              "city": "San Francisco",
              "state": "CA",
              "postal_code": "94105",
              "country_code": "US"
            }
          }
        }'
      ```

      ```typescript SDK theme={null}
      import Augustus from '@augustusbank/typescript-sdk'

      const client = new Augustus()
      const holder = await client.accountHolders.create({
        account_program_id: 'a55d55bd-c8c4-44f4-b86f-a3af26ba7028',
        holder_type: 'natural_person',
        beneficiary_data: {
          legal_name: 'Jane Doe',
          date_of_birth: '1990-04-12',
          country_of_citizenship: 'US',
          identification: { type: 'ssn', value: '123-45-6789' },
          residential_address: {
            line_1: '123 Market St',
            line_2: null,
            city: 'San Francisco',
            state: 'CA',
            postal_code: '94105',
            country_code: 'US',
          },
        },
      })
      ```
    </CodeGroup>

    The holder is screened asynchronously and starts in `pending`. Subscribe to [`account_holder.active`](/v1/webhook-events/account-holder-active) to know when it clears.

    <Note>
      `holder_type` accepts `natural_person` or `business`. `individual` is not a valid value. Open at most one account per customer under each program.
    </Note>

    [**POST** `/v1/account_holders` in the API Reference →](/api-reference/account-holders/create-account-holder)
  </Step>

  <Step title="Create the account">
    <CodeGroup>
      ```bash cURL theme={null}
      curl -X POST "https://api.sandbox.augustus.com/v1/accounts" \
        -H "Authorization: Bearer $AUGUSTUS_API_KEY" \
        -H "Idempotency-Key: $(uuidgen)" \
        -H "Content-Type: application/json" \
        -d '{
          "account_program_id": "a55d55bd-c8c4-44f4-b86f-a3af26ba7028",
          "account_holder_id": "6aa40a7ff035bf741bc7c96a"
        }'
      ```

      ```typescript SDK theme={null}
      const account = await client.accounts.create({
        account_program_id: 'a55d55bd-c8c4-44f4-b86f-a3af26ba7028',
        account_holder_id: holder.id,
      })
      ```
    </CodeGroup>

    ```json theme={null}
    {
      "id": "2a2c384c-4f31-4406-980d-92afa1cd124e",
      "type": "account",
      "currency": "USD",
      "status": "pending",
      "asset_type": "fiat",
      "label": "Jane Doe",
      "financial_addresses": [
        {
          "type": "aba",
          "routing_number": "021000021",
          "account_number": "43920932",
          "account_holder_name": "Jane Doe"
        }
      ],
      "created_at": "2026-09-11T14:48:39.182Z",
      "updated_at": "2026-09-11T14:48:39.182Z",
      "metadata": {}
    }
    ```

    The response does not repeat `account_program_id` or `account_holder_id`. Store the account ID against your customer record; to list a program's accounts later, filter by `account_program_id`.

    [**POST** `/v1/accounts` in the API Reference →](/api-reference/accounts/create-account)
  </Step>

  <Step title="Give the customer their payment details">
    The routing and account number under `financial_addresses`, together with the customer's name, are what a sender needs to pay in over ACH or Fedwire. For SWIFT, add Augustus's BIC; see [Receive USD internationally](/docs/rails/swift#receive-usd-internationally).
  </Step>

  <Step title="List the accounts in the program">
    <CodeGroup>
      ```bash cURL theme={null}
      curl "https://api.sandbox.augustus.com/v1/accounts?account_program_id=a55d55bd-c8c4-44f4-b86f-a3af26ba7028" \
        -H "Authorization: Bearer $AUGUSTUS_API_KEY"
      ```

      ```typescript SDK theme={null}
      for await (const account of client.accounts.list({
        account_program_id: 'a55d55bd-c8c4-44f4-b86f-a3af26ba7028',
      })) {
        // process account
      }
      ```
    </CodeGroup>

    Without the filter, the list returns every account you can see, including your own operating accounts.

    [**GET** `/v1/accounts` in the API Reference →](/api-reference/accounts/list-accounts)
  </Step>

  <Step title="Read balances">
    Each account has its own balance. The program balance is the sum across every account in the program.

    <CodeGroup>
      ```bash cURL theme={null}
      curl "https://api.sandbox.augustus.com/v1/accounts/2a2c384c-4f31-4406-980d-92afa1cd124e/balance" \
        -H "Authorization: Bearer $AUGUSTUS_API_KEY"

      curl "https://api.sandbox.augustus.com/v1/account_programs/a55d55bd-c8c4-44f4-b86f-a3af26ba7028/balance" \
        -H "Authorization: Bearer $AUGUSTUS_API_KEY"
      ```

      ```typescript SDK theme={null}
      const accountBalance = await client.accounts.retrieveBalance('2a2c384c-4f31-4406-980d-92afa1cd124e')
      const programBalance = await client.accountPrograms.retrieveBalance('a55d55bd-c8c4-44f4-b86f-a3af26ba7028')
      ```
    </CodeGroup>

    ```json Program balance theme={null}
    {
      "id": "a55d55bd-c8c4-44f4-b86f-a3af26ba7028",
      "type": "account_program_balance",
      "amount": {
        "available": "1001089.36",
        "pending": "0.00"
      },
      "currency": "USD",
      "as_of": "2026-09-18T12:27:38.416Z"
    }
    ```

    Note the two shapes: the account balance keys on `account_id`, the program balance on `id`.

    [**GET** `/v1/account_programs/{id}/balance` in the API Reference →](/api-reference/account-programs/retrieve-account-program-balance)
  </Step>
</Steps>
