---
title: "Register an external fiat account"
method: POST
path: "/v0/customers/{id}/accounts/fiat/external"
tags: ["Accounts"]
---

# Register an external fiat account

`POST /v0/customers/{id}/accounts/fiat/external`

## Request

- Base URL: `https://orchestration.seismic.systems/api`
- URL: `https://orchestration.seismic.systems/api/v0/customers/{id}/accounts/fiat/external`
- Auth: API key in header `Api-Key`

Register a bank account the customer already holds. The expected `details` shape is determined by currency, bank country, and the `rails` named; name `swift` for a USD SWIFT account at a US bank. `GET /v0/accounts/fiat/external/requirements` returns the live per-corridor recipe. The account materializes synchronously.

## Path parameters

- `id` string, uuid, required

## Headers

- `Idempotency-Key` string, nullable

## Request body

- CreateExternalFiatAccountRequest: Body of `POST /v0/customers/:id/accounts/fiat/external` — caller already has the bank account and is registering it. The `details` block carries the bank-specific identifiers; its expected shape is determined by `currency`, bank country, and the `rails` named.
  - `account_holder` AccountHolderInput, required: Holder identity attached to an external account create. Third-party destinations are first-class — this is the legal owner of the destination, which may differ from the customer. On external fiat it is required; on external crypto it is optional and defaults to the customer's own KYB/KYC profile when omitted.
    - `address` AccountHolderAddress, required: Address attached to an `AccountHolderInput`. `country` is always required; some corridors additionally require `line1` (and beyond) at create time — `GET /v0/accounts/fiat/external/requirements` returns the per-corridor list. Where the holder's country has no states or regions, or no postal codes, omit that field even when the list requires it.
      - `city` string, nullable
      - `country` string, required: ISO-3166-1 alpha-2 country code (`US`, `GB`, …). Required.
      - `line1` string, nullable
      - `line2` string, nullable
      - `postal_code` string, nullable
      - `state` string, nullable
    - `business_name` string, nullable: Required when `type=business`. Ignored for individuals.
    - `date_of_birth` string, nullable: Date of birth (`YYYY-MM-DD`), individuals only. Optional: no corridor currently requires it. If the requirements response for the selected corridor and rail ever marks `account_holder.date_of_birth` as required, supply it here; the create endpoint does not fill it from the customer's KYC profile. Ignored for businesses.
    - `email` string, nullable
    - `first_name` string, nullable: Required when `type=individual`. Ignored for businesses.
    - `industry` string, nullable: The six-digit NAICS code of the industry the holder business is in, from `GET /v0/industries/account-holder`; a bank account rejects any other code, while a wallet takes any code `GET /v0/industries` lists. Business holders only; ignored for individuals. Required on a third-party business's USD bank account: a create without it is refused with `422`. A first-party account falls back to the industry on the customer's KYB profile when omitted; without either, it can be registered for fewer settlement options, and one with no other option is created but not registered for settlement until it is added through `PATCH /v0/customers/{id}/accounts/fiat/{account_id}/holder`.
    - `is_third_party` boolean: `true` when the destination account belongs to someone other than the customer (vendor, employer, counterparty), `false` when the customer owns it. Required on an external bank account: a create without it is refused with `400`. Optional on a wallet, where it defaults to `false`.
    - `last_name` string, nullable
    - `relationship` 'PART' | 'CHIL' | 'SPOU' | 'CUST' | 'EMPL' | 'EXSP' | 'FREN' | 'CONT' | 'LAND' | 'OTHR' | 'PARE' | 'RELA' | 'SELF' | 'SIBL' | 'VEND' | 'BRAN' | 'FRAN' | 'HOLD' | 'SUBS' | 'SUPP': Who an external account's holder is to the customer, as a four-letter code. The set accepted depends on the holder's `type`.
    - `type` 'individual' | 'business', required
  - `currency` union, required: Reference to a currency or rail by either its stable numeric id or its human-readable name (`"USDC"`, `"ethereum"`). Used on the create-account request bodies for `currency`, for the external fiat `rails`, and for a crypto account's `rail`.
    - integer
    - string
  - `details` union, required
    - CreateUsBankFiatDetails
      - `account_number` string, required
      - `account_type` 'CHECKING' | 'SAVINGS': Type of a US deposit account.
      - `ach_routing_number` string, nullable: ABA routing number the bank receives ACH credits on, where that differs from the one it receives wires on. Supply it instead of `routing_number`, not alongside it.
      - `bank_address` Address, required
        - `city` string, nullable
        - `line1` string, nullable
        - `line2` string, nullable
        - `postal_code` string, nullable
        - `state` string, nullable
        - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
        - `transliterated_address` AddressLines
          - `city` string, nullable
          - `line1` string, nullable
          - `line2` string, nullable
          - `postal_code` string, nullable
          - `state` string, nullable
      - `bank_name` string, nullable: Bank display name. Optional — settlement on this corridor routes off `routing_number`, so the supplied value is for the UI / statements only. Seismic fills it in for virtual accounts.
      - `bic` string, nullable: BIC / SWIFT code. Required when the selected wire registration recipe requests it. Must be ISO 9362 format (8 or 11 characters).
      - `fedwire_routing_number` string, nullable: ABA routing number the bank receives Fedwire credits on, where that differs from the one it receives ACH credits on. Supply it instead of `routing_number`, not alongside it.
      - `id_number` string, nullable
      - `id_type` string, nullable
      - `phone` string, nullable
      - `registration_number` string, nullable
      - `registration_type` string, nullable
      - `routing_number` string, nullable: ABA routing number that serves every rail named in `rails`. Send this on its own where the bank receives all of them on one number, which is the common case. Where it publishes a separate number per rail, send `ach_routing_number` and `fedwire_routing_number` instead — supplying this field *together with* either of them is rejected, because which number serves which rail would then be ours to guess.
      - `tax_number` string, nullable: The holder's tax identification number in their country of residence (for example a CPF for a holder in Brazil). Some routes require it for holders in certain countries — `GET /v0/accounts/fiat/external/requirements` lists which under `required_when`.
    - CreateUkFiatDetails
      - `account_number` string, required
      - `bank_address` Address, required
        - `city` string, nullable
        - `line1` string, nullable
        - `line2` string, nullable
        - `postal_code` string, nullable
        - `state` string, nullable
        - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
        - `transliterated_address` AddressLines
          - `city` string, nullable
          - `line1` string, nullable
          - `line2` string, nullable
          - `postal_code` string, nullable
          - `state` string, nullable
      - `bank_name` string, nullable: Bank display name. Optional — settlement routes off `sort_code`; included for UI / statement context. Seismic fills it in for virtual accounts.
      - `iban` string, nullable: Optional cross-border IBAN — the SWIFT-routable form of the same `sort_code`/`account_number` pair. Supply it when the account will receive non-UK-originated payments.
      - `sort_code` string, required
    - CreateIbanFiatDetails
      - `account_number` string, required: IBAN string.
      - `bank_address` Address, required
        - `city` string, nullable
        - `line1` string, nullable
        - `line2` string, nullable
        - `postal_code` string, nullable
        - `state` string, nullable
        - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
        - `transliterated_address` AddressLines
          - `city` string, nullable
          - `line1` string, nullable
          - `line2` string, nullable
          - `postal_code` string, nullable
          - `state` string, nullable
      - `bank_code` string, nullable: Domestic bank code (e.g. Swedish clearing number). Some routes on IBAN corridors require it.
      - `bank_name` string, nullable: Bank display name. Optional — settlement on this corridor routes off the IBAN's embedded bank code; included for UI / statement context. Seismic fills it in for virtual accounts.
      - `bic` string, nullable: Optional BIC / SWIFT code. SEPA-only payments don't need it; non-SEPA cross-border does.
      - `id_number` string, nullable: Holder government ID number. Individuals only. Some routes on IBAN corridors require it.
      - `id_type` string, nullable: Kind of ID `id_number` carries. Individuals only; the requirements endpoint lists the accepted values.
      - `phone` string, nullable: Holder contact phone. Some routes on IBAN corridors (e.g. AED) require it — `GET /v0/accounts/fiat/external/requirements` returns the live recipe.
      - `registration_number` string, nullable: Business registration number. Businesses only. Some routes on IBAN corridors require it.
      - `registration_type` string, nullable: Kind of registration `registration_number` carries. Businesses only; the requirements endpoint lists the accepted values.
    - CreateSwiftFiatDetails
      - `account_number` string, required: Destination account number reachable via SWIFT — an IBAN or a domestic account string. Banks in IBAN countries (AE, SA, TR, and most of Europe) require the IBAN form. Loosely format-checked here; Seismic validates the precise per-country form at registration.
      - `bank_address` Address, required
        - `city` string, nullable
        - `line1` string, nullable
        - `line2` string, nullable
        - `postal_code` string, nullable
        - `state` string, nullable
        - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
        - `transliterated_address` AddressLines
          - `city` string, nullable
          - `line1` string, nullable
          - `line2` string, nullable
          - `postal_code` string, nullable
          - `state` string, nullable
      - `bank_name` string, required: Bank display name. Required — SWIFT corridors that route USD off a published bank list (e.g. USD held in HK) validate it against that list.
      - `bic` string, required: ISO 9362 BIC / SWIFT code (8 or 11 chars). Required — it is the identifier SWIFT settlement routes off (unlike the IBAN shape, where the IBAN encodes the bank and the BIC is optional).
      - `ifsc` string, nullable: Indian Financial System Code of the recipient branch (`AAAA0NNNNNN`, e.g. `HDFC0001234`), for a bank in India. Some routes require it there.
      - `intermediary_bank` CreateIntermediaryBank: The correspondent (intermediary) bank a cross-border payout is routed through, on the way to the destination bank named by the enclosing detail block. Every identifier here belongs to the correspondent, never to the destination: a wire that quotes one bank's BIC under the other's name is a wire that bounces, which is why the two are separate blocks rather than sibling fields.
        - `account_number` string, nullable: The destination bank's account at the correspondent (8–34 uppercase alphanumeric), which a cover payment credits on the way through. An IBAN or a domestic account string.
        - `bic` string, nullable: The correspondent's own ISO 9362 BIC (8 or 11 chars) — not the destination bank's, which is the enclosing block's `bic`. Quoted where the correspondent is outside the US and so has no ABA.
        - `country` string, nullable: ISO-3166-1 alpha-2 country of the correspondent (`US`, `DE`, …). Not inferred from the other fields: a BIC's country letters name where the institution is registered, not where the branch that clears the wire sits.
        - `name` string, nullable: Display name, 2–100 chars. What the sending bank prints on the payment instruction, and what a compliance screen reads.
        - `routing_number` string, nullable: Nine-digit ABA of the correspondent, where it is a US bank — the recipient bank's US correspondent, not the recipient bank itself. Required for an individual account holder, optional for a business account holder. Replaces the deprecated top-level `routing_number`.
      - `phone` string, nullable: Holder contact phone. Some routes on this shape require it — `GET /v0/accounts/fiat/external/requirements` returns the live recipe.
      - `routing_number` string, nullable: Deprecated: send `intermediary_bank.routing_number` instead. ABA routing number of the recipient bank's US correspondent (intermediary) bank, the same nine digits as `intermediary_bank.routing_number`. Still accepted; supplying both with different values is rejected.
      - `swift_payment_code` string, nullable: Purpose-of-payment code for the payouts this account receives. Some routes require one for a bank in certain countries; the values accepted for the bank's country are the `options` on this field in `GET /v0/accounts/fiat/external/requirements`.
      - `tax_number` string, nullable: Holder tax identification number. Some routes on this shape require it.
    - CreateCnyFiatDetails
      - `account_number` string, required: Chinese domestic bank account number (alphanumeric).
      - `bank_address` Address, required
        - `city` string, nullable
        - `line1` string, nullable
        - `line2` string, nullable
        - `postal_code` string, nullable
        - `state` string, nullable
        - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
        - `transliterated_address` AddressLines
          - `city` string, nullable
          - `line1` string, nullable
          - `line2` string, nullable
          - `postal_code` string, nullable
          - `state` string, nullable
      - `bank_name` string, nullable: Bank display name. Optional — settlement routes off `cnaps_code`; included for UI / statement context. Seismic fills it in for virtual accounts.
      - `branch_name` string, nullable: Destination bank branch name, in Hanzi (Chinese characters). Businesses only. Some routes on this corridor require it — `GET /v0/accounts/fiat/external/requirements` returns the live recipe.
      - `cnaps_code` string, required: CNAPS code (China National Advanced Payment System) — the 12-digit bank-branch identifier that routes the transfer.
      - `id_number` string, required: Holder tax / government ID number (PRC resident ID card, tax number, …). Carried on the CNY detail block for a single CNY-shaped request body; settles against the account holder's compliance record downstream.
      - `id_type` string, nullable: Kind of ID `id_number` carries (e.g. Chinese Resident ID Card Number). Individuals only; the requirements endpoint lists the accepted values.
      - `registration_number` string, nullable: Business registration number (e.g. Unified Social Credit Code). Businesses only. Some routes on this corridor require it — `GET /v0/accounts/fiat/external/requirements` returns the live recipe.
      - `registration_type` string, nullable: Kind of registration `registration_number` carries. Businesses only; the requirements endpoint lists the accepted values.
    - CreateHkdFiatDetails
      - `account_number` string, required: Destination bank account number (digits only).
      - `bank_address` Address, required
        - `city` string, nullable
        - `line1` string, nullable
        - `line2` string, nullable
        - `postal_code` string, nullable
        - `state` string, nullable
        - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
        - `transliterated_address` AddressLines
          - `city` string, nullable
          - `line1` string, nullable
          - `line2` string, nullable
          - `postal_code` string, nullable
          - `state` string, nullable
      - `bank_name` string, nullable: Bank display name. Optional — routing for this corridor is keyed off `bic` since 2026-07-31; included for UI / statement context.
      - `bic` string, nullable: ISO 9362 BIC / SWIFT code of the destination bank — this corridor's routing identifier, required since 2026-07-31. `GET /v0/accounts/fiat/external/requirements` returns the live recipe.
      - `date_of_incorporation` string, nullable: Date the business was incorporated, as `YYYY-MM-DD`. Businesses only.
      - `registration_number` string, nullable: Business registration number (e.g. Certificate of Incorporation number). Businesses only. Some routes on this corridor require it — `GET /v0/accounts/fiat/external/requirements` returns the live recipe.
      - `registration_type` string, nullable: Kind of registration `registration_number` carries. Businesses only; the requirements endpoint lists the accepted values.
    - CreateSgdFiatDetails
      - `account_number` string, required: Destination bank account number (alphanumeric).
      - `bank_address` Address, required
        - `city` string, nullable
        - `line1` string, nullable
        - `line2` string, nullable
        - `postal_code` string, nullable
        - `state` string, nullable
        - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
        - `transliterated_address` AddressLines
          - `city` string, nullable
          - `line1` string, nullable
          - `line2` string, nullable
          - `postal_code` string, nullable
          - `state` string, nullable
      - `bank_name` string, required: Bank display name — routing for this corridor is keyed off the bank name rather than a numeric branch/routing code.
      - `id_number` string, nullable: Holder government ID number (NRIC, FIN, passport number, …). Individuals only. Some routes on this corridor require it — `GET /v0/accounts/fiat/external/requirements` returns the live recipe.
      - `id_type` string, nullable: Kind of ID `id_number` carries. Individuals only; the requirements endpoint lists the accepted values.
      - `phone` string, required: Holder contact phone. Required by this corridor; carried on the detail block so the whole request lands in one `details` block and settles against the account holder downstream.
      - `registration_number` string, nullable: Business registration number (e.g. Singapore UEN). Businesses only. Some routes on this corridor require it.
      - `registration_type` string, nullable: Kind of registration `registration_number` carries. Businesses only; the requirements endpoint lists the accepted values.
      - `relationship_to_debtor` 'PART' | 'CHIL' | 'SPOU' | 'CUST' | 'EMPL' | 'EXSP' | 'FREN' | 'CONT' | 'LAND' | 'OTHR' | 'PARE' | 'RELA' | 'SELF' | 'SIBL' | 'VEND' | 'BRAN' | 'FRAN' | 'HOLD' | 'SUBS' | 'SUPP': Who an external account's holder is to the customer, as a four-letter code. The set accepted depends on the holder's `type`.
    - CreateBrPixFiatDetails
      - `bank_address` Address, required
        - `city` string, nullable
        - `line1` string, nullable
        - `line2` string, nullable
        - `postal_code` string, nullable
        - `state` string, nullable
        - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
        - `transliterated_address` AddressLines
          - `city` string, nullable
          - `line1` string, nullable
          - `line2` string, nullable
          - `postal_code` string, nullable
          - `state` string, nullable
      - `pix_key` string, required: PIX key — format depends on `pix_key_type` (CPF 11 digits, CNPJ 14 digits, email, `+55…` phone, or an EVP UUID). BACEN's directory routes key → bank → account, so the key + kind is the whole identifier set.
      - `pix_key_type` 'cpf' | 'cnpj' | 'email' | 'phone' | 'evp', required: PIX key kind on the `br_pix` shape. Each kind implies a distinct key format: `cpf` (11 digits), `cnpj` (14 digits), `email`, `phone` (`+55` then 10–11 digits), or `evp` (a randomly assigned UUID).
    - CreateBrBankFiatDetails
      - `account_number` string, required: Account number, optionally with a trailing `-N` check digit.
      - `account_subtype` 'cc' | 'pp', required: TED account subtype on the `br_bank` shape. Transfers with the wrong account type are rejected by the receiving bank, so the destination's type must be supplied at registration.
      - `agency` string, required: Branch ("agência"): 4 digits, optionally with a trailing check digit.
      - `bank_address` Address, required
        - `city` string, nullable
        - `line1` string, nullable
        - `line2` string, nullable
        - `postal_code` string, nullable
        - `state` string, nullable
        - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
        - `transliterated_address` AddressLines
          - `city` string, nullable
          - `line1` string, nullable
          - `line2` string, nullable
          - `postal_code` string, nullable
          - `state` string, nullable
      - `bank_code` string, required: COMPE (3 digits) or ISPB (8 digits) bank identifier — either is accepted.
      - `bank_name` string, nullable: Bank display name. Optional — settlement routes off `bank_code`; included for UI / statement context.
      - `id_number` string, nullable: Holder government ID number. Individuals only. Some routes on this corridor require it.
      - `id_type` string, nullable: Kind of ID `id_number` carries (e.g. Tax Identification Number). Individuals only; the requirements endpoint lists the accepted values.
      - `phone` string, nullable: Holder contact phone. Some routes on this corridor require it — `GET /v0/accounts/fiat/external/requirements` returns the live recipe.
      - `registration_number` string, nullable: Business registration number (e.g. CNPJ). Businesses only. Some routes on this corridor require it.
      - `registration_type` string, nullable: Kind of registration `registration_number` carries. Businesses only; the requirements endpoint lists the accepted values.
      - `tax_number` string, nullable: Holder CPF (11 digits) or CNPJ (14 digits). Carried on the detail block for a single BR-shaped request body; settles against the account holder's compliance record downstream.
    - CreateMxClabeFiatDetails
      - `bank_address` Address, required
        - `city` string, nullable
        - `line1` string, nullable
        - `line2` string, nullable
        - `postal_code` string, nullable
        - `state` string, nullable
        - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
        - `transliterated_address` AddressLines
          - `city` string, nullable
          - `line1` string, nullable
          - `line2` string, nullable
          - `postal_code` string, nullable
          - `state` string, nullable
      - `bank_name` string, nullable: Bank display name. Optional — settlement routes off the CLABE's bank prefix; included for UI / statement context.
      - `clabe` string, required: 18-digit CLABE (3 bank + 3 branch + 11 account + 1 checksum) — the whole identifier set for SPEI.
      - `tax_number` string, nullable: Holder tax id (RFC), 10–18 chars. Some routes on this corridor require it — `GET /v0/accounts/fiat/external/requirements` returns the live recipe.
    - CreateInIfscFiatDetails
      - `account_number` string, required: Destination account number (9–20 digits; length is bank-specific).
      - `bank_address` Address, required
        - `city` string, nullable
        - `line1` string, nullable
        - `line2` string, nullable
        - `postal_code` string, nullable
        - `state` string, nullable
        - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
        - `transliterated_address` AddressLines
          - `city` string, nullable
          - `line1` string, nullable
          - `line2` string, nullable
          - `postal_code` string, nullable
          - `state` string, nullable
      - `bank_name` string, nullable: Bank display name. Optional — settlement routes off `ifsc`; included for UI / statement context.
      - `id_number` string, nullable: Holder government ID number. Individuals only. Some routes on this corridor require it.
      - `id_type` string, nullable: Kind of ID `id_number` carries. Individuals only; the requirements endpoint lists the accepted values.
      - `ifsc` string, required: IFSC: 4-letter bank code + `0` + 6-char branch code.
      - `phone` string, nullable: Holder contact phone. Some routes on this corridor require it — `GET /v0/accounts/fiat/external/requirements` returns the live recipe.
      - `registration_number` string, nullable: Business registration number. Businesses only. Some routes on this corridor require it.
      - `registration_type` string, nullable: Kind of registration `registration_number` carries. Businesses only; the requirements endpoint lists the accepted values.
      - `relationship_to_debtor` 'PART' | 'CHIL' | 'SPOU' | 'CUST' | 'EMPL' | 'EXSP' | 'FREN' | 'CONT' | 'LAND' | 'OTHR' | 'PARE' | 'RELA' | 'SELF' | 'SIBL' | 'VEND' | 'BRAN' | 'FRAN' | 'HOLD' | 'SUBS' | 'SUPP': Who an external account's holder is to the customer, as a four-letter code. The set accepted depends on the holder's `type`.
    - CreateArCbuFiatDetails
      - `alias` string, nullable: Optional registered alias for the same account (6–20 chars, letters/digits/dots/hyphens).
      - `bank_address` Address, required
        - `city` string, nullable
        - `line1` string, nullable
        - `line2` string, nullable
        - `postal_code` string, nullable
        - `state` string, nullable
        - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
        - `transliterated_address` AddressLines
          - `city` string, nullable
          - `line1` string, nullable
          - `line2` string, nullable
          - `postal_code` string, nullable
          - `state` string, nullable
      - `bank_name` string, required: Bank display name — required by this corridor.
      - `cbu` string, required: 22-digit CBU (8 bank+branch + 14 account+checksums).
      - `id_number` string, nullable: Holder government ID number. Individuals only. Some routes on this corridor require it — `GET /v0/accounts/fiat/external/requirements` returns the live recipe.
      - `id_type` string, nullable: Kind of ID `id_number` carries. Individuals only; the requirements endpoint lists the accepted values.
      - `phone` string, required: Holder contact phone. Required by this corridor; carried on the detail block and settles against the account holder downstream.
      - `registration_number` string, nullable: Business registration number. Businesses only. Some routes on this corridor require it.
      - `registration_type` string, nullable: Kind of registration `registration_number` carries. Businesses only; the requirements endpoint lists the accepted values.
      - `tax_number` string, required: Holder CUIT (11 digits). Required by this corridor; carried on the detail block and settles against the account holder downstream.
    - CreatePhBankFiatDetails
      - `account_number` string, required: Destination bank account number (digits only).
      - `bank_address` Address, required
        - `city` string, nullable
        - `line1` string, nullable
        - `line2` string, nullable
        - `postal_code` string, nullable
        - `state` string, nullable
        - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
        - `transliterated_address` AddressLines
          - `city` string, nullable
          - `line1` string, nullable
          - `line2` string, nullable
          - `postal_code` string, nullable
          - `state` string, nullable
      - `bank_name` string, required: Bank display name — routing for this corridor is keyed off the bank name rather than a numeric branch/routing code.
      - `date_of_incorporation` string, nullable: Date the business was incorporated, as `YYYY-MM-DD`. Businesses only.
      - `phone` string, nullable: Holder contact phone. Some routes on this corridor require it — `GET /v0/accounts/fiat/external/requirements` returns the live recipe.
      - `registration_number` string, nullable: Business registration number. Businesses only. Some routes on this corridor require it.
      - `registration_type` string, nullable: Kind of registration `registration_number` carries. Businesses only; the requirements endpoint lists the accepted values.
      - `relationship_to_debtor` 'PART' | 'CHIL' | 'SPOU' | 'CUST' | 'EMPL' | 'EXSP' | 'FREN' | 'CONT' | 'LAND' | 'OTHR' | 'PARE' | 'RELA' | 'SELF' | 'SIBL' | 'VEND' | 'BRAN' | 'FRAN' | 'HOLD' | 'SUBS' | 'SUPP': Who an external account's holder is to the customer, as a four-letter code. The set accepted depends on the holder's `type`.
    - CreatePkIbanFiatDetails
      - `bank_address` Address, required
        - `city` string, nullable
        - `line1` string, nullable
        - `line2` string, nullable
        - `postal_code` string, nullable
        - `state` string, nullable
        - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
        - `transliterated_address` AddressLines
          - `city` string, nullable
          - `line1` string, nullable
          - `line2` string, nullable
          - `postal_code` string, nullable
          - `state` string, nullable
      - `bank_name` string, nullable: Bank display name. Optional — settlement routes off the IBAN's embedded bank code; included for UI / statement context.
      - `iban` string, required: Pakistan IBAN (`PK` + 2 check digits + 4-letter bank code + 16-char account, a fixed 24 characters) — the whole identifier set. Seismic settles over Raast off the IBAN's embedded bank code.
    - CreateNgBankFiatDetails
      - `account_number` string, required: Destination NUBAN account number (10 digits).
      - `bank_address` Address, required
        - `city` string, nullable
        - `line1` string, nullable
        - `line2` string, nullable
        - `postal_code` string, nullable
        - `state` string, nullable
        - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
        - `transliterated_address` AddressLines
          - `city` string, nullable
          - `line1` string, nullable
          - `line2` string, nullable
          - `postal_code` string, nullable
          - `state` string, nullable
      - `bank_code` string, required: Numeric bank code (the NIBSS/CBN institution code) — the routing key. A NUBAN is only unique within a bank, so the code is required.
      - `bank_name` string, nullable: Bank display name. Optional — settlement routes off `bank_code`; included for UI / statement context.
    - CreateThbBankFiatDetails
      - `account_number` string, required: Destination bank account number (digits only).
      - `bank_address` Address, required
        - `city` string, nullable
        - `line1` string, nullable
        - `line2` string, nullable
        - `postal_code` string, nullable
        - `state` string, nullable
        - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
        - `transliterated_address` AddressLines
          - `city` string, nullable
          - `line1` string, nullable
          - `line2` string, nullable
          - `postal_code` string, nullable
          - `state` string, nullable
      - `bank_name` string, required: Bank display name — routing for this corridor is keyed off the bank name rather than a numeric branch/routing code.
    - CreateIdrBankFiatDetails
      - `account_number` string, required: Destination bank account number (digits only).
      - `bank_address` Address, required
        - `city` string, nullable
        - `line1` string, nullable
        - `line2` string, nullable
        - `postal_code` string, nullable
        - `state` string, nullable
        - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
        - `transliterated_address` AddressLines
          - `city` string, nullable
          - `line1` string, nullable
          - `line2` string, nullable
          - `postal_code` string, nullable
          - `state` string, nullable
      - `bank_name` string, required: Bank display name — routing for this corridor is keyed off the bank name rather than a numeric branch/routing code.
    - CreateCaEftFiatDetails
      - `account_number` string, required: Destination bank account number (7-12 digits).
      - `bank_address` Address, required
        - `city` string, nullable
        - `line1` string, nullable
        - `line2` string, nullable
        - `postal_code` string, nullable
        - `state` string, nullable
        - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
        - `transliterated_address` AddressLines
          - `city` string, nullable
          - `line1` string, nullable
          - `line2` string, nullable
          - `postal_code` string, nullable
          - `state` string, nullable
      - `bank_name` string, required: Destination bank, as named in the `details.bank_name` options of `GET /v0/accounts/fiat/external/requirements` for this corridor.
      - `institution_number` string, required: Institution number (3 digits) — identifies the bank.
      - `transit_number` string, required: Transit number (5 digits) — identifies the branch.
    - CreateJpZenginFiatDetails
      - `account_number` string, required: Seven-digit domestic account number, including leading zeros.
      - `bank_address` Address, required
        - `city` string, nullable
        - `line1` string, nullable
        - `line2` string, nullable
        - `postal_code` string, nullable
        - `state` string, nullable
        - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
        - `transliterated_address` AddressLines
          - `city` string, nullable
          - `line1` string, nullable
          - `line2` string, nullable
          - `postal_code` string, nullable
          - `state` string, nullable
      - `bank_code` string, required: Four-digit bank code, including leading zeros.
      - `bank_name` string, required
      - `branch_code` string, required: Three-digit branch code, including leading zeros.
      - `phone` string, required
    - CreateAuBsbFiatDetails
      - `account_number` string, required: Destination bank account number (6-10 digits).
      - `bank_address` Address, required
        - `city` string, nullable
        - `line1` string, nullable
        - `line2` string, nullable
        - `postal_code` string, nullable
        - `state` string, nullable
        - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
        - `transliterated_address` AddressLines
          - `city` string, nullable
          - `line1` string, nullable
          - `line2` string, nullable
          - `postal_code` string, nullable
          - `state` string, nullable
      - `bsb` string, required: BSB ("Bank-State-Branch", 6 digits) — names the bank and the branch together, and is the whole routing key for this corridor.
    - CreateCoBankFiatDetails: Colombian bank account, settled over ACH Colombia.
      - `account_number` string, required: Destination bank account number (6-20 digits).
      - `account_type` 'CHECKING' | 'SAVINGS', required: Account type on the `co_bank` shape. ACH Colombia credits a savings (ahorros) and a checking (corriente) account differently, so the destination's type must be supplied at registration.
      - `bank_address` Address, required
        - `city` string, nullable
        - `line1` string, nullable
        - `line2` string, nullable
        - `postal_code` string, nullable
        - `state` string, nullable
        - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
        - `transliterated_address` AddressLines
          - `city` string, nullable
          - `line1` string, nullable
          - `line2` string, nullable
          - `postal_code` string, nullable
          - `state` string, nullable
      - `bank_code` string, required: Bank code (1-8 digits) as published by the Colombian banking association; `GET /v0/accounts/fiat/external/requirements` lists the accepted values.
      - `id_number` string, required: The holder's identity document number (4-20 alphanumerics).
      - `id_type` 'CC' | 'CE' | 'NIT' | 'PASS' | 'PEP', required: The identity document a Colombian beneficiary is known by. The receiving bank matches the holder against it, so the kind travels with the number.
  - `rails` union: Settlement rails a destination bank account is registered for: a list of rail names, or a single one. Naming several rails registers the bank identifier supplied in `details` for each of them, which asserts that the one identifier receives all of them. Most US banks do receive both ACH and wire on one routing number; where a bank publishes a different number per rail, the `details` body carries one per rail instead. Names are matched case-insensitively and ignore surrounding whitespace. Repeats are collapsed, keeping first-named order. An empty list is not a selection and is rejected.
    - string
    - string[]

