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

> ## Agent Instructions
> If you are an AI assistant operating Infinite for a user, read the skill first: https://docs.infinite.dev/agent-skill.md (setup per host, tool reference, rules for moving money, journeys).
> When operating Infinite for a user, use the MCP server. Sign in at https://bot.api.infinite.dev/mcp (production, acts as the user) or send `Authorization: Bearer <key>` to https://bot.api.infinite.dev/mcp/sse. Prefer its tools over raw HTTP; use REST only for steps no tool covers, and check `get_endpoint_schema` before guessing a request shape.
> Net-new Infinite Connect (org_connect) is operator-assisted: do not grant end users shared org_connect Auth Kit membership or the shared platform org API key — those credentials are org-wide on /v1. BYO org keys onboard under that customer's org id. Operator sessions should show org_connect in get_organization_info.
> The key decides the tools. Every organization key (`sk_sandbox_…` / `sk_live_…`) gets docs, onboarding, `get_account_balance`, and request logs for your own organization. BYO organizations add payees an agent will pay with `create_payee` (payable once ACTIVE). Platform Connect sessions instead get bound-customer payment lookups (`get_quote`, `get_transfer`, `list_transfers`, `list_account_balances`), payee drafts (`create_payee_draft` / `get_payee_draft`; screening only, never payable), and transfer drafts that wait for Infinite approval (`create_transfer_draft` / `get_transfer_draft`; never POST /v1/transfers). Where offered, platform `create_transfer` files a real transfer that Infinite holds in review before funding; it cannot be submitted from DRAFT.
> An agent key (`sk_sandbox_agent_…` / `sk_live_agent_…`) moves money within that agent's limits: `create_transfer` → `submit_transfer` → `wait_for_transfer`.
> On sandbox organization-key sessions, `sandbox_approve_customer` (makes the capabilities you pass READY, and related ones may turn READY too; `request_capabilities` is not needed), `sandbox_fund_account`, and `sandbox_complete_transfer` stand in for verification, funding, and settlement, so a whole flow runs from MCP. BYO keys can pass `customerId` on each call without binding; platform sessions must bind a customer first (`create_business_customer` auto-binds, or send `X-Infinite-On-Behalf-Of`).
> When searching documentation without a key, use the docs MCP at https://docs.infinite.dev/mcp.
> Start in sandbox (https://sandbox.api.infinite.dev). Do not use production unless the user explicitly asks.
> Confirm amount, currency, and payee with the user before any payment is submitted. Pass the invoice number as `reference` on `create_transfer`; the summary says what the payee will see.
> REST amounts are integer minor units (`"4000"` = 40.00 USD). MCP payment tools take exact decimal strings (`"40.00"`). Never mix them.
> Agent denials return `403 { denial: { code, message, window, limit, used, remaining, attemptedAmount, currency }, hint }` with decimal amounts; per-transfer denials omit `used` and `remaining`. Report them to the user; do not work around them.

# Save business customer verification

> Save complete business verification data for a BUSINESS customer.

Key features:
- Submit comprehensive business verification data
- Reference previously uploaded business and supporting documents via document IDs (doc_xxx)
- Optionally submit the customer for review in the same request via `?submit=true`

Data model covers the business verification payload:
- Legal name, business type, addresses, tax info, UBOs, business docs, regulatory info
- `associatedEntities` on this payload should contain only individual leaf beneficial owners and control persons
- If ownership passes through an intermediate business, create that business first via the associated entity endpoints and then create child entities with `parentEntityId` set to that business entity ID

Document workflow:
1. Upload documents using POST /documents (with customerId in body)
2. Confirm each document using POST /documents/:id/confirm
3. Save the complete verification data to this endpoint using document references (doc_xxx)

**Required for all files**:
1. Create a minimal customer record first using POST /customers/businesses with basic info (name, email, country code)
2. Upload documents using POST /documents (with customerId in body) and POST /documents/:id/confirm
3. Save the complete verification data to this endpoint using document references (doc_xxx)


## Required at submit

Every field on this endpoint is optional so you can save progress. Passing `submit=true`, or calling `POST /customers/{id}/submit`, requires the base business package:

* Legal name, business type, description, and 6-digit NAICS industry code
* Business email, phone, and website
* Tax identification number and registration date
* Registered address and physical address
* Account purpose, source of funds, estimated annual revenue, expected monthly payment volume, expected counterparty countries, expected monthly crypto volume, and primary target market
* At least one beneficial owner or control person

The authoritative checklist for a customer is [GET /customers/{id}/compliance](/api-reference/customers/get-customer-compliance-requirements). Enhanced diligence is not part of that base gate. When it applies, it is collected after submit.


## OpenAPI

````yaml post /v1/customers/{id}/verification/business
openapi: 3.0.0
info:
  title: Infinite API
  description: API for Infinite
  version: '1.0'
  contact: {}
servers:
  - url: https://sandbox.api.infinite.dev
    description: Sandbox
  - url: https://api.infinite.dev
    description: Production
security: []
tags:
  - name: Accounts
    description: Virtual and external account management
  - name: Customers
    description: Customer identity management
  - name: Documents
    description: Document upload and management
  - name: Fixed Routes
    description: Fixed route management
  - name: External Bank Accounts
    description: External bank account management
  - name: External Wallets
    description: External wallet management
  - name: Infinite Wallets
    description: Infinite Wallet management
  - name: Organizations
    description: Organization management
  - name: Quotes
    description: Quote creation and management
  - name: Transfers
    description: Money movement and transaction tracking
  - name: Verification
    description: Identity verification workflows
  - name: Terms of Service
    description: Terms of Service acceptance
  - name: Health
    description: System health and monitoring
  - name: Sandbox
    description: Sandbox utilities
paths:
  /v1/customers/{id}/verification/business:
    post:
      tags:
        - Customers
      summary: Save business customer verification
      description: >
        Save complete business verification data for a BUSINESS customer.


        Key features:

        - Submit comprehensive business verification data

        - Reference previously uploaded business and supporting documents via
        document IDs (doc_xxx)

        - Optionally submit the customer for review in the same request via
        `?submit=true`


        Data model covers the business verification payload:

        - Legal name, business type, addresses, tax info, UBOs, business docs,
        regulatory info

        - `associatedEntities` on this payload should contain only individual
        leaf beneficial owners and control persons

        - If ownership passes through an intermediate business, create that
        business first via the associated entity endpoints and then create child
        entities with `parentEntityId` set to that business entity ID


        Document workflow:

        1. Upload documents using POST /documents (with customerId in body)

        2. Confirm each document using POST /documents/:id/confirm

        3. Save the complete verification data to this endpoint using document
        references (doc_xxx)


        **Required for all files**:

        1. Create a minimal customer record first using POST
        /customers/businesses with basic info (name, email, country code)

        2. Upload documents using POST /documents (with customerId in body) and
        POST /documents/:id/confirm

        3. Save the complete verification data to this endpoint using document
        references (doc_xxx)
      operationId: CustomersController_submitBusinessVerification_v1
      parameters:
        - name: X-API-Key
          in: header
          description: API key
          required: false
          schema:
            type: string
        - name: id
          required: true
          in: path
          description: Customer ID
          schema:
            type: string
            example: cus_abc123
        - name: submit
          required: false
          in: query
          description: >-
            If true, submit the customer for review after saving verification
            data.
          schema:
            type: boolean
            example: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubmitBusinessCustomerVerificationDto'
      responses:
        '201':
          description: Verification submitted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmitCustomerVerificationResponseDto'
        '400':
          description: Invalid verification data or customer type mismatch
        '401':
          description: Unauthorized - Invalid or missing authentication credentials
      security:
        - bearer: []
      x-codeSamples:
        - lang: bash
          label: CLI
          source: >-
            # Requires: npm i -g @infinite_dev/cli && export
            INFINITE_API_KEY=sk_sandbox_...

            # Escape hatch for any endpoint: infinite api <METHOD> <path>

            infinite api POST /v1/customers/cus_abc123/verification/business \
              --body '<request-json>'
        - lang: text
          label: MCP
          source: >-
            Save business customer verification (cus_abc123).


            # Save business fields with MCP tool update_business_details (never
            submits). Attach doc_… slots with submit_customer_verification. Use
            search_industry_codes for NAICS industry.
