iDenfy Identity Verification (KYC) API

Document verification, selfie capture, liveness detection and AI plus human review. Mint a session token with POST /api/v2/token, hand the returned authToken to a redirect, iFrame or mobile SDK, and receive the result as a signed webhook. Also covers blocklisting, proof-of-address checks and requesting additional information from a client.

Operations 6

POST /api/v2/token Generate KYC token #
GET /kyc/identifications/ List identifications #
POST /kyc/identifications/{scanRef}/request-information/ Request additional information from client #
POST /kyc/identifications/{scanRef}/blocklists/{blocklistSource}/ Add identification to blocklist #
DELETE /kyc/identifications/{scanRef}/blocklists/{blocklistSource}/ Remove identification from blocklist #
POST /api/v2/poa-checks/ Create POA check #

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/idenfy-kyc-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

idenfy-kyc-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: iDenfy IVS Core API
  version: 0.0.0
  description: iDenfy Identity Verification Service's Core API documentation.
  contact:
    name: API Support
    url: https://idenfy-ivs.atlassian.net/servicedesk/customer/portal/1/group/-1
  x-logo:
    url: /static/idenfy_logo.svg
    altText: iDenfy logo
servers:
- url: https://ivs.idenfy.com
paths:
  /api/v2/token:
    post:
      operationId: kycTokensCreate
      summary: Generate KYC token
      description: Creates a KYC verification session token. Pass the returned `authToken`
        to your frontend or SDK to launch the verification flow.
      tags:
      - KYC Token
      security:
      - apiKeyPair: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - clientId
              - tokenType
              properties:
                clientId:
                  type: string
                  maxLength: 100
                  description: A unique string identifying the client on your side.
                tokenType:
                  type: string
                  enum:
                  - IDENTIFICATION
                  - DOCUMENT
                  description: '- `IDENTIFICATION` — document scan + selfie (default)

                    - `DOCUMENT` — document scan only'
                externalRef:
                  type: string
                  nullable: true
                  maxLength: 40
                  description: Optional internal reference. Returned as-is in webhooks.
                generateDigitString:
                  type: boolean
                  default: false
                  description: If `true`, generates an 8-digit mobile app code returned
                    as `digitString`.
                expiryTime:
                  type: integer
                  minimum: 0
                  maximum: 2592000
                  description: Token validity in seconds. Maximum 2,592,000 (30 days).
                locale:
                  type: string
                  nullable: true
                  maxLength: 7
                  description: UI language code (e.g. `en`, `de`, `ko`).
                country:
                  type: string
                  nullable: true
                  description: Restrict accepted document-issuing country (ISO alpha-2).
                sessionLength:
                  type: integer
                  minimum: 60
                  maximum: 3600
                  description: Seconds the user has to complete verification once
                    started.
                documents:
                  type: array
                  nullable: true
                  items:
                    type: string
                  description: Restrict accepted document types (e.g. `PASSPORT`,
                    `ID_CARD`).
                firstName:
                  type: string
                  nullable: true
                  maxLength: 100
                  description: Pre-fill client first name. Mismatch triggers `SUSPECTED`
                    status.
                lastName:
                  type: string
                  nullable: true
                  maxLength: 100
                  description: Pre-fill client last name. Mismatch triggers `SUSPECTED`
                    status.
                dateOfBirth:
                  type: string
                  format: date
                  nullable: true
                  description: Pre-fill client date of birth.
                nationality:
                  type: string
                  nullable: true
                  description: Pre-fill client nationality.
                documentNumber:
                  type: string
                  nullable: true
                  maxLength: 50
                  description: Pre-fill document number.
                personalNumber:
                  type: string
                  nullable: true
                  maxLength: 50
                  description: Pre-fill personal/national ID number.
                sex:
                  type: string
                  nullable: true
                  enum:
                  - M
                  - F
                  description: Pre-fill client sex.
                dateOfExpiry:
                  type: string
                  format: date
                  nullable: true
                  description: Pre-fill document expiry date.
                dateOfIssue:
                  type: string
                  nullable: true
                  description: Pre-fill document issue date.
                address:
                  type: string
                  nullable: true
                  description: Client address for Proof of Address verification.
                successUrl:
                  type: string
                  format: uri
                  nullable: true
                  description: Redirect URL on successful verification.
                errorUrl:
                  type: string
                  format: uri
                  nullable: true
                  description: Redirect URL on failed verification.
                unverifiedUrl:
                  type: string
                  format: uri
                  nullable: true
                  description: Redirect URL when verification result is unverified.
                callbackUrl:
                  type: string
                  format: uri
                  nullable: true
                  description: Override webhook callback URL for this session only.
                showInstructions:
                  type: boolean
                reviewSuccessful:
                  type: boolean
                  description: Enable manual review for successful verifications.
                reviewFailed:
                  type: boolean
                  description: Enable manual review for failed verifications.
                questionnaire:
                  type: string
                  nullable: true
                  description: Questionnaire `key` for this session. Pass `null` to
                    disable.
                questionnaireRequired:
                  type: boolean
                  default: true
                riskAssessmentProfile:
                  type: string
                  format: uuid
                  nullable: true
                theme:
                  type: string
                  format: uuid
                  nullable: true
                registryCentersCountries:
                  type: array
                  nullable: true
                  items:
                    type: string
                verifyEmail:
                  type: boolean
                verifyPhone:
                  type: boolean
                verifyBank:
                  type: boolean
                verifyBankAccounts:
                  type: boolean
                verifyBankBalances:
                  type: boolean
                verifyBankTransactions:
                  type: boolean
                bankCardVerification:
                  type: boolean
                bankCardPdfUpload:
                  type: boolean
                verifyAddress:
                  type: boolean
                checkAml:
                  type: boolean
                checkCriminal:
                  type: boolean
                checkLiveness:
                  type: boolean
                checkFaceBlacklist:
                  type: boolean
                checkDocFaceBlacklist:
                  type: boolean
                checkPersonBlacklist:
                  type: boolean
                checkDuplicateFaces:
                  type: boolean
                checkDuplicateDocFaces:
                  type: boolean
                checkDuplicatePersonalData:
                  type: boolean
                checkDriverLicense:
                  type: boolean
                checkLid:
                  type: boolean
                checkIpProxy:
                  type: boolean
                allowBsnMasking:
                  type: boolean
                nfcRequired:
                  type: boolean
                autoAmlMonitoring:
                  type: boolean
                driverLicenseBack:
                  type: boolean
                faceMatchingThresholdModifier:
                  type: number
                additionalSteps:
                  type: object
                  description: Request extra document steps. See Additional Steps
                    documentation.
                additionalData:
                  type: object
                  description: Data for COMPARE-type additional steps.
                utilityBill:
                  type: boolean
                  nullable: true
                nfcOptional:
                  type: boolean
                ageLimit:
                  type: integer
                  description: Minimum required age. Below this triggers `SUSPECTED`
                    status.
                ageMax:
                  type: integer
                  description: Maximum allowed age. Above this triggers `SUSPECTED`
                    status.
      responses:
        '201':
          description: Token created successfully.
          content:
            application/json:
              schema:
                type: object
                required:
                - authToken
                - scanRef
                - tokenType
                properties:
                  message:
                    type: string
                    readOnly: true
                  authToken:
                    type: string
                    readOnly: true
                    description: Pass this to the frontend, SDK, or redirect URL to
                      start verification.
                  redirectUrl:
                    type: string
                    readOnly: true
                    nullable: true
                    description: Direct URL to the hosted verification flow. Redirect
                      the user here or embed in an iFrame.
                  scanRef:
                    type: string
                    readOnly: true
                    description: Unique session ID. Store this to correlate with webhook
                      results.
                  clientId:
                    type: string
                    nullable: true
                  personScanRef:
                    type: string
                    nullable: true
                  firstName:
                    type: string
                    nullable: true
                  lastName:
                    type: string
                    nullable: true
                  successUrl:
                    type: string
                    nullable: true
                  errorUrl:
                    type: string
                    nullable: true
                  unverifiedUrl:
                    type: string
                    nullable: true
                  callbackUrl:
                    type: string
                    nullable: true
                  locale:
                    type: string
                    nullable: true
                  country:
                    type: string
                    nullable: true
                  expiryTime:
                    type: integer
                    description: Token expiry time in seconds.
                  sessionLength:
                    type: integer
                  documents:
                    type: array
                    items:
                      type: string
                  allowedDocuments:
                    type: object
                    additionalProperties:
                      type: array
                      items:
                        type: string
                  dateOfBirth:
                    type: string
                    nullable: true
                  dateOfExpiry:
                    type: string
                    nullable: true
                  dateOfIssue:
                    type: string
                    nullable: true
                  nationality:
                    type: string
                    nullable: true
                  personalNumber:
                    type: string
                    nullable: true
                  documentNumber:
                    type: string
                    nullable: true
                  sex:
                    type: string
                    nullable: true
                  address:
                    type: string
                    nullable: true
                  showInstructions:
                    type: boolean
                  tokenType:
                    type: string
                    enum:
                    - IDENTIFICATION
                    - DOCUMENT
                  utilityBill:
                    nullable: true
                  additionalSteps:
                    type: object
                  additionalData:
                    type: object
                  externalRef:
                    type: string
                    nullable: true
                  questionnaire:
                    type: string
                    nullable: true
                  registryCentersCountries:
                    type: array
                    items:
                      type: string
                  riskAssessmentProfile:
                    type: string
                    format: uuid
                    nullable: true
                  theme:
                    type: string
                    format: uuid
                    nullable: true
                  allowBsnMasking:
                    type: boolean
                  verifyBankTransactions:
                    type: boolean
                  bankCardVerification:
                    type: boolean
                  bankCardPdfUpload:
                    type: boolean
                  checkLid:
                    type: boolean
                  checkDriverLicense:
                    type: boolean
                  verifyAddress:
                    type: boolean
                  checkFaceBlacklist:
                    type: boolean
                  verifyEmail:
                    type: boolean
                  checkPersonBlacklist:
                    type: boolean
                  checkDuplicateDocFaces:
                    type: boolean
                  reviewSuccessful:
                    type: boolean
                  reviewFailed:
                    type: boolean
                  verifyBank:
                    type: boolean
                  autoAmlMonitoring:
                    type: boolean
                  verifyPhone:
                    type: boolean
                  faceMatchingThresholdModifier:
                    type: number
                  checkCriminal:
                    type: boolean
                  checkAml:
                    type: boolean
                  checkDuplicateFaces:
                    type: boolean
                  driverLicenseBack:
                    type: boolean
                  verifyBankAccounts:
                    type: boolean
                  checkDuplicatePersonalData:
                    type: boolean
                  verifyBankBalances:
                    type: boolean
                  nfcRequired:
                    type: boolean
                  checkIpProxy:
                    type: boolean
                  checkDocFaceBlacklist:
                    type: boolean
                  checkLiveness:
                    type: boolean
                  digitString:
                    type: string
                    nullable: true
                    readOnly: true
                    description: 8-digit mobile code. Only present when `generateDigitString`
                      was `true`.
  /kyc/identifications/:
    get:
      operationId: kycIdentificationsList
      summary: List identifications
      parameters:
      - in: query
        name: clientId
        schema:
          type: string
      - name: page
        required: false
        in: query
        description: A page number within the paginated result set.
        schema:
          type: integer
      - name: perPage
        required: false
        in: query
        description: Number of results to return per page.
        schema:
          type: integer
      tags:
      - KYC Verifications
      security:
      - apiKeyPair: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedPartnerIdentificationListList'
          description: ''
  /kyc/identifications/{scanRef}/request-information/:
    post:
      operationId: kycIdentificationsRequestInformationCreate
      summary: Request additional information from client
      parameters:
      - in: path
        name: scanRef
        schema:
          type: string
        required: true
      tags:
      - KYC Verifications
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IdentificationRequestInformationRequest'
      security:
      - apiKeyPair: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IdentificationRequestInformation'
          description: ''
  /kyc/identifications/{scanRef}/blocklists/{blocklistSource}/:
    post:
      operationId: kycIdentificationsBlocklistsCreate
      summary: Add identification to blocklist
      tags:
      - KYC Blocklist
      parameters:
      - in: path
        name: blocklistSource
        schema:
          type: string
          enum:
          - DOCUMENT
          - DOCUMENT_INFO
          - SELFIE
        required: true
      - in: path
        name: scanRef
        schema:
          type: string
        required: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IdentificationBlacklistRequest'
      security:
      - apiKeyPair: []
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IdentificationBlacklistEntry'
          description: ''
    delete:
      operationId: kycIdentificationsBlocklistsDestroy
      summary: Remove identification from blocklist
      tags:
      - KYC Blocklist
      parameters:
      - in: path
        name: blocklistSource
        schema:
          type: string
          enum:
          - DOCUMENT
          - DOCUMENT_INFO
          - SELFIE
        required: true
      - in: path
        name: scanRef
        schema:
          type: string
        required: true
      security:
      - apiKeyPair: []
      responses:
        '204':
          description: No response body
  /api/v2/poa-checks/:
    post:
      operationId: apiV2PoaChecksCreate
      summary: Create POA check
      tags:
      - POA
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PoaCheckDetailRequest'
        required: true
      security:
      - apiKeyPair: []
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PoaCheckDetail'
          description: ''
