> ## 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 identity data

> Submit identity information (name, address, DOB, tax ID) for a customer programmatically.
This is 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 via this endpoint.

Submitted data will be reviewed by Etherfuse admins before approval. You'll receive a
`kyc_updated` webhook when the status changes.

**Sandbox auto-approval:** In sandbox, submitting KYC for a `personal` customer org
immediately approves the customer, fires a `kyc_updated` webhook, and unlocks orders for
the wallet. The response `status` returns `"approved"` (not `"proposed"`). This shortcut
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.yaml post /ramp/customer/{customer_id}/kyc
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/customer/{customer_id}/kyc:
    post:
      tags:
        - KYC
      summary: Submit KYC identity data
      description: >
        Submit identity information (name, address, DOB, tax ID) for a customer
        programmatically.

        This is 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 via this endpoint.


        Submitted data will be reviewed by Etherfuse admins before approval.
        You'll receive a

        `kyc_updated` webhook when the status changes.


        **Sandbox auto-approval:** In sandbox, submitting KYC for a `personal`
        customer org

        immediately approves the customer, fires a `kyc_updated` webhook, and
        unlocks orders for

        the wallet. The response `status` returns `"approved"` (not
        `"proposed"`). This shortcut

        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.
      parameters:
        - name: customer_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: ID of the customer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/KycSubmissionRequest'
      responses:
        '200':
          description: KYC data submitted successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: proposed
                  message:
                    type: string
                    example: KYC data submitted for review
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Customer not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - ApiKeyAuth: []
components:
  schemas:
    KycSubmissionRequest:
      type: object
      description: Request body for submitting KYC identity data programmatically
      required:
        - identity
      properties:
        pubkey:
          type: string
          description: >-
            Public key of the wallet to submit KYC for. Optional — if omitted,
            KYC is attached at the organization level.
        identity:
          type: object
          description: User identity information
          properties:
            name:
              type: object
              properties:
                givenName:
                  type: string
                  description: First/given name
                familyName:
                  type: string
                  description: Last/family name
            dateOfBirth:
              type: string
              format: date
              description: Date of birth (YYYY-MM-DD)
            address:
              type: object
              properties:
                street:
                  type: string
                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 ID numbers
              items:
                type: object
                properties:
                  value:
                    type: string
                    description: ID number (tax ID, national ID, etc.)
                  type:
                    type: string
                    description: Type of ID (e.g., "RFC", "CURP", "SSN")
      example:
        pubkey: 9Qx7r...
        identity:
          name:
            givenName: John
            familyName: Doe
          dateOfBirth: '1990-01-15'
          address:
            street: 123 Main St
            city: Mexico City
            region: CDMX
            postalCode: '06600'
            country: MX
          idNumbers:
            - value: XAXX010101000
              type: RFC
    Error:
      type: object
      properties:
        error:
          type: string
          description: Error message
      example:
        error: Invalid request parameters
  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.

````