> ## 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 (presigned)

> Registers a customer's Mexican bank account (CLABE) for on/off-ramp transactions. The
`account` field accepts two variants — Personal or Business — auto-detected from the
fields present.

**Sandbox:** submit `XEXX010101000` (personal) or `XEX010101000` (business) as the `rfc`
to skip SPEI provider registration and have the account marked `compliant: true`
immediately. 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.

**Note:** this endpoint is for customers onboarding through the Etherfuse UI using a
presigned URL. For programmatic creation via API key, use
`POST /ramp/customer/{customer_id}/bank-account` instead.



## OpenAPI

````yaml /openapi.json post /ramp/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/bank-account:
    post:
      tags:
        - Bank Accounts
      summary: Create bank account (presigned)
      description: >-
        Registers a customer's Mexican bank account (CLABE) for on/off-ramp
        transactions. The

        `account` field accepts two variants — Personal or Business —
        auto-detected from the

        fields present.


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

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

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


        **Note:** this endpoint is for customers onboarding through the
        Etherfuse UI using a

        presigned URL. For programmatic creation via API key, use

        `POST /ramp/customer/{customer_id}/bank-account` instead.
      operationId: create_bank_account
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateBankAccountPayload'
        required: true
      responses:
        '200':
          description: The created bank account
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddBankAccountResponse'
        '400':
          description: Invalid or expired presigned URL
      security:
        - {}
components:
  schemas:
    CreateBankAccountPayload:
      type: object
      required:
        - presignedUrl
        - account
      properties:
        account:
          $ref: '#/components/schemas/AccountRegistration'
        presignedUrl:
          type: string
      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
        presignedUrl: >-
          https://api.sand.etherfuse.com/ramp/onboarding/bank-accounts?...&signature=...
    AddBankAccountResponse:
      type: object
      required:
        - accountId
        - label
        - status
        - organizationId
      properties:
        accountId:
          type: string
          format: uuid
        label:
          type: string
        organizationId:
          type: string
          format: uuid
        status:
          type: string
      example:
        accountId: b2c3d4e5-f6a7-8901-bcde-f12345678901
        label: Ana's SPEI account
        organizationId: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        status: active
    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.

````