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

# Create bank account (API)

> Programmatically creates a new bank account for a customer using API-key
authentication — no presigned URL required. The registration data (name, CURP, RFC,
CLABE, etc.) is validated and sent to the payment processor. Bank accounts require
verification before they can be used for transactions.

**Sandbox:** submit `XEXX010101000` (personal) or `XEX010101000` (business) as the `rfc`
to skip SPEI provider registration and have the account marked `compliant: true`
immediately. The hosted onboarding UI uses these RFCs automatically — programmatic
callers must opt in by passing them. Any other RFC in sandbox is sent to the SPEI
provider's sandbox as a real registration and will not auto-approve. Both values are
rejected in production.



## OpenAPI

````yaml /openapi.json post /ramp/customer/{customer_id}/bank-account
openapi: 3.1.0
info:
  title: Etherfuse FX API
  description: Partner-facing ramp API for onramps, offramps, swaps, and KYC.
  license:
    name: Proprietary
  version: 1.0.0
servers:
  - url: https://api.sand.etherfuse.com
    description: Sandbox
security:
  - ApiKeyAuth: []
tags:
  - name: Authentication
    description: >-
      Partner JWT authentication — exchange a JWT for an access token, or launch
      a user into the app.
  - name: Lookup
    description: >-
      Public reference data: exchange rates, stablebonds, bond costs, country
      codes.
  - name: Assets
    description: Rampable stablecoins and stablebonds available per blockchain.
  - name: Onboarding
    description: Hosted and programmatic customer onboarding.
  - name: Agreements
    description: Legal agreement acceptance during onboarding.
  - name: Bank Accounts
    description: Register and retrieve customer bank accounts.
  - name: Quotes
    description: Price quotes for onramps, offramps, and swaps.
  - name: Orders
    description: Create, track, and manage ramp orders.
  - name: Swaps
    description: Crypto-to-crypto swaps.
  - name: Sponsored
    description: Token approvals for sponsored (gasless) offramps.
  - name: Customers
    description: Customer (child-organization) records.
  - name: Wallets
    description: Register and manage customer wallets.
  - name: KYC
    description: Submit and check customer KYC status.
  - name: Webhooks
    description: Event notification subscriptions.
  - name: Organizations
    description: Organization identity, child orgs, and partner fees.
paths:
  /ramp/customer/{customer_id}/bank-account:
    post:
      tags:
        - Bank Accounts
      summary: Create bank account (API)
      description: >-
        Programmatically creates a new bank account for a customer using API-key

        authentication — no presigned URL required. The registration data (name,
        CURP, RFC,

        CLABE, etc.) is validated and sent to the payment processor. Bank
        accounts require

        verification before they can be used for transactions.


        **Sandbox:** submit `XEXX010101000` (personal) or `XEX010101000`
        (business) as the `rfc`

        to skip SPEI provider registration and have the account marked
        `compliant: true`

        immediately. The hosted onboarding UI uses these RFCs automatically —
        programmatic

        callers must opt in by passing them. Any other RFC in sandbox is sent to
        the SPEI

        provider's sandbox as a real registration and will not auto-approve.
        Both values are

        rejected in production.
      operationId: api_create_bank_account
      parameters:
        - name: customer_id
          in: path
          description: >-
            The customer (child org) ID. Must belong to the caller's
            organization or a direct child.
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApiCreateBankAccountPayload'
        required: true
      responses:
        '201':
          description: The created bank account
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BankAccount'
        '400':
          description: Invalid request
