Lightspark KYC/KYB Verifications API

Endpoints for Know Your Customer (KYC) and Know Your Business (KYB) verification, including managing beneficial owners and triggering verification for customers.

Operations 8

POST /beneficial-owners Create a beneficial owner #
GET /beneficial-owners List beneficial owners #
GET /beneficial-owners/{beneficialOwnerId} Get a beneficial owner #
PATCH /beneficial-owners/{beneficialOwnerId} Update a beneficial owner #
POST /verifications Submit customer for verification #
GET /verifications List verifications #
GET /verifications/{verificationId} Get a verification #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/lightspark-kyc-kyb-verifications-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

lightspark-kyc-kyb-verifications-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Grid KYC/KYB Verifications API
  description: 'API for managing global payments on the open Money Grid. Built by Lightspark. See the full documentation at https://docs.lightspark.com/.

    '
  version: '2025-10-13'
  contact:
    name: Lightspark Support
    email: support@lightspark.com
  license:
    name: Proprietary
    url: https://lightspark.com/terms
servers:
- url: https://api.lightspark.com/grid/2025-10-13
  description: Production server
security:
- BasicAuth: []
- AgentAuth: []
tags:
- name: KYC/KYB Verifications
  description: Endpoints for Know Your Customer (KYC) and Know Your Business (KYB) verification, including managing beneficial owners and triggering verification for customers.