components:
  schemas:
    SubmitBusinessCustomerVerificationDto:
      type: object
      properties:
        metadata:
          type: object
          description: Additional metadata
          example:
            source: mobile_app
            referrer: partner_xyz
          additionalProperties: true
        hasAgreedToTos:
          type: boolean
          description: >-
            Set to true to indicate the customer has agreed to the Terms of
            Service and Privacy Policy. When true, a TOS acceptance record will
            be automatically created. This is a convenience for API-based
            integrations - alternatively, you can use the /v1/tos endpoints to
            create a TOS acceptance record and pass the ID in
            metadata.infiniteTosAcceptanceId.
          example: true
        legalName:
          type: string
          description: Required at submit. Legal name of business
          example: Acme Corporation Inc.
        transliteratedLegalName:
          type: string
          description: Transliterated legal name
        tradeName:
          type: string
          description: Trade name / DBA. Separate multiple names with semicolons.
          example: Acme; Acme Pay
        transliteratedTradeName:
          type: string
          description: Transliterated trade name
        businessType:
          type: string
          description: Required at submit. Business type
          enum:
            - CORPORATION
            - LLC
            - PARTNERSHIP
            - GEN_PARTNERSHIP
            - LLP
            - LP
            - SOLE_PROPRIETORSHIP
            - NON_PROFIT
            - TRUST
            - COOPERATIVE
            - PRIVATE_LIMITED_COMPANY
            - SPV
            - JOINT_VENTURE
          example: LLC
        description:
          type: string
          description: Required at submit. Brief business description
          example: Software development and consulting services
        industry:
          type: string
          description: Required at submit. 6-digit NAICS industry classification code
          example: '522320'
          minLength: 6
          maxLength: 6
          pattern: ^\d{6}$
        industryCryptoSubtype:
          type: string
          description: Crypto-specific industry subtype. Required when isCrypto is true.
          enum:
            - PROTOCOL
            - EXCHANGE
            - INVESTMENT
            - LENDER
            - MARKET_MAKER
            - SAAS
            - MINER
        industryFinancialServicesSubtype:
          type: string
          description: Financial-services-specific industry subtype
          enum:
            - GAMING
            - CROWD_FUNDING
            - BANK
            - FUND
            - INSURANCE
            - RIA
            - INVESTMENT_MANAGER
            - MSB
            - NBFI
            - PAYMENT_PROCESSOR
            - VASP
        industryExplanation:
          type: string
          description: Additional industry explanation
        isCrypto:
          type: boolean
          description: Set true if the business operates in crypto or digital assets.
          example: false
        email:
          type: string
          description: >-
            Required at submit. Business email address. Use an email on the
            company domain when available; personal email domains such as Gmail
            may require additional due diligence.
          example: contact@acme.com
        phone:
          type: string
          description: Required at submit. Business phone number in E.164 format
          example: '+14155551234'
        website:
          type: string
          description: Required at submit. Primary website
          example: https://acme.com
        otherWebsites:
          description: Other websites and social media
          type: array
          items:
            type: string
        registeredAddress:
          description: >-
            Required at submit. Registered address. Use the nested
            transliterated field for Latin character versions of non-Latin
            addresses.
          allOf:
            - $ref: '#/components/schemas/AddressDto'
        physicalAddress:
          description: >-
            Required at submit. Physical business address where business
            actually operates. Use the nested transliterated field for Latin
            character versions.


            ⚠️ IMPORTANT RESTRICTIONS:

            • Cannot be a virtual address or registered agent address

            • Cannot be a PO Box

            • Wyoming and Delaware addresses will be flagged for additional
            review

            • If business operates remotely, provide the residential address of
            the control person

            • Proof of address may be required if location signals are
            inconsistent
          allOf:
            - $ref: '#/components/schemas/AddressDto'
        isRemoteCompany:
          type: boolean
          description: >-
            Set true when the business operates remotely from an owner or
            director address.
          example: false
        registrationDate:
          type: string
          description: Required at submit. Date of business registration (YYYY-MM-DD)
          example: '2015-06-01'
        registrationNumber:
          type: string
          description: >-
            Business registration number issued by the state/authority when the
            business was registered (e.g., LLC filing number, corporation
            charter number). This is different from the tax identification
            number.
          example: '123456789'
        taxIdentificationNumber:
          type: string
          description: >-
            Required at submit. Tax identification number issued by the tax
            authority (e.g., EIN in the US, VAT number in EU). This is different
            from the business registration number.


            Validated against country-specific formats when countryCode is
            provided. Accepts NOT_APPLICABLE when no tax ID is available. If the
            value does not match the expected format, prefix with OVERRIDE:
            (e.g. OVERRIDE:12-3456789) to store it as-is. These should be used
            sparingly — missing or overridden tax IDs may trigger additional
            customer due diligence.
          example: 12-3456789
        accountPurpose:
          type: string
          description: Required at submit. Purpose of account
          enum:
            - PAYROLL
            - VENDOR_PAYMENTS
            - TREASURY
            - OPERATIONS
            - CAPITAL_DEPLOYMENT
            - CROSS_BORDER_PAYMENTS
            - STABLECOIN_CONVERSION
            - ECOMMERCE
            - OTHER
        requestedCapabilities:
          type: array
          description: Capabilities requested by the customer
          items:
            type: string
            enum:
              - USD_ACH_PAYIN
              - USD_ACH_PAYOUT
              - USD_WIRE_PAYIN
              - USD_WIRE_PAYOUT
              - USD_BALANCE
              - USD_YIELD
              - SWIFT_PAYIN
              - SWIFT_PAYOUT
              - STABLECOIN_PAYIN
              - STABLECOIN_PAYOUT
              - STABLECOIN_SWAPS
              - AED_FX_PAYOUT
              - AUD_FX_PAYOUT
              - BHD_FX_PAYOUT
              - BOB_FX_PAYOUT
              - BRL_FX_PAYOUT
              - CLP_FX_PAYOUT
              - CNY_FX_PAYOUT
              - COP_FX_PAYOUT
              - DOP_FX_PAYOUT
              - EGP_FX_PAYOUT
              - EUR_FX_PAYOUT
              - GBP_FX_PAYOUT
              - HKD_FX_PAYOUT
              - IDR_FX_PAYOUT
              - INR_FX_PAYOUT
              - JPY_FX_PAYOUT
              - KRW_FX_PAYOUT
              - KWD_FX_PAYOUT
              - MXN_FX_PAYOUT
              - MYR_FX_PAYOUT
              - PEN_FX_PAYOUT
              - PHP_FX_PAYOUT
              - PYG_FX_PAYOUT
              - QAR_FX_PAYOUT
              - SAR_FX_PAYOUT
              - SGD_FX_PAYOUT
              - THB_FX_PAYOUT
              - TRY_FX_PAYOUT
              - TWD_FX_PAYOUT
              - USD_FX_PAYOUT
              - VND_FX_PAYOUT
        accountPurposeExplanation:
          type: string
          description: Account purpose explanation (required if other)
        sourceOfFunds:
          type: string
          description: Required at submit. Source of funds
          enum:
            - BUSINESS_REVENUE
            - INVESTMENT
            - OWNER_CAPITAL
            - LOAN
            - GRANTS
            - EQUITY
            - INHERITANCE
            - GIFT
            - OTHER
        sourceOfFundsDescription:
          type: string
          description: Source of funds description
        estimatedAnnualRevenueUsd:
          type: string
          description: Required at submit. Estimated annual revenue in USD
          enum:
            - PRE_REVENUE
            - LESS_THAN_10K
            - 10K_TO_50K
            - 50K_TO_100K
            - 100K_TO_500K
            - 500K_TO_1M
            - 1M_TO_5M
            - 5M_TO_10M
            - 10M_TO_50M
            - 50M_TO_250M
            - MORE_THAN_250M
            - LESS_THAN_100K
        expectedMonthlyPaymentsUsd:
          type: number
          description: >-
            Required at submit. Expected monthly fiat payment volume in
            USD-equivalent
          example: 50000
        expectedCounterpartyCountries:
          description: Required at submit. Expected counterparty countries
          example:
            - US
            - CA
          type: array
          items:
            type: string
        expectedCryptoMonthlyVolume:
          type: number
          description: Required at submit. Expected monthly crypto volume in USD-equivalent
          example: 250000
        expectedMonthlyAch:
          type: number
          description: Expected monthly ACH volume in USD-equivalent
          example: 100000
        expectedMonthlyWire:
          type: number
          description: Expected monthly wire volume in USD-equivalent
          example: 500000
        primaryTargetMarket:
          type: string
          description: >-
            Required at submit. Primary target market. RETAIL = B2C (consumers),
            COMMERCIAL = B2B (businesses), GOVERNMENT = B2G (government
            entities), OTHER = another market not covered by the standard
            options.
          enum:
            - RETAIL
            - COMMERCIAL
            - GOVERNMENT
            - OTHER
        primaryTargetMarketExplanation:
          type: string
          description: >-
            Primary target market explanation (required if primaryTargetMarket
            is OTHER)
        moneyServicesDescription:
          type: string
          description: >-
            Money services description. Collected through enhanced diligence
            when required.
        complianceScreeningExplanation:
          type: string
          description: >-
            Compliance screening explanation. Collected through enhanced
            diligence when required.
        operatesInProhibitedCountries:
          type: boolean
          description: Operates in prohibited countries
          example: false
        highRiskActivities:
          type: array
          description: High risk activities the business engages in
          items:
            type: string
            enum:
              - MONEY_SERVICES
              - LENDING_BANKING
              - OTC_FX_CRYPTO_BROKERAGE
              - HOLD_CLIENT_FUNDS
              - INVESTMENT_SERVICES
              - SAFE_DEPOSIT_BOX
              - PRECIOUS_METALS_STONES_JEWELRY
              - NICOTINE_TOBACCO
              - MARIJUANA
              - PHARMACEUTICALS
              - THIRD_PARTY_PAYMENT_PROCESSING
              - ADULT_ENTERTAINMENT
              - WEAPONS_FIREARMS_EXPLOSIVES
              - GAMBLING
        highRiskActivitiesExplanation:
          type: string
          description: >-
            Explanation of high risk activities (required if high risk
            activities present)
        hasMaterialIntermediaryOwnership:
          type: boolean
          description: Has intermediate legal entity ownership (25%+)
        ownershipThreshold:
          type: number
          description: Ownership threshold percentage (0-100, default 25)
          example: 25
        associatedEntities:
          description: >-
            Required at submit. At least one beneficial owner or control person.
            Submit only individual leaf beneficial owners and control persons
            here. If ownership passes through an intermediate business, create
            that business first via the associated entity endpoints and then
            create its child entities with parentEntityId set to that business
            entity ID.
          type: array
          items:
            $ref: '#/components/schemas/VerificationAssociatedEntityDto'
        supportingDocuments:
          description: >-
            Supporting documents (business formation, ownership info,
            license/regulatory registration if applicable). Required for full
            KYB verification.
          type: array
          items:
            $ref: '#/components/schemas/DocumentUploadDto'
        businessFormationDocuments:
          description: >-
            Business formation documents such as articles of incorporation or an
            operating agreement.
          type: array
          items:
            $ref: '#/components/schemas/DocumentUploadDto'
        ownershipInformationDocuments:
          description: >-
            Ownership information documents such as a cap table, shareholder
            registry, or trust deed.
          type: array
          items:
            $ref: '#/components/schemas/DocumentUploadDto'
        businessAddressProof:
          description: Business address proof documents for business EDD.
          type: array
          items:
            $ref: '#/components/schemas/DocumentUploadDto'
        amlPolicy:
          description: AML / BSA policy documents for money services businesses.
          type: array
          items:
            $ref: '#/components/schemas/DocumentUploadDto'
        directorsRegistry:
          description: Directors registry documents for business EDD.
          type: array
          items:
            $ref: '#/components/schemas/DocumentUploadDto'
        proofOfSignatoryAuthority:
          description: >-
            Proof of signatory authority documents such as a board resolution or
            certificate of incumbency.
          type: array
          items:
            $ref: '#/components/schemas/DocumentUploadDto'
        msbLicense:
          description: MSB license documents when applicable.
          type: array
          items:
            $ref: '#/components/schemas/DocumentUploadDto'
        bankStatements:
          description: >-
            Bank statements covering the last 3 months. Required for business
            EDD.
          type: array
          items:
            $ref: '#/components/schemas/DocumentUploadDto'
        signedAgreementId:
          type: string
          description: >-
            Signed terms of service agreement ID. Use POST /v1/tos/generate to
            create a TOS agreement and obtain the ID. See Terms of Service
            documentation for details.
          example: tos_abc123
        ipAddress:
          type: string
          description: Client IP address for fraud detection
          example: 192.168.1.1
    SubmitCustomerVerificationResponseDto:
      type: object
      properties:
        customerId:
          type: string
          description: Customer ID
          example: cus_abc123
        status:
          type: string
          description: Customer status after saving verification data
          example: DRAFT
        submittedAt:
          type: string
          description: >-
            Submission timestamp when the customer has actually been submitted
            for review.
          example: '2026-09-15T10:30:00Z'
        documentIds:
          description: Document IDs uploaded
          example:
            - doc_abc123
            - doc_xyz789
          type: array
          items:
            type: string
        missingRequirements:
          description: >-
            Merged list of missing fields and documents for full verification
            (data is saved but customer remains in DRAFT)
          example:
            - requirementType: FIELD
              key: metadata.infiniteTosAcceptanceId
              displayName: Infinite Terms of Service & Privacy Policy
            - requirementType: DOCUMENT
              key: identity.government_id_front
              displayName: Government ID
          type: array
          items:
            $ref: '#/components/schemas/MissingComplianceRequirementDto'
        reviewWarnings:
          description: >-
            Document validation warnings that did not block submission and
            should be manually reviewed.
          example:
            - >-
              businessData.businessAddressProof[0] failed AI proof-of-address
              validation (confidence 0.62): The address appears similar but the
              issue date is unclear.
          type: array
          items:
            type: string
      required:
        - customerId
        - status
        - documentIds
    AddressDto:
      type: object
      properties:
        addressLine1:
          type: string
          description: Address line 1
          example: 123 Main Street
          maxLength: 1024
        addressLine2:
          type: string
          description: Address line 2 (apartment, suite, etc.)
          example: Apt 4B
          maxLength: 1024
        city:
          type: string
          description: City
          example: San Francisco
          maxLength: 256
        state:
          type: string
          description: State / Province
          example: CA
          maxLength: 256
        postalCode:
          type: string
          description: >-
            Postal code / ZIP code. May be empty for countries without a
            postal-code system, including the United Arab Emirates.
          example: '94102'
          maxLength: 50
        country:
          type: string
          description: Country code (ISO 3166-2)
          example: US
          minLength: 2
          maxLength: 2
        transliterated:
          description: >-
            Transliterated address fields (Latin characters) for non-Latin
            addresses. Required when address contains non-Latin characters
            (Chinese, Arabic, Cyrillic, etc.).
          allOf:
            - $ref: '#/components/schemas/TransliteratedAddressDto'
      required:
        - addressLine1
        - city
        - postalCode
        - country
    VerificationAssociatedEntityDto:
      type: object
      properties:
        associatedEntityId:
          type: string
          description: Stable associated entity identifier
          example: asp_abc123
        entityType:
          type: string
          enum:
            - INDIVIDUAL
            - BUSINESS
          description: Type of entity - INDIVIDUAL (person) or BUSINESS (company)
          example: BUSINESS
          default: INDIVIDUAL
        parentEntityId:
          type: string
          description: >-
            Parent entity ID for nested ownership. Use the associated business
            entity ID returned from the associated entity endpoints when linking
            a child owner beneath an intermediate business owner.
          example: asp_abc123
        firstName:
          type: string
          description: First name (required for INDIVIDUAL)
        lastName:
          type: string
          description: Last name (required for INDIVIDUAL)
        middleName:
          type: string
          description: Middle name
        nickname:
          type: string
          description: Nickname
        dateOfBirth:
          type: string
          description: Date of birth (YYYY-MM-DD) - required for INDIVIDUAL
          example: '1990-01-15'
        taxResidenceCountry:
          type: string
          description: >-
            Optional. Country of tax residence (ISO 3166-1 alpha-2). Provide
            only when it differs from nationality; tax ID format validation
            falls back to nationality when omitted.
          example: GB
        taxIdentificationNumber:
          type: string
          description: >-
            Tax identification number (e.g., SSN for individuals, EIN for
            businesses). Required for US nationals or US residents and validated
            against country-specific formats when provided. Accepts
            NOT_APPLICABLE when no tax ID is available, except for US nationals
            or residents, who must provide a real SSN/ITIN. Nationals or
            residents of countries that do not issue personal tax IDs (e.g. the
            Cayman Islands) may record an all-zeros placeholder. If the value
            does not match the expected format, prefix with OVERRIDE:. These
            should be used sparingly — missing or overridden tax IDs may trigger
            additional customer due diligence.
        taxIdentificationDocumentType:
          type: string
          description: >-
            Tax identification document type when the issuing country supports
            multiple tax ID types.
          example: UTR
        transliteratedFirstName:
          type: string
          description: Transliterated first name
        transliteratedMiddleName:
          type: string
          description: Transliterated middle name
        transliteratedLastName:
          type: string
          description: Transliterated last name
        businessName:
          type: string
          description: Business name (required for BUSINESS)
        registrationNumber:
          type: string
          description: Business registration number
        dateOfIncorporation:
          type: string
          description: Date of incorporation (YYYY-MM-DD)
          example: '2020-01-15'
        businessAddress:
          description: Business address
          allOf:
            - $ref: '#/components/schemas/AddressDto'
        countryCode:
          type: string
          description: >-
            Country code (ISO 3166-1 alpha-2). Nationality for individuals,
            country of incorporation for businesses.
          example: US
        email:
          type: string
          description: Email address. Required when generateVerificationLink is true.
        phone:
          type: string
          description: Phone number
        address:
          description: >-
            Address. Use the nested transliterated field for Latin character
            versions of non-Latin addresses.
          allOf:
            - $ref: '#/components/schemas/AddressDto'
        hasOwnership:
          type: boolean
          description: >-
            Whether this entity is an owner. For an individual with indirect
            ownership whose percentage is not quantified, omit
            ownershipPercentage and set this to true to identify them as a
            beneficial owner.
        hasControl:
          type: boolean
          description: >-
            Has significant control (e.g. CEO, managing member). A control
            person satisfies the business submission requirement when no
            individual holds 25% or more effective ownership.
        ownershipPercentage:
          type: number
          description: Ownership percentage
          minimum: 0
          maximum: 100
        isSigner:
          type: boolean
          description: Has signing authority
        isDirector:
          type: boolean
          description: Is a director
        role:
          type: string
          description: Structured role at the company.
          enum:
            - CEO
            - CFO
            - COO
            - PRESIDENT
            - GENERAL_COUNSEL
            - MANAGING_MEMBER
            - TREASURER
            - OTHER
        governmentId:
          description: Government ID (for INDIVIDUAL)
          allOf:
            - $ref: '#/components/schemas/VerificationAssociatedEntityGovernmentIdDto'
        proofOfAddress:
          description: >-
            Proof of address document (for INDIVIDUAL). Required for recipients
            using the SWIFT overlay, not for the SWIFT transfer itself.
            Acceptable documents: utility bill, bank statement, or lease
            agreement dated within the last 3 months.
          allOf:
            - $ref: '#/components/schemas/ProofOfAddressDto'
        supportingDocuments:
          description: Supporting documents
          type: array
          items:
            $ref: '#/components/schemas/DocumentUploadDto'
        attestedOwnershipStructureAt:
          type: string
          description: Timestamp when ownership structure was attested
          example: '2026-06-01T10:45:05Z'
        relationshipDate:
          type: string
          description: >-
            Date when the relationship with this entity was established
            (YYYY-MM-DD). For individuals, this is when they became an
            owner/director. For businesses, this is when the ownership structure
            was established.
          example: '2020-01-15'
        generateVerificationLink:
          type: boolean
          description: >-
            When true, generates a verification link for this UBO to complete
            their KYC. The link will be returned in the response. Requires
            entityType to be INDIVIDUAL, firstName, lastName, and email to be
            provided.
          example: true
        sendInvite:
          type: boolean
          description: >-
            When true (and generateVerificationLink is also true), sends an
            email invitation to the UBO to complete their KYC verification. The
            email includes the verification link and expiration details.
          example: true
      required:
        - entityType
        - countryCode
        - hasOwnership
        - hasControl
    DocumentUploadDto:
      type: object
      properties:
        requirementId:
          type: string
          description: >-
            Stable identifier for the custom document requirement this upload
            satisfies
        type:
          type: string
          description: >-
            General document category. Optional for context-specific uploads
            where the field already implies the document type.
          enum:
            - IDENTITY
            - LIVENESS_CHECK
            - PROOF_OF_ADDRESS
            - INVOICE
            - CONTRACT
            - BANK_STATEMENT
            - BUSINESS_LICENSE
            - ARTICLES_OF_INCORPORATION
            - ARTICLES_OF_ASSOCIATION
            - CERTIFICATE_OF_FORMATION
            - CERTIFICATE_OF_INCUMBENCY
            - OPERATING_AGREEMENT
            - PARTNERSHIP_AGREEMENT
            - OWNERSHIP_STRUCTURE
            - SHAREHOLDER_AGREEMENT
            - STOCK_CERTIFICATE
            - TAX_RETURN
            - FINANCIAL_STATEMENT
            - MARKETING_MATERIALS
            - DOMAIN_OWNERSHIP_PROOF
            - BUSINESS_PLAN
            - BILL_OF_LADING
            - AML_POLICY
            - AML_COMFORT_LETTER
            - FUNDS_FLOW_DIAGRAM
            - GOOD_STANDING_CERTIFICATE
            - TIN_VERIFICATION
            - MSB_LICENSE
            - DIRECTORS_REGISTRY
            - OWNERSHIP_CHART
            - PROOF_OF_SIGNATORY_AUTHORITY
            - PROOF_OF_SOURCE_OF_FUNDS
            - PROOF_OF_ENTITY_NAME_CHANGE
            - REMOTE_ADDRESS_ATTESTATION
            - E_SIGNATURE_CERTIFICATE
            - COMPLIANCE_NOTES
            - PROOF_OF_SOURCE_OF_WEALTH
            - TAX_EXEMPT_ENTITY_CONFIRMATION
            - OTHER
          example: PROOF_OF_ADDRESS
        subtype:
          type: string
          description: >-
            Specific document type. Optional for generic uploads when the
            subtype is not material to processing.
          enum:
            - GOVERNMENT_ID_FRONT
            - GOVERNMENT_ID_BACK
            - SELFIE
            - UTILITY_BILL
            - LEASE_AGREEMENT
          example: UTILITY_BILL
        description:
          type: string
          description: Description of the document
          example: Passport issued in 2020
        remarks:
          type: string
          description: Free-form remarks or notes about the document
          example: Uploaded to support proof of business address
          maxLength: 1000
        file:
          type: string
          description: >-
            Document ID reference (`doc_xxx`) created via the document upload
            flow. Upload the file with `POST /documents`, confirm it, then pass
            the resulting document ID here.
          example: doc_abc123
      required:
        - file
    MissingComplianceRequirementDto:
      type: object
      properties:
        requirementType:
          type: string
          description: Requirement category
          enum:
            - FIELD
            - DOCUMENT
          example: FIELD
        key:
          type: string
          description: Stable requirement key or field path
          example: businessData.legalName
        displayName:
          type: string
          description: Human-readable requirement label
          example: Legal Name
        entityId:
          type: string
          description: >-
            Associated entity ID when the missing requirement belongs to a
            beneficial owner or control person.
          example: asp_abc123
        entityDisplayName:
          type: string
          description: >-
            Human-readable associated entity name when the missing requirement
            belongs to a beneficial owner or control person.
          example: Jane Owner
      required:
        - requirementType
        - key
        - displayName
    TransliteratedAddressDto:
      type: object
      properties:
        addressLine1:
          type: string
          description: Transliterated address line 1 (Latin characters)
          example: 123 Main Street
          maxLength: 1024
        addressLine2:
          type: string
          description: Transliterated address line 2 (Latin characters)
          example: Apt 4B
          maxLength: 1024
        city:
          type: string
          description: Transliterated city (Latin characters)
          example: Beijing
          maxLength: 256
        state:
          type: string
          description: Transliterated state/province (Latin characters)
          example: Hebei
          maxLength: 256
    VerificationAssociatedEntityGovernmentIdDto:
      type: object
      properties:
        type:
          type: string
          enum:
            - PASSPORT
            - DRIVERS_LICENSE
            - NATIONAL_ID
            - MILITARY_ID
            - PERMANENT_RESIDENCY_ID
            - STATE_OR_PROVINCIAL_ID
        countryCode:
          type: string
          description: Country of issuance (ISO 3166-1 alpha-2)
        number:
          type: string
          description: ID number
        issuanceDate:
          type: string
          description: Issuance date (YYYY-MM-DD)
        expirationDate:
          type: string
          description: Expiration date (YYYY-MM-DD), or null for non-expiring IDs
          nullable: true
        frontImage:
          type: string
          description: Front image document ID reference
        backImage:
          type: string
          description: Back image document ID reference
        selfie:
          type: string
          description: Selfie document ID reference
    ProofOfAddressDto:
      type: object
      properties:
        type:
          type: string
          description: Type of proof of address document
          enum:
            - UTILITY_BILL
            - BANK_STATEMENT
            - LEASE_AGREEMENT
            - GOVERNMENT_LETTER
            - OTHER
          example: UTILITY_BILL
        countryCode:
          type: string
          description: Country code (ISO 3166-2)
          example: US
        issueDate:
          type: string
          description: >-
            Issue date of the document (YYYY-MM-DD). Must be within the last 90
            days.
          example: '2026-10-01'
        file:
          type: string
          description: >-
            Proof of address document ID reference (`doc_xxx`). Upload the file
            with `POST /documents`, confirm it, then pass the resulting document
            ID here. Accepted formats for the uploaded file are PDF, JPEG, PNG,
            and WEBP.
          example: doc_abc123
      required:
        - type
        - countryCode
        - issueDate
        - file
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: API Key
      type: http
      description: API Key in Bearer format (e.g., Bearer sk_test_...)

````

## Related topics

- [Save individual customer verification](/api-reference/customers/save-individual-customer-verification.md)
- [Verification](/concepts/verification.md)
- [Customers](/concepts/customers.md)
- [Infinite skill for AI assistants](/agent-skill.md)
- [Submit customer for verification](/api-reference/customers/submit-customer-for-verification.md)
