openapi: 3.0.0
info:
  title: KYC Document API
  version: '3.0'
  termsOfService: https://www.trulioo.com/legal/SST
  description: >
    The KYC Document API is organized around REST with predictable
    resource-oriented URLs, standard HTTP response codes, authentication, and
    verbs. It provides endpoints for authorization, transaction creation,
    document upload, verification, and retrieval of results.


    > Biometric notice (e.g., BIPA): Some US states regulate the collection and
    use of biometric identifiers and information, including facial scan data
    extracted from photos used in document verification. Customers must
    implement a notice and consent mechanism and confirm via API that the
    individual has consented as prescribed. Consult legal counsel for
    compliance.


    >

    > For service-specific terms, see: https://www.trulioo.com/legal/SST
servers:
  - url: https://verification.trulioo.com
    description: Production
tags:
  - name: Authorization
    description: Obtain access tokens for subsequent endpoints.
  - name: Transaction
    description: Create transactions, upload documents, verify, and fetch results.
  - name: KnownFaces
    description: Manage known faces list and transactions.
security:
  - AccessToken: []
paths:
  /connect/token:
    post:
      summary: Obtain OAuth2 access token (client credentials)
      operationId: getAccessToken
      tags:
        - Authorization
      description: Obtain a Bearer access token using OAuth2 client credentials.
      servers:
        - url: https://auth-api.trulioo.com
      security: []
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
                - grant_type
                - client_id
                - client_secret
                - scope
              properties:
                grant_type:
                  type: string
                  enum:
                    - client_credentials
                  example: client_credentials
                client_id:
                  type: string
                  example: 557371aaj05a1N45ebhb0dcZb3a43cf4f960
                client_secret:
                  type: string
                  example: q,R&A;o!YRJf+3XzF14OZb2!N,;-21j3
                scope:
                  type: string
                  example: docv.api.us
      responses:
        '200':
          description: Token response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TokenResponse'
              examples:
                success:
                  value:
                    access_token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
                    token_type: Bearer
                    expires_in: 3600
                    scope: docv.api.us
        '400':
          description: Invalid client credentials
        '401':
          description: Unauthorized
        '500':
          description: Server error
  /api/handoff:
    post:
      tags:
        - Transaction
      summary: Create a short code for SDK handoff
      operationId: postHandoff
      description: >
        Generates a single-use short code (valid for 5 minutes) to continue the
        verification flow in an SDK.

        The short code locks the workflow to the same transaction identifier
        that was generated during authorization.
      parameters:
        - $ref: '#/components/parameters/AcceptVersion'
      responses:
        '200':
          description: Short code created.
          headers:
            Accept-Version:
              $ref: '#/components/headers/AcceptVersion'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HandoffResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalError'
  /api/transactions:
    post:
      tags:
        - Transaction
      summary: Create and configure a transaction
      operationId: postTransactions
      description: >-
        Creates a transaction with configuration options for document
        verification, selfie liveness verification, biometric verification, and
        optional SDK configuration for client-side capture.
      parameters:
        - $ref: '#/components/parameters/AcceptVersion'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TransactionConfiguration'
      responses:
        '201':
          description: Transaction created.
          headers:
            Accept-Version:
              $ref: '#/components/headers/AcceptVersion'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalError'
  /api/transactions/images:
    post:
      tags:
        - Transaction
      summary: Upload a document or selfie image
      operationId: uploadDocument
      description: |
        Upload file(s) for a verification process. Accepts:
        - Images: JPEG (`image/jpeg`), PNG (`image/png`)
        - PDF: (`application/pdf`)
        Maximum file size: 10 MB. Minimum: 20 KB.
      parameters:
        - $ref: '#/components/parameters/AcceptVersion'
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - context
                - body
              properties:
                context:
                  type: string
                  description: >-
                    `front` or `back` for document images, `live` for selfie, or
                    `pdf` for PDF uploads.
                  enum:
                    - front
                    - back
                    - live
                    - pdf
                  default: front
                body:
                  type: string
                  format: binary
                  description: >-
                    The file to upload. Accepts image/jpeg, image/png, or
                    application/pdf.
      responses:
        '200':
          description: Upload accepted.
          headers:
            Accept-Version:
              $ref: '#/components/headers/AcceptVersion'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '413':
          $ref: '#/components/responses/ContentTooLarge'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalError'
  /api/transactions/verify:
    post:
      tags:
        - Transaction
      summary: Start verification for the current transaction
      operationId: verifyTransaction
      description: Starts the verification process and returns the status.
      parameters:
        - $ref: '#/components/parameters/AcceptVersion'
      responses:
        '200':
          description: Decision available.
          headers:
            Accept-Version:
              $ref: '#/components/headers/AcceptVersion'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DecisionResponse'
        '202':
          description: Verification in progress.
          headers:
            Accept-Version:
              $ref: '#/components/headers/AcceptVersion'
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    enum:
                      - PENDING_RESULT
                    example: PENDING_RESULT
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
  /api/transactions/{transactionId}:
    get:
      tags:
        - Transaction
      summary: Get transaction data
      operationId: getTransactionData
      description: >-
        Retrieves detailed information for a verification process by transaction
        identifier.
      parameters:
        - $ref: '#/components/parameters/AcceptVersion'
        - name: transactionId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: OK
          headers:
            Accept-Version:
              $ref: '#/components/headers/AcceptVersion'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionResultResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalError'
  /api/knownfaces/lists:
    post:
      tags:
        - KnownFaces
      summary: Create a new KnownFaces list
      operationId: post-knownfaces-list
      description: Creates a new KnownFaces list
      parameters:
        - $ref: '#/components/parameters/AcceptVersion'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/KnownFacesListCreateRequest'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/KnownFacesList'
          headers:
            Accept-Version:
              $ref: '#/components/headers/AcceptVersion'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          $ref: '#/components/responses/Conflict'
        '500':
          $ref: '#/components/responses/InternalError'
    get:
      tags:
        - KnownFaces
      summary: List all KnownFaces list
      operationId: get-knownfaces-lists
      description: Lists all KnownFaces list
      parameters:
        - $ref: '#/components/parameters/AcceptVersion'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/KnownFacesList'
          headers:
            Accept-Version:
              $ref: '#/components/headers/AcceptVersion'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /api/knownfaces/lists/{listId}:
    get:
      tags:
        - KnownFaces
      summary: Get all transactions tagged to the specified list
      operationId: get-knownfaces-list-transactions
      description: Lists all transactions under a list
      parameters:
        - $ref: '#/components/parameters/AcceptVersion'
        - schema:
            type: string
          name: listId
          in: path
          required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/KnownFacesListDetails'
          headers:
            Accept-Version:
              $ref: '#/components/headers/AcceptVersion'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalError'
    delete:
      tags:
        - KnownFaces
      summary: Delete a KnownFaces list
      operationId: delete-knownfaces-list
      parameters:
        - schema:
            type: string
          name: listId
          in: path
          required: true
        - $ref: '#/components/parameters/AcceptVersion'
      responses:
        '204':
          description: Success
          headers:
            Accept-Version:
              $ref: '#/components/headers/AcceptVersion'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalError'
  /api/knownfaces/lists/{listId}/transactions:
    post:
      tags:
        - KnownFaces
      summary: Add transactions to a list
      operationId: add-knownfaces-list-transaction
      parameters:
        - $ref: '#/components/parameters/AcceptVersion'
        - name: listId
          in: path
          required: true
          description: UUID of the list
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/KnownFacesListAddTransactionRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/KnownFacesListAddTransactionResponse'
          headers:
            Accept-Version:
              $ref: '#/components/headers/AcceptVersion'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '500':
          $ref: '#/components/responses/InternalError'
  /api/knownfaces/lists/{listId}/transactions/{transactionId}:
    delete:
      tags:
        - KnownFaces
      summary: Delete a transaction from a list
      operationId: delete-knownfaces-list-transaction
      parameters:
        - $ref: '#/components/parameters/AcceptVersion'
        - name: listId
          in: path
          required: true
          description: UUID of the list
          schema:
            type: string
            format: uuid
        - name: transactionId
          in: path
          required: true
          description: UUID of the transaction
          schema:
            type: string
            format: uuid
      responses:
        '204':
          description: Success
          headers:
            Accept-Version:
              $ref: '#/components/headers/AcceptVersion'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalError'
  /api/knownfaces/lists/{listId}/update:
    post:
      tags:
        - KnownFaces
      summary: Update list metadata
      operationId: update-knownfaces-list-transaction
      parameters:
        - name: listId
          in: path
          required: true
          description: UUID of the list
          schema:
            type: string
            format: uuid
        - $ref: '#/components/parameters/AcceptVersion'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/KnownFacesList'
          headers:
            Accept-Version:
              $ref: '#/components/headers/AcceptVersion'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalError'
  /enroll:
    post:
      tags:
        - Enrolment
      summary: Upload a selfie
      operationId: enroll-selfie
      description: >-
        Submit one or more selfies in Base64 encoding for enrolment. It accepts
        images in PNG, WEBP, and JPG formats.
      parameters:
        - $ref: '#/components/parameters/AcceptVersion'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              title: Enroll Selfie Schema
              type: object
              properties:
                selfies:
                  type: array
                  description: >-
                    List of strings, which are images in Base64 encoding. Only
                    one is read for now, but multiple image input will be
                    allowed in the future.
                  example:
                    - image 1
                    - image 2
                    - image 3
                  maxItems: 3
                  items:
                    type: string
      responses:
        '200':
          description: Enrolled selfie
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnrollResponse'
          headers:
            Accept-Version:
              $ref: '#/components/headers/AcceptVersion'
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /enroll/{externalUniquePersonIdentifier}:
    post:
      tags:
        - Enrolment
      summary: Upload a selfie with external unique person identifier
      operationId: enroll-selfie-external-id
      description: >-
        Submit one or more selfies in Base64 encoding for enrolment, attaching a
        unique identifier with context in a system external to Trulioo. It
        accepts images in PNG and JPG format and PDF files.
      parameters:
        - schema:
            type: string
          name: externalUniquePersonIdentifier
          in: path
          required: true
        - $ref: '#/components/parameters/AcceptVersion'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              title: Enroll Selfie Schema
              type: object
              properties:
                selfies:
                  type: array
                  description: >-
                    List of strings, which are images in Base64 encoding. Only
                    one is read for now, but multiple image input will be
                    allowed in the future.
                  example:
                    - image 1
                    - image 2
                    - image 3
                  maxItems: 3
                  items:
                    type: string
      responses:
        '200':
          description: Enrolled selfie
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnrollResponse'
          headers:
            Accept-Version:
              $ref: '#/components/headers/AcceptVersion'
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /enroll/transaction/{transactionId}:
    post:
      tags:
        - Enrolment
      summary: Enrol selfie from an old transaction
      operationId: transaction id
      parameters:
        - name: transactionId
          in: path
          required: true
          description: UUID of the transaction
          schema:
            type: string
            format: uuid
      description: Enrol selfie image that is available from old transaction
      responses:
        '200':
          description: Enrolled selfie
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnrollResponse'
          headers:
            Accept-Version:
              $ref: '#/components/headers/AcceptVersion'
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  securitySchemes:
    LicenseKey:
      type: apiKey
      in: header
      name: X-License-Key
      description: Static license key used to obtain tokens via /authorize/customer.
    AccessToken:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Access token (Bearer) required for most endpoints.
    ImageAccessToken:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Specialized Bearer token with image scopes for retrieving pre-signed
        image URLs.
  parameters:
    AcceptVersion:
      name: Accept-Version
      in: header
      required: true
      schema:
        type: string
        example: '3.0'
      description: API version header.
  headers:
    AcceptVersion:
      description: API Version of the response.
      schema:
        type: string
        example: '3.0'
  responses:
    BadRequest:
      description: Bad Request
      headers:
        Accept-Version:
          $ref: '#/components/headers/AcceptVersion'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    BadRequestList:
      description: Bad Request List
      headers:
        Accept-Version:
          $ref: '#/components/headers/AcceptVersion'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
      x-examples:
        default:
          code: JWT_EXPIRED
          message: Jwt is expired
    Forbidden:
      description: Forbidden
      headers:
        Accept-Version:
          $ref: '#/components/headers/AcceptVersion'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
      x-examples:
        default:
          code: ACCESS_DENIED
          message: Access Denied
    NotFound:
      description: Not Found
      headers:
        Accept-Version:
          $ref: '#/components/headers/AcceptVersion'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
      x-examples:
        default:
          code: NOT_FOUND
          message: Check if the transactionId is correct.
    UnprocessableEntity:
      description: Unprocessable Entity
      headers:
        Accept-Version:
          $ref: '#/components/headers/AcceptVersion'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
      x-examples:
        frontImageMissing:
          code: FRONT_IMAGE_MISSING
          message: Front image missing. Make sure the front image is available.
        backImageMissing:
          code: BACK_IMAGE_MISSING
          message: Back image missing. Make sure the back image is available.
        faceImageMissing:
          code: FACE_IMAGE_MISSING
          message: Face image missing. Make sure the selfie image is available.
        documentNotFullyInFrame:
          code: DOCUMENT_NOT_FULLY_IN_FRAME
          message: Document not fully in frame.
        faceNotFullyInFrame:
          code: FACE_NOT_FULLY_IN_FRAME
          message: Face not fully in frame.
    Conflict:
      description: Conflict
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
      x-examples:
        default:
          code: CONFLICT
          message: A conflicting request was detected.
    ContentTooLarge:
      description: Payload Too Large
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
      x-examples:
        default:
          code: CONTENT_TOO_LARGE
          message: The uploaded file exceeds the maximum allowed size (10 MB).
    TooManyRequests:
      description: Too Many Requests (rate limited)
      headers:
        Retry-After:
          description: Seconds until the client may retry.
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
      x-examples:
        default:
          code: RATE_LIMITED
          message: Too many requests. Please retry later.
    InternalError:
      description: Internal Server Error
      headers:
        Accept-Version:
          $ref: '#/components/headers/AcceptVersion'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
      x-examples:
        default:
          code: INTERNAL_ERROR
          message: >-
            The server encountered an error. Please email us at
            support@trulioo.com.
    ServiceUnavailable:
      description: Service Unavailable
      headers:
        Accept-Version:
          $ref: '#/components/headers/AcceptVersion'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
      x-examples:
        default:
          code: SERVICE_UNAVAILABLE
          message: Service is currently not available. Please try again.
  schemas:
    AuthorizationResponse:
      type: object
      description: Access tokens issued after successful authorization.
      required:
        - accessToken
        - tokenType
        - expiresIn
      properties:
        accessToken:
          type: string
          description: JWT access token (60 minutes).
        tokenType:
          type: string
          enum:
            - Bearer
          default: Bearer
          description: Token type for Authorization header.
        expiresIn:
          type: integer
          format: int64
          description: Access token TTL in seconds.
          example: 3600
    TransactionResponse:
      type: object
      properties:
        transactionId:
          type: string
          format: uuid
          description: Unique transaction identifier.
    DecisionResponse:
      type: object
      properties:
        status:
          type: string
          enum:
            - ACCEPTED
            - REVIEW
            - DECLINED
            - ERROR
            - NO_RESULT
            - PENDING_RESULT
          description: Final decision of the verification.
    UploadResponse:
      type: object
      properties:
        imageId:
          type: string
          format: uuid
          description: Identifier of the uploaded image.
    DownloadResultResponse:
      type: object
      properties:
        url:
          type: string
          format: uri
          description: Time-limited pre-signed URL for the image.
    TransactionResultResponse:
      type: object
      properties:
        transactionId:
          type: string
          format: uuid
          description: Unique identifier of the transaction.
          example: 28087e85-9c6c-4ce9-83e2-1fb3d66b8cde
        clientId:
          type: string
          description: Client-provided identifier for correlation.
          example: 8005efed-e683-40ab-a803-56eba164b767
        timeOfTransaction:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the transaction took place.
          example: '2023-01-01T16:00:00Z'
        status:
          type: string
          description: Decision of the verification.
          enum:
            - ACCEPTED
            - REVIEW
            - DECLINED
            - ERROR
            - NO_RESULT
          example: REVIEW
        errors:
          type: array
          description: Errors related to image processing or vendor interactions.
          items:
            type: string
        indicators:
          type: array
          description: Reasons for verification outcome.
          items:
            $ref: '#/components/schemas/Indicator'
        person:
          $ref: '#/components/schemas/Person'
        document:
          $ref: '#/components/schemas/Document'
        images:
          $ref: '#/components/schemas/ImageIds'
        matcherResults:
          $ref: '#/components/schemas/MatcherResults'
        biometricVerification:
          $ref: '#/components/schemas/BiometricVerification'
        uniquePersonIdentifier:
          type: string
          description: Identifier of a customer who has enrolled their selfie successfully.
          example: ede60aad-b484-484c-8f31-9c51e55efe67
        networkInsight:
          type: array
          description: List of network insight that associate with this transaction
          items:
            $ref: '#/components/schemas/TransactionNetworkInsight'
    ImageIds:
      type: object
      description: URLs to download submitted images.
      properties:
        documentFrontUrl:
          type: string
          format: uri
          description: URL to download document front image.
        documentBackUrl:
          type: string
          format: uri
          description: URL to download document back image.
        selfieUrl:
          type: string
          format: uri
          description: URL to download selfie image.
        enrolSelfieUrl:
          type: string
          format: uri
          description: URL to download enrolled selfie image.
    TokenResponse:
      type: object
      properties:
        access_token:
          type: string
        token_type:
          type: string
          example: Bearer
        expires_in:
          type: integer
          format: int32
          example: 3600
        scope:
          type: string
          example: docv.api.us
    Address:
      type: object
      properties:
        fullAddress:
          type: string
          example: 221b Baker St, London, England, NW16XE
        addressLine1:
          type: string
          example: 221b Baker St
        addressLine2:
          type: string
          example: London, State, NW16XE
        city:
          type: string
          example: London
        stateProvince:
          type: string
          example: State
        country:
          type: string
          example: England
        zipCode:
          type: string
          example: NW16XE
    Person:
      type: object
      properties:
        fullName:
          type: string
          description: Full name of the subject/applicant.
          example: Sherlock Holmes
        firstName:
          type: string
          example: Sherlock
        middleName:
          type: string
          example: Scott
        lastName:
          type: string
          example: Holmes
        dateOfBirth:
          type: string
          format: date
          description: Date of birth (YYYY-MM-DD).
          example: '1859-05-22'
        placeOfBirth:
          type: string
          description: Place of birth.
          example: London
        nationality:
          type: string
          description: Nationality.
          example: England
        gender:
          type: string
          description: Gender code.
          enum:
            - M
            - F
            - X
            - U
          example: F
        location:
          $ref: '#/components/schemas/Address'
        standardizedLocation:
          $ref: '#/components/schemas/Address'
        alternateFirstName:
          type: string
          description: First name in non-Latin script.
          example: 小明
        alternateMiddleName:
          type: string
          description: Middle name in non-Latin script.
          example: 大
        alternateLastName:
          type: string
          description: Last name in non-Latin script.
          example: 王
        alternateFullName:
          type: string
          description: Full name in non-Latin script.
          example: 王大小明
        alternateDateOfBirth:
          type: string
          description: Date of birth in non-Latin script (localized).
          example: πρώτος Ιανουαρίου
        alternateLocation:
          type: object
          properties:
            fullAddress:
              type: string
              example: 1234バンクーバー通り, バンクーバー, ブリティッシュコロンビア, カナダ, NW16XE
            addressLine1:
              type: string
              example: 1234バンクーバー通り
            addressLine2:
              type: string
              example: バンクーバー
            city:
              type: string
              example: バンクーバー
            stateProvince:
              type: string
              example: ブリティッシュコロンビア
            country:
              type: string
              example: カナダ
            zipCode:
              type: string
              example: מיקוד
        firstLastName:
          type: string
          example: Silva
        secondLastName:
          type: string
          example: Pereira
        alternateFirstLastname:
          type: string
          example: 司
        alternateSecondLastName:
          type: string
          example: 徒
        birthLastName:
          type: string
          description: Last name by birth.
          example: Holmes
        spouseLastName:
          type: string
          description: Last name of spouse.
          example: Smith
    Document:
      type: object
      properties:
        documentType:
          type: string
          description: Type of the identification document provided.
          enum:
            - PASSPORT
            - DRIVERS_LICENSE
            - ID_CARD
            - RESIDENCE_PERMIT
            - MILITARY_ID
            - VISA
            - HEALTH_CARD
            - TRAVEL_DOCUMENT
            - VOTER_ID
            - TAX_ID
            - OTHER
            - UNKNOWN
            - UNSUPPORTED
            - NOT_STARTED
            - ERROR
            - ''
        documentName:
          type: string
          example: Australia - ePassport (2009) Travel Document
        dlCategory:
          type: string
          description: License class if documentType is DRIVERS_LICENSE.
          example: Class 5
        documentNumber:
          type: string
          description: Primary document identifier.
          example: EX504966
        documentNumber2:
          type: string
          example: A09354726
        documentNumber3:
          type: string
          example: C07321129
        documentNumber4:
          type: string
          example: D06364026
        documentCountry:
          type: string
          description: ISO 3166-1 alpha-2 issuing country code.
          example: GB
        jurisdictionCode:
          type: string
          description: >
            For US/CA driver’s licenses and similar: two-letter postal code

            (e.g., US CA → "CA", Canada British Columbia → "BC"). Not ISO-3166-2
            code.
          example: ENG
        issueDate:
          type: string
          format: date-time
          description: Issue date/time.
          example: '2020-11-17T00:00:00Z'
        expirationDate:
          type: string
          format: date-time
          description: Expiry date/time.
          example: '2030-11-17T00:00:00Z'
        alternateDocumentNumber:
          type: string
          description: Document number in non-Latin script.
          example: 一百二十三萬四千五百六十七
        alternateDocumentNumber2:
          type: string
          example: 一百二十三萬四千五百六十七
        alternateDocumentNumber3:
          type: string
          example: 一百二十三萬四千五百六十七
        alternateDocumentNumber4:
          type: string
          example: 一百二十三萬四千五百六十七
        alternateExpiryDate:
          type: string
          description: Expiry date in non-Latin script.
          example: 2050 年 1 月 1 日
        alternateIssueDate:
          type: string
          description: Issue date in non-Latin script.
          example: 2000 年 1 月 1 日
        mrzLineOne:
          type: string
          description: First MRZ line.
          example: PASGPLEE<<ZHEN<CHENG<<<<<<<<<<<<<<<<<<<<<<<<
        mrzLineTwo:
          type: string
          description: Second MRZ line.
          example: K1167647Z7SGP9112090M2412137S9146294Z<<<<<22
        mrzLineThree:
          type: string
          description: Third MRZ line.
          example: K1167647Z7SGP9112090M2412137S9146294Z<<<<<22
    Indicator:
      type: object
      properties:
        type:
          type: string
          enum:
            - DOCUMENT
            - FACE_MATCH
            - LIVENESS
            - BIOMETRIC_AUTHENTICATION
          example: DOCUMENT
        result:
          type: string
          enum:
            - ACCEPTED
            - DECLINED
            - REVIEW
            - ERROR
            - NO_RESULT
          example: REVIEW
        description:
          type: string
          example: Document requires a review.
        score:
          type: number
          format: float
          example: 90
        subindicators:
          type: array
          items:
            $ref: '#/components/schemas/Subindicator'
    Subindicator:
      type: object
      properties:
        type:
          type: string
          enum:
            - UNKNOWN_TYPE
            - BARCODE
            - CLASSIFIED_DOCUMENT
            - INPUT_MATCH
            - DIFFERENT_DOCUMENTS
            - DOCUMENT_LIVENESS
            - DOCUMENT_XCHECK
            - FACE_MATCH
            - IMAGE_QUALITY
            - LIVENESS
            - MRZ
            - PRESENTATION_ATTACK
            - SECURITY_FEATURES
            - TAMPERING
            - VALID_DOCUMENT
            - FACE_IMAGE_QUALITY
            - DATA_MATCH
            - MAPPING_ERROR
            - BIOMETRIC_VERIFICATION
          example: BARCODE
        result:
          type: string
          enum:
            - ACCEPTED
            - DECLINED
            - REVIEW
            - ERROR
            - NO_RESULT
            - NOT_RUN
            - PENDING_RESULT
          example: NOT_RUN
        description:
          type: string
          example: Check was skipped.
        code:
          type: string
          enum:
            - UNKNOWN_CODE
            - BARCODE_INTEGRITY
            - DOCUMENT_CONDITION
            - DOCUMENT_LIVENESS_RESULT
            - SINGLE_DOCUMENT_DETECTED
            - DOCUMENT_DETECTED
            - ALL_DOCUMENT_SIDES_CAPTURED
            - DOCUMENT_CORNERS_VISIBLE
            - DOCUMENT_STATUS
            - DOCUMENT_TAMPERING
            - EXPIRY
            - FACE_LIVENESS_QUALITY
            - FACE_LIVENESS
            - FACE_MATCH_VERIFICATION
            - FRONT_BACK_MATCH
            - IMAGE_QUALITY_RESULT
            - INPUT_MATCH_RESULT
            - PHOTOS_STREAMED
            - PHOTOS_STREAMED_M2
            - CLIENT_CONNECTION_VARIATION
            - ISSUE_DATE_UNDER_10Y
            - MRZ_VALIDITY
            - PRINTOUT
            - SCREEN_REPLAY
            - SECURITY_FEATURES_RESULT
            - SUPPORTED_DOC_TYPE
            - TEXT_VALIDITY_GENERIC
            - TEXT_VALIDITY_VALID_CHARS
            - TEXT_VALIDITY_ADDRESS
            - TEXT_VALIDITY_DOB
            - TEXT_VALIDITY_DOC_NUM
            - TEXT_VALIDITY_EXPIRY
            - TEXT_VALIDITY_GENDER
            - TEXT_VALIDITY_GIVEN_NAME
            - TEXT_VALIDITY_ISSUE_DATE
            - TEXT_VALIDITY_FULL_NAME
            - TEXT_VALIDITY_SURNAME
            - TEXT_VALIDITY_COUNTRY
            - TXN_CONFIG_COUNTRY
            - TXN_CONFIG_JURISDICTION
            - XCHECK_REFERENCE_ADDRESS
            - XCHECK_REFERENCE_DOB
            - XCHECK_REFERENCE_DOC_NUM
            - XCHECK_REFERENCE_EXPIRY
            - XCHECK_REFERENCE_GENDER
            - XCHECK_REFERENCE_GIVEN_NAME
            - XCHECK_REFERENCE_ISSUE_DATE
            - XCHECK_REFERENCE_FULL_NAME
            - XCHECK_REFERENCE_SURNAME
            - XCHECK_REFERENCE_COUNTRY
            - XCHECK_REFERENCE_GENERIC
            - PORTRAIT_SUBSTITUTION
            - FACE_TO_CAMERA_DISTANCE
            - EYES_OPEN
            - FACE_TO_BORDER_DISTANCE
            - FACE_NOT_CROPPED
            - FACE_NOT_OCCLUDED
            - FACE_DETECTED
            - FACE_COUNT
            - FACE_SIZE
            - FACE_ANGLE
            - JURISDICTION_PRESENT
            - INPUT_MATCH_PRESENT
            - TEXT_FIELD_AVAILABLE
            - TXN_CONFIG_DOCTYPE
            - INTERNAL_CODE_MAPPING
            - VENDOR_CODE_MAPPING
            - BIOMETRIC_MATCH
          example: BARCODE_INTEGRITY
    MatcherResults:
      type: array
      description: Results from user-input matching in the workflow.
      items:
        $ref: '#/components/schemas/MatcherResult'
    MatcherResult:
      type: object
      properties:
        results:
          type: array
          items:
            $ref: '#/components/schemas/Results'
        active:
          type: boolean
          example: true
    Results:
      type: object
      properties:
        matcherToken:
          $ref: '#/components/schemas/MatcherToken'
        resultPrecision:
          type: string
          enum:
            - EXACT_MATCH
            - HIGH_PARTIAL_MATCH
            - PARTIAL_MATCH
            - POOR_MATCH
            - NO_MATCH
          example: EXACT_MATCH
        description:
          type: string
          description: Error or explanation message.
    MatcherToken:
      type: object
      properties:
        token:
          type: string
          enum:
            - FIRST_NAME
            - LAST_NAME
            - MIDDLE_NAME
            - FULL_NAME
            - DATE_OF_BIRTH
            - ADDRESS_LINE_1
            - CITY
            - STATE_PROVINCE
            - POSTAL_CODE
            - COUNTRY
            - FIRST_LAST_NAME
            - SECOND_LAST_NAME
            - SPOUSE_LAST_NAME
            - BIRTH_LAST_NAME
        pii:
          type: object
          properties:
            customerInput:
              type: string
              example: JOHN
            ocrInput:
              type: string
              example: JOHN
        precision:
          type: string
          enum:
            - EXACT_MATCH
            - HIGH_PARTIAL_MATCH
            - PARTIAL_MATCH
            - POOR_MATCH
            - NO_MATCH
    HandoffResponse:
      type: object
      properties:
        shortCode:
          type: string
          description: Single-use code to handoff the transaction to an SDK.
          example: qWinHpfejeezSqek
    TransactionConfiguration:
      type: object
      properties:
        documentVerification:
          $ref: '#/components/schemas/DocumentVerificationConfig'
        selfieVerification:
          $ref: '#/components/schemas/SelfieVerificationConfig'
        matcherConfigs:
          type: array
          items:
            $ref: '#/components/schemas/MatcherConfig'
        subjectInfo:
          $ref: '#/components/schemas/SubjectInfo'
        subjectInfoList:
          type: array
          items:
            $ref: '#/components/schemas/SubjectInfo'
        biometricVerification:
          $ref: '#/components/schemas/BiometricVerificationConfig'
        sdk:
          $ref: '#/components/schemas/SDK'
        webhookUrl:
          type: string
          format: uri
          description: Callback URL for webhook notifications
        clientId:
          type: string
          maxLength: 150
          description: Optional client identifier, max length 150 characters
        documentLivenessConfig:
          $ref: '#/components/schemas/DocumentLivenessConfig'
    DocumentVerificationConfig:
      type: object
      description: Document verification configuration.
      properties:
        enabled:
          type: boolean
          description: Enables/disables document verification.
        documentsAccepted:
          type: array
          description: >
            List of permissible document types combined with issuing countries
            and (for US/CA where applicable) states/provinces.

            An empty array accepts all countries and all document types.
          default: []
          items:
            type: object
            properties:
              documentType:
                type: string
                description: Document type.
                enum:
                  - DRIVERS_LICENSE
                  - PASSPORT
                  - ID_CARD
                  - RESIDENCE_PERMIT
                  - MILITARY_ID
                  - VISA
                  - HEALTH_CARD
                  - TRAVEL_DOCUMENT
                  - VOTER_ID
                  - TAX_ID
                example: DRIVERS_LICENSE
              documentOrigin:
                type: array
                description: >
                  Allowed issuing countries (ISO 3166-1 alpha-2). For US/CA and
                  certain document types, you may also specify postal
                  state/province codes (e.g., "CA", "NY", "BC").

                  Provide an empty array to accept all countries.
                default: []
                items:
                  type: object
                  properties:
                    countryCode:
                      type: string
                      description: Country Code (ISO 3166-1 alpha-2).
                      example: CA
                    jurisdictions:
                      type: array
                      description: >
                        US/CA only. Two-letter postal subdivision codes (e.g.,
                        "FL", "BC").

                        If omitted or empty, configuration applies at country
                        level.
                      default: []
                      items:
                        type: object
                        properties:
                          jurisdictionCode:
                            type: string
                            example: FL
        acceptFrontImageOnly:
          type: boolean
          description: If true, only the front image is required.
          default: false
        acceptList:
          type: array
          description: Allowed Trulioo document IDs (overrides territory/type criteria).
          default: []
          items:
            type: string
        denyList:
          type: array
          description: Denied Trulioo document IDs (overrides territory/type criteria).
          default: []
          items:
            type: string
    SelfieVerificationConfig:
      type: object
      description: Selfie liveness verification configuration.
      properties:
        enabled:
          type: boolean
          description: Enables/disables selfie liveness verification.
    MatcherConfig:
      type: object
      properties:
        matchers:
          type: array
          items:
            type: object
            properties:
              token:
                type: string
                enum:
                  - FIRST_NAME
                  - MIDDLE_NAME
                  - LAST_NAME
                  - FULL_NAME
                  - DATE_OF_BIRTH
                  - ADDRESS_LINE_1
                  - CITY
                  - STATE_PROVINCE
                  - POSTAL_CODE
                  - COUNTRY
                  - FIRST_LAST_NAME
                  - SECOND_LAST_NAME
                  - SPOUSE_LAST_NAME
                  - BIRTH_LAST_NAME
              precision:
                type: string
                enum:
                  - EXACT_MATCH
                  - HIGH_PARTIAL_MATCH
                  - PARTIAL_MATCH
                  - POOR_MATCH
                  - NO_MATCH
              strategy:
                type: object
                description: >-
                  Controls transliteration, tokenization, and fuzzy matching.
                  Inputs are normalized with diacritic removal before matching.
                properties:
                  transliterationMatch:
                    type: object
                    properties:
                      enabled:
                        type: boolean
                        description: Apply transliteration before matching.
                        default: false
                  tokenMatch:
                    type: object
                    properties:
                      enabled:
                        type: boolean
                        description: >-
                          Tokenize strings and compare tokens using threshold
                          logic.
                        default: false
                      tokenSimilarityThreshold:
                        type: number
                        format: float
                        minimum: 0
                        maximum: 1
                        default: 0.75
                  basicFuzzyMatch:
                    type: object
                    properties:
                      enabled:
                        type: boolean
                        description: Include basic similarity algorithms in final match.
                        default: true
        active:
          type: boolean
          description: Whether the matcher set is active.
    SubjectInfo:
      type: object
      description: Customer Input Personal Identification Information.
      properties:
        firstName:
          type: string
          example: John
        middleName:
          type: string
          example: Smith
        lastName:
          type: string
          example: Doe
        fullName:
          type: string
          example: John Smith Doe
        dateOfBirth:
          type: string
          format: date
          example: '1980-01-01'
        addressLine1:
          type: string
          example: 123 Main Street
        stateProvince:
          type: string
          example: BC
        city:
          type: string
          example: Vancouver
        postalCode:
          type: string
          example: V5V 0A0
        country:
          type: string
          example: CA
        firstLastName:
          type: string
          example: López
        secondLastName:
          type: string
          example: García
        birthLastName:
          type: string
          example: GABLER
        spouseLastName:
          type: string
          example: Molenaar
    BiometricVerificationConfig:
      type: object
      description: Biometric verification configuration.
      properties:
        enabled:
          type: boolean
          description: >-
            Enables biometric verification; requires a non-empty
            uniquePersonIdentifier.
          default: false
        uniquePersonIdentifier:
          type: string
          description: Identifier from a prior successful enrolment.
          default: ''
        externalUniquePersonIdentifier:
          type: string
          description: Optional external identifier associated with the enrolment.
          default: ''
    BiometricVerification:
      type: object
      properties:
        enrolment:
          $ref: '#/components/schemas/Enrolment'
        verification:
          $ref: '#/components/schemas/BiometricVerificationResult'
    Enrolment:
      type: object
      properties:
        uniquePersonIdentifier:
          type: string
          example: 4a86fdb0-1839-4e2c-b880-9b0bb9c47650
        enrolledImageId:
          type: string
          format: uuid
          example: ffa25d31-e16d-48e4-90be-4124b425154d
        timeOfEnrolment:
          type: string
          format: date-time
          example: '2025-07-03T21:49:30.903Z'
        livenessScore:
          type: number
          format: float
          example: 99
        enrolledImagesCount:
          type: integer
          example: 1
        externalUniquePersonIdentifier:
          type: string
          example: c52ae4f9-e99d-430f-a776-203f358ef1e4
    BiometricVerificationResult:
      type: object
      properties:
        uniquePersonIdentifier:
          type: string
          example: 4a86fdb0-1839-4e2c-b880-9b0bb9c47650
        selfieImageId:
          type: string
          format: uuid
          example: 0757409e-61ee-49e6-b6d9-f0f3b9682053
        verificationType:
          type: string
          enum:
            - MATCH
            - NO_MATCH
            - ERROR
          example: MATCH
        imagesComparedCount:
          type: integer
          example: 1
        externalUniquePersonIdentifier:
          type: string
          example: c52ae4f9-e99d-430f-a776-203f358ef1e4
        matchedImages:
          type: array
          items:
            $ref: '#/components/schemas/MatchedImages'
    MatchedImages:
      type: object
      properties:
        imageId:
          type: string
          format: uuid
          example: ffa25d31-e16d-48e4-90be-4124b425154d
        imageCapturedTime:
          type: string
          format: date-time
          example: '2025-07-03T21:49:30.903Z'
        score:
          type: number
          format: float
          example: 46
        source:
          type: string
          enum:
            - API
            - SDK
          example: API
    KnownFacesListCreateRequest:
      type: object
      properties:
        listName:
          type: string
          maxLength: 32
          description: >-
            The list name (max 32 characters, alphanumeric, -, _, and space
            only. No duplicate entries)
      required:
        - listName
    KnownFacesList:
      type: object
      properties:
        listId:
          type: string
          format: uuid
          description: Unique list identifier.
        listName:
          type: string
          maxLength: 32
          description: >-
            The list name (max 32 characters, alphanumeric, -, _, and space
            only. No duplicate entries)
      required:
        - listId
        - listName
    KnownFacesListDetails:
      type: object
      properties:
        listId:
          type: string
          format: uuid
        listName:
          type: string
          maxLength: 32
          description: >-
            The list name (max 32 characters, alphanumeric, -, _, and space
            only. No duplicate entries)
        transactionIds:
          type: array
          items:
            type: string
      required:
        - listId
        - listName
        - transactionIds
    KnownFacesListAddTransactionResponse:
      type: object
      properties:
        failedTransactions:
          type: array
          items:
            type: object
            properties:
              transactionId:
                type: string
              cause:
                type: string
                enum:
                  - TRANSACTION_NOT_FOUND
                  - TRANSACTION_INVALID_ID
                  - UNKNOWN_ERROR
    KnownFacesListAddTransactionRequest:
      type: object
      properties:
        transactionIds:
          type: array
          maxItems: 5000
          description: >-
            Transaction Ids to be added to the list (max 5000 transactions per
            list)
          items:
            type: string
            format: uuid
    EnrollResponse:
      title: EnrollResponse
      type: object
      properties:
        uniquePersonIdentifier:
          type: string
          format: uuid
          description: Unique person identifier.
        externalUniquePersonIdentifier:
          type: string
          description: Unique person identifier for use in a system external to Trulioo.
        enrolmentResults:
          title: enrolmentResults
          description: Array of results, one for each submitted selfie.
          type: object
          properties:
            result:
              description: Result of this selfie's enrolment operation.
              type: string
              enum:
                - SUCCESS
                - FAILURE
            livenessScore:
              description: Liveness score of this selfie.
              type: integer
            errorList:
              type: array
              description: >-
                List of errors that occurred with this selfie's enrolment
                operation.
              items:
                type: string
    SDK:
      type: object
      description: SDK configuration for client-side capture and UI settings.
      properties:
        captureDocumentEnabled:
          type: boolean
          default: true
          description: Enable or disable document capture in SDK.
        captureSelfieEnabled:
          type: boolean
          default: true
          description: Enable or disable selfie capture in SDK.
        countrySelectionEnabled:
          type: boolean
          default: false
          description: Allow country selection in SDK.
        jurisdictionSelectionEnabled:
          type: boolean
          default: false
          description: Allow jurisdiction selection in SDK.
        documentSelectEnabled:
          type: boolean
          default: true
          description: Allow document type selection in SDK.
        additionalConsentRequired:
          type: boolean
          default: false
          description: Require additional consent in SDK workflow.
        useDeviceLocale:
          type: boolean
          default: true
          description: Use device locale automatically.
        locale:
          $ref: '#/components/schemas/Locale'
        theme:
          $ref: '#/components/schemas/Theme'
    Theme:
      type: object
      properties:
        style:
          $ref: '#/components/schemas/ThemeStyle'
        colors:
          $ref: '#/components/schemas/ThemeColors'
    ThemeStyle:
      type: string
      enum:
        - DEVICE
        - DARK
        - LIGHT
      default: DEVICE
    ThemeColors:
      type: object
      properties:
        light:
          $ref: '#/components/schemas/ColorPalette'
        dark:
          $ref: '#/components/schemas/ColorPalette'
    ColorPalette:
      type: object
      properties:
        logoURL:
          type: string
          description: URL for custom logo.
          example: https://example.com/logo.png
        primary:
          type: string
          example: '#004080'
        primaryButton:
          type: string
          example: '#0066cc'
        primaryButtonText:
          type: string
          example: '#ffffff'
        secondary:
          type: string
          example: '#f2f2f2'
        background:
          type: string
          example: '#ffffff'
        surface:
          type: string
          example: '#f9f9f9'
        error:
          type: string
          example: '#ff0000'
        onPrimary:
          type: string
          example: '#ffffff'
        onSecondary:
          type: string
          example: '#000000'
        onBackground:
          type: string
          example: '#000000'
        onSurface:
          type: string
          example: '#000000'
        onError:
          type: string
          example: '#ffffff'
    Locale:
      type: string
      description: SDK locale code.
      enum:
        - ar
        - bn
        - bg
        - zh-HK
        - zh-Hans-CN
        - zh-Hant-TW
        - cs
        - da
        - nl-NL
        - en-GB
        - en-US
        - et
        - fi
        - fr-CA
        - fr-FR
        - de-DE
        - el
        - gu
        - hi
        - hu
        - it-IT
        - ja
        - kn
        - ko
        - lt
        - ml
        - mr
        - 'no'
        - pl
        - pt-BR
        - pt-PT
        - ro
        - ru
        - sk
        - sl
        - es-MX
        - sv
        - ta
        - te
        - th
        - tr
        - uk
        - vi
      example: en-US
    ErrorResponse:
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: string
          example: FACE_IMAGE_MISSING
        message:
          type: string
          example: Face image missing. Make sure the selfie image is available.
        details:
          type: object
          additionalProperties: true
          description: Optional structured details for debugging or client handling.
    DocumentLivenessConfig:
      type: object
      description: Configuration for document liveness checks.
      properties:
        screenUsed:
          type: object
          description: Screen-used (displayed) detection settings
          properties:
            enabled:
              type: boolean
              description: Whether to enable detection
            calibration:
              type: string
              enum:
                - MEDIUM
                - HIGH
              description: Calibration level for detection
        printout:
          type: object
          description: Printout detection settings
          properties:
            enabled:
              type: boolean
              description: Whether to enable detection
            calibration:
              type: string
              enum:
                - MEDIUM
                - HIGH
              description: Calibration level for detection
        portraitSubstitution:
          type: object
          description: Portrait substitution detection settings
          properties:
            enabled:
              type: boolean
              description: Whether to enable detection
            calibration:
              type: string
              enum:
                - MEDIUM
                - HIGH
              description: Calibration level for detection
        skipAlreadyCropped:
          type: boolean
          description: Skip already-cropped image check
          default: false
      example:
        screenUsed:
          enabled: true
          calibration: MEDIUM
        printout:
          enabled: true
          calibration: MEDIUM
        portraitSubstitution:
          enabled: true
          calibration: MEDIUM
        skipAlreadyCropped: false
    TransactionNetworkInsight:
      title: TransactionNetworkInsight
      type: object
      properties:
        transactionId:
          type: string
          example: 4a86fdb0-1839-4e2c-b880-9b0bb9c47650
        status:
          type: string
          example: Accepted
        timestamp:
          type: string
          example: '2025-07-03T21:49:30.903999812Z'
        matchCount:
          type: integer
          example: 6
        networkInsightData:
          $ref: '#/components/schemas/NetworkInsightData'
    NetworkInsightData:
      title: NetworkInsightData
      type: object
      properties:
        fullName:
          type: boolean
          example: true
        dateOfBirth:
          type: boolean
          example: true
        standardizedAddress:
          type: boolean
          example: true
        ipAddress:
          type: boolean
          example: true
        docNumber:
          type: boolean
          example: true
        knownFace:
          type: boolean
          example: true