components:
  schemas:
    ApiCreateBankAccountPayload:
      type: object
      required:
        - account
      properties:
        account:
          $ref: '#/components/schemas/AccountRegistration'
        bankAccountId:
          type:
            - string
            - 'null'
          format: uuid
        label:
          type:
            - string
            - 'null'
      example:
        account:
          birthCountryIsoCode: MX
          birthDate: '19900515'
          clabe: '646180157000000004'
          curp: GALA900515MDFRPN08
          firstName: Ana
          maternalLastName: López
          paternalLastName: García
          rfc: GALA900515AB1
          transactionId: c3d4e5f6-a7b8-9012-cdef-123456789012
        bankAccountId: e5f6a7b8-c9d0-1234-efab-345678901234
        label: Ana's SPEI account
    BankAccount:
      type: object
      required:
        - bankAccountId
        - customerId
        - createdAt
        - updatedAt
        - currency
        - abbrClabe
        - compliant
        - needsWork
        - status
      properties:
        abbrClabe:
          type: string
          description: Abbreviated CLABE number for the bank account.
          deprecated: true
        bankAccountId:
          type: string
          format: uuid
          description: Unique identifier for the bank account. Must be a valid UUID v4.
        compliant:
          type: boolean
          description: >-
            Whether the bank account is compliant and can be used for orders. A
            bank becomes

            compliant once the customer completes the required identity
            verification (or the

            owning organization is approved). **While `false`, the customer must
            complete

            additional verification before the bank can be used** — launch them
            into the

            Identity verification flow (`scope: verification`, `target: /idv`);
            see [User launch

            flows](/guides/user-launch-flows#identity-verification).
        createdAt:
          type: string
          format: date-time
          description: Timestamp when the bank account was created.
        currency:
          type: string
          description: Settlement currency (ISO 4217, e.g. `MXN`).
        customerId:
          type: string
          format: uuid
          description: ID of the customer who owns this bank account.
        deletedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: Timestamp when the bank account was deleted (if applicable).
        etherfuseDepositClabe:
          type:
            - string
            - 'null'
          description: Etherfuse deposit CLABE number.
        label:
          type:
            - string
            - 'null'
          description: Custom label for the bank account.
        needsWork:
          type: boolean
          description: >-
            Whether the bank account still needs work (e.g. failed verification)
            before it

            can be used for transactions.
        status:
          type: string
          description: Current status of the bank account.
        updatedAt:
          type: string
          format: date-time
          description: Timestamp when the bank account was last updated.
      example:
        abbrClabe: •••• 0004
        bankAccountId: b2c3d4e5-f6a7-8901-bcde-f12345678901
        compliant: true
        createdAt: '2026-05-01T14:30:00Z'
        currency: MXN
        customerId: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        etherfuseDepositClabe: '646180157000000004'
        label: Ana's SPEI account
        needsWork: false
        status: active
        updatedAt: '2026-05-02T09:15:00Z'
    AccountRegistration:
      oneOf:
        - oneOf:
            - $ref: '#/components/schemas/PersonalAccountRequest'
          title: Personal (MXN / SPEI)
        - oneOf:
            - $ref: '#/components/schemas/BusinessAccountRequest'
          title: Business (MXN / SPEI)
        - oneOf:
            - $ref: '#/components/schemas/BrlPersonalAccountRequest'
          title: Personal (BRL / PIX)
        - oneOf:
            - $ref: '#/components/schemas/BrlBusinessAccountRequest'
          title: Business (BRL / PIX)
    PersonalAccountRequest:
      type: object
      required:
        - transactionId
        - firstName
        - paternalLastName
        - maternalLastName
        - birthDate
        - curp
        - rfc
        - clabe
      properties:
        birthCountryId:
          type:
            - string
            - 'null'
          description: Numeric country code (legacy, e.g. "187" for Mexico)
        birthCountryIsoCode:
          type:
            - string
            - 'null'
          description: ISO 3166-1 alpha-2 code (preferred, e.g. "MX")
        birthDate:
          type: string
          description: Date of birth in `YYYYMMDD` format (8 digits, e.g. `19900515`).
        clabe:
          type: string
        curp:
          type: string
        firstName:
          type: string
        maternalLastName:
          type: string
        paternalLastName:
          type: string
        rfc:
          type: string
          description: The individual's RFC (Registro Federal de Contribuyentes).
        transactionId:
          type: string
          format: uuid
          description: >-
            Idempotency key for this bank account registration. Generate a
            stable UUID and keep it; passing the same value makes the call safe
            to retry and ensures the account is registered only once. This is a
            value you supply, not one returned by Etherfuse.
    BusinessAccountRequest:
      type: object
      required:
        - transactionId
        - name
        - incorporatedDate
        - rfc
        - clabe
      properties:
        clabe:
          type: string
        countryId:
          type:
            - string
            - 'null'
          description: Numeric country code (legacy)
        countryIsoCode:
          type:
            - string
            - 'null'
          description: ISO 3166-1 alpha-2 code (preferred)
        incorporatedDate:
          type: string
          description: >-
            Company incorporation date in `YYYYMMDD` format (8 digits, e.g.
            `20200101`).
        name:
          type: string
        rfc:
          type: string
          description: The company's RFC (Registro Federal de Contribuyentes).
        transactionId:
          type: string
          format: uuid
          description: >-
            Idempotency key for this bank account registration. Generate a
            stable UUID and keep it; passing the same value makes the call safe
            to retry and ensures the account is registered only once. This is a
            value you supply, not one returned by Etherfuse.
    BrlPersonalAccountRequest:
      type: object
      required:
        - transactionId
        - firstName
        - lastName
        - cpf
        - pixKey
        - pixKeyType
      properties:
        cpf:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        pixKey:
          type: string
        pixKeyType:
          type: string
        transactionId:
          type: string
          format: uuid
          description: >-
            Idempotency key for this bank account registration. Generate a
            stable UUID and keep it; passing the same value makes the call safe
            to retry and ensures the account is registered only once. This is a
            value you supply, not one returned by Etherfuse.
    BrlBusinessAccountRequest:
      type: object
      required:
        - transactionId
        - name
        - cnpj
        - pixKey
        - pixKeyType
      properties:
        cnpj:
          type: string
        name:
          type: string
        pixKey:
          type: string
        pixKeyType:
          type: string
        transactionId:
          type: string
          format: uuid
          description: >-
            Idempotency key for this bank account registration. Generate a
            stable UUID and keep it; passing the same value makes the call safe
            to retry and ensures the account is registered only once. This is a
            value you supply, not one returned by Etherfuse.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: API key sent in the Authorization header.

````