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

# Generate onboarding URL

> Generates a presigned URL for customer onboarding. If the customer does not exist, it will be created.

This is the primary endpoint for creating customers. You generate a UUID for `customerId` and `bankAccountId`,
and Etherfuse will create the customer and bank account records associated with your organization.

Upon visiting the URL, the customer will have 15 minutes to complete the onboarding process (KYC verification and bank account linking).

## Personal organizations only

This endpoint always creates a **personal** organization — it forces individual KYC.
There is no `accountType` field; pass `business` orgs through
[POST /ramp/organization](#tag/organizations/post/ramp/organization) instead.

## userInfo

Pass `userInfo` with the end user's email and display name. When provided, Etherfuse
pre-creates the user record so the customer's eventual sign-in attaches to the right user
and we can email them on status changes (KYC approved/rejected, bank account verified, etc.).

`userInfo` is currently optional. **It will become required** in a future release — start
sending it now.




## OpenAPI

````yaml /openapi.yaml post /ramp/onboarding-url
openapi: 3.1.0
info:
  title: FX API
  version: 1.0.0
  description: >
    API for managing FX operations including onboarding, quotes, orders, and
    customer management.

    This API provides endpoints for managing customers, bank accounts, crypto
    wallets, orders, and webhooks.
servers:
  - url: https://api.etherfuse.com
    description: Production API
  - url: https://api.sand.etherfuse.com
    description: Sandbox API (for testing)
security: []
tags:
  - name: Lookup
    description: Public endpoints for looking up stablebond and exchange rate data
  - name: Assets
    description: Get available assets for ramping
  - name: Onboarding
    description: Customer onboarding and KYC
  - name: Bank Accounts
    description: Manage customer bank accounts
  - name: Agreements
    description: Handle customer agreements and consents
  - name: Quotes
    description: Get quotes for conversions
  - name: Orders
    description: Create and manage orders
  - name: Swaps
    description: Create and manage swaps
  - name: Customers
    description: Manage customers
  - name: Crypto Wallets
    description: Manage crypto wallets
  - name: Webhooks
    description: Manage webhook subscriptions
  - name: Organizations
    description: Manage organizations and child organizations
paths:
  /ramp/onboarding-url:
    post:
      tags:
        - Onboarding
      summary: Generate onboarding URL
      description: >
        Generates a presigned URL for customer onboarding. If the customer does
        not exist, it will be created.


        This is the primary endpoint for creating customers. You generate a UUID
        for `customerId` and `bankAccountId`,

        and Etherfuse will create the customer and bank account records
        associated with your organization.


        Upon visiting the URL, the customer will have 15 minutes to complete the
        onboarding process (KYC verification and bank account linking).


        ## Personal organizations only


        This endpoint always creates a **personal** organization — it forces
        individual KYC.

        There is no `accountType` field; pass `business` orgs through

        [POST /ramp/organization](#tag/organizations/post/ramp/organization)
        instead.


        ## userInfo


        Pass `userInfo` with the end user's email and display name. When
        provided, Etherfuse

        pre-creates the user record so the customer's eventual sign-in attaches
        to the right user

        and we can email them on status changes (KYC approved/rejected, bank
        account verified, etc.).


        `userInfo` is currently optional. **It will become required** in a
        future release — start

        sending it now.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GenerateOnboardingUrlPayload'
      responses:
        '200':
          description: URL generated successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  presigned_url:
                    type: string
                    description: >-
                      The generated presigned URL. This URL needs to be visited
                      by the customer, and will be used to verify the customer's
                      identity and bank account.
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - ApiKeyAuth: []
components:
  schemas:
    GenerateOnboardingUrlPayload:
      type: object
      required:
        - customerId
        - bankAccountId
        - publicKey
        - blockchain
      properties:
        customerId:
          type: string
          format: uuid
          description: >-
            Customer ID. This id is generated by you, the API consumer, and
            provided to etherfuse as a way to associate this customer with your
            organization.
        bankAccountId:
          type: string
          format: uuid
          description: >-
            Bank account ID. This id is generated by you, the API consumer, and
            provided to etherfuse as a way to associate this bank account with
            the customer.
        publicKey:
          type: string
          description: Public key for the customer wallet
        blockchain:
          type: string
          enum:
            - solana
            - stellar
            - base
            - polygon
            - monad
          description: Blockchain type for the wallet
        userInfo:
          $ref: '#/components/schemas/UserInfo'
      example:
        customerId: 123e4567-e89b-12d3-a456-426614174000
        bankAccountId: 123e4567-e89b-12d3-a456-426614174001
        publicKey: 9Qx7r...
        blockchain: solana
        userInfo:
          email: ana@example.com
          displayName: Ana García
    Error:
      type: object
      properties:
        error:
          type: string
          description: Error message
      example:
        error: Invalid request parameters
    UserInfo:
      type: object
      description: >
        Optional info about the end user (the individual customer behind a
        personal organization).


        **Recommended.** When provided, Etherfuse pre-creates the user record so
        that when the

        customer eventually signs in via the hosted onboarding UI their Firebase
        identity attaches

        to the right user. It also enables personalized status-change emails
        (KYC approved/rejected,

        bank account verified, etc.).


        **Will eventually be required** for personal organizations. Reject early
        in your integration

        if you don't have this data — partners that don't migrate before the
        cutover will start

        receiving 400 errors.
      required:
        - email
        - displayName
      properties:
        email:
          type: string
          format: email
          description: End user's email address.
        displayName:
          type: string
          description: End user's display name.
      example:
        email: ana@example.com
        displayName: Ana García
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        API key for authentication. Pass the key directly (e.g., `Authorization:
        your-api-key`). Do not use a `Bearer` prefix.

````