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

# Update Customer Identification Data

> Partial update for a person customer's existing KYC record. Only
non-null fields are applied. Patches the customer's existing KYC
record directly — does not trigger re-verification, so an
already-approved customer keeps their status. Useful for backfilling a
tax identification number (DAC8/CARF) on customers who onboarded before
TIN collection existed.



## OpenAPI

````yaml https://api.sandbox.iron.xyz/spec/2026-08-01 patch /customers/{id}/identification-data
openapi: 3.1.0
info:
  description: The Stablecoin Payment Network
  title: Iron API - Sandbox
  version: '2026-08-01'
servers:
  - url: https://api.sandbox.iron.xyz/api
security: []
tags:
  - description: >-
      Wallet and bank account registration


      Every wallet address that interacts with Iron must be registered (linked)
      to a customer **before** it can be used in any flow — onramp, offramp, or
      swap. This is a regulatory requirement under the **Travel Rule**, which
      obliges Virtual Asset Service Providers to exchange originator and
      beneficiary information for crypto transfers.


      Iron supports two wallet types:


      - **Self-hosted wallets** — the customer controls the private key.
      Registration requires a signed proof-of-ownership message.

      - **Hosted wallets** — the wallet is custodied by another VASP (e.g.
      Coinbase, Kraken). Registration requires the VASP's DID so Iron can
      exchange travel-rule data with the custodian.


      Similarly, fiat bank accounts must be registered before they can receive
      offramp payouts.
    name: Addresses
  - description: Operations on Autoramp
    name: Autoramp
  - description: Operations on Chronicle collateral
    name: ChronicleCollateral
  - description: Operations on Currencies
    name: Currencies
  - description: Operations on Customers
    name: Customer
  - description: Operations on Exchange Rate
    name: ExchangeRate
  - description: Operations on Fee Profiles
    name: FeeProfiles
  - description: Information requests (RFIs) across Fraud, FIU, KYC and KYB
    name: Rfi
  - description: Operations for Sandbox Testing
    name: Sandbox
  - description: Operations on SSE
    name: Sse
  - description: Operations on Terms and Conditions
    name: TermsAndConditions
  - description: Operations on Webhooks
    name: Webhooks
paths:
  /customers/{id}/identification-data:
    patch:
      tags:
        - Customer
      summary: Update Customer Identification Data
      description: |-
        Partial update for a person customer's existing KYC record. Only
        non-null fields are applied. Patches the customer's existing KYC
        record directly — does not trigger re-verification, so an
        already-approved customer keeps their status. Useful for backfilling a
        tax identification number (DAC8/CARF) on customers who onboarded before
        TIN collection existed.
      operationId: updateCustomerIdentificationData
      parameters:
        - deprecated: false
          description: >-
            Optional sub-partner UUID, if provided, the identification data will
            be updated for the sub-partner's customer
          explode: true
          in: header
          name: X-SUB-PARTNER-ID
          required: false
          schema:
            type: string
        - deprecated: false
          description: the ID of the Customer whose identification data will be updated
          explode: true
          in: path
          name: id
          required: true
          schema:
            format: uuid
            type: string
        - $ref: '#/components/parameters/XApiVersion'
      requestBody:
        content:
          application/json; charset=utf-8:
            schema:
              $ref: '#/components/schemas/UpdateIdentificationDataParams'
        description: The identification data to update
        required: true
      responses:
        '200':
          content:
            application/json; charset=utf-8:
              schema:
                $ref: '#/components/schemas/Identification'
          description: PATCH Customer Identification Data Succeeded
        '400':
          content:
            application/json; charset=utf-8:
              schema:
                type: string
          description: PATCH Customer Identification Data Failed (Invalid Request)
        '401':
          content:
            application/json; charset=utf-8:
              schema:
                type: string
          description: PATCH Customer Identification Data Failed (Unauthorized)
        '404':
          content:
            application/json; charset=utf-8:
              schema:
                type: string
          description: PATCH Customer Identification Data Failed (Resource Not Found)
        '500':
          content:
            application/json; charset=utf-8:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: PATCH Customer Identification Data Failed (Internal Error)
      security:
        - ApiKeyAuth: []
