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

# Submit KYC

> Submit identity information (name, address, DOB, tax ID) for a customer
programmatically, an alternative to the presigned-URL flow where users complete KYC in
the Etherfuse UI.

**Use case:** partners who want to white-label the KYC experience can collect identity
data in their own UI and submit it here.

Submitted data is reviewed by Etherfuse admins before approval; you'll receive a
`kyc_updated` webhook when the status changes.

**Sandbox auto-approval:** in sandbox, a `personal` customer auto-approves once all
agreements have been signed, with no manual review. Submitting KYC alone leaves the customer
`proposed`; approval lands only after the rest of the programmatic flow (document upload
and agreement signing) is complete, at which point a `kyc_updated` webhook fires and orders
unlock for the wallet. This is sandbox-only; production still requires manual review.

**Data isolation:** partners can only query KYC data they submitted; data submitted by
other partners or directly by users is not visible.



## OpenAPI

````yaml /openapi.json post /ramp/customer/{customer_id}/kyc
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}/kyc:
    post:
      tags:
        - KYC
      summary: Submit KYC
      description: >-
        Submit identity information (name, address, DOB, tax ID) for a customer

        programmatically, an alternative to the presigned-URL flow where users
        complete KYC in

        the Etherfuse UI.


        **Use case:** partners who want to white-label the KYC experience can
        collect identity

        data in their own UI and submit it here.


        Submitted data is reviewed by Etherfuse admins before approval; you'll
        receive a

        `kyc_updated` webhook when the status changes.


        **Sandbox auto-approval:** in sandbox, a `personal` customer
        auto-approves once all

        agreements have been signed, with no manual review. Submitting KYC alone
        leaves the customer

        `proposed`; approval lands only after the rest of the programmatic flow
        (document upload

        and agreement signing) is complete, at which point a `kyc_updated`
        webhook fires and orders

        unlock for the wallet. This is sandbox-only; production still requires
        manual review.


        **Data isolation:** partners can only query KYC data they submitted;
        data submitted by

        other partners or directly by users is not visible.
      operationId: submit_kyc
      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/SubmitKycRequest'
        required: true
      responses:
        '200':
          description: KYC identity data submitted
          content:
            application/json:
              schema: {}
              example:
                message: KYC data submitted for review
                status: proposed
        '404':
          description: Customer not found
components:
  schemas:
    SubmitKycRequest:
      type: object
      description: >-
        Request body for submitting KYC identity data. This endpoint is for
        personal accounts only; business/KYB fields are not accepted.
      required:
        - identity
      properties:
        identity:
          type: object
          description: Personal identity information for the customer.
          required:
            - email
            - phoneNumber
            - occupation
            - name
            - dateOfBirth
            - address
          properties:
            email:
              type: string
              description: Customer's email address.
            phoneNumber:
              type: string
              description: Customer's phone number in E.164 format, e.g. +525512345678.
            occupation:
              type: string
              description: Customer's occupation.
            dateOfBirth:
              type: string
              description: Date of birth in YYYY-MM-DD format.
            useEmailForMarketing:
              type:
                - boolean
                - 'null'
              description: Whether the customer consents to marketing emails. Optional.
            name:
              type: object
              description: Customer's legal name.
              required:
                - givenName
                - familyName
              properties:
                givenName:
                  type: string
                familyName:
                  type: string
                middleName:
                  type:
                    - string
                    - 'null'
                motherMaidenName:
                  type:
                    - string
                    - 'null'
                preferredName:
                  type:
                    - string
                    - 'null'
            address:
              type: object
              description: >-
                Customer's residential address. All fields except street2 are
                required.
              required:
                - street
                - city
                - region
                - postalCode
                - country
              properties:
                street:
                  type: string
                street2:
                  type:
                    - string
                    - 'null'
                city:
                  type: string
                region:
                  type: string
                  description: State or region.
                postalCode:
                  type: string
                country:
                  type: string
                  description: ISO 3166-1 alpha-2 country code, e.g. MX.
            idNumbers:
              type: array
              description: >-
                Government-issued ID numbers. Required only when address.country
                is MX: both a CURP and an RFC must be included. For any other
                country, idNumbers must be omitted.
              items:
                type: object
                required:
                  - type
                  - value
                properties:
                  type:
                    type: string
                    description: ID type. For Mexico, both CURP and RFC are required.
                  value:
                    type: string
      example:
        identity:
          email: ana@example.com
          phoneNumber: '+525512345678'
          occupation: Software Engineer
          dateOfBirth: '1990-05-15'
          name:
            givenName: Ana
            familyName: García
            motherMaidenName: López
          address:
            street: Av. Reforma 222
            city: Ciudad de México
            region: CDMX
            postalCode: '06600'
            country: MX
          idNumbers:
            - type: CURP
              value: GALA900515MDFRPN08
            - type: RFC
              value: GALA900515QX4
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: API key sent in the Authorization header.

````