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

> ## Agent Instructions
> If you are an AI assistant operating Infinite for a user, read the skill first: https://docs.infinite.dev/agent-skill.md (setup per host, tool reference, rules for moving money, journeys).
> When operating Infinite for a user, use the MCP server. Sign in at https://bot.api.infinite.dev/mcp (production, acts as the user) or send `Authorization: Bearer <key>` to https://bot.api.infinite.dev/mcp/sse. Prefer its tools over raw HTTP; use REST only for steps no tool covers, and check `get_endpoint_schema` before guessing a request shape.
> Net-new Infinite Connect (org_connect) is operator-assisted: do not grant end users shared org_connect Auth Kit membership or the shared platform org API key — those credentials are org-wide on /v1. BYO org keys onboard under that customer's org id. Operator sessions should show org_connect in get_organization_info.
> The key decides the tools. Every organization key (`sk_sandbox_…` / `sk_live_…`) gets docs, onboarding, `get_account_balance`, and request logs for your own organization. BYO organizations add payees an agent will pay with `create_payee` (payable once ACTIVE). Platform Connect sessions instead get bound-customer payment lookups (`get_quote`, `get_transfer`, `list_transfers`, `list_account_balances`), payee drafts (`create_payee_draft` / `get_payee_draft`; screening only, never payable), and transfer drafts that wait for Infinite approval (`create_transfer_draft` / `get_transfer_draft`; never POST /v1/transfers). Where offered, platform `create_transfer` files a real transfer that Infinite holds in review before funding; it cannot be submitted from DRAFT.
> An agent key (`sk_sandbox_agent_…` / `sk_live_agent_…`) moves money within that agent's limits: `create_transfer` → `submit_transfer` → `wait_for_transfer`.
> On sandbox organization-key sessions, `sandbox_approve_customer` (makes the capabilities you pass READY, and related ones may turn READY too; `request_capabilities` is not needed), `sandbox_fund_account`, and `sandbox_complete_transfer` stand in for verification, funding, and settlement, so a whole flow runs from MCP. BYO keys can pass `customerId` on each call without binding; platform sessions must bind a customer first (`create_business_customer` auto-binds, or send `X-Infinite-On-Behalf-Of`).
> When searching documentation without a key, use the docs MCP at https://docs.infinite.dev/mcp.
> Start in sandbox (https://sandbox.api.infinite.dev). Do not use production unless the user explicitly asks.
> Confirm amount, currency, and payee with the user before any payment is submitted. Pass the invoice number as `reference` on `create_transfer`; the summary says what the payee will see.
> REST amounts are integer minor units (`"4000"` = 40.00 USD). MCP payment tools take exact decimal strings (`"40.00"`). Never mix them.
> Agent denials return `403 { denial: { code, message, window, limit, used, remaining, attemptedAmount, currency }, hint }` with decimal amounts; per-transfer denials omit `used` and `remaining`. Report them to the user; do not work around them.

# Update an external account

> Update mutable fields on an existing external bank account.

## Adding payment rails

Create does **not** merge rails when the same bank identity already exists. To enable additional compatible rails (e.g. add ACH to a US account created with WIRE only), PATCH with `paymentRails` set to the **full resulting list** — existing rails plus any to add.

- Existing rails cannot be removed.
- New rails must be compatible with the account's stored bank details and with each other.
- Proxy accounts cannot change `paymentRails`.



## OpenAPI

````yaml patch /v1/external-bank-accounts/{id}
openapi: 3.0.0
info:
  title: Infinite API
  description: API for Infinite
  version: '1.0'
  contact: {}
servers:
  - url: https://sandbox.api.infinite.dev
    description: Sandbox
  - url: https://api.infinite.dev
    description: Production
security: []
tags:
  - name: Accounts
    description: Virtual and external account management
  - name: Customers
    description: Customer identity management
  - name: Documents
    description: Document upload and management
  - name: Fixed Routes
    description: Fixed route management
  - name: External Bank Accounts
    description: External bank account management
  - name: External Wallets
    description: External wallet management
  - name: Infinite Wallets
    description: Infinite Wallet management
  - name: Organizations
    description: Organization management
  - name: Quotes
    description: Quote creation and management
  - name: Transfers
    description: Money movement and transaction tracking
  - name: Verification
    description: Identity verification workflows
  - name: Terms of Service
    description: Terms of Service acceptance
  - name: Health
    description: System health and monitoring
  - name: Sandbox
    description: Sandbox utilities
paths:
  /v1/external-bank-accounts/{id}:
    patch:
      tags:
        - External Bank Accounts
      summary: Update an external account
      description: >-
        Update mutable fields on an existing external bank account.


        ## Adding payment rails


        Create does **not** merge rails when the same bank identity already
        exists. To enable additional compatible rails (e.g. add ACH to a US
        account created with WIRE only), PATCH with `paymentRails` set to the
        **full resulting list** — existing rails plus any to add.


        - Existing rails cannot be removed.

        - New rails must be compatible with the account's stored bank details
        and with each other.

        - Proxy accounts cannot change `paymentRails`.
      operationId: ExternalBankAccountsController_update_v1
      parameters:
        - name: X-API-Key
          in: header
          description: API key
          required: false
          schema:
            type: string
        - name: id
          required: true
          in: path
          description: External account ID
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateExternalBankAccountDto'
      responses:
        '200':
          description: External account updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalAccountResponseDto'
        '401':
          description: Unauthorized - Invalid or missing authentication credentials
      security:
        - bearer: []
      x-codeSamples:
        - lang: bash
          label: CLI
          source: >-
            # Requires: npm i -g @infinite_dev/cli && export
            INFINITE_API_KEY=sk_sandbox_...

            # Escape hatch for any endpoint: infinite api <METHOD> <path>

            infinite api PATCH /v1/external-bank-accounts/acc_abc123 \
              --body '<request-json>'
        - lang: text
          label: MCP
          source: >-
            Update an external account (acc_abc123).


            # Infinite MCP is read-only for this endpoint — use a dedicated MCP
            tool when one exists, otherwise run the CLI tab.
components:
  schemas:
    UpdateExternalBankAccountDto:
      type: object
      properties:
        beneficiaryType:
          type: string
          enum:
            - INDIVIDUAL
            - BUSINESS
          description: Beneficiary type
          example: INDIVIDUAL
        beneficiaryName:
          type: string
          description: Beneficiary full name
          example: John Smith
        beneficiaryAddress:
          description: >-
            Beneficiary structured address. Street lines are limited to 35
            characters for international wire compatibility. Put city, region,
            and postal code in their own fields — not in the street lines.
          allOf:
            - $ref: '#/components/schemas/BeneficiaryAddressDto'
        beneficiaryPhone:
          type: string
          description: Beneficiary phone number
          example: '+1234567890'
        beneficiaryDateOfBirth:
          type: string
          description: Account holder's date of birth
          example: '1990-01-31'
          format: date
        beneficiaryDocumentType:
          type: string
          description: >-
            Type of the beneficiary's national/tax identification document.
            Rail-specific codes — see the field on account creation.
          example: EIN
        beneficiaryDocumentNumber:
          type: string
          description: >-
            The beneficiary's national/tax identification document number (e.g.
            EIN for US business beneficiaries). Payouts on rails that require it
            fail without it.
          example: 12-3456789
        bankName:
          type: string
          description: Bank name
          example: JPMorgan Chase Bank
        bankAddress:
          description: Bank structured address
          allOf:
            - $ref: '#/components/schemas/BankAddressDto'
        paymentRails:
          type: array
          description: >-
            Adds compatible payment rails to this account. Send the full
            resulting list (existing rails plus any to add). Existing rails
            cannot be removed.


            Rails must be compatible with each other and with the account's
            stored bank details (e.g. add RTP to a US ACH/WIRE account; do not
            mix SEPA with a US routing-number account).
          example:
            - ACH
            - WIRE
            - RTP
          items:
            type: string
            enum:
              - ACH
              - ACH_SAME_DAY
              - WIRE
              - FED_NOW
              - RTP
              - EREBOR
              - EREBOR_RAIL
              - BALANCE
              - SWIFT
              - SEPA
              - SEPA_INSTANT
              - TIPS
              - FASTER_PAYMENTS
              - BACS
              - CHAPS
              - ELIXIR
              - NICS
              - EFT
              - INTERAC
              - NPP
              - BECS
              - UPI
              - IMPS
              - IMPS_WITH_FIRC
              - NEFT
              - RTGS
              - BI_FAST
              - ARTAJASA
              - PIX
              - TED
              - TEF
              - SPEI
              - COELSA
              - SINPE
              - CIPS
              - CFXPS
              - CHATS
              - ZENGIN
              - KFTC
              - FAST_SG
              - MEPS
              - DUITNOW
              - PROMPTPAY
              - INSTAPAY
              - PESONET
              - NAPAS
              - BEFTN
              - SLIPS
              - ZAHAV
              - GHIPSS
              - NIBSS
              - PESALINK
              - RTC_ZA
              - TZS_RTGS
              - EGP_ACH
              - JOD_ACH
              - NPSS
              - MADA
              - QPS
              - DOP_ACH
              - GTQ_ACH
              - HNL_ACH
              - PEN_ACH
              - JMD_ACH
              - USD_ACH_SV
              - USD_ACH_EC
              - CLP_TEF
              - PSE
              - COP_ACH
              - BOB_RTGS
              - PYG_ACH
              - CERTIS
              - DKK_TIPS
              - SENT
              - NKS
              - BANKGIROT
              - HKD_FPS
              - IBFT
              - TRY_FAST
        currencyCodes:
          description: >-
            Currency codes supported by this account. Only updatable for
            accounts with Hong Kong (CHATS) or SWIFT payment rails.
          example:
            - USD
            - EUR
            - GBP
          type: array
          items:
            type: string
        bankAccountType:
          type: string
          description: Bank account type (checking or savings)
          enum:
            - checking
            - savings
          example: checking
        metadata:
          description: Optional metadata for the account (e.g., nickname)
          example:
            nickname: Primary Business Account
          allOf:
            - $ref: '#/components/schemas/AccountMetadataDto'
    ExternalAccountResponseDto:
      type: object
      properties:
        id:
          type: string
          description: Account ID
          example: eba_1234567890abcdef
        customerId:
          type: string
          description: Customer ID
          example: cust_abc123
        counterpartyId:
          type: string
          description: Counterparty ID when this is a third-party recipient account
          example: cp_abc123
          nullable: true
        type:
          type: string
          enum:
            - EXTERNAL_BANK
            - EXTERNAL_PROXY
          description: Account type
          example: EXTERNAL_BANK
        status:
          type: string
          enum:
            - IN_REVIEW
            - ACTIVE
            - CLOSED
          description: Account status
          example: IN_REVIEW
        beneficiaryType:
          type: string
          enum:
            - INDIVIDUAL
            - BUSINESS
          description: Beneficiary type
          example: INDIVIDUAL
        beneficiaryName:
          type: string
          description: Beneficiary name
          example: John Smith
        metadata:
          description: Custom metadata for your application, including account nickname
          allOf:
            - $ref: '#/components/schemas/AccountMetadataDto'
        paymentRail:
          type: string
          description: Primary payment rail for this account
          enum:
            - ACH
            - ACH_SAME_DAY
            - WIRE
            - FEDWIRE
            - FED_NOW
            - RTP
            - EREBOR
            - EREBOR_RAIL
            - BALANCE
            - SWIFT
            - SEPA
            - SEPA_INSTANT
            - TIPS
            - FASTER_PAYMENTS
            - BACS
            - CHAPS
            - ELIXIR
            - NICS
            - EFT
            - INTERAC
            - NPP
            - BECS
            - UPI
            - IMPS
            - IMPS_WITH_FIRC
            - NEFT
            - RTGS
            - BI_FAST
            - ARTAJASA
            - PIX
            - TED
            - TEF
            - SPEI
            - COELSA
            - SINPE
            - CIPS
            - CFXPS
            - CHATS
            - ZENGIN
            - KFTC
            - FAST_SG
            - MEPS
            - DUITNOW
            - PROMPTPAY
            - INSTAPAY
            - PESONET
            - NAPAS
            - BEFTN
            - SLIPS
            - ZAHAV
            - GHIPSS
            - NIBSS
            - PESALINK
            - RTC_ZA
            - TZS_RTGS
            - EGP_ACH
            - JOD_ACH
            - NPSS
            - MADA
            - QPS
            - DOP_ACH
            - GTQ_ACH
            - HNL_ACH
            - PEN_ACH
            - JMD_ACH
            - USD_ACH_SV
            - USD_ACH_EC
            - CLP_TEF
            - PSE
            - COP_ACH
            - BOB_RTGS
            - PYG_ACH
            - CERTIS
            - DKK_TIPS
            - SENT
            - NKS
            - BANKGIROT
            - HKD_FPS
            - IBFT
            - TRY_FAST
          example: SWIFT
        paymentRails:
          type: array
          description: All payment rails this account supports (bank accounts only)
          example:
            - ACH
            - ACH_SAME_DAY
            - WIRE
          items:
            type: string
            enum:
              - ACH
              - ACH_SAME_DAY
              - WIRE
              - FEDWIRE
              - FED_NOW
              - RTP
              - EREBOR
              - EREBOR_RAIL
              - BALANCE
              - SWIFT
              - SEPA
              - SEPA_INSTANT
              - TIPS
              - FASTER_PAYMENTS
              - BACS
              - CHAPS
              - ELIXIR
              - NICS
              - EFT
              - INTERAC
              - NPP
              - BECS
              - UPI
              - IMPS
              - IMPS_WITH_FIRC
              - NEFT
              - RTGS
              - BI_FAST
              - ARTAJASA
              - PIX
              - TED
              - TEF
              - SPEI
              - COELSA
              - SINPE
              - CIPS
              - CFXPS
              - CHATS
              - ZENGIN
              - KFTC
              - FAST_SG
              - MEPS
              - DUITNOW
              - PROMPTPAY
              - INSTAPAY
              - PESONET
              - NAPAS
              - BEFTN
              - SLIPS
              - ZAHAV
              - GHIPSS
              - NIBSS
              - PESALINK
              - RTC_ZA
              - TZS_RTGS
              - EGP_ACH
              - JOD_ACH
              - NPSS
              - MADA
              - QPS
              - DOP_ACH
              - GTQ_ACH
              - HNL_ACH
              - PEN_ACH
              - JMD_ACH
              - USD_ACH_SV
              - USD_ACH_EC
              - CLP_TEF
              - PSE
              - COP_ACH
              - BOB_RTGS
              - PYG_ACH
              - CERTIS
              - DKK_TIPS
              - SENT
              - NKS
              - BANKGIROT
              - HKD_FPS
              - IBFT
              - TRY_FAST
        beneficiaryAddress:
          type: object
          description: Beneficiary address (bank accounts only)
          properties:
            addressLine1:
              type: string
              example: 123 Main Street
            addressLine2:
              type: string
              example: Suite 100
            city:
              type: string
              example: New York
            state:
              type: string
              example: NY
            postalCode:
              type: string
              example: '10001'
            country:
              type: string
              example: US
        beneficiaryPhone:
          type: string
          description: Beneficiary phone number
          example: '+12125551234'
        beneficiaryDateOfBirth:
          type: string
          description: Account holder's date of birth
          example: '1990-01-31'
          format: date
        bankName:
          type: string
          description: Bank name (bank accounts only)
          example: JPMorgan Chase Bank
        bankAddress:
          type: object
          description: Bank address (bank accounts only)
          properties:
            addressLine1:
              type: string
              example: 270 Park Avenue
            addressLine2:
              type: string
              example: Floor 10
            city:
              type: string
              example: New York
            state:
              type: string
              example: NY
            postalCode:
              type: string
              example: '10017'
            country:
              type: string
              example: US
        swiftBic:
          type: string
          description: SWIFT/BIC code (bank accounts only)
          example: CHASUS33
        iban:
          type: string
          description: IBAN (bank accounts only)
          example: GB82WEST12345698765432
        accountNumber:
          type: string
          description: Bank account number (bank accounts only)
          example: '1234567890'
        routingNumber:
          type: string
          description: Bank routing code (ABA routing number, sort code, BSB, IFSC, etc.)
          example: '021000021'
        branchCode:
          type: string
          description: >-
            Bank branch code (for countries like Japan, Brazil, South Africa
            that use separate branch identifiers)
          example: '001'
        beneficiaryDocumentType:
          type: string
          description: >-
            Type of the beneficiary's national/tax identification document
            (rail-specific codes, e.g. CC/NIT for Colombia, RUT for Chile)
          example: CC
        beneficiaryDocumentNumber:
          type: string
          description: The beneficiary's national/tax identification document number
          example: '12345678901'
        beneficiaryStateProvince:
          type: string
          description: >-
            The beneficiary's state/department/province (rails that require it
            on payouts, e.g. Peru ACH)
          example: LIMA
        correspondentBankName:
          type: string
          description: Correspondent/intermediary bank name (SWIFT)
          example: Bank of America
        correspondentBankSwiftCode:
          type: string
          description: Correspondent/intermediary bank SWIFT/BIC code (SWIFT)
          example: IRVTUS3NXXX
        correspondentAccountNumber:
          type: string
          description: Correspondent/intermediary account number (SWIFT)
          example: '9876543210'
        bankAccountType:
          type: string
          description: Bank account type (bank accounts only)
          enum:
            - checking
            - savings
          example: checking
        currencyCodes:
          description: Supported currency codes
          example:
            - USD
            - EUR
          type: array
          items:
            type: string
        aliasType:
          type: string
          description: Type of proxy alias (proxy accounts only)
          enum:
            - PHONE
            - EMAIL
            - NATIONAL_ID
            - TAX_ID
            - RANDOM
            - CORPORATE_ID
          example: TAX_ID
        aliasValue:
          type: string
          description: The proxy alias value (proxy accounts only)
          example: '12345678901'
        createdAt:
          type: string
          description: Account creation date
          format: date-time
          example: '2026-01-15T10:00:00Z'
        updatedAt:
          type: string
          description: Account last update date
          format: date-time
          example: '2026-01-15T10:00:00Z'
        created:
          type: boolean
          description: >-
            Present on create responses. `true` = a new account was inserted.
            `false` = an existing account matched (bank: customer + the exact
            normalized identifier set supplied; proxy: customer + alias + rail)
            and was reused. For bank accounts, existing `paymentRails` are not
            updated by create — use PATCH to add rails; missing create-only
            fields may still be backfilled and conflicting values return 400.
            For proxy accounts, inspect `paymentRail` (proxies do not return
            `paymentRails`).
          example: true
      required:
        - id
        - customerId
        - type
        - status
        - beneficiaryType
        - beneficiaryName
        - paymentRail
        - createdAt
        - updatedAt
    BeneficiaryAddressDto:
      type: object
      properties:
        addressLine1:
          type: string
          description: >-
            Street line 1. Maximum 35 characters for international wire
            compatibility. Do not include city, region, or postal code.
          example: 123 Main Street
          maxLength: 35
        addressLine2:
          type: string
          description: >-
            Street line 2 (apartment, suite, etc.). Maximum 35 characters for
            international wire compatibility. Do not include city, region, or
            postal code.
          example: Apt 4B
          maxLength: 35
        city:
          type: string
          description: City
          example: San Francisco
          maxLength: 256
        state:
          type: string
          description: State / Province
          example: CA
          maxLength: 256
        postalCode:
          type: string
          description: >-
            Postal code / ZIP code. May be empty for countries without a
            postal-code system, including the United Arab Emirates.
          example: '94102'
          maxLength: 50
        country:
          type: string
          description: Country code (ISO 3166-2)
          example: US
          minLength: 2
          maxLength: 2
        transliterated:
          description: >-
            Transliterated address fields (Latin characters) for non-Latin
            addresses. Required when address contains non-Latin characters
            (Chinese, Arabic, Cyrillic, etc.).
          allOf:
            - $ref: '#/components/schemas/TransliteratedAddressDto'
      required:
        - addressLine1
        - city
        - postalCode
        - country
    BankAddressDto:
      type: object
      properties:
        addressLine1:
          type: string
          description: Address line 1 (optional for bank addresses)
          example: 123 Main Street
          maxLength: 1024
        addressLine2:
          type: string
          description: Address line 2 (apartment, suite, etc.)
          example: Apt 4B
          maxLength: 1024
        city:
          type: string
          description: City
          example: San Francisco
          maxLength: 256
        state:
          type: string
          description: State / Province
          example: CA
          maxLength: 256
        postalCode:
          type: string
          description: Postal code / ZIP code (optional for bank addresses)
          example: '94102'
          maxLength: 50
        country:
          type: string
          description: Country code (ISO 3166-2)
          example: US
          minLength: 2
          maxLength: 2
    AccountMetadataDto:
      type: object
      properties:
        nickname:
          type: string
          description: Account nickname
          example: Main Checking Account
          maxLength: 256
        purpose:
          type: string
          description: Account purpose
          example: Business operations
          maxLength: 512
        tags:
          description: Account tags
          example:
            - primary
            - operations
          type: array
          items:
            type: string
    TransliteratedAddressDto:
      type: object
      properties:
        addressLine1:
          type: string
          description: Transliterated address line 1 (Latin characters)
          example: 123 Main Street
          maxLength: 1024
        addressLine2:
          type: string
          description: Transliterated address line 2 (Latin characters)
          example: Apt 4B
          maxLength: 1024
        city:
          type: string
          description: Transliterated city (Latin characters)
          example: Beijing
          maxLength: 256
        state:
          type: string
          description: Transliterated state/province (Latin characters)
          example: Hebei
          maxLength: 256
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: API Key
      type: http
      description: API Key in Bearer format (e.g., Bearer sk_test_...)

````

## Related topics

- [Update an external wallet](/api-reference/external-wallets/update-an-external-wallet.md)
- [Close an external account](/api-reference/external-bank-accounts/close-an-external-account.md)
- [Create an external account](/api-reference/external-bank-accounts/create-an-external-account.md)
- [Accounts](/concepts/accounts.md)
- [Update a fixed route](/api-reference/fixed-routes/update-a-fixed-route.md)