components:
  parameters:
    XApiVersion:
      description: >-
        Selects the API version for this request, as an ISO date (`YYYY-MM-DD`).
        Omit to use the default version (`2025-03-13`). Supported versions:
        2025-03-13, 2026-07-01, 2026-08-01.
      in: header
      name: X-API-Version
      required: false
      schema:
        type: string
        x-default: '2026-08-01'
  schemas:
    UpdateIdentificationDataParams:
      description: |-
        Update Identification Data Params

        Partial update for a person customer's existing KYC record. Only
        non-null fields are applied; today only the tax identification number
        is supported.
      properties:
        tax_identification_number:
          description: |-
            Tax identification number (e.g. SSN for US, national TIN for EEA
            residents). Patched directly onto the customer's existing KYC
            record — does not trigger re-verification, so an already-approved
            customer's status is unaffected.
          type: string
        tax_residence_country:
          description: |-
            ISO 3166-1 alpha-2 country of tax residence. Required whenever
            `tax_identification_number` is set — TIN format is validated against
            this specific country, and it can genuinely differ from the
            customer's physical residence or nationality (the reason DAC8/CARF
            asks for it separately).
          type: string
      title: UpdateIdentificationDataParams
      type: object
    Identification:
      description: |
        Identification

        The entity wrapping our KYC/KYB process and underlying providers
      properties:
        blocking_abilities:
          additionalProperties:
            type: string
          description: >-
            Rails (e.g. "ach", "sepa_thirdparty") the synchronous rule-engine

            preflight gate definitively ruled out at creation time, keyed to a

            partner-safe reason. Only set on an outsourced Person/Business

            identification (empty otherwise) — see

            `controllers::identifications::create_person_customer_outsourced_identification`
            /

            `create_business_customer_outsourced_identification_v2`.
          type: object
        created_at:
          format: date-time
          type: string
        customer_id:
          description: Absent on a referral partner's identification (partner-keyed record)
          format: uuid
          type: string
        id:
          format: uuid
          type: string
        partner_id:
          description: The owning partner for partner-keyed (referral) records
          format: uuid
          type: string
        preflight_summary:
          $ref: '#/components/schemas/IdentificationPreflightSummary'
        residence_country:
          description: >-
            ISO 3166-1 alpha-2 (2 letter) country code of the verified residence

            address; only set on the customer's most recent identification while
            it

            is approved
          type: string
        review_comment:
          type: string
        status:
          $ref: '#/components/schemas/IdentificationStatus'
        step_status:
          $ref: '#/components/schemas/IdentificationStepStatus'
        updated_at:
          format: date-time
          type: string
        url:
          type: string
        with_edd:
          type: boolean
      required:
        - id
        - status
        - created_at
        - updated_at
        - blocking_abilities
      title: Identification
      type: object
    ApiError:
      description: |-
        Standard error response returned to API clients for server errors.
        Includes a trace_id that clients can reference when reporting issues.
      properties:
        message:
          description: Human-readable error message
          type: string
        trace_id:
          description: Trace ID that can be used to look up request details in logs
          type: string
      required:
        - message
        - trace_id
      title: ApiError
      type: object
    IdentificationPreflightSummary:
      description: >-
        Curated, partner-safe summary of the async preflight pipeline

        (document/selfie analysis + workflow predictor) — backfilled onto an

        identification once the shadow worker finishes (see

        `controllers::identification_preflight_shadow`). Deliberately narrower
        than

        `ApiIdentificationPreflightResult`/`PreflightShadowDetails`: no internal

        level names, trace/correlation ids, or per-check evaluation names —
        those

        stay internal/backoffice-only.
      properties:
        missingInputs:
          description: |-
            Inputs the workflow predictor couldn't evaluate (e.g. a missing POI
            field) — likely_pass/inconclusive results can hinge on these.
          items:
            type: string
          type: array
        reasons:
          description: >-
            Curated, sanitized reasons the applicant may not pass
            (document/selfie

            issues, manifest-adjacent errors) — never a raw provider error.
          items:
            type: string
          type: array
        status:
          $ref: '#/components/schemas/ApiPreflightDecision'
        workflowErrors:
          items:
            $ref: '#/components/schemas/IdentificationPreflightWorkflowError'
          type: array
      required:
        - status
        - missingInputs
        - reasons
        - workflowErrors
      title: IdentificationPreflightSummary
      type: object
    IdentificationStatus:
      description: |
        The Process status of the identification

        The various state transitions an identification can go through.
      enum:
        - Pending
        - Processed
        - PendingReview
        - Approved
        - Declined
        - Expired
        - Archived
      type: string
    IdentificationStepStatus:
      anyOf:
        - $ref: '#/components/schemas/BusinessIdentificationStepStatus'
        - $ref: '#/components/schemas/PersonIdentificationStepStatus'
      type: object
    ApiPreflightDecision:
      enum:
        - likely_pass
        - fail
        - likely_fail
        - inconclusive
      type: string
    IdentificationPreflightWorkflowError:
      properties:
        code:
          type: string
        message:
          type: string
        missingPaths:
          items:
            type: string
          type: array
      required:
        - code
        - message
      title: IdentificationPreflightWorkflowError
      type: object
    BusinessIdentificationStepStatus:
      properties:
        company_beneficiaries:
          $ref: '#/components/schemas/VerificationStepDetail'
        company_data:
          $ref: '#/components/schemas/VerificationStepDetail'
        company_documents:
          $ref: '#/components/schemas/VerificationStepDetail'
        questionnaire:
          $ref: '#/components/schemas/VerificationStepDetail'
      title: BusinessIdentificationStepStatus
      type: object
    PersonIdentificationStepStatus:
      properties:
        identity:
          $ref: '#/components/schemas/VerificationStepDetail'
        proof_of_residence:
          $ref: '#/components/schemas/VerificationStepDetail'
        questionnaire:
          $ref: '#/components/schemas/VerificationStepDetail'
        selfie:
          $ref: '#/components/schemas/VerificationStepDetail'
      title: PersonIdentificationStepStatus
      type: object
    VerificationStepDetail:
      properties:
        comment:
          type: string
        result:
          $ref: '#/components/schemas/IdentificationStatus'
        retry:
          type: boolean
      required:
        - result
        - retry
      title: VerificationStepDetail
      type: object
  securitySchemes:
    ApiKeyAuth:
      description: API Key
      in: header
      name: X-API-Key
      type: apiKey

````