openapi: 3.1.0
x-stoplight:
  id: 3r5vahhtd02s0
info:
  title: cidaas ID Validator API
  description: |-
    ## ID Validator Services

    The **cidaas ID validator API Documentation** consists of five sections:

    1. **Invocation** to initialize a case and start the identity validation.

    2. **Settings** that allows to setup different identification scenarios and flows.

    3. **Result** of the identification performed.

    4. **Cards** that the ID validator support

    5. **Docs** signed by the user in the identification and signature process

    **Note:** The second section to configure the ID validator can be also done using the **cidaas admin portal**.

    **id validator settings** help you control how an **id validation flow** gets processed.

    The **id validator settings** can be marked as a **template** by setting a **template_name**.

    **Flow type:** A flow type defines **which steps need to be performed during the validation** and thereby **enables ensuring that all requirements are met**, for instance,
    1. Perform eIDAS compliant autoident
    2. Perform eIDAS autoident and sign agreements with qualified signature
    3. Perform a card scan only
    4. Perform autoident based on an id card e.g. driving license, passport etc

    **Allowed cards** define which **identity documents** and even more specifically which **versions of the identity documents** are allowed to be used for **end-user verification**.

    The **invocation of id validator** initializes the **id verification** for the user who has been already created using an **accessToken** containing a **sub (unique identifier of the user)** for configured **id validation settings**. It  initializes the **identification flow** based on applied **id validation settings** by redirecting to the **id validator user interface**.

    The section, **result** helps **retrieve the case result** for a particular **case id**.
  version: 1.3.0
  contact:
    name: cidaas support
    url: 'https://support.cidaas.com'
    email: support@cidaas.de
  summary: 'cidaas ID Validator API for qualified identification of a person and its documents like passport, id card, ...'
  termsOfService: 'https://www.cidaas.com/terms-of-use/'
  license:
    url: 'https://www.cidaas.com/terms-of-use/'
    name: Subscription
servers:
  - url: 'https://domain'
    description: Enter your domain name
  - url: 'https://demo.cidaas.de'
    description: Demo environment