paths:
  /customers/{customerId}/kyc-link:
    parameters:
    - name: customerId
      in: path
      description: The Grid customer ID to generate a KYC link for.
      required: true
      schema:
        type: string
    post:
      summary: Generate a hosted KYC link for an existing customer
      description: 'Generate a single-use hosted URL the customer can complete to verify their identity, and (where supported) a provider-specific `token` for embedding the verification flow directly via the provider''s SDK.


        The customer must already exist — create them with `POST /customers` first. Calling this endpoint does not change the customer''s `kycStatus`; the customer remains `PENDING` until they complete (or fail) the hosted flow.


        Each call returns a fresh link. Previously-issued links are not invalidated, but they remain single-use and will expire on their own. For request-level retry safety, include an `Idempotency-Key` header.

        '
      operationId: createCustomerKycLink
      tags:
      - KYC/KYB Verifications
      security:
      - BasicAuth: []
      parameters:
      - name: Idempotency-Key
        in: header
        required: false
        description: 'A unique identifier for the request. If the same key is sent multiple times, the server will return the same response as the first request.

          '
        schema:
          type: string
          example: <uuid>
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/KycLinkCreateRequest'
      responses:
        '201':
          description: KYC link generated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/KycLinkResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error400'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error401'
        '404':
          description: Customer not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error404'
        '409':
          description: The customer's payment provider requires contact verification and the customer's email and phone are not both `VERIFIED` yet. Complete contact verification (see `verify-email` and `verify-phone`) before generating a KYC link.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error409'
        '500':
          description: Internal service error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error500'
  /beneficial-owners:
    post:
      summary: Create a beneficial owner
      description: 'Add a beneficial owner, director, or company officer to a business customer. The beneficial owner will go through KYC verification automatically.

        '
      operationId: createBeneficialOwner
      tags:
      - KYC/KYB Verifications
      security:
      - BasicAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BeneficialOwnerCreateRequest'
      responses:
        '201':
          description: Beneficial owner created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BeneficialOwner'
        '400':
          description: Bad request - Invalid parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error400'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error401'
        '404':
          description: Customer not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error404'
        '500':
          description: Internal service error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error500'
    get:
      summary: List beneficial owners
      description: 'Retrieve a list of beneficial owners for a business customer.

        '
      operationId: listBeneficialOwners
      tags:
      - KYC/KYB Verifications
      security:
      - BasicAuth: []
      parameters:
      - name: customerId
        in: query
        description: The business customer ID
        required: true
        schema:
          type: string
      - name: limit
        in: query
        description: Maximum number of results to return (default 20, max 100)
        required: false
        schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 20
      - name: cursor
        in: query
        description: Cursor for pagination (returned from previous request)
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BeneficialOwnerListResponse'
        '400':
          description: Bad request - Invalid parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error400'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error401'
        '500':
          description: Internal service error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error500'
  /beneficial-owners/{beneficialOwnerId}:
    get:
      summary: Get a beneficial owner
      description: Retrieve details of a specific beneficial owner by ID.
      operationId: getBeneficialOwner
      tags:
      - KYC/KYB Verifications
      security:
      - BasicAuth: []
      parameters:
      - name: beneficialOwnerId
        in: path
        description: Beneficial owner ID
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BeneficialOwner'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error401'
        '404':
          description: Beneficial owner not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error404'
        '500':
          description: Internal service error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error500'
    patch:
      summary: Update a beneficial owner
      description: Update details of a specific beneficial owner. Only provided fields are updated.
      operationId: updateBeneficialOwner
      tags:
      - KYC/KYB Verifications
      security:
      - BasicAuth: []
      parameters:
      - name: beneficialOwnerId
        in: path
        description: Beneficial owner ID
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BeneficialOwnerUpdateRequest'
      responses:
        '200':
          description: Beneficial owner updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BeneficialOwner'
        '400':
          description: Bad request - Invalid parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error400'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error401'
        '404':
          description: Beneficial owner not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error404'
        '500':
          description: Internal service error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error500'
  /verifications:
    post:
      summary: Submit customer for verification
      description: "Trigger KYC (individual) or KYB (business) verification for a customer.\nThe response indicates whether all required information has been provided.\nIf data is missing, the `errors` array describes exactly what needs to be\nsupplied before verification can proceed.\n\nCall this endpoint again after resolving errors to re-submit.\n\n### What to collect for KYB\n\nBefore submitting a `BUSINESS` customer, collect the following via\n`POST /customers`, `POST /beneficial-owners`, and `POST /documents`:\n\n**Business identifying information**\n- Entity full legal name\n- Doing Business As (DBA) name, if applicable\n- Physical address — principal place of business\n- Countries of operation\n- Identification number — U.S. taxpayer identification number, or, for a\n  foreign business without one, alternative government-issued documentation\n  certifying the existence of the business\n\n**Ownership and control structure** — collected for **one control person**\n(an individual with significant responsibility to control, manage, or\ndirect the legal entity) **and all beneficial owners** (every individual\nwho owns 25% or more, directly or indirectly). For each, provide:\n- Full name\n- Date of birth\n- Address\n- Identification number:\n  - U.S. persons — SSN or ITIN\n  - Non-U.S. persons — one or more of: ITIN, passport (with country of\n    issuance), alien identification card, or another government-issued\n    photo ID evidencing nationality or residence\n\n**Required documents**\n- Company formation and existence documents (certificate of incorporation,\n  articles of association, etc.)\n- Proof of ownership and control structure (organization and ownership\n  chart, shareholder agreements, operating agreements, register of members,\n  or certification of controlling person and beneficial owners)\n- Proof of address dated within the last 3 months (utility bill, bank\n  statement, lease agreement, or official correspondence)\n- Tax ID or equivalent identifying-number documents\n- For non-U.S. beneficial owners — passport plus one additional\n  government-issued ID\n"
      operationId: createVerification
      tags:
      - KYC/KYB Verifications
      security:
      - BasicAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VerificationRequest'
      responses:
        '200':
          description: 'Verification status returned. Check `verificationStatus` and `errors` to determine next steps.

            '
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Verification'
              examples:
                missingInfo:
                  summary: Verification blocked by missing data
                  value:
                    id: Verification:019542f5-b3e7-1d02-0000-000000000001
                    customerId: Customer:019542f5-b3e7-1d02-0000-000000000001
                    verificationStatus: RESOLVE_ERRORS
                    errors:
                    - resourceId: Customer:019542f5-b3e7-1d02-0000-000000000001
                      type: MISSING_FIELD
                      field: customer.address.line1
                      reason: Business address line 1 is required
                    - resourceId: Customer:019542f5-b3e7-1d02-0000-000000000001
                      type: MISSING_PROOF_OF_ADDRESS_DOCUMENT
                      acceptedDocumentTypes:
                      - PROOF_OF_ADDRESS
                      reason: Proof of address document is required
                    - resourceId: BeneficialOwner:019542f5-b3e7-1d02-0000-000000000002
                      type: MISSING_FIELD
                      field: personalInfo.birthDate
                      reason: Date of birth is required for beneficial owners
                    createdAt: '2025-10-03T12:00:00Z'
                submitted:
                  summary: Verification submitted successfully
                  value:
                    id: Verification:019542f5-b3e7-1d02-0000-000000000002
                    customerId: Customer:019542f5-b3e7-1d02-0000-000000000001
                    verificationStatus: IN_PROGRESS
                    errors: []
                    createdAt: '2025-10-03T12:00:00Z'
        '400':
          description: Bad request - Invalid parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error400'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error401'
        '404':
          description: Customer not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error404'
        '500':
          description: Internal service error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error500'
    get:
      summary: List verifications
      description: 'Retrieve a list of verifications with optional filtering by customer ID and status.

        '
      operationId: listVerifications
      tags:
      - KYC/KYB Verifications
      security:
      - BasicAuth: []
      parameters:
      - name: customerId
        in: query
        description: Filter by customer ID
        required: false
        schema:
          type: string
      - name: verificationStatus
        in: query
        description: Filter by verification status
        required: false
        schema:
          $ref: '#/components/schemas/VerificationStatus'
      - name: limit
        in: query
        description: Maximum number of results to return (default 20, max 100)
        required: false
        schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 20
      - name: cursor
        in: query
        description: Cursor for pagination (returned from previous request)
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VerificationListResponse'
        '400':
          description: Bad request - Invalid parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error400'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error401'
        '500':
          description: Internal service error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error500'
  /verifications/{verificationId}:
    get:
      summary: Get a verification
      description: Retrieve details of a specific verification by ID.
      operationId: getVerification
      tags:
      - KYC/KYB Verifications
      security:
      - BasicAuth: []
      parameters:
      - name: verificationId
        in: path
        description: Verification ID
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Verification'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error401'
        '404':
          description: Verification not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error404'
        '500':
          description: Internal service error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error500'
