> ## Documentation Index
> Fetch the complete documentation index at: https://docs.polygon.technology/llms.txt
> Use this file to discover all available pages before exploring further.

# Update a customer

> Partial update. Only include fields you want to change. Compliance-relevant changes (residentialAddress, lastName, identifyingInformation, ipAddress) may trigger endorsement re-evaluation. Including endorsement names in the endorsements array explicitly triggers re-evaluation.



## OpenAPI

````yaml /api-reference/openapi.yaml patch /customers/{customerId}
openapi: 3.0.3
info:
  title: Polygon OMS Public API
  version: v26.05.28-0001
  description: >-
    Unified API for moving money between crypto and fiat. Three ways to move
    money: Transactions (instant, wallet or card funded, including Cash-In for
    in-person cash deposits), Deposit Addresses (reusable crypto deposit
    configurations), and Virtual Accounts (dedicated bank accounts that
    auto-convert fiat to crypto). Standard transactions follow a two-step flow:
    create a Quote (pricing), then create a Transaction (execution). Cash-in
    codes generate a one-time deposit code for in-person cash deposits at retail
    locations.
  contact:
    name: Polygon OMS
    url: https://oms.polygon.technology
servers:
  - url: https://sandbox-api.polygon.technology/v0.9
    description: Sandbox
  - url: https://api.polygon.technology/v0.9
    description: Production
security:
  - BearerAuth: []
tags:
  - name: Auth
    description: Authentication via FrontEgg
  - name: Customers
    description: Customer management and KYC
  - name: Customer
  - name: Wallet
  - name: Quote
  - name: Transaction
  - name: Webhook
  - name: CashIns
  - name: CashLocation
  - name: Sandbox
  - name: Simulation
