{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/lightspark/main/json-schema/lightspark-verification-schema.json",
  "title": "Verification",
  "x-generated": "2026-10-12",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/lightspark-kyc-kyb-verifications-api-openapi.yml#/components/schemas/Verification",
  "type": "object",
  "required": [
    "id",
    "customerId",
    "verificationStatus",
    "errors",
    "createdAt"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Unique identifier for this verification"
    },
    "customerId": {
      "type": "string",
      "description": "The ID of the customer being verified"
    },
    "verificationStatus": {
      "$ref": "#/$defs/VerificationStatus"
    },
    "errors": {
      "type": "array",
      "description": "List of issues preventing verification from proceeding. Empty when verificationStatus is APPROVED or IN_PROGRESS.",
      "items": {
        "$ref": "#/$defs/VerificationError"
      }
    },
    "createdAt": {
      "type": "string",
      "format": "date-time",
      "description": "When this verification was created"
    },
    "updatedAt": {
      "type": "string",
      "format": "date-time",
      "description": "When this verification was last updated"
    }
  },
  "$defs": {
    "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:\n**Identity** — PASSPORT, DRIVERS_LICENSE, NATIONAL_ID\n**Business — Legal presence** — CERTIFICATE_OF_INCORPORATION, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT\n**Business — Control structure** — DIRECTOR_REGISTRY, TRUST_AGREEMENT, STATE_COMPANY_REGISTRY, PARTNERSHIP_CONTROL_AGREEMENT\n**Business — Ownership structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT\n**Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, ELECTRICITY_BILL, BANK_STATEMENT, TAX_RETURN"
    },
    "VerificationError": {
      "type": "object",
      "required": [
        "resourceId",
        "type",
        "reason"
      ],
      "properties": {
        "resourceId": {
          "type": "string",
          "description": "ID of the resource with the issue (Customer, BeneficialOwner, or Document)"
        },
        "type": {
          "$ref": "#/$defs/VerificationErrorType"
        },
        "field": {
          "type": "string",
          "description": "Dot-notation path to the field with the issue. Present when type is MISSING_FIELD or INVALID_FIELD."
        },
        "acceptedDocumentTypes": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/DocumentType"
          },
          "description": "Document types that would satisfy this requirement. The integrator can upload any one of the listed types. Present when type is MISSING_LEGAL_PRESENCE_DOCUMENT, MISSING_CONTROL_STRUCTURE_DOCUMENT, MISSING_OWNERSHIP_STRUCTURE_DOCUMENT, MISSING_PROOF_OF_ADDRESS_DOCUMENT, MISSING_IDENTITY_DOCUMENT, INVALID_DOCUMENT, or EXPIRED_DOCUMENT.\n\n| Error Type | Accepted Document Types |\n|---|---|\n| MISSING_LEGAL_PRESENCE_DOCUMENT | CERTIFICATE_OF_INCORPORATION, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT |\n| MISSING_CONTROL_STRUCTURE_DOCUMENT | DIRECTOR_REGISTRY, TRUST_AGREEMENT, STATE_COMPANY_REGISTRY, PARTNERSHIP_CONTROL_AGREEMENT |\n| MISSING_OWNERSHIP_STRUCTURE_DOCUMENT | SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT |\n| MISSING_PROOF_OF_ADDRESS_DOCUMENT | UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, ELECTRICITY_BILL, BANK_STATEMENT, TAX_RETURN |\n| MISSING_IDENTITY_DOCUMENT | PASSPORT, DRIVERS_LICENSE, NATIONAL_ID |"
        },
        "reason": {
          "type": "string",
          "description": "Human-readable description of the issue"
        }
      }
    },
    "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)."
    },
    "VerificationStatus": {
      "type": "string",
      "enum": [
        "RESOLVE_ERRORS",
        "PENDING_MANUAL_REVIEW",
        "IN_PROGRESS",
        "APPROVED",
        "REJECTED",
        "READY_FOR_VERIFICATION"
      ],
      "description": "Current status of the KYC/KYB verification"
    }
  }
}