components:
  schemas:
    Error400:
      type: object
      required:
      - message
      - status
      - code
      properties:
        status:
          type: integer
          enum:
          - 400
          description: HTTP status code
        code:
          type: string
          description: '| Error Code | Description |

            |------------|-------------|

            | INVALID_INPUT | Invalid input provided |

            | MISSING_MANDATORY_USER_INFO | Required customer information is missing |

            | INVITATION_ALREADY_CLAIMED | Invitation has already been claimed |

            | INVITATIONS_NOT_CONFIGURED | Invitations are not configured |

            | INVALID_UMA_ADDRESS | UMA address format is invalid |

            | INVITATION_CANCELLED | Invitation has been cancelled |

            | QUOTE_REQUEST_FAILED | An issue occurred during the quote process; this is retryable |

            | INVALID_PAYREQ_RESPONSE | Counterparty Payreq response was invalid |

            | INVALID_RECEIVER | Receiver is invalid |

            | PARSE_PAYREQ_RESPONSE_ERROR | Error parsing receiver PayReq response |

            | CERT_CHAIN_INVALID | Counterparty certificate chain is invalid |

            | CERT_CHAIN_EXPIRED | Counterparty certificate chain has expired |

            | INVALID_PUBKEY_FORMAT | Counterparty Public key format is invalid |

            | MISSING_REQUIRED_UMA_PARAMETERS | Counterparty required UMA parameters are missing |

            | SENDER_NOT_ACCEPTED | Sender is not accepted |

            | AMOUNT_OUT_OF_RANGE | Amount is out of range |

            | INVALID_CURRENCY | Currency is invalid |

            | INVALID_TIMESTAMP | Timestamp is invalid |

            | INVALID_NONCE | Nonce is invalid |

            | INVALID_REQUEST_FORMAT | Request format is invalid |

            | INVALID_BANK_ACCOUNT | Bank account is invalid |

            | SELF_PAYMENT | Self payment not allowed |

            | LOOKUP_REQUEST_FAILED | Lookup request failed |

            | PARSE_LNURLP_RESPONSE_ERROR | Error parsing LNURLP response |

            | INVALID_AMOUNT | Amount is invalid |

            | WEBHOOK_ENDPOINT_NOT_SET | Webhook endpoint is not set |

            | WEBHOOK_DELIVERY_ERROR | Webhook delivery error |

            | LOW_QUALITY | Document quality too low to process |

            | DATA_MISMATCH | Document details don''t match provided information |

            | EXPIRED | Document has expired |

            | SUSPECTED_FRAUD | Document suspected of being forged or edited |

            | UNSUITABLE_DOCUMENT | Document type is not accepted or not supported |

            | INCOMPLETE | Document is missing pages or sides |

            | EMAIL_OTP_CREDENTIAL_ALREADY_EXISTS | An EMAIL_OTP credential is already registered on the target internal account; only one email OTP credential is supported per internal account at this time |

            | SMS_OTP_CREDENTIAL_ALREADY_EXISTS | An SMS_OTP credential is already registered on the target internal account; only one SMS OTP credential is supported per internal account at this time |

            | PASSKEY_CREDENTIAL_ALREADY_EXISTS | A PASSKEY credential with the same WebAuthn credentialId is already registered on the target internal account |

            | STABLECOIN_PROVIDER_ACCOUNT_INVALID | The stablecoin provider account link is not usable |

            | STABLECOIN_PROVIDER_ACCOUNT_REVOKED | The stablecoin provider account link has been revoked |

            | STABLECOIN_PROVIDER_ACCOUNT_SELECTION_REQUIRED | Multiple active provider account links exist; pass `stablecoinProviderAccountId` to select one |

            '
          enum:
          - INVALID_INPUT
          - MISSING_MANDATORY_USER_INFO
          - INVITATION_ALREADY_CLAIMED
          - INVITATIONS_NOT_CONFIGURED
          - INVALID_UMA_ADDRESS
          - INVITATION_CANCELLED
          - QUOTE_REQUEST_FAILED
          - INVALID_PAYREQ_RESPONSE
          - INVALID_RECEIVER
          - PARSE_PAYREQ_RESPONSE_ERROR
          - CERT_CHAIN_INVALID
          - CERT_CHAIN_EXPIRED
          - INVALID_PUBKEY_FORMAT
          - MISSING_REQUIRED_UMA_PARAMETERS
          - SENDER_NOT_ACCEPTED
          - AMOUNT_OUT_OF_RANGE
          - INVALID_CURRENCY
          - INVALID_TIMESTAMP
          - INVALID_NONCE
          - INVALID_REQUEST_FORMAT
          - INVALID_BANK_ACCOUNT
          - SELF_PAYMENT
          - LOOKUP_REQUEST_FAILED
          - PARSE_LNURLP_RESPONSE_ERROR
          - INVALID_AMOUNT
          - WEBHOOK_ENDPOINT_NOT_SET
          - WEBHOOK_DELIVERY_ERROR
          - LOW_QUALITY
          - DATA_MISMATCH
          - EXPIRED
          - SUSPECTED_FRAUD
          - UNSUITABLE_DOCUMENT
          - INCOMPLETE
          - EMAIL_OTP_CREDENTIAL_ALREADY_EXISTS
          - SMS_OTP_CREDENTIAL_ALREADY_EXISTS
          - PASSKEY_CREDENTIAL_ALREADY_EXISTS
          - STABLECOIN_PROVIDER_ACCOUNT_INVALID
          - STABLECOIN_PROVIDER_ACCOUNT_REVOKED
          - STABLECOIN_PROVIDER_ACCOUNT_SELECTION_REQUIRED
        message:
          type: string
          description: Error message
        details:
          type: object
          description: Additional error details
          additionalProperties: true
    VerificationErrorType:
      type: string
      enum:
      - MISSING_FIELD
      - INVALID_FIELD
      - MISSING_LEGAL_PRESENCE_DOCUMENT
      - MISSING_CONTROL_STRUCTURE_DOCUMENT
      - MISSING_OWNERSHIP_STRUCTURE_DOCUMENT
      - MISSING_PROOF_OF_ADDRESS_DOCUMENT
      - MISSING_IDENTITY_DOCUMENT
      - INVALID_DOCUMENT
      - EXPIRED_DOCUMENT
      - POOR_QUALITY_DOCUMENT
      - SUSPECTED_FRAUD_DOCUMENT
      - WRONG_DOCUMENT_TYPE
      - INCOMPLETE_DOCUMENT
      - UNREADABLE_DOCUMENT
      - DOCUMENT_VERIFICATION_FAILED
      - APPLICANT_SANCTIONED
      - APPLICANT_FRAUD
      - APPLICANT_CRIMINAL_RECORD
      - APPLICANT_REJECTED
      - MISSING_BENEFICIAL_OWNER
      - MISSING_CONTROL_PERSON
      - MISSING_GOOD_STANDING_DOCUMENT
      description: Type of verification error. The category-specific MISSING_*_DOCUMENT types indicate which document category is needed. Document quality types (POOR_QUALITY_DOCUMENT, SUSPECTED_FRAUD_DOCUMENT, etc.) indicate specific issues with uploaded documents. APPLICANT_* types indicate issues with the applicant themselves (sanctions, fraud, criminal records).
      example: MISSING_FIELD
    BeneficialOwnerRole:
      type: string
      enum:
      - UBO
      - DIRECTOR
      - COMPANY_OFFICER
      - CONTROL_PERSON
      - TRUSTEE
      - GENERAL_PARTNER
      description: Role of the beneficial owner within the business
      example: UBO
    BeneficialOwnerPersonalInfoUpdate:
      type: object
      description: Partial update for beneficial owner personal information. Only provided fields are updated.
      properties:
        firstName:
          type: string
          description: First name of the individual
          example: Jane
        middleName:
          type: string
          description: Middle name of the individual
          example: Marie
        lastName:
          type: string
          description: Last name of the individual
          example: Smith
        birthDate:
          type: string
          format: date
          description: Date of birth in ISO 8601 format (YYYY-MM-DD)
          example: '1978-06-15'
        nationality:
          type: string
          description: Country of nationality (ISO 3166-1 alpha-2)
          example: US
        email:
          type: string
          format: email
          description: Email address of the individual
          example: jane.smith@acmecorp.com
        phoneNumber:
          type: string
          description: Phone number in E.164 format
          example: '+14155550192'
          pattern: ^\+[1-9]\d{1,14}$
        address:
          $ref: '#/components/schemas/Address'
        idType:
          $ref: '#/components/schemas/IdentificationType'
        identifier:
          type: string
          description: The identification number or value
          example: 123-45-6789
        countryOfIssuance:
          type: string
          description: Country that issued the identification (ISO 3166-1 alpha-2)
          example: US
    BeneficialOwnerUpdateRequest:
      type: object
      properties:
        roles:
          type: array
          items:
            $ref: '#/components/schemas/BeneficialOwnerRole'
          description: Roles of this person within the business
          example:
          - UBO
          - DIRECTOR
        ownershipPercentage:
          type: integer
          description: Percentage of ownership in the business (0-100)
          minimum: 0
          maximum: 100
          example: 51
        personalInfo:
          $ref: '#/components/schemas/BeneficialOwnerPersonalInfoUpdate'
    DocumentType:
      type: string
      enum:
      - PASSPORT
      - DRIVERS_LICENSE
      - NATIONAL_ID
      - PROOF_OF_ADDRESS
      - BANK_STATEMENT
      - TAX_RETURN
      - CERTIFICATE_OF_INCORPORATION
      - ARTICLES_OF_INCORPORATION
      - ARTICLES_OF_ASSOCIATION
      - STATE_REGISTRY_EXCERPT
      - GOOD_STANDING_CERTIFICATE
      - INFORMATION_STATEMENT
      - INCUMBENCY_CERTIFICATE
      - BUSINESS_LICENSE
      - SHAREHOLDER_REGISTER
      - POWER_OF_ATTORNEY
      - UTILITY_BILL
      - ELECTRICITY_BILL
      - RENT_OR_LEASE_AGREEMENT
      - DIRECTOR_REGISTRY
      - TRUST_AGREEMENT
      - STATE_COMPANY_REGISTRY
      - PARTNERSHIP_CONTROL_AGREEMENT
      - PARTNERSHIP_AGREEMENT
      - SELFIE
      - OTHER
      description: 'Type of identity or business verification document. Document types are grouped by verification category:

        **Identity** — PASSPORT, DRIVERS_LICENSE, NATIONAL_ID

        **Business — Legal presence** — CERTIFICATE_OF_INCORPORATION, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT

        **Business — Control structure** — DIRECTOR_REGISTRY, TRUST_AGREEMENT, STATE_COMPANY_REGISTRY, PARTNERSHIP_CONTROL_AGREEMENT

        **Business — Ownership structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT

        **Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, ELECTRICITY_BILL, BANK_STATEMENT, TAX_RETURN'
      example: PASSPORT
    VerificationStatus:
      type: string
      enum:
      - RESOLVE_ERRORS
      - PENDING_MANUAL_REVIEW
      - IN_PROGRESS
      - APPROVED
      - REJECTED
      - READY_FOR_VERIFICATION
      description: Current status of the KYC/KYB verification
      example: RESOLVE_ERRORS
    KycProvider:
      type: string
      description: The KYC provider that will perform identity verification for the customer. Grid selects the provider based on the customer's region and platform configuration; the value is informational for platforms that want to integrate directly with the provider's SDK.
      enum:
      - SUMSUB
      example: SUMSUB
    IdentificationType:
      type: string
      enum:
      - SSN
      - ITIN
      - EIN
      - NON_US_TAX_ID
      description: Type of tax identification
      example: SSN
    VerificationRequest:
      type: object
      required:
      - customerId
      properties:
        customerId:
          type: string
          description: The ID of the customer to verify
          example: Customer:019542f5-b3e7-1d02-0000-000000000001
    Address:
      type: object
      required:
      - line1
      - postalCode
      - country
      properties:
        line1:
          type: string
          description: Street address line 1
          example: 123 Main Street
        line2:
          type: string
          description: Street address line 2
          example: Apt 4B
        city:
          type: string
          description: City
          example: San Francisco
        state:
          type: string
          description: State/Province/Region
          example: CA
        postalCode:
          type: string
          description: Postal/ZIP code
          example: '94105'
        country:
          type: string
          description: Country code (ISO 3166-1 alpha-2)
          example: US
    Error500:
      type: object
      required:
      - message
      - status
      - code
      properties:
        status:
          type: integer
          enum:
          - 500
          description: HTTP status code
        code:
          type: string
          description: '| Error Code | Description |

            |------------|-------------|

            | GRID_SWITCH_ERROR | Grid switch error |

            | INTERNAL_ERROR | Internal server or UMA error |

            '
          enum:
          - GRID_SWITCH_ERROR
          - INTERNAL_ERROR
        message:
          type: string
          description: Error message
        details:
          type: object
          description: Additional error details
          additionalProperties: true
    Verification:
      type: object
      required:
      - id
      - customerId
      - verificationStatus
      - errors
      - createdAt
      properties:
        id:
          type: string
          description: Unique identifier for this verification
          example: Verification:019542f5-b3e7-1d02-0000-000000000001
        customerId:
          type: string
          description: The ID of the customer being verified
          example: Customer:019542f5-b3e7-1d02-0000-000000000001
        verificationStatus:
          $ref: '#/components/schemas/VerificationStatus'
        errors:
          type: array
          description: List of issues preventing verification from proceeding. Empty when verificationStatus is APPROVED or IN_PROGRESS.
          items:
            $ref: '#/components/schemas/VerificationError'
        createdAt:
          type: string
          format: date-time
          description: When this verification was created
          example: '2025-10-03T12:00:00Z'
        updatedAt:
          type: string
          format: date-time
          description: When this verification was last updated
          example: '2025-10-03T12:00:00Z'
    Error404:
      type: object
      required:
      - message
      - status
      - code
      properties:
        status:
          type: integer
          enum:
          - 404
          description: HTTP status code
        code:
          type: string
          description: '| Error Code | Description |

            |------------|-------------|

            | TRANSACTION_NOT_FOUND | Transaction not found |

            | INVITATION_NOT_FOUND | Invitation not found |

            | USER_NOT_FOUND | Customer not found |

            | QUOTE_NOT_FOUND | Quote not found |

            | LOOKUP_REQUEST_NOT_FOUND | Lookup request not found |

            | TOKEN_NOT_FOUND | Token not found |

            | BULK_UPLOAD_JOB_NOT_FOUND | Bulk upload job not found |

            | REFERENCE_NOT_FOUND | Reference not found |

          

# --- truncated at 32 KB (46 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/lightspark/refs/heads/main/openapi/lightspark-kyc-kyb-verifications-api-openapi.yml