components:
  schemas:
    AdditionalStepStatusEnum:
      description: |-
        Result of an additional step document (e.g. proof of address). See [Verification Statuses → Additional Step Statuses](https://documentation.idenfy.com/guides/dashboard/kyc/verification-statuses#additional-step-statuses) for what each value means.
      enum:
      - VALID
      - INVALID
      - NOT_FOUND
      type: string
    AddressVerificationQualityEnum:
      enum:
      - EXCELLENT
      - GOOD
      - AVERAGE
      - POOR
      - BAD
      type: string
    AddressVerificationStatusEnum:
      enum:
      - VERIFIED
      - PARTIALLY_VERIFIED
      - UNVERIFIED
      type: string
    AddressVerificationWebhook:
      type: object
      properties:
        address:
          type: string
          maxLength: 255
        country:
          allOf:
          - $ref: '#/components/schemas/CountryEnum'
          nullable: true
        status:
          allOf:
          - $ref: '#/components/schemas/AddressVerificationStatusEnum'
          readOnly: true
        accuracy:
          type: integer
          readOnly: true
          nullable: true
        quality:
          allOf:
          - $ref: '#/components/schemas/AddressVerificationQualityEnum'
          readOnly: true
          nullable: true
      required:
      - accuracy
      - address
      - quality
      - status
    AdverseMediaData:
      type: object
      properties:
        title:
          type: string
          nullable: true
        url:
          type: string
          nullable: true
        text:
          type: string
          nullable: true
        score:
          type: string
          nullable: true
        type:
          allOf:
          - $ref: '#/components/schemas/AmlArticleTypeEnum'
          nullable: true
        checkDate:
          type: string
        publishDate:
          type: string
          nullable: true
      required:
      - checkDate
      - publishDate
      - score
      - text
      - title
      - type
      - url
    AgeGroupEnum:
      enum:
      - UNDER_13
      - UNDER_8
      - OVER_8
      - OVER_13
      - OVER_16
      - OVER_18
      - OVER_21
      - OVER_22
      - OVER_25
      - OVER_30
      type: string
    AmlArticleTypeEnum:
      enum:
      - NEGATIVE
      type: string
    AmlCheckSuspicionEnum:
      enum:
      - SUSPECTED
      - NOT_SUSPECTED
      type: string
    AmlCheckV3Webhook:
      type: object
      properties:
        id:
          type: string
          nullable: true
        overallStatus:
          type: string
          nullable: true
        statusSetBy:
          type: object
          additionalProperties: {}
          nullable: true
        statusSetAt:
          type: string
          format: date-time
          nullable: true
        adverseMedia:
          type: array
          items:
            $ref: '#/components/schemas/AmlV3AdverseMediaDataWebhook'
          nullable: true
        amlCheck:
          type: array
          items:
            $ref: '#/components/schemas/AmlV3CheckDataWebhook'
          nullable: true
      required:
      - adverseMedia
      - amlCheck
      - id
      - overallStatus
      - statusSetAt
      - statusSetBy
    AmlCompanyNameResults:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/FraudStatus'
        serviceName:
          type: string
        serviceGroupType:
          type: string
        uid:
          type: string
        errorMessage:
          type: string
          nullable: true
        data:
          type: array
          items:
            $ref: '#/components/schemas/CompanyAmlData'
      required:
      - errorMessage
      - serviceGroupType
      - serviceName
      - status
      - uid
    AmlData:
      type: object
      properties:
        name:
          type: string
          nullable: true
        surname:
          type: string
          nullable: true
        nationality:
          type: string
          nullable: true
        dob:
          type: string
          nullable: true
        suspicion:
          allOf:
          - $ref: '#/components/schemas/AmlSuspicionTypeEnum'
          nullable: true
        reason:
          type: string
          nullable: true
        listNumber:
          type: string
          nullable: true
        listName:
          type: string
          nullable: true
        score:
          type: integer
          nullable: true
        lastUpdate:
          type: string
          nullable: true
        exitDate:
          type: string
          nullable: true
        isPerson:
          type: boolean
          nullable: true
        isActive:
          type: boolean
          nullable: true
        linkedDocument:
          type: string
          format: uri
          nullable: true
        pepLevel:
          type: integer
          nullable: true
        category:
          type: string
          nullable: true
        otherInformation:
          type: string
          nullable: true
        checkDate:
          type: string
          nullable: true
        whitelisted:
          type: boolean
      required:
      - category
      - checkDate
      - dob
      - exitDate
      - isActive
      - isPerson
      - lastUpdate
      - linkedDocument
      - listName
      - listNumber
      - name
      - nationality
      - otherInformation
      - pepLevel
      - reason
      - score
      - surname
      - suspicion
    AmlNameResults:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/FraudStatus'
        serviceName:
          type: string
        serviceGroupType:
          type: string
        uid:
          type: string
        errorMessage:
          type: string
          nullable: true
        data:
          type: array
          items:
            $ref: '#/components/schemas/AmlData'
      required:
      - errorMessage
      - serviceGroupType
      - serviceName
      - status
      - uid
    AmlNewsResults:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/FraudStatus'
        serviceName:
          type: string
        serviceGroupType:
          type: string
        uid:
          type: string
        errorMessage:
          type: string
          nullable: true
        data:
          type: array
          items:
            $ref: '#/components/schemas/AdverseMediaData'
      required:
      - errorMessage
      - serviceGroupType
      - serviceName
      - status
      - uid
    AmlResults:
      oneOf:
      - $ref: '#/components/schemas/AmlNameResults'
      - $ref: '#/components/schemas/AmlNameResults'
      - $ref: '#/components/schemas/AmlCompanyNameResults'
      - $ref: '#/components/schemas/AmlNewsResults'
      - $ref: '#/components/schemas/AmlNewsResults'
      discriminator:
        propertyName: serviceName
        mapping:
          AML_NAMES_CHECK: '#/components/schemas/AmlNameResults'
          AML_OPEN_SANCTIONS: '#/components/schemas/AmlNameResults'
          COMPANY_CHECK: '#/components/schemas/AmlCompanyNameResults'
          AML_NEWS: '#/components/schemas/AmlNewsResults'
          INHOUSE_ADVERSE_MEDIA: '#/components/schemas/AmlNewsResults'
    AmlSuspicionTypeEnum:
      enum:
      - SANCTION
      - INTERPOL
      - PEPS
      - ADVERSE_MEDIA
      - OTHER
      type: string
    AmlV3AddressWebhook:
      type: object
      properties:
        city:
          type: string
          nullable: true
        geography:
          type: string
          nullable: true
      required:
      - city
      - geography
    AmlV3AdverseMediaDataWebhook:
      type: object
      properties:
        title:
          type: string
          nullable: true
        url:
          type: string
        text:
          type: string
          nullable: true
        score:
          type: string
          nullable: true
        type:
          type: string
          nullable: true
        publishDate:
          type: string
          nullable: true
      required:
      - publishDate
      - score
      - text
      - title
      - type
      - url
    AmlV3CheckDataWebhook:
      type: object
      properties:
        addresses:
          type: array
          items:
            $ref: '#/components/schemas/AmlV3AddressWebhook'
          nullable: true
        datesOfBirth:
          type: array
          items:
            type: string
          nullable: true
        gender:
          type: string
          nullable: true
        nationalities:
          type: array
          items:
            type: string
          nullable: true
        match:
          type: string
        formerSanBodyIds:
          type: array
          items:
            type: integer
          nullable: true
        countries:
          type: array
          items:
            type: string
          nullable: true
        datasets:
          type: array
          items:
            type: string
        currentSanBodyIds:
          type: array
          items:
            type: integer
          nullable: true
        version:
          type: integer
        pepTier:
          type: string
          nullable: true
        score:
          type: integer
          nullable: true
        profileImage:
          type: string
          format: uri
          nullable: true
        name:
          type: string
          nullable: true
        resourceId:
          type: string
      required:
      - addresses
      - countries
      - currentSanBodyIds
      - datasets
      - datesOfBirth
      - formerSanBodyIds
      - gender
      - match
      - name
      - nationalities
      - resourceId
      - score
      - version
    BankAccountWebhook:
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
          nullable: true
          maxLength: 128
        iban:
          type: string
          nullable: true
          maxLength: 34
        currency:
          type: string
          maxLength: 3
        balancesOverview:
          allOf:
          - $ref: '#/components/schemas/BankBalancesOverviewWebhook'
          nullable: true
        transactionsCount:
          type: integer
          nullable: true
      required:
      - balancesOverview
      - currency
      - iban
      - id
      - name
      - transactionsCount
    BankBalancesOverviewWebhook:
      type: object
      properties:
        bookedBalance:
          type: number
          format: double
          nullable: true
        availableBalance:
          type: number
          format: double
          nullable: true
      required:
      - availableBalance
      - bookedBalance
    BankCardNoMatchReasonEnum:
      enum:
      - NAME_MISMATCH
      - NUMBER_MISMATCH
      - NAME_NOT_FOUND
      - NUMBER_NOT_FOUND
      - LIVENESS_FAILED
      type: string
    BankCardVerificationStatusEnum:
      enum:
      - NOT_COMPARED
      - MATCH
      - NO_MATCH
      type: string
    BankCardVerificationWebhook:
      type: object
      properties:
        id:
          type: string
          format: uuid
        status:
          $ref: '#/components/schemas/BankCardVerificationStatusEnum'
        noMatchReason:
          allOf:
          - $ref: '#/components/schemas/BankCardNoMatchReasonEnum'
          nullable: true
        name:
          type: string
          nullable: true
        firstSix:
          type: string
          nullable: true
        lastFour:
          type: string
          nullable: true
        expiryDate:
          type: string
          format: date
          nullable: true
        nameMatch:
          type: boolean
          nullable: true
        lastFourMatch:
          type: boolean
          nullable: true
      required:
      - expiryDate
      - firstSix
      - id
      - lastFour
      - lastFourMatch
      - name
      - nameMatch
      - noMatchReason
      - status
    BankVerificationWebhook:
      type: object
      properties:
        id:
          type: string
          format: uuid
        country:
          allOf:
          - $ref: '#/components/schemas/CountryEnum'
          nullable: true
        bank:
          type: string
          nullable: true
        accounts:
          type: array
          items:
            $ref: '#/components/schemas/BankAccountWebhook'
        riskLevel:
          allOf:
          - $ref: '#/components/schemas/RiskLevelEnum'
          nullable: true
      required:
      - accounts
      - bank
      - country
      - id
      - riskLevel
    CompanyAmlData:
      type: object
      properties:
        name:
          type: string
          nullable: true
        surname:
          type: string
          nullable: true
        nationality:
          type: string
          nullable: true
        dob:
          type: string
          nullable: true
        suspicion:
          allOf:
          - $ref: '#/components/schemas/AmlSuspicionTypeEnum'
          nullable: true
        reason:
          type: string
          nullable: true
        listNumber:
          type: string
          nullable: true
        listName:
          type: stri

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