components:
  securitySchemes:
    openId:
      type: openIdConnect
      openIdConnectUrl: 'https://domain/.well-known/openid-configuration'
    OAuth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: 'https://domain/token-srv/token'
          scopes:
            'cidaas:idval_process_start': Start a new ID validation process.
            'cidaas:idval_process_read': Retrieve status information about an ID validation process.
            'cidaas:idval_result_read': Retrieve detailed results of completed ID validation cases.
            'cidaas:idval_media_read': Access media files associated with ID validation cases.
            'cidaas:webhook_manage': Register and manage webhook endpoints for ID validation events.
            'cidaas:idval_settings_read': Read ID validation settings configurations.
            'cidaas:idval_settings_write': Create and update ID validation settings.
            'cidaas:idval_settings_delete': Delete ID validation settings.
  requestBodies:
    Start-Process:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/StartProcess'
  schemas:
    StartProcess:
      title: Start Process
      x-stoplight:
        id: 94qcr5q81zvlc
      type: object
      required:
        - validation_settings_id
        - redirect_url
        - user_id_type
        - unique_user_id
      properties:
        validation_settings_id:
          type: string
          x-stoplight:
            id: ix3j7c7tmaqek
          format: uuid
          description: UUID of the ID validation configuration.
          example: 9838425c-4f8d-4d7b-b758-59e80dab0813
        redirect_url:
          type: string
          x-stoplight:
            id: jvbf5cfht18ol
          description: URL to which the user will be redirected to after completing the ID validation.
          example: 'https://example.com/age-verification'
        user_id_type:
          x-stoplight:
            id: ewiz97m6jhqgw
          enum:
            - sub
            - email
            - phone
          description: Type of the unique user ID.
        unique_user_id:
          type: string
          x-stoplight:
            id: k6r7eb2w6604m
          description: Unique identifier of the user.
          example: example@mail.com
        external_reference:
          type: string
          x-stoplight:
            id: ynvpgcwt8zhe9
          description: 'Optional reference, for you to re-identify the ID validation.'
          example: idval-456873
        consents:
          $ref: '#/components/schemas/Consents'
          x-stoplight:
            id: 0jxu0hdrr2v7z
          description: Consents which have already been granted by the user in your system. **Required** if the consent configuration is disabled in the used ID validation configuration.
        custom_attributes:
          type: object
          x-stoplight:
            id: bytbodpd63wyr
          description: 'Key-Value object, which holds the "ground truth" for the tasks _Prevalidation_ and _Document Data Matching_. Mandatory if one of these configurations is enabled in the ID validation configuration.'
    Consents:
      title: Consents
      x-stoplight:
        id: j7dsggnlh4hw6
      type: array
      minItems: 1
      description: Array containing all consents
      items:
        $ref: '#/components/schemas/Consent'
        x-stoplight:
          id: 4d5ul3np6l93n
    Consent:
      title: Consent
      x-stoplight:
        id: zr7k1tuz09tg3
      type: object
      description: Holds all information regarding a consent which was already granted or will be granted during the ID validation.
      required:
        - name
        - url
      properties:
        name:
          type: string
          x-stoplight:
            id: 0d1d9jy3f7u68
          example: processing-consent
          description: Descriptive name of the consent
        url:
          type: string
          x-stoplight:
            id: n2msrlfn76s7c
          format: uri
          description: Publicly available URL
          example: 'https://example.com/consents/age-verification'
    ErrorResponse:
      title: Error Response
      x-stoplight:
        id: shst31q4r01ib
      type: object
      properties:
        success:
          type: boolean
          x-stoplight:
            id: oq8irmvk2k5pv
          description: Indicates the success of the operation.
        status:
          type: integer
          x-stoplight:
            id: bij6aepicnawt
          minimum: 100
          maximum: 599
          example: 404
          description: HTTP status code.
        error:
          type: string
          x-stoplight:
            id: y83brktgvfd7p
          description: Human readable error message.
          example: Process not found
        code:
          type: string
          x-stoplight:
            id: 4fe1oh9617sho
          description: Non human readable error code. Mainly used for troubleshooting and easier debugging of issues.
          example: IVC-0011
    ProcessStatus:
      type: object
      x-examples:
        Example 1:
          processId: f5105102-9003-4a41-b1f3-930714ba7897
          caseId: b2a99592-f854-4f34-b488-9fa73e8aaaba
          executionStatus: paused
          user_task_url: 'https://myapp-example.cidaas.de/id-validator-webapp/processes/f5105102-9003-4a41-b1f3-930714ba7897/tasks/consent'
          user_redirect_url: 'https://myapp-example.cidaas.de'
          browser_redirect: false
      properties:
        processId:
          type: string
          description: UUID of the ID validation process.
          example: f5105102-9003-4a41-b1f3-930714ba7897
        caseId:
          type: string
          description: UUID of the ID validation case
          example: b2a99592-f854-4f34-b488-9fa73e8aaaba
        executionStatus:
          type: string
          description: Execution status of the current task.
          example: paused
        user_task_url:
          type: string
          description: URL on which the user can continue the current ID validation task.
          format: uri
          example: 'https://demo.cidaas.de/id-validator-webapp/processes/f5105102-9003-4a41-b1f3-930714ba7897/tasks/consent'
        user_redirect_url:
          type: string
          format: uri
          example: 'https://example.com/age-verification'
          description: URL to which the user will be redirected to after completing the ID validation.
        browser_redirect:
          type: boolean
          description: Indicates whether the response acts as a redirect.
      title: Process Status
    Validation-Result:
      title: Validation Result
      x-stoplight:
        id: hs79tobkslela
      type: object
      required:
        - _id
        - processId
        - status
        - execution_parameter
        - createdTime
        - updatedTime
      properties:
        _id:
          type: string
          x-stoplight:
            id: pafpk7v0eo7em
          format: uuid
          description: UUID of the ID validation.
          example: 23ece0c0-4d8a-4add-afd7-4b7df9abae24
        processId:
          type: string
          x-stoplight:
            id: minol5hmn2hjr
          format: uuid
          description: UUID of the ID validation process.
          example: 2d4e98fd-ac75-4085-96c6-1bdfc617a76e
        status:
          type: string
          x-stoplight:
            id: y3cn1m1r50lcy
          enum:
            - OPEN
            - FINISHED
          description: Status of the ID validation case.
        execution_parameter:
          $ref: '#/components/schemas/Execution-Parameter'
          x-stoplight:
            id: v1g4ynwat8m9p
        result:
          $ref: '#/components/schemas/Case-Result'
          x-stoplight:
            id: nu57s1jok7fuj
        createdTime:
          type: string
          x-stoplight:
            id: eacpnqlsp0bvc
          example: '2025-11-20T10:30:56.637Z'
          description: Creation Date of ID Validation (ISO 8601)
        updatedTime:
          type: string
          x-stoplight:
            id: fxhmpd1u1lzhl
          description: Latest Update Date of ID Validation (ISO 8601)
          example: '2025-11-20T10:35:16.765Z'
    Execution-Parameter:
      title: Execution Parameter
      x-stoplight:
        id: xymsd0u2v9adp
      type: object
      description: Execution Parameters of an ID validation
      required:
        - validation_settings_id
        - unique_user_id
        - user_id_type
        - mode
        - redirect_uri
        - tenantKey
        - taskConfiguration
      properties:
        validation_settings_id:
          type: string
          x-stoplight:
            id: sdz6s3b7zinw6
          format: uuid
          example: 23ece0c0-4d8a-4add-afd7-4b7df9abae24
        unique_user_id:
          type: string
          x-stoplight:
            id: 5b3r2sdcfvg0r
          example: hans.hansemann@mail.com
        user_id_type:
          type: string
          x-stoplight:
            id: ii3gsuibtdcoc
          example: email
        mode:
          type: string
          x-stoplight:
            id: f9szymqtkowbz
          enum:
            - IdentCard
            - IdentPhoto
            - IdentLight
            - IdentEidas
            - AgeCheckCard
            - AgeCheckLight
            - AgeCheckEssential
            - OnboardingLight
            - OnboardingEssential
          description: The validation mode/flow type that defines which steps need to be performed during the validation.
        external_reference:
          type: string
          x-stoplight:
            id: bwwz83ayj1q39
          example: idval-156189
        redirect_uri:
          type: string
          x-stoplight:
            id: za7nk2y91txx3
          format: uri
          example: 'https://www.example.com/age-verification'
        tenantKey:
          type: string
          x-stoplight:
            id: zo3hs32bmtlki
          example: cidaas-exampleTenant-prod
        taskConfiguration:
          $ref: '#/components/schemas/Task-Configuration'
          x-stoplight:
            id: pnh60s4g3pw1w
          description: Holds all task configurations for this ID validation.
    Task-Configuration:
      title: Task Configuration
      x-stoplight:
        id: r6laa00ijn5d9
      type: object
      required:
        - prevalidation_config
        - document_data_matching_config
        - consent_config
      properties:
        prevalidation_config:
          $ref: '#/components/schemas/Prevalidation-Config'
          x-stoplight:
            id: u6qz5v1xhwetd
          description: '`Prevalidation` configuration for this ID validation'
        document_data_matching_config:
          $ref: '#/components/schemas/Document-Data-Matching-Config'
          x-stoplight:
            id: y7f1xc4soaj51
          description: '`Document Data Matching` configuration for this ID validation'
        consent_config:
          $ref: '#/components/schemas/Consent-Config'
          x-stoplight:
            id: awj9ja20ljr42
          description: '`Consent` configuration for this ID validation'
        custom_attributes:
          type: object
          x-stoplight:
            id: gdd861vjoe5j9
          description: Key-Value pairs of "ground truth" data.
    Prevalidation-Config:
      title: Prevalidation Configuration
      x-stoplight:
        id: 6bbnn2r958dfw
      type: object
      required:
        - enabled
        - fields
        - description
      properties:
        enabled:
          type: boolean
          x-stoplight:
            id: tr3lcu7aem4bu
          description: Whether the task `Prevalidation` is enabled.
        fields:
          type: array
          x-stoplight:
            id: l1p7hi3evytey
          description: Array of validation fields.
          items:
            $ref: '#/components/schemas/Validation-Field'
            x-stoplight:
              id: awmvrhoytvvq9
        description:
          type: object
          x-stoplight:
            id: m72eo4l1zh7qe
          description: Localization map where the `key` is the country code (e.g. `en`) and the value the human readable description text shown during the prevalidation task.
          additionalProperties:
            x-stoplight:
              id: 797pius6ai8kd
            type: string
    Validation-Field:
      title: Validation Field
      x-stoplight:
        id: z814q5o5m2w2u
      type: object
      required:
        - field_key
        - data_type
        - required
        - localized_names
      properties:
        field_key:
          type: string
          x-stoplight:
            id: oaa6k1zu3v9u9
          example: document_number
          description: Unique identifier key
        document_key:
          type: string
          x-stoplight:
            id: eez6jj6zl6bwb
          example: given_names
          description: Internal field which can be ignored.
        data_type:
          x-stoplight:
            id: geb199g7xdjwa
          enum:
            - string
            - number
            - date
            - email
            - phone
            - boolean
          description: Primitive type of the value of this field.
        order:
          type: number
          x-stoplight:
            id: 4j9lmxry0i6ph
          deprecated: true
          example: 3
          description: Order position of this field.
        required:
          type: boolean
          x-stoplight:
            id: r9uo49ic6gi8a
          description: Whether this field must supplied in the `prevalidation` task.
        localized_names:
          type: object
          x-stoplight:
            id: aqxbfni0je3bi
          description: Localization map where the `key` is the country code (e.g. `en`) and the value the human readable name.
          additionalProperties:
            x-stoplight:
              id: ks9zlbc9dbvth
            type: string
            example: Document Number
        validation_rule:
          type: string
          x-stoplight:
            id: ohr1a8iwi8sh7
          description: 'Internal Field. CEL expression. '
    Document-Data-Matching-Config:
      title: Document Data Matching Configuration
      x-stoplight:
        id: 75quxl9o4ey07
      type: object
      required:
        - enabled
        - fields
      properties:
        enabled:
          type: boolean
          x-stoplight:
            id: vjmymqgy95lp1
          description: Whether the task `Document Data Matching` is enabled.
        fields:
          x-stoplight:
            id: 7xfhu7tcr6l5j
          type: array
          description: Array of validation fields.
          items:
            $ref: '#/components/schemas/Validation-Field'
            x-stoplight:
              id: 4g2eyfq99kkub
    Consent-Config:
      title: Consent Configuration
      x-stoplight:
        id: hxgd65g6omrxo
      type: object
      properties:
        enabled:
          type: boolean
          x-stoplight:
            id: opgo9drczk766
          description: Whether the task `Consent` is enabled.
        consents:
          $ref: '#/components/schemas/Consents'
          x-stoplight:
            id: fjtx228s2de04
    Task-Result:
      title: Task Result
      x-stoplight:
        id: vk81o4lo0c9cq
      type: object
      required:
        - task
        - status
        - confidence_score
        - start_time
        - end_time
      properties:
        task:
          type: string
          x-stoplight:
            id: cam6e52c94mke
          example: iddocanalysis
          description: Name of the task.
        status:
          x-stoplight:
            id: h1rdqiinejfmv
          example: FINISHED
          enum:
            - FINISHED
            - ABORTED
          description: Status of the task
        confidence_score:
          type: number
          x-stoplight:
            id: lu8v188dcvbjw
          format: float
          example: 0.97
          description: Confidence of the system.
        start_time:
          type: string
          x-stoplight:
            id: r404t3ll3pn0i
          example: '2025-11-20T10:19:13.981Z'
          description: Start date of the task (ISO 8601)
        end_time:
          type: string
          x-stoplight:
            id: 2k6bpzt29rmux
          example: '2025-11-20T10:19:52.336Z'
          description: End date of the task (ISO 8601)
        analysis_type:
          x-stoplight:
            id: piv5dyp68weuu
          enum:
            - doc
            - face
          description: Internal Field.
        case_id:
          type: string
          x-stoplight:
            id: ghqseyh5rvcdc
          deprecated: true
          example: 84a2a606-7316-4873-a924-e20f540f5c74
          description: UUID of the ID validation.
        userAgent:
          type: string
          x-stoplight:
            id: 3xyqk4djm0gsy
          description: User Agent string as supplied in the  browser's request headers of the user.
        image_urls:
          type: array
          x-stoplight:
            id: 2qo3ji41opflm
          uniqueItems: true
          description: Array of URLs that point to the `media-srv`. URLs can be called to download images.
          items:
            x-stoplight:
              id: hj7st5ebv0xkd
            type: string
        issues:
          $ref: '#/components/schemas/Analysis-Issue'
          x-stoplight:
            id: qeh88fyv3olz0
          description: Potential issues that arose during the task.
    Case-Result:
      title: Case Result
      x-stoplight:
        id: 6j7tpcyx5fdz7
      type: object
      required:
        - document
        - document_data
        - age
        - confidence_score
        - task_results
      properties:
        document:
          type: string
          x-stoplight:
            id: a8apvhfdw5sdn
          example: DEU_I_2021
          description: |-
            Unique identifier of the detected document.

            - First section is the ISO 3166-1 alpha-3 country code
            - Second section is the type of ID document
                - I = Identity Card
                - P = Passport
                - D = Driver License
                - R = Residence Permit
            - Third section is the year the document was first issued
        document_data:
          type: object
          x-stoplight:
            id: aqiph2lkf24uq
          description: Key-Value pair of the content extracted from the ID document.
        age:
          type: number
          x-stoplight:
            id: iw02d7la0c6w1
          description: 'Age of the user. '
        confidence_score:
          type: number
          x-stoplight:
            id: klvtpq64t0jik
          example: 0.78
          maximum: 1
          minimum: 0
          format: float
          description: Confidence score of the system.
        status:
          x-stoplight:
            id: 5gqmnslb1lpnx
          enum:
            - SUCCESS
            - FAILED
          description: 'Validation status. `SUCCESS` equals a validated identity, while `FAILED` equals a rejection.'
        jwt_signature:
          type: string
          x-stoplight:
            id: mt9jr6deoen3d
          description: JWT string which holds information about the id validation and acts as signature of approval.
        abort_record:
          $ref: '#/components/schemas/Abort-Record'
          x-stoplight:
            id: 21bd5r22o73gg
          description: Additional information about a potential abort of the ID validation.
        task_results:
          type: array
          x-stoplight:
            id: 32h1rxkvu5yxi
          description: Array containing the results of each task.
          items:
            $ref: '#/components/schemas/Task-Result'
            x-stoplight:
              id: ysiybw1ji4oop
    Abort-Record:
      title: Abort-Record
      x-stoplight:
        id: d5a1s03ugvl0p
      type: object
      properties:
        abort_reason:
          type: string
          x-stoplight:
            id: nt2e9obrv481o
          description: Reason why the ID validation was aborted.
          example: prevalidation failed
        abort_step:
          type: string
          x-stoplight:
            id: w4rjqiuywlvvd
          description: Step/Task in which the ID validation was aborted.
          example: prevalidate
    Analysis-Issue:
      title: Analysis-Issue
      x-stoplight:
        id: 4bjfl4lfa28xc
      type: object
      required:
        - issue_type
        - description
        - severity
        - best_frames_for_review
      properties:
        issue_type:
          type: string
          x-stoplight:
            id: 1vmnmp0y6p7ft
          description: Type of the issue.
        description:
          type: string
          x-stoplight:
            id: n6vsvnkjhyq6o
          description: Human readable description of the issue.
        severity:
          type: string
          x-stoplight:
            id: p2bpv5i840qmi
          description: Severity of the issue.
        best_frames_for_review:
          type: array
          x-stoplight:
            id: 0txqd0rwfhc1i
          description: Internal Field.
          minItems: 1
          items:
            x-stoplight:
              id: vkh2evmcb74nr
            type: integer
  responses:
    ErrorResponse:
      description: Generic error response payload returned for specific responses.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    StartProcess:
      description: Response containing the process ID, case ID, execution status, and URLs for continuing the ID validation process.
      content:
        application/json:
          schema:
            type: object
            x-examples:
              Example 1:
                success: true
                status: 200
                data:
                  processId: f5105102-9003-4a41-b1f3-930714ba7897
                  caseId: b2a99592-f854-4f34-b488-9fa73e8aaaba
                  executionStatus: paused
                  user_task_url: 'https://myapp-example.cidaas.de/id-validator-webapp/processes/f5105102-9003-4a41-b1f3-930714ba7897/tasks/consent'
                  user_redirect_url: 'https://myapp-example.cidaas.de'
                  browser_redirect: false
            properties:
              success:
                type: boolean
                description: Indicates the success of the operation.
              status:
                type: integer
                description: HTTP status code.
              data:
                type: object
                properties:
                  processId:
                    type: string
                    description: UUID of the ID validation process.
                  caseId:
                    type: string
                    description: UUID of the ID validation
                  executionStatus:
                    type: string
                    description: 'Execution status of the current task. '
                  user_task_url:
                    type: string
                    description: URL on which the user can continue the current ID validation task.
                    format: uri
                  user_redirect_url:
                    type: string
                    format: uri
                    description: URL to which the user will be redirected after completing the ID validation.
                  browser_redirect:
                    type: boolean
                    description: Indicates whether the response acts as a redirect.
    ValidationResult:
      description: Response containing the detailed validation result including document data, task results, and validation status.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Validation-Result'
