---
title: "POST /v1/customers/{customer_id}/external-accounts"
method: POST
path: "/v1/customers/{customer_id}/external-accounts"
tags: ["crate::connectivity::fiat::controller::openapi::external_accounts"]
---

# POST /v1/customers/{customer_id}/external-accounts

`POST /v1/customers/{customer_id}/external-accounts`

## Request

- Base URL: `https://api.1money.com`
- URL: `https://api.1money.com/v1/customers/{customer_id}/external-accounts`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/1money/apis/1money-openapi/docs/v1/customers/:customer_id/external-accounts/post.ts> (a function with typed inputs; its response is checked against the schema)

## Path parameters

- `customer_id` string, required

## Headers

- `Idempotency-Key` string, required

## Request body

- ExternalAccountRequest: Request body for creating a new external bank account
  - `network` string, required: Bank network type for the external account. - `US_ACH`: For US domestic ACH transfers (next-day settlement, lower fees) - `US_FEDWIRE`: For US domestic wire transfers (same-day settlement) - `US_RTP`: For US real-time payments (instant settlement) - `US_FEDNOW`: For US instant payments over FedNow - `SWIFT`: For international wire transfers via the SWIFT network - `SPEI`: For Mexican domestic transfers, addressed by an 18-digit CLABE - `LOCAL_BANK_TRANSFER`: For bank-account transfers over a local clearing network, including INR transfers to Indian bank accounts - `CHATS`: For Hong Kong USD transfers over CHATS - `FPS`: For Hong Kong HKD and CNY transfers over Faster Payment System (FPS) - `SEPA`: For EUR transfers to bank accounts in supported SEPA countries, addressed by IBAN - `FASTER_PAYMENT`: For GBP transfers to United Kingdom or Jersey bank accounts - `UAEFTS`: For AED transfers to the United Arab Emirates bank accounts - `UPI`: For INR transfers to Indian virtual payment addresses
  - `nickname` string, nullable: User-defined nickname or label for the account (optional). Helps identify the account in listings. Blank values are treated as omitted.
  - `account_holder_name` string, required: Full legal name of the account holder (individual or entity). This is the name registered with the bank for compliance and verification.
  - `currency` string, required: Currency of the bank account (e.g., USD, EUR, GBP). Must be supported by the selected network type.
  - `country_code` 'AND' | 'ARE' | 'AFG' | 'ATG' | 'AIA' | 'ALB' | 'ARM' | 'AGO' | 'ARG' | 'ASM' | 'AUT' | 'AUS' | 'ABW' | 'AZE' | 'BIH' | 'BRB' | 'BGD' | 'BEL' | 'BFA' | 'BGR' | 'BHR' | 'BDI' | 'BEN' | 'BLM' | 'BMU' | 'BRN' | 'BOL' | 'BES' | 'BRA' | 'BHS' | 'BTN' | 'BWA' | 'BLR' | 'BLZ' | 'CAN' | 'CCK' | 'COD' | 'CAF' | 'COG' | 'CHE' | 'CIV' | 'COK' | 'CHL' | 'CMR' | 'CHN' | 'COL' | 'CRI' | 'CUB' | 'CPV' | 'CUW' | 'CXR' | 'CYP' | 'CZE' | 'DEU' | 'DJI' | 'DNK' | 'DMA' | 'DOM' | 'DZA' | 'ECU' | 'EST' | 'EGY' | 'ESH' | 'ERI' | 'ESP' | 'ETH' | 'FIN' | 'FJI' | 'FLK' | 'FSM' | 'FRO' | 'FRA' | 'GAB' | 'GBR' | 'GRD' | 'GEO' | 'GUF' | 'GGY' | 'GHA' | 'GIB' | 'GRL' | 'GMB' | 'GIN' | 'GLP' | 'GNQ' | 'GRC' | 'SGS' | 'GTM' | 'GUM' | 'GNB' | 'GUY' | 'HKG' | 'HND' | 'HRV' | 'HTI' | 'HUN' | 'IDN' | 'IRL' | 'ISR' | 'IMN' | 'IND' | 'IOT' | 'IRQ' | 'IRN' | 'ISL' | 'ITA' | 'JEY' | 'JAM' | 'JOR' | 'JPN' | 'KEN' | 'KGZ' | 'KHM' | 'KIR' | 'COM' | 'KNA' | 'PRK' | 'KOR' | 'KWT' | 'CYM' | 'KAZ' | 'LAO' | 'LBN' | 'LCA' | 'LIE' | 'LKA' | 'LBR' | 'LSO' | 'LTU' | 'LUX' | 'LVA' | 'LBY' | 'MAR' | 'MCO' | 'MDA' | 'MNE' | 'MAF' | 'MDG' | 'MHL' | 'MKD' | 'MLI' | 'MMR' | 'MNG' | 'MAC' | 'MNP' | 'MTQ' | 'MRT' | 'MSR' | 'MLT' | 'MUS' | 'MDV' | 'MWI' | 'MEX' | 'MYS' | 'MOZ' | 'NAM' | 'NCL' | 'NER' | 'NFK' | 'NGA' | 'NIC' | 'NLD' | 'NOR' | 'NPL' | 'NRU' | 'NIU' | 'NZL' | 'OMN' | 'PAN' | 'PER' | 'PYF' | 'PNG' | 'PHL' | 'PAK' | 'POL' | 'SPM' | 'PCN' | 'PRI' | 'PSE' | 'PRT' | 'PLW' | 'PRY' | 'QAT' | 'REU' | 'ROU' | 'SRB' | 'RUS' | 'RWA' | 'SAU' | 'SLB' | 'SYC' | 'SDN' | 'SWE' | 'SGP' | 'SHN' | 'SVN' | 'SJM' | 'SVK' | 'SLE' | 'SMR' | 'SEN' | 'SOM' | 'SUR' | 'SSD' | 'STP' | 'SLV' | 'SXM' | 'SYR' | 'SWZ' | 'TCA' | 'TCD' | 'TGO' | 'THA' | 'TJK' | 'TKL' | 'TLS' | 'TKM' | 'TUN' | 'TON' | 'TUR' | 'TTO' | 'TUV' | 'TWN' | 'TZA' | 'UKR' | 'UGA' | 'USA' | 'URY' | 'UZB' | 'VAT' | 'VCT' | 'VEN' | 'VGB' | 'VIR' | 'VNM' | 'VUT' | 'WLF' | 'WSM' | 'XKX' | 'YEM' | 'MYT' | 'ZAF' | 'ZMB' | 'ZWE', required: ISO 3166-1 alpha-3 country codes.
  - `account_number` string, required: The bank account identifier. - For `US_FEDWIRE`, `US_ACH`, `US_RTP`, and `US_FEDNOW`: Standard bank account number - For `SWIFT`: Account number format depends on the bank country. Germany requires a valid 22-character DE IBAN; Mexico requires a valid 18-digit CLABE. Both include checksum validation. United Arab Emirates accounts in USD require a valid 23-character AE IBAN. - For `SPEI`: 18-digit CLABE - For `LOCAL_BANK_TRANSFER`: Local bank account number; India requires 9 to 18 ASCII digits and Japan requires exactly 7 ASCII digits, including leading zeros - For `CHATS`: Hong Kong bank account number - For `FPS`: Hong Kong branch code followed by the account number, totaling 9-16 digits - For `SEPA`: IBAN matching the bank country, without spaces or separators; letters are stored uppercase - For `FASTER_PAYMENT`: Exactly 8 ASCII digits, preserving leading zeros; no spaces or separators - For `UAEFTS`: A valid 23-character AE IBAN without spaces or separators - For `UPI`: VPA in name@handle format, 3 to 50 characters, without spaces
  - `institution_id` string, nullable: The primary institution routing identifier. - For `US_FEDWIRE`, `US_ACH`, `US_RTP`, and `US_FEDNOW`: 9-digit ABA routing number - For `SWIFT`: 8 or 11-character SWIFT/BIC code of the destination bank - For `SPEI`: not required; the bank code is derived from CLABE. Submitted values are ignored. - For `LOCAL_BANK_TRANSFER`: select the applicable canonical institution ID from the [Local Institution ID](https://developer.1money.com/docs/local-institution-id) guide based on the destination country and currency, then submit it exactly as documented - For `CHATS`: 8 or 11-character SWIFT/BIC code of the destination bank - For `FPS`: select the destination bank's three-digit Hong Kong clearing code from the [Local Institution ID](https://developer.1money.com/docs/local-institution-id) guide based on the destination currency, then submit it exactly as documented For `SEPA`, institution_id, institution_clearing_code, and intermediary_bank are ignored. For `UAEFTS`, the bank code is derived from the IBAN in account_number; institution_id is not used. For `FASTER_PAYMENT`, institution_id is the required 6-digit sort code, without spaces or separators; institution_clearing_code and intermediary_bank are ignored. This field is required for `LOCAL_BANK_TRANSFER`, `CHATS`, and `FPS`. For India `LOCAL_BANK_TRANSFER`, supply the 11-character IFSC instead of a catalog bank ID. For Singapore `LOCAL_BANK_TRANSFER` in SGD, supply the selected bank's four-digit ABS bank code. For Japan `LOCAL_BANK_TRANSFER` in JPY, supply the four-digit bank code and the three-digit branch code in `institution_clearing_code`, preserving leading zeros. For other `LOCAL_BANK_TRANSFER` destinations and `FPS`, do not derive or substitute an institution ID; use one of the canonical values listed in the guide. For `UPI`, institution_id, institution_clearing_code, and intermediary_bank are ignored.
  - `institution_name` string, nullable: Full legal name of the financial institution. For routing-code based networks and `CHATS`, it is resolved from `institution_id` when omitted. For `SEPA`, `FASTER_PAYMENT`, India `LOCAL_BANK_TRANSFER`, and `UPI`, this is an optional user-supplied bank name. Routing-code based networks and `CHATS` allow up to 80 characters; other networks allow up to 128. Blank values are treated as omitted. For `SPEI`, `UAEFTS`, `FPS`, and `LOCAL_BANK_TRANSFER` outside India, the bank name comes from the bank directory. Submitted values are ignored.
  - `institution_clearing_code` string, nullable: Additional local or regional routing code for `SWIFT`, required for certain countries. Required for Japan `LOCAL_BANK_TRANSFER` in JPY: exactly 3 ASCII digits representing the branch code (for example, `025`). Ignored for other payment networks and destinations.
  - `intermediary_bank` IntermediaryBank: Intermediary bank information for `SWIFT` external accounts
    - `institution_id` string, required: The intermediary institution identifier (SWIFT code or ABA routing number). For USD international wires: ABA number of the US correspondent bank that serves as intermediary. For non-USD wires: SWIFT code of the intermediary bank (if required by the payment network). Required when the destination bank does not have a direct relationship with the sending institution.

## Response `201`

External account created successfully - Returns the newly created account with assigned external_account_id

- ExternalAccountResponse: Response object containing complete external bank account information
  - `external_account_id` string, required: Unique identifier for the external account (UUID format). Use this ID for all subsequent operations (retrieve, delete, withdrawals).
  - `idempotency_key` string, required: HTTP `Idempotency-Key` header value. Stricter than other IDs: ≤64 ASCII chars per the common REST API convention.
  - `customer_id` string, required: Portfolio ID — also exposed as `customer_id` in OpenAPI. Identifies one individual application / portfolio row within an entity.
  - `status` 'PENDING' | 'APPROVED' | 'FAILED', required
  - `failure_reason` string, nullable: Customer-readable failure reason and next steps. Present only when status is FAILED.
  - `network` string, required: Public network identifier for bank, blockchain and internal transactions. Allowed values: - Bank: `US_ACH`, `US_FEDWIRE`, `US_RTP`, `US_FEDNOW`, `SWIFT`, `CUBIX`, `SPEI`, `PIX_TRANSFER`, `LOCAL_BANK_TRANSFER`, `CHATS`, `FPS`, `SEPA`, `FASTER_PAYMENT`, `UAEFTS`, `UPI`, `EREBOR_RAIL` - Blockchain: `ETHEREUM`, `POLYGON`, `ARBITRUM`, `AVALANCHE`, `BASE`, `BNBCHAIN`, `SOLANA`, `TRON`, `ONE_MONEY`, `BITCOIN` - Internal: `INTERNAL` Availability depends on the asset and customer account configuration.
  - `nickname` string, nullable, required: User-defined nickname or label for the account (optional). Helps identify the account in listings.
  - `account_holder_name` string, required: Full legal name of the account holder (individual or entity). This is the name registered with the bank for compliance and verification.
  - `currency` string, required: - Stablecoin assets: USDC, USDT, PYUSD, RLUSD, USDG, USDP, EURC, MXNB, 1USD(1USD/USDC conversion only, deposit/withdrawal not supported) - Digital assets: BTC, ETH, SOL - Fiat currencies: USD, MXN
  - `country_code` 'AND' | 'ARE' | 'AFG' | 'ATG' | 'AIA' | 'ALB' | 'ARM' | 'AGO' | 'ARG' | 'ASM' | 'AUT' | 'AUS' | 'ABW' | 'AZE' | 'BIH' | 'BRB' | 'BGD' | 'BEL' | 'BFA' | 'BGR' | 'BHR' | 'BDI' | 'BEN' | 'BLM' | 'BMU' | 'BRN' | 'BOL' | 'BES' | 'BRA' | 'BHS' | 'BTN' | 'BWA' | 'BLR' | 'BLZ' | 'CAN' | 'CCK' | 'COD' | 'CAF' | 'COG' | 'CHE' | 'CIV' | 'COK' | 'CHL' | 'CMR' | 'CHN' | 'COL' | 'CRI' | 'CUB' | 'CPV' | 'CUW' | 'CXR' | 'CYP' | 'CZE' | 'DEU' | 'DJI' | 'DNK' | 'DMA' | 'DOM' | 'DZA' | 'ECU' | 'EST' | 'EGY' | 'ESH' | 'ERI' | 'ESP' | 'ETH' | 'FIN' | 'FJI' | 'FLK' | 'FSM' | 'FRO' | 'FRA' | 'GAB' | 'GBR' | 'GRD' | 'GEO' | 'GUF' | 'GGY' | 'GHA' | 'GIB' | 'GRL' | 'GMB' | 'GIN' | 'GLP' | 'GNQ' | 'GRC' | 'SGS' | 'GTM' | 'GUM' | 'GNB' | 'GUY' | 'HKG' | 'HND' | 'HRV' | 'HTI' | 'HUN' | 'IDN' | 'IRL' | 'ISR' | 'IMN' | 'IND' | 'IOT' | 'IRQ' | 'IRN' | 'ISL' | 'ITA' | 'JEY' | 'JAM' | 'JOR' | 'JPN' | 'KEN' | 'KGZ' | 'KHM' | 'KIR' | 'COM' | 'KNA' | 'PRK' | 'KOR' | 'KWT' | 'CYM' | 'KAZ' | 'LAO' | 'LBN' | 'LCA' | 'LIE' | 'LKA' | 'LBR' | 'LSO' | 'LTU' | 'LUX' | 'LVA' | 'LBY' | 'MAR' | 'MCO' | 'MDA' | 'MNE' | 'MAF' | 'MDG' | 'MHL' | 'MKD' | 'MLI' | 'MMR' | 'MNG' | 'MAC' | 'MNP' | 'MTQ' | 'MRT' | 'MSR' | 'MLT' | 'MUS' | 'MDV' | 'MWI' | 'MEX' | 'MYS' | 'MOZ' | 'NAM' | 'NCL' | 'NER' | 'NFK' | 'NGA' | 'NIC' | 'NLD' | 'NOR' | 'NPL' | 'NRU' | 'NIU' | 'NZL' | 'OMN' | 'PAN' | 'PER' | 'PYF' | 'PNG' | 'PHL' | 'PAK' | 'POL' | 'SPM' | 'PCN' | 'PRI' | 'PSE' | 'PRT' | 'PLW' | 'PRY' | 'QAT' | 'REU' | 'ROU' | 'SRB' | 'RUS' | 'RWA' | 'SAU' | 'SLB' | 'SYC' | 'SDN' | 'SWE' | 'SGP' | 'SHN' | 'SVN' | 'SJM' | 'SVK' | 'SLE' | 'SMR' | 'SEN' | 'SOM' | 'SUR' | 'SSD' | 'STP' | 'SLV' | 'SXM' | 'SYR' | 'SWZ' | 'TCA' | 'TCD' | 'TGO' | 'THA' | 'TJK' | 'TKL' | 'TLS' | 'TKM' | 'TUN' | 'TON' | 'TUR' | 'TTO' | 'TUV' | 'TWN' | 'TZA' | 'UKR' | 'UGA' | 'USA' | 'URY' | 'UZB' | 'VAT' | 'VCT' | 'VEN' | 'VGB' | 'VIR' | 'VNM' | 'VUT' | 'WLF' | 'WSM' | 'XKX' | 'YEM' | 'MYT' | 'ZAF' | 'ZMB' | 'ZWE', required: ISO 3166-1 alpha-3 country codes.
  - `account_number` string, required
  - `institution_id` string: Routing identifier of the destination bank. For local bank transfers, this is the bank code selected from the supported institution list. Absent for SPEI, where the CLABE in `account_number` already encodes the bank.
  - `institution_name` string, required: Full legal name of the bank institution.
  - `institution_clearing_code` string, nullable, required: Additional local or regional routing codes required by specific payment networks or countries. Examples: Sort codes (UK), BSB numbers (Australia), transit numbers (Canada). For Japan LOCAL_BANK_TRANSFER in JPY, this is the three-digit branch code.
  - `intermediary_bank` IntermediaryBank: Intermediary bank information for `SWIFT` external accounts
    - `institution_id` string, required: The intermediary institution identifier (SWIFT code or ABA routing number). For USD international wires: ABA number of the US correspondent bank that serves as intermediary. For non-USD wires: SWIFT code of the intermediary bank (if required by the payment network). Required when the destination bank does not have a direct relationship with the sending institution.
  - `reference_code` string, nullable, required: Reference code for wire transfers (optional). A unique identifier that should be included in wire transfer memos to help identify and reconcile incoming payments.
  - `created_at` string, required
  - `modified_at` string, required
  - `recipient` RecipientResponse: Recipient response object
    - `recipient_id` string, required: Counterparty ID. Empty values are still allowed for legacy DB columns where an empty cpid means the record is not tied to a recipient.
    - `customer_id` string, required: Portfolio ID — also exposed as `customer_id` in OpenAPI. Identifies one individual application / portfolio row within an entity.
    - `business_type` string, required: Recipient type: INDIVIDUAL or COMPANY
    - `full_name` string, required: Full name computed from name fields
    - `nickname` string, nullable: User-defined nickname (optional)
    - `email` string, nullable: Email address (optional)
    - `relationship` string, nullable: Relationship to the customer (optional)
    - `status` string, required: Recipient status. Possible values: success, pending_review, blocked
    - `address` AddressDetails
      - `full_address` string, required
      - `country_code` string, required: ISO 3166-1 alpha-3 three-letter country codes in upper case.
      - `address_line1` string, required: The street number for this address (the whitespaces are trimmed from field).
      - `address_line2` string, nullable: An additional address line for this address (the whitespaces are trimmed from field).
      - `city` string, required: A city for this address (the whitespaces are trimmed from field).
      - `region` string, nullable: The address's region. This is state for U.S., province for Canada (the whitespaces are trimmed from field).
      - `postal_code` string, required: A postal code for this address (the whitespaces are trimmed from field).
    - `action_required` ActionRequired
      - `type` string, required
      - `case_id` string, required: RFI case business ID.
      - `action` string, required
    - `created_at` string, date-time, required: Created timestamp
    - `modified_at` string, date-time, required: Last modified timestamp

## Other responses

- `400`: Validation failed - Invalid request body (missing required fields, invalid country code format, nickname too long, invalid routing number format, unsupported currency for network type, or other validation errors)
- `401`: Authentication failed - Invalid or missing API key in request header
- `405`: Method not allowed - The HTTP method used is not supported for this endpoint
- `409`: Conflict - An account with the same idempotency key already exists, or duplicate account with identical banking details detected
- `422`: Unprocessable Entity - Invalid enum value (e.g., unsupported network or asset name)
- `500`: Internal server error - Unexpected system error occurred during account creation or bank validation

## Changes

- **2026-11-03** `d213edbaccb6`: 5 breaking, 6 warning, 8 info
  - the `account_number` request property's minLength was increased from `0` to `1`
  - the response property `institution_clearing_code` became nullable for the status `201`
  - the response property `nickname` became nullable for the status `201`
  - the response property `reference_code` became nullable for the status `201`
  - …15 more

[Operation history](https://skmtc.dev/1money/apis/1money-openapi/changes/v1/customers/:customer_id/external-accounts/post.md)

---

[API](https://skmtc.dev/1money/apis/1money-openapi.md) - [All operations](https://skmtc.dev/1money/apis/1money-openapi/llms.txt) - [OpenAPI document](https://skmtc.dev/1money/apis/1money-openapi/revisions/d213edbaccb6?raw)