paths:
  /customers/{customerId}:
    patch:
      tags:
        - Customers
      summary: Update a customer
      description: >-
        Partial update. Only include fields you want to change.
        Compliance-relevant changes (residentialAddress, lastName,
        identifyingInformation, ipAddress) may trigger endorsement
        re-evaluation. Including endorsement names in the endorsements array
        explicitly triggers re-evaluation.
      operationId: updateCustomer
      parameters:
        - name: customerId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerUpdate'
      responses:
        '200':
          description: Customer updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Customer'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    CustomerUpdate:
      type: object
      description: >-
        Partial update: only send the fields you want to change. All optional
        fields from CustomerRequest can be updated (including ipAddress). PII
        fields are write-only.
      properties:
        firstName:
          type: string
        middleName:
          type: string
        lastName:
          type: string
        email:
          type: string
        phone:
          type: string
        birthDate:
          type: string
          writeOnly: true
        nationality:
          type: string
        ipAddress:
          type: string
          writeOnly: true
        externalId:
          type: string
        signedAgreement:
          type: boolean
          description: One-way operation. Cannot be set back to false.
        residentialAddress:
          type: object
          writeOnly: true
          properties:
            line1:
              type: string
            line2:
              type: string
            city:
              type: string
            state:
              type: string
            country:
              type: string
            zipCode:
              type: string
        identifyingInformation:
          type: array
          writeOnly: true
          description: >-
            Appends to existing array. To replace an entry, submit the same type
            with updated fields.
          items:
            type: object
            properties:
              type:
                type: string
                enum:
                  - ssn
                  - itin
                  - driversLicense
                  - passport
              issuingCountry:
                type: string
              number:
                type: string
        endorsements:
          type: array
          description: >-
            Request additional endorsements. New endorsements are added;
            existing ones are not removed. Including endorsement names triggers
            re-evaluation.
          items:
            type: string
            enum:
              - basic
              - cryptoCustody
              - usd
        metadata:
          type: object
          additionalProperties:
            type: string
    Customer:
      type: object
      description: >-
        Customer response object. PII fields (birthDate, residentialAddress,
        ipAddress, identifyingInformation) are write-only: accepted in
        POST/PATCH but never returned in responses.
      properties:
        id:
          type: string
          x-go-type-skip-optional-pointer: true
          example: cst_01H9Xa8F5dN6mP3q
        object:
          type: string
          x-go-type-skip-optional-pointer: true
          example: customer
        type:
          type: string
          x-go-type-skip-optional-pointer: true
          enum:
            - individual
          description: Customer type. Only individual is supported for MVP.
          example: individual
        firstName:
          type: string
          x-go-type-skip-optional-pointer: true
          nullable: true
          example: Jane
        middleName:
          type: string
          x-go-type-skip-optional-pointer: true
          nullable: true
          example: null
        lastName:
          type: string
          x-go-type-skip-optional-pointer: true
          nullable: true
          example: Smith
        email:
          type: string
          x-go-type-skip-optional-pointer: true
          nullable: true
          example: jane@example.com
        phone:
          type: string
          x-go-type-skip-optional-pointer: true
          nullable: true
          description: Primary phone in E.164 format.
          example: '+12125551234'
        nationality:
          type: string
          x-go-type-skip-optional-pointer: true
          nullable: true
          description: ISO 3166-1 alpha-2 country code.
          example: US
        externalId:
          type: string
          x-go-type-skip-optional-pointer: true
          nullable: true
          description: Developer's own user ID for cross-referencing.
          example: usr_12345
        status:
          type: string
          x-go-type-skip-optional-pointer: true
          enum:
            - active
            - inactive
          description: >-
            active or inactive. Inactive customers cannot create new
            transactions. No intermediate states: all granularity lives in
            endorsement statuses.
          example: active
        signedAgreement:
          type: boolean
          x-go-type-skip-optional-pointer: true
          description: Whether the customer has accepted OMS terms of service.
          example: true
        signedAgreementAt:
          type: string
          format: date-time
          nullable: true
          description: >-
            Timestamp when signedAgreement was set to true. Null if not yet
            signed.
          example: '2026-03-20T14:15:22Z'
        wallets:
          type: array
          description: >-
            Simplified flat view: one entry per wallet-asset combination. Use
            GET /wallets/{id} for the full representation.
          items:
            type: object
            properties:
              id:
                type: string
                example: wlt_01H9Xb3K7nM2pQ4r
              type:
                type: string
                example: custodial
              address:
                type: string
                example: '0x7B3a9F2c4D1eA8bF6390cE5d2B7fA104C8e3D9b1'
              network:
                type: string
                example: polygon
              asset:
                type: string
                example: usdc
              balance:
                type: string
                example: '1234.56'
              estimatedValueUsd:
                type: string
                example: '1234.56'
              createdAt:
                type: string
                format: date-time
        endorsements:
          type: array
          description: >-
            Endorsements track KYC/compliance status. Types: basic,
            cryptoCustody, usd. Statuses use SCREAMING_CASE: INACTIVE, PENDING,
            ISSUES, ACTIVE, REJECTED, REVOKED_ISSUES, OFFBOARDED.
          items:
            type: object
            properties:
              name:
                type: string
                enum:
                  - basic
                  - cryptoCustody
                  - usd
              status:
                type: string
                enum:
                  - INACTIVE
                  - PENDING
                  - ISSUES
                  - ACTIVE
                  - REJECTED
                  - REVOKED_ISSUES
                  - OFFBOARDED
              rejectionReasons:
                type: array
                items:
                  type: object
                  properties:
                    developerReason:
                      type: string
                    reason:
                      type: string
              requirements:
                type: object
                description: >-
                  Tracks what is complete, pending, missing, or has issues for
                  this endorsement.
                properties:
                  complete:
                    type: array
                    items:
                      type: string
                  pending:
                    type: array
                    items:
                      type: string
                  missing:
                    type: array
                    nullable: true
                    items:
                      type: string
                  issues:
                    type: array
                    items:
                      type: string
        metadata:
          type: object
          nullable: true
          additionalProperties:
            type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    ErrorResponse:
      type: object
      required:
        - error
        - code
        - msg
        - status
      description: >-
        Canonical OMSX error envelope, matching the webrpc shape every OMSX
        service emits. Names and numeric codes are stable identifiers defined in
        `schema/omsx/errors.ridl`.
      properties:
        error:
          type: string
          description: Stable error name from schema/omsx/errors.ridl
          example: Unauthorized
        code:
          type: integer
          description: Stable numeric code from schema/omsx/errors.ridl
          example: 1000
        msg:
          type: string
          description: Human-readable message (kept stable across releases)
          example: unauthorized access
        cause:
          type: string
          description: >-
            Optional internal cause for operator triage; filtered before
            reaching end customers
          example: signature
        status:
          type: integer
          description: HTTP status mirrored in the body for client convenience
          example: 401
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Token from POST /auth/token

````