paths:
  /id-val-srv/processes:
    post:
      tags:
        - Invocation
      summary: Create ID validation
      description: Creates a new ID validation process based on the provided payload.
      requestBody:
        $ref: '#/components/requestBodies/Start-Process'
      security:
        - OAuth2:
            - 'cidaas:idval_process_start'
      responses:
        '200':
          $ref: '#/components/responses/StartProcess'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          description: Unauthorized - missing/invalid scope or token
        5XX:
          $ref: '#/components/responses/ErrorResponse'
      operationId: create-process
  '/id-val-srv/processes/{processID}':
    get:
      tags:
        - Status
      summary: Process Status
      description: Returns the current status of an ID validation process
      parameters:
        - name: processID
          in: path
          required: true
          schema:
            type: string
          description: UUID of the process
      security:
        - OAuth2:
            - 'cidaas:idval_process_read'
      responses:
        '200':
          description: Successfully retrieved the process status.
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  status:
                    type: integer
                  data:
                    $ref: '#/components/schemas/ProcessStatus'
        '401':
          description: Unauthorized - missing/invalid scope or token
        '404':
          $ref: '#/components/responses/ErrorResponse'
        5XX:
          $ref: '#/components/responses/ErrorResponse'
      operationId: get-process-status
    parameters:
      - schema:
          type: string
          format: uuid
          example: 3df810ae-66c6-4a48-80af-3d753c91518c
        name: processID
        in: path
        required: true
        description: The UUID of the ID validation process
  '/id-val-srv/idcases/{caseID}/result':
    parameters:
      - schema:
          type: string
        name: caseID
        in: path
        required: true
        description: UUID of the ID validation
    get:
      summary: Validation Result
      tags:
        - Result
      responses:
        '200':
          $ref: '#/components/responses/ValidationResult'
        '401':
          description: Unauthorized
        4XX:
          $ref: '#/components/responses/ErrorResponse'
        5XX:
          $ref: '#/components/responses/ErrorResponse'
      operationId: get-validation-result
      x-stoplight:
        id: xacjc4wyyh9wb
      security:
        - OAuth2:
            - 'cidaas:idval_result_read'
      description: Returns the result of the ID validation.
tags:
  - name: idval
    description: ID validator