## Response `200`

Creation request plus the materialized account.

- CreateAccountResponse: Response body for every `POST /v0/customers/:id/accounts/{kind}/{origin}`. `request` always present; `account` populated synchronously for `origin: external` (caller supplied the details), `null` for `origin: virtual` until Seismic provisions the bank / wallet details.
  - `account` ApiAccount: Materialized partner-facing account. `kind` + `shape` together determine the layout of `details`: `kind=fiat,shape=us` → `details` is an `ApiUsBankFiatAccount`; `kind=crypto,shape=evm` → `details` is an `ApiCryptoAccount`. There is no discriminator key inside `details` — the wire form carries the shape-specific keys directly inside the `details` object. `currency` is singular for both kinds. `rails` is plural — fiat accounts can settle over multiple rails (ACH + wire + RTP for US, SEPA + SWIFT for EUR, …), and crypto accounts return a one-element array (one wallet address lives on one chain).
    - `account_holder` ApiAccountHolder: Owner of an account — the legal entity funds are sent to. On an external account that is whoever was named at create time, which may be a third party; on a virtual account it is always the customer.
      - `address` Address, required
        - `city` string, nullable
        - `line1` string, nullable
        - `line2` string, nullable
        - `postal_code` string, nullable
        - `state` string, nullable
        - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
        - `transliterated_address` AddressLines
          - `city` string, nullable
          - `line1` string, nullable
          - `line2` string, nullable
          - `postal_code` string, nullable
          - `state` string, nullable
      - `industry` string, nullable: The holder business's NAICS industry code, as the create request carried it. Absent when none was sent, and on crypto accounts.
      - `is_third_party` boolean: `true` when the account belongs to someone other than the customer (vendor, employer, counterparty). Always `false` on virtual accounts.
      - `name` string, nullable: The registered account holder's name. Virtual accounts use the recorded bank holder name when available, otherwise the customer's profile name. A missing first-party crypto holder name also falls back to that customer's profile; third-party names are never inferred.
      - `relationship` 'PART' | 'CHIL' | 'SPOU' | 'CUST' | 'EMPL' | 'EXSP' | 'FREN' | 'CONT' | 'LAND' | 'OTHR' | 'PARE' | 'RELA' | 'SELF' | 'SIBL' | 'VEND' | 'BRAN' | 'FRAN' | 'HOLD' | 'SUBS' | 'SUPP': Who an external account's holder is to the customer, as a four-letter code. The set accepted depends on the holder's `type`.
      - `type` 'individual' | 'business'
    - `asset_contract_address` string, nullable: Token contract pinned to a crypto account when it is created.
    - `asset_standard` string, nullable: Token interface used by a crypto account, such as `erc20` or `src20`.
    - `available_balance` string, nullable: Portion of `balance` spendable right now (total minus holds/pending). Absent when the distinction doesn't exist for the account.
    - `balance` string, nullable: Funds held in the account, in `currency` major units, as of `balance_as_of`. Seismic keeps this in sync as funds move (deposits, payments, account updates). Present on virtual accounts once the first sync lands; always absent on external accounts (their funds sit at the partner's own bank/wallet).
    - `balance_as_of` string, date-time, nullable: When Seismic last refreshed `balance`.
    - `can_enable_liquidation` boolean, nullable: Whether auto-liquidation can be enabled on this account via `PUT /v0/accounts/{id}/liquidation`. Present only on virtual bank accounts that don't auto-liquidate; where `false` (or absent), a liquidation target can only be attached when a virtual account is created.
    - `chain_id` integer, nullable: Numeric network identifier pinned when a crypto account is created.
    - `created_at` string, date-time, required
    - `currency` string, required
    - `customer_id` string, uuid, required
    - `details` union: Shape-specific detail block on `ApiAccount` / `ApiAccountCreationRequest`. There is no discriminator key — the variant is identified by its field set. `kind` on the parent gives callers an explicit fiat-vs-crypto discriminator without needing to inspect the body.
      - union: Per-shape fiat-side response payload. Mirrors the request-side `CreateFiatDetails`. There is no discriminator key: each variant's field set identifies it on the wire. New fields may be added to these payloads over time — deserialize tolerantly rather than rejecting unknown keys.
        - ApiJpZenginFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_code` string, required
          - `bank_name` string, required
          - `branch_code` string, required
          - `phone` string, required
        - ApiUsBankFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `account_type` 'PERSONAL_CHECKING' | 'PERSONAL_SAVINGS' | 'BUSINESS_CHECKING' | 'BUSINESS_SAVINGS': How an issuing bank labels a US deposit account on the payment instructions it publishes for it. Distinct from the `account_type` supplied when registering an external account, which names the deposit product. This is a label reported back, not a choice made: the account already exists and the bank prints one of these on the instructions a payer copies. The full holder × product grid, not only the labels seen so far: a bank that starts publishing a savings account has a variant waiting rather than a label that reads as absent. Anything outside the grid still reads as absent, and earns a variant here when it turns up.
          - `ach_routing_number` string, nullable: ABA routing number to quote for an ACH credit. Absent when the account does not settle over ACH.
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, nullable
          - `beneficiary_address` Address
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bic` string, nullable: BIC to quote for an inbound international wire, alongside `swift_account_number`. Absent when the account is reachable domestically only.
          - `fedwire_routing_number` string, nullable: ABA routing number to quote for a Fedwire credit. A bank that publishes a separate wire ABA reports it here; otherwise an account that settles over wire routes it off the same nine digits as `ach_routing_number` and reports those. Absent on an account that does not settle over wire.
          - `routing_number` string, required: The account's ABA routing number: the one quoted for an ACH credit when the account has one, otherwise the one quoted for a Fedwire credit. Always present, whatever the account settles over; the per-rail fields below say which credits each number may actually be quoted for.
          - `rtp_routing_number` string, nullable: ABA routing number to quote for an instant (RTP) credit, when the issuing bank publishes one distinct from `ach_routing_number`. Absent otherwise — including for every account that settles over ACH and wire only, which is the common case.
          - `swift_account_number` string, nullable: The account number a foreign sender quotes for an international wire. Frequently the same digits as `account_number` — most issuing banks receive both legs at one number, and this reports them rather than leaving the international route unaddressed. Not always: the payment can be received through a correspondent, in which case this is the number at that bank and can be an IBAN. Quote this one, not `account_number`. Absent on an account registered from supplied details that named no international number.
          - `swift_receiving_bank` ApiBankParty: A bank named on an account's payment instructions: who to address, and where they are.
            - `address` Address
              - …
            - `name` string, nullable
        - ApiUkFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, nullable
          - `iban` string, nullable
          - `sort_code` string, required
        - ApiIbanFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_code` string, nullable
          - `bank_name` string, nullable
          - `bic` string, nullable
          - `id_number` string, nullable
          - `id_type` string, nullable
          - `phone` string, nullable
          - `registration_number` string, nullable
          - `registration_type` string, nullable
        - ApiSwiftFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, required
          - `bic` string, required
          - `intermediary_bank` ApiIntermediaryBank: The correspondent (intermediary) bank a cross-border payout is routed through. Every identifier belongs to the correspondent, never to the destination bank the enclosing block describes.
            - `account_number` string, nullable: The destination bank's account at the correspondent, credited by a cover payment on the way through.
            - `bic` string, nullable: The correspondent's own BIC, quoted where it is outside the US and so has no ABA.
            - `country` string, nullable: ISO-3166-1 alpha-2 country of the correspondent.
            - `name` string, nullable
            - `routing_number` string, nullable
          - `phone` string, nullable
          - `routing_number` string, nullable: ABA routing number of the recipient bank's US correspondent (intermediary) bank. The same nine digits as `intermediary_bank.routing_number`, reported under both names.
          - `tax_number` string, nullable
        - ApiCnyFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, nullable
          - `branch_name` string, nullable
          - `cnaps_code` string, required
          - `id_number` string, required
          - `id_type` string, nullable
          - `registration_number` string, nullable
          - `registration_type` string, nullable
        - ApiBrPixFiatAccount
          - `account_holder_name` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `pix_key` string, required
          - `pix_key_type` 'cpf' | 'cnpj' | 'email' | 'phone' | 'evp', required: PIX key kind on the `br_pix` shape. Each kind implies a distinct key format: `cpf` (11 digits), `cnpj` (14 digits), `email`, `phone` (`+55` then 10–11 digits), or `evp` (a randomly assigned UUID).
        - ApiBrBankFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `account_subtype` 'cc' | 'pp', required: TED account subtype on the `br_bank` shape. Transfers with the wrong account type are rejected by the receiving bank, so the destination's type must be supplied at registration.
          - `agency` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_code` string, required
          - `bank_name` string, nullable
          - `id_number` string, nullable
          - `id_type` string, nullable
          - `phone` string, nullable
          - `registration_number` string, nullable
          - `registration_type` string, nullable
          - `tax_number` string, nullable
        - ApiMxClabeFiatAccount
          - `account_holder_name` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, nullable
          - `clabe` string, required
          - `tax_number` string, nullable
        - ApiInIfscFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, nullable
          - `id_number` string, nullable
          - `id_type` string, nullable
          - `ifsc` string, required
          - `phone` string, nullable
          - `registration_number` string, nullable
          - `registration_type` string, nullable
          - `relationship_to_debtor` 'PART' | 'CHIL' | 'SPOU' | 'CUST' | 'EMPL' | 'EXSP' | 'FREN' | 'CONT' | 'LAND' | 'OTHR' | 'PARE' | 'RELA' | 'SELF' | 'SIBL' | 'VEND' | 'BRAN' | 'FRAN' | 'HOLD' | 'SUBS' | 'SUPP': Who an external account's holder is to the customer, as a four-letter code. The set accepted depends on the holder's `type`.
        - ApiArCbuFiatAccount
          - `account_holder_name` string, required
          - `alias` string, nullable
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, required
          - `cbu` string, required
          - `id_number` string, nullable
          - `id_type` string, nullable
          - `phone` string, required
          - `registration_number` string, nullable
          - `registration_type` string, nullable
          - `tax_number` string, required
        - ApiHkdFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, nullable: Bank display name; absent when the account was registered without one.
          - `bic` string, nullable: ISO 9362 BIC / SWIFT code of the destination bank.
          - `date_of_incorporation` string, nullable
          - `registration_number` string, nullable
          - `registration_type` string, nullable
        - ApiSgdFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, required
          - `id_number` string, nullable
          - `id_type` string, nullable
          - `phone` string, required
          - `registration_number` string, nullable
          - `registration_type` string, nullable
          - `relationship_to_debtor` 'PART' | 'CHIL' | 'SPOU' | 'CUST' | 'EMPL' | 'EXSP' | 'FREN' | 'CONT' | 'LAND' | 'OTHR' | 'PARE' | 'RELA' | 'SELF' | 'SIBL' | 'VEND' | 'BRAN' | 'FRAN' | 'HOLD' | 'SUBS' | 'SUPP': Who an external account's holder is to the customer, as a four-letter code. The set accepted depends on the holder's `type`.
        - ApiPhBankFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, required
          - `date_of_incorporation` string, nullable
          - `phone` string, nullable
          - `registration_number` string, nullable
          - `registration_type` string, nullable
          - `relationship_to_debtor` 'PART' | 'CHIL' | 'SPOU' | 'CUST' | 'EMPL' | 'EXSP' | 'FREN' | 'CONT' | 'LAND' | 'OTHR' | 'PARE' | 'RELA' | 'SELF' | 'SIBL' | 'VEND' | 'BRAN' | 'FRAN' | 'HOLD' | 'SUBS' | 'SUPP': Who an external account's holder is to the customer, as a four-letter code. The set accepted depends on the holder's `type`.
        - ApiPkIbanFiatAccount
          - `account_holder_name` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, nullable
          - `iban` string, required
        - ApiNgBankFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_code` string, required
          - `bank_name` string, nullable
        - ApiThbBankFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, required
        - ApiIdrBankFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, required
        - ApiCaEftFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, required
          - `institution_number` string, required
          - `transit_number` string, required
        - ApiAuBsbFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bsb` string, required: BSB ("Bank-State-Branch", 6 digits) — names the bank and the branch together.
        - ApiCoBankFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `account_type` 'CHECKING' | 'SAVINGS', required: Account type on the `co_bank` shape. ACH Colombia credits a savings (ahorros) and a checking (corriente) account differently, so the destination's type must be supplied at registration.
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_code` string, required: Bank code as published by the Colombian banking association.
          - `id_number` string, required
          - `id_type` 'CC' | 'CE' | 'NIT' | 'PASS' | 'PEP', required: The identity document a Colombian beneficiary is known by. The receiving bank matches the holder against it, so the kind travels with the number.
      - ApiCryptoAccount: Wire view of a crypto account's per-shape details. `address` is optional because a crypto account still being set up has no on-chain address yet. It is omitted from the wire response until the address is assigned.
        - `address` string, nullable
    - `developer_fee_supported` boolean, nullable: Whether `liquidation.developer_fee_bps` is accepted on this account, when enabling or retargeting auto-liquidation. Present only on virtual bank accounts; absent while the account is still provisioning.
    - `id` string, uuid, required
    - `kind` 'fiat' | 'crypto', required: Top-level kind of the account — fiat vs crypto. Carried explicitly on `ApiAccount` and `ApiAccountCreationRequest` so callers can branch without parsing `shape` (and because `details` is an untagged enum that won't help them dispatch).
    - `liquidation` ApiLiquidation: Auto-liquidation destination surfaced on an `ApiAccount`. Names the crypto account incoming fiat is auto-converted and settled to.
      - `account_id` string, uuid, required: The crypto account this account's incoming fiat is auto-converted and settled to.
      - `address` string, required
      - `can_turn_off` boolean: Whether auto-liquidation on this account can be turned off via `DELETE /v0/accounts/{id}/liquidation`. Where `false`, the configuration set at creation stays in place.
      - `currency` string, required
      - `developer_fee_bps` integer, nullable: The developer fee in basis points (100 = 1%) Seismic applies to funds auto-converted through this account, as set on creation or via `PUT /v0/accounts/{id}/liquidation`. Absent when no fee is configured.
    - `liquidation_can_turn_off` boolean, nullable: Whether auto-liquidation on this account, once on, can be turned off via `DELETE /v0/accounts/{id}/liquidation`. Present only on virtual bank accounts; absent while the account is still provisioning.
    - `origin` 'external' | 'virtual', required
    - `rails` string[], required
    - `shape` union, required: The shape of an account — fiat-side or crypto-side. Wire form is a flat string (`"us"`, `"uk"`, `"iban"`, `"evm"`, `"sol"`, …) — serde untagged picks the inner enum whose variant set contains the incoming token. Disjoint variant sets between `FiatShape` and `CryptoShape` make the disambiguation unambiguous.
      - 'us' | 'uk' | 'iban' | 'swift' | 'br_pix' | 'br_bank' | 'mx_clabe' | 'in_ifsc' | 'au_bsb' | 'ca_eft' | 'jp_zengin' | 'ar_cbu' | 'co_bank' | 'cl_bank' | 'pe_cci' | 'cn_cnaps' | 'hk_fps' | 'sg_fast' | 'ph_bank' | 'pk_iban' | 'ng_bank' | 'thb_bank' | 'idr_bank': Family of bank identifiers a fiat account uses — determines the layout of its `details` block. Some variants are declared ahead of their corridor opening; creates for those are rejected today.
      - 'evm' | 'sol' | 'tron' | 'btc': The VM family that determines a crypto account's address format. Unlike `FiatShape` where shape ≈ country, crypto shape is keyed on the cryptographic primitive: one EVM key produces the same address on every EVM chain, so a single shape spans chains — the chains an account transacts on are listed in its `rails` instead.
    - `status` 'pending' | 'active' | 'failed' | 'closed' | 'paused', required: Lifecycle a partner-visible account can be in. `pending` and `failed` occur only for crypto accounts whose setup is still running or failed; every other account is `active` until closed. `paused` is a reversible hold on a fiat account whose holder's verification is paused: it clears on unpause.
    - `updated_at` string, date-time, required
  - `request` ApiAccountCreationRequest, required: An account creation request, fiat or crypto. Unlike `ApiAccount`, `details` is *optional* here — a pending virtual creation request legitimately has no details yet (Seismic hasn't finished provisioning the account). For `origin: "external"`, `details` is always populated (caller supplied the bank / wallet info).
    - `account_id` string, uuid, nullable
    - `created_at` string, date-time, required
    - `currency` string, required
    - `customer_id` string, uuid, required
    - `details` union: Shape-specific detail block on `ApiAccount` / `ApiAccountCreationRequest`. There is no discriminator key — the variant is identified by its field set. `kind` on the parent gives callers an explicit fiat-vs-crypto discriminator without needing to inspect the body.
      - union: Per-shape fiat-side response payload. Mirrors the request-side `CreateFiatDetails`. There is no discriminator key: each variant's field set identifies it on the wire. New fields may be added to these payloads over time — deserialize tolerantly rather than rejecting unknown keys.
        - ApiJpZenginFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_code` string, required
          - `bank_name` string, required
          - `branch_code` string, required
          - `phone` string, required
        - ApiUsBankFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `account_type` 'PERSONAL_CHECKING' | 'PERSONAL_SAVINGS' | 'BUSINESS_CHECKING' | 'BUSINESS_SAVINGS': How an issuing bank labels a US deposit account on the payment instructions it publishes for it. Distinct from the `account_type` supplied when registering an external account, which names the deposit product. This is a label reported back, not a choice made: the account already exists and the bank prints one of these on the instructions a payer copies. The full holder × product grid, not only the labels seen so far: a bank that starts publishing a savings account has a variant waiting rather than a label that reads as absent. Anything outside the grid still reads as absent, and earns a variant here when it turns up.
          - `ach_routing_number` string, nullable: ABA routing number to quote for an ACH credit. Absent when the account does not settle over ACH.
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, nullable
          - `beneficiary_address` Address
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bic` string, nullable: BIC to quote for an inbound international wire, alongside `swift_account_number`. Absent when the account is reachable domestically only.
          - `fedwire_routing_number` string, nullable: ABA routing number to quote for a Fedwire credit. A bank that publishes a separate wire ABA reports it here; otherwise an account that settles over wire routes it off the same nine digits as `ach_routing_number` and reports those. Absent on an account that does not settle over wire.
          - `routing_number` string, required: The account's ABA routing number: the one quoted for an ACH credit when the account has one, otherwise the one quoted for a Fedwire credit. Always present, whatever the account settles over; the per-rail fields below say which credits each number may actually be quoted for.
          - `rtp_routing_number` string, nullable: ABA routing number to quote for an instant (RTP) credit, when the issuing bank publishes one distinct from `ach_routing_number`. Absent otherwise — including for every account that settles over ACH and wire only, which is the common case.
          - `swift_account_number` string, nullable: The account number a foreign sender quotes for an international wire. Frequently the same digits as `account_number` — most issuing banks receive both legs at one number, and this reports them rather than leaving the international route unaddressed. Not always: the payment can be received through a correspondent, in which case this is the number at that bank and can be an IBAN. Quote this one, not `account_number`. Absent on an account registered from supplied details that named no international number.
          - `swift_receiving_bank` ApiBankParty: A bank named on an account's payment instructions: who to address, and where they are.
            - `address` Address
              - …
            - `name` string, nullable
        - ApiUkFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, nullable
          - `iban` string, nullable
          - `sort_code` string, required
        - ApiIbanFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_code` string, nullable
          - `bank_name` string, nullable
          - `bic` string, nullable
          - `id_number` string, nullable
          - `id_type` string, nullable
          - `phone` string, nullable
          - `registration_number` string, nullable
          - `registration_type` string, nullable
        - ApiSwiftFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, required
          - `bic` string, required
          - `intermediary_bank` ApiIntermediaryBank: The correspondent (intermediary) bank a cross-border payout is routed through. Every identifier belongs to the correspondent, never to the destination bank the enclosing block describes.
            - `account_number` string, nullable: The destination bank's account at the correspondent, credited by a cover payment on the way through.
            - `bic` string, nullable: The correspondent's own BIC, quoted where it is outside the US and so has no ABA.
            - `country` string, nullable: ISO-3166-1 alpha-2 country of the correspondent.
            - `name` string, nullable
            - `routing_number` string, nullable
          - `phone` string, nullable
          - `routing_number` string, nullable: ABA routing number of the recipient bank's US correspondent (intermediary) bank. The same nine digits as `intermediary_bank.routing_number`, reported under both names.
          - `tax_number` string, nullable
        - ApiCnyFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, nullable
          - `branch_name` string, nullable
          - `cnaps_code` string, required
          - `id_number` string, required
          - `id_type` string, nullable
          - `registration_number` string, nullable
          - `registration_type` string, nullable
        - ApiBrPixFiatAccount
          - `account_holder_name` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `pix_key` string, required
          - `pix_key_type` 'cpf' | 'cnpj' | 'email' | 'phone' | 'evp', required: PIX key kind on the `br_pix` shape. Each kind implies a distinct key format: `cpf` (11 digits), `cnpj` (14 digits), `email`, `phone` (`+55` then 10–11 digits), or `evp` (a randomly assigned UUID).
        - ApiBrBankFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `account_subtype` 'cc' | 'pp', required: TED account subtype on the `br_bank` shape. Transfers with the wrong account type are rejected by the receiving bank, so the destination's type must be supplied at registration.
          - `agency` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_code` string, required
          - `bank_name` string, nullable
          - `id_number` string, nullable
          - `id_type` string, nullable
          - `phone` string, nullable
          - `registration_number` string, nullable
          - `registration_type` string, nullable
          - `tax_number` string, nullable
        - ApiMxClabeFiatAccount
          - `account_holder_name` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, nullable
          - `clabe` string, required
          - `tax_number` string, nullable
        - ApiInIfscFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, nullable
          - `id_number` string, nullable
          - `id_type` string, nullable
          - `ifsc` string, required
          - `phone` string, nullable
          - `registration_number` string, nullable
          - `registration_type` string, nullable
          - `relationship_to_debtor` 'PART' | 'CHIL' | 'SPOU' | 'CUST' | 'EMPL' | 'EXSP' | 'FREN' | 'CONT' | 'LAND' | 'OTHR' | 'PARE' | 'RELA' | 'SELF' | 'SIBL' | 'VEND' | 'BRAN' | 'FRAN' | 'HOLD' | 'SUBS' | 'SUPP': Who an external account's holder is to the customer, as a four-letter code. The set accepted depends on the holder's `type`.
        - ApiArCbuFiatAccount
          - `account_holder_name` string, required
          - `alias` string, nullable
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, required
          - `cbu` string, required
          - `id_number` string, nullable
          - `id_type` string, nullable
          - `phone` string, required
          - `registration_number` string, nullable
          - `registration_type` string, nullable
          - `tax_number` string, required
        - ApiHkdFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, nullable: Bank display name; absent when the account was registered without one.
          - `bic` string, nullable: ISO 9362 BIC / SWIFT code of the destination bank.
          - `date_of_incorporation` string, nullable
          - `registration_number` string, nullable
          - `registration_type` string, nullable
        - ApiSgdFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, required
          - `id_number` string, nullable
          - `id_type` string, nullable
          - `phone` string, required
          - `registration_number` string, nullable
          - `registration_type` string, nullable
          - `relationship_to_debtor` 'PART' | 'CHIL' | 'SPOU' | 'CUST' | 'EMPL' | 'EXSP' | 'FREN' | 'CONT' | 'LAND' | 'OTHR' | 'PARE' | 'RELA' | 'SELF' | 'SIBL' | 'VEND' | 'BRAN' | 'FRAN' | 'HOLD' | 'SUBS' | 'SUPP': Who an external account's holder is to the customer, as a four-letter code. The set accepted depends on the holder's `type`.
        - ApiPhBankFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, required
          - `date_of_incorporation` string, nullable
          - `phone` string, nullable
          - `registration_number` string, nullable
          - `registration_type` string, nullable
          - `relationship_to_debtor` 'PART' | 'CHIL' | 'SPOU' | 'CUST' | 'EMPL' | 'EXSP' | 'FREN' | 'CONT' | 'LAND' | 'OTHR' | 'PARE' | 'RELA' | 'SELF' | 'SIBL' | 'VEND' | 'BRAN' | 'FRAN' | 'HOLD' | 'SUBS' | 'SUPP': Who an external account's holder is to the customer, as a four-letter code. The set accepted depends on the holder's `type`.
        - ApiPkIbanFiatAccount
          - `account_holder_name` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, nullable
          - `iban` string, required
        - ApiNgBankFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_code` string, required
          - `bank_name` string, nullable
        - ApiThbBankFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, required
        - ApiIdrBankFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, required
        - ApiCaEftFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_name` string, required
          - `institution_number` string, required
          - `transit_number` string, required
        - ApiAuBsbFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bsb` string, required: BSB ("Bank-State-Branch", 6 digits) — names the bank and the branch together.
        - ApiCoBankFiatAccount
          - `account_holder_name` string, required
          - `account_number` string, required
          - `account_type` 'CHECKING' | 'SAVINGS', required: Account type on the `co_bank` shape. ACH Colombia credits a savings (ahorros) and a checking (corriente) account differently, so the destination's type must be supplied at registration.
          - `bank_address` Address, required
            - `city` string, nullable
            - `line1` string, nullable
            - `line2` string, nullable
            - `postal_code` string, nullable
            - `state` string, nullable
            - `country` string, nullable: ISO-3166-1 alpha-2 country code: two letters (`SG`, `US`, `GB`), never the country name.
            - `transliterated_address` AddressLines
              - …
          - `bank_code` string, required: Bank code as published by the Colombian banking association.
          - `id_number` string, required
          - `id_type` 'CC' | 'CE' | 'NIT' | 'PASS' | 'PEP', required: The identity document a Colombian beneficiary is known by. The receiving bank matches the holder against it, so the kind travels with the number.
      - ApiCryptoAccount: Wire view of a crypto account's per-shape details. `address` is optional because a crypto account still being set up has no on-chain address yet. It is omitted from the wire response until the address is assigned.
        - `address` string, nullable
    - `id` string, uuid, required
    - `idempotency_key` string, required
    - `kind` 'fiat' | 'crypto', required: Top-level kind of the account — fiat vs crypto. Carried explicitly on `ApiAccount` and `ApiAccountCreationRequest` so callers can branch without parsing `shape` (and because `details` is an untagged enum that won't help them dispatch).
    - `origin` 'external' | 'virtual', required
    - `rails` string[], required
    - `shape` union, required: The shape of an account — fiat-side or crypto-side. Wire form is a flat string (`"us"`, `"uk"`, `"iban"`, `"evm"`, `"sol"`, …) — serde untagged picks the inner enum whose variant set contains the incoming token. Disjoint variant sets between `FiatShape` and `CryptoShape` make the disambiguation unambiguous.
      - 'us' | 'uk' | 'iban' | 'swift' | 'br_pix' | 'br_bank' | 'mx_clabe' | 'in_ifsc' | 'au_bsb' | 'ca_eft' | 'jp_zengin' | 'ar_cbu' | 'co_bank' | 'cl_bank' | 'pe_cci' | 'cn_cnaps' | 'hk_fps' | 'sg_fast' | 'ph_bank' | 'pk_iban' | 'ng_bank' | 'thb_bank' | 'idr_bank': Family of bank identifiers a fiat account uses — determines the layout of its `details` block. Some variants are declared ahead of their corridor opening; creates for those are rejected today.
      - 'evm' | 'sol' | 'tron' | 'btc': The VM family that determines a crypto account's address format. Unlike `FiatShape` where shape ≈ country, crypto shape is keyed on the cryptographic primitive: one EVM key produces the same address on every EVM chain, so a single shape spans chains — the chains an account transacts on are listed in its `rails` instead.
    - `status` 'pending' | 'completed' | 'failed', required
    - `updated_at` string, date-time, required

## Other responses

- `400`: Malformed body, `details` doesn't match the shape selected by currency, bank country, and rail, or `account_holder.is_third_party` is missing.
- `401`: Missing or invalid API key.
- `404`: Customer not found.
- `409`: The customer's verification is not approved, so no account can be opened for them yet, or a registration with the same bank details is already in progress.
- `422`: The account can't be registered: a third-party holder of a USD account left out `account_holder.relationship` (or, as a business on a USD account, `account_holder.industry`), with one `missing` violation per field; the corridor is unsupported; or the only settlement option doesn't accept the holder business's industry code. An industry code that isn't accepted comes back as a `not_in_allowed_set` violation on `account_holder.industry`, and when that code came from the customer's KYB profile, sending `account_holder.industry` sets the account's own. A first-party business account whose only option needs `account_holder.industry` is still created when neither the request nor the KYB profile has one; it is registered for settlement once they are added through `PATCH /v0/customers/{id}/accounts/fiat/{account_id}/holder`.

---

[API](https://skmtc.dev/seismic/apis/seismic-orchestration-api.md) - [All operations](https://skmtc.dev/seismic/apis/seismic-orchestration-api/llms.txt) - [OpenAPI document](https://skmtc.dev/seismic/apis/seismic-orchestration-api/revisions/08ada1f159fa?raw)
