---
title: "Update an external account"
method: PATCH
path: "/v1/external-bank-accounts/{id}"
tags: ["External Bank Accounts"]
---

# Update an external account

`PATCH /v1/external-bank-accounts/{id}`

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`.

## Path parameters

- `id` string, required

## Headers

- `X-API-Key` string

## Request body

- UpdateExternalBankAccountDto
  - `beneficiaryType` 'INDIVIDUAL' | 'BUSINESS' — Beneficiary type
  - `beneficiaryName` string — Beneficiary full name
  - `beneficiaryAddress` BeneficiaryAddressDto
    - `addressLine1` string, required — Street line 1. Maximum 35 characters for international wire compatibility. Do not include city, region, or postal code.
    - `addressLine2` string — Street line 2 (apartment, suite, etc.). Maximum 35 characters for international wire compatibility. Do not include city, region, or postal code.
    - `city` string, required — City
    - `state` string — State / Province
    - `postalCode` string, required — Postal code / ZIP code. May be empty for countries without a postal-code system, including the United Arab Emirates.
    - `country` string, required — Country code (ISO 3166-2)
    - `transliterated` TransliteratedAddressDto
      - `addressLine1` string — Transliterated address line 1 (Latin characters)
      - `addressLine2` string — Transliterated address line 2 (Latin characters)
      - `city` string — Transliterated city (Latin characters)
      - `state` string — Transliterated state/province (Latin characters)
  - `beneficiaryPhone` string — Beneficiary phone number
  - `beneficiaryDateOfBirth` string, date — Account holder's date of birth
  - `beneficiaryDocumentType` string — Type of the beneficiary's national/tax identification document. Rail-specific codes — see the field on account creation.
  - `beneficiaryDocumentNumber` string — The beneficiary's national/tax identification document number (e.g. EIN for US business beneficiaries). Payouts on rails that require it fail without it.
  - `bankName` string — Bank name
  - `bankAddress` BankAddressDto
    - `addressLine1` string — Address line 1 (optional for bank addresses)
    - `addressLine2` string — Address line 2 (apartment, suite, etc.)
    - `city` string — City
    - `state` string — State / Province
    - `postalCode` string — Postal code / ZIP code (optional for bank addresses)
    - `country` string — Country code (ISO 3166-2)
  - `paymentRails` string[] — 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).
  - `currencyCodes` string[] — Currency codes supported by this account. Only updatable for accounts with Hong Kong (CHATS) or SWIFT payment rails.
  - `bankAccountType` 'checking' | 'savings' — Bank account type (checking or savings)
  - `metadata` AccountMetadataDto
    - `nickname` string — Account nickname
    - `purpose` string — Account purpose
    - `tags` string[] — Account tags

## Response `200`

External account updated successfully

- ExternalAccountResponseDto
  - `id` string, required — Account ID
  - `customerId` string, required — Customer ID
  - `counterpartyId` string, nullable — Counterparty ID when this is a third-party recipient account
  - `type` 'EXTERNAL_BANK' | 'EXTERNAL_PROXY', required — Account type
  - `status` 'IN_REVIEW' | 'ACTIVE' | 'CLOSED', required — Account status
  - `beneficiaryType` 'INDIVIDUAL' | 'BUSINESS', required — Beneficiary type
  - `beneficiaryName` string, required — Beneficiary name
  - `metadata` AccountMetadataDto
    - `nickname` string — Account nickname
    - `purpose` string — Account purpose
    - `tags` string[] — Account tags
  - `paymentRail` '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', required — Primary payment rail for this account
  - `paymentRails` string[] — All payment rails this account supports (bank accounts only)
  - `beneficiaryAddress` object, nullable — Beneficiary address (bank accounts only)
    - `addressLine1` string
    - `addressLine2` string
    - `city` string
    - `state` string
    - `postalCode` string
    - `country` string
  - `beneficiaryPhone` string, nullable — Beneficiary phone number
  - `beneficiaryDateOfBirth` string, date — Account holder's date of birth
  - `bankName` string, nullable — Bank name (bank accounts only)
  - `bankAddress` object, nullable — Bank address (bank accounts only)
    - `addressLine1` string
    - `addressLine2` string
    - `city` string
    - `state` string
    - `postalCode` string
    - `country` string
  - `swiftBic` string, nullable — SWIFT/BIC code (bank accounts only)
  - `iban` string, nullable — IBAN (bank accounts only)
  - `accountNumber` string, nullable — Bank account number (bank accounts only)
  - `routingNumber` string, nullable — Bank routing code (ABA routing number, sort code, BSB, IFSC, etc.)
  - `branchCode` string, nullable — Bank branch code (for countries like Japan, Brazil, South Africa that use separate branch identifiers)
  - `beneficiaryDocumentType` string — Type of the beneficiary's national/tax identification document (rail-specific codes, e.g. CC/NIT for Colombia, RUT for Chile)
  - `beneficiaryDocumentNumber` string — The beneficiary's national/tax identification document number
  - `beneficiaryStateProvince` string — The beneficiary's state/department/province (rails that require it on payouts, e.g. Peru ACH)
  - `correspondentBankName` string, nullable — Correspondent/intermediary bank name (SWIFT)
  - `correspondentBankSwiftCode` string, nullable — Correspondent/intermediary bank SWIFT/BIC code (SWIFT)
  - `correspondentAccountNumber` string, nullable — Correspondent/intermediary account number (SWIFT)
  - `bankAccountType` 'checking' | 'savings', nullable — Bank account type (bank accounts only)
  - `currencyCodes` string[], nullable — Supported currency codes
  - `aliasType` 'PHONE' | 'EMAIL' | 'NATIONAL_ID' | 'TAX_ID' | 'RANDOM' | 'CORPORATE_ID', nullable — Type of proxy alias (proxy accounts only)
  - `aliasValue` string, nullable — The proxy alias value (proxy accounts only)
  - `createdAt` string, date-time, required — Account creation date
  - `updatedAt` string, date-time, required — Account last update date
  - `created` boolean — 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`).

## Other responses

- `401` — Unauthorized - Invalid or missing authentication credentials

## Changes

- **2026-09-09** `856ef426cc17` — 2 info
  - added the new optional request property `beneficiaryDocumentNumber`
  - added the new optional request property `beneficiaryDocumentType`
- **2026-09-04** `7d6487f295d7` — 1 breaking, 1 warning
  - added `#/components/schemas/BeneficiaryAddressDto` to the `beneficiaryAddress` request property `allOf` list
  - removed `#/components/schemas/AddressDto` from the `beneficiaryAddress` request property `allOf` list

[Change history](https://skmtc.dev/infinite/apis/infinite-api/changes/v1/external-bank-accounts/:id/patch.md)

---

[API](https://skmtc.dev/infinite/apis/infinite-api.md) · [All operations](https://skmtc.dev/infinite/apis/infinite-api/llms.txt) · [OpenAPI document](https://skmtc.dev/infinite/apis/infinite-api/revisions/0b0a3231b482?raw)
