OpenApi

View spec in html.

openapi: 3.0.0
info:
  version: 'v.0.15.0'
  title: 'Luna Remote SDK API'
  description: |
     'VisionLabs Luna Remote SDK'

components:
  headers:
    application_json:
      schema:
        type: string
        enum:
        - application/json
      required: true
      description: The content type of the response body.

    text_plain:
      schema:
        type: string
        enum:
        - text/plain
      required: true
      description: The content type of the response body.

    luna_request_id:
      schema:
        type: string
        format: timestamp,uuid
        example: 1536751345,8b8b5937-2e9c-4e8b-a7a7-5caf86621b5a
        pattern: ^[0-9]{10},[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$
      description: request id. Helps to uniquely identify messages that correspond to particular requests, in system logs.
      required: true

    docs_content_type:
      schema:
        type: string
        enum:
          - application/x-yaml
          - text/html
      required: true
      description: The content type of the response body.

    text_html:
      schema:
        type: string
        enum:
          - text/html
      required: true
      description: The content type of the response body.

    flatbuf_or_msgpack:
      schema:
        type: string
        enum:
        - application/x-flatbuf
        - application/msgpack
      required: true
      description: The content type of the response body.

    json_or_msgpack:
      schema:
        type: string
        enum:
        - application/json
        - application/msgpack
      required: true
      description: The content type of the response body.

    config_accept_content_type:
      schema:
        type: string
        enum:
          - application/json
          - text/plain
      required: false
      description: The content type of the response body.

    application_json_or_msgpack_content:
      schema:
        type: string
        default: application/json
        enum:
          - application/json
          - application/msgpack
      description: The response content type header. Depends on Accept header in the request.
  parameters:
    application_json_or_msgpack_content:
      in: header
      name: Content-Type
      schema:
        type: string
        enum:
          - application/json
          - application/msgpack
      description: The request content type header.

    application_multipart_content:
      in: header
      name: Content-Type
      schema:
        type: string
        enum:
          - multipart/form-data
      description: The request content type header.
      required: true

    luna_request_id:
      in: header
      schema:
        type: string
        format: timestamp,uuid
        example: 1536751345,8b8b5937-2e9c-4e8b-a7a7-5caf86621b5a
        pattern: ^[0-9]{10},[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$
      description: |
        external request id. Helps to uniquely identify messages that correspond to particular requests, in system logs.
        If it was not set, system will set it in default format ("timestamp,UUID"). It will be returned with response.
      name: Luna-Request-Id

    accept_docs_handler:
      in: header
      name: Accept
      schema:
        $ref: '#/components/schemas/accept_docs_handler'
      required: true
      description: acceptable type of receiving data

    accept_content_type:
      in: header
      name: Accept
      schema:
        type: string
        enum:
          - application/json
      description: Which content-type is requested. `application/json` by default

    Accept:
      in: header
      name: Accept
      schema:
        type: string
        enum:
          - application/json
      description: Preferred response content type

    accept_config_handler:
      in: header
      name: Accept
      schema:
        type: string
        enum:
          - application/json
          - text/plain
        description: One of application/json, text/plain
      required: false
      description: acceptable type of receiving data

    include_luna_services:
      in: query
      name: include_luna_services
      schema:
        type: integer
        enum: [0, 1]
        default: 0
      description: Whether to perform healthchecks for dependent luna services.

    application_json_or_msgpack_accept:
      in: header
      name: Accept
      schema:
        type: string
        default: application/json
        enum:
          - application/json
          - application/msgpack
      description: The response content type header.

    image_type:
      in: query
      name: image_type
      schema:
        type: integer
        default: 0
        enum: [0,1,2]
        description: Image type of input image.  0 - raw image, 1 - face warped image, 2 - body warped image.

    raw_or_face_image_type:
      in: query
      name: image_type
      schema:
        type: integer
        default: 0
        enum: [ 0,1 ]
        description: Image type of input image.  0 - raw image, 1 - face warped image.

    estimate_people_count:
      in: query
      name: estimate_people_count
      schema:
        $ref: '#/components/schemas/int01_def0'
      description: |
        Whether to estimate people count on the image.
        
        ⚠ **People counter licensing feature is required to be enabled to perform estimation.**

    people_count_coordinates:
      in: query
      name: people_count_coordinates
      schema:
        allOf:
          - $ref: '#/components/schemas/int01'
          - default: 1
      description: |
        Whether to return people coordinates with people count estimation.

    multiface_policy:
      in: query
      name: multiface_policy
      schema:
        $ref: '#/components/schemas/multiface_policy'

    iso_multiface_policy:
      in: query
      name: multiface_policy
      schema:
        allOf:
          - $ref: '#/components/schemas/multiface_policy'
          - default: 0

    detect_face:
      in: query
      name: detect_face
      schema:
        allOf:
          - $ref: '#/components/schemas/detect_face'
          - default: 0
      description: |
        Whether to detect faces on the image.

    detect_body:
      in: query
      name: detect_body
      schema:
        allOf:
          - $ref: '#/components/schemas/detect_body'
          - default: 0
      description: |
        Whether to detect human bodies on the image.

    estimate_body_warp:
      in: query
      name: estimate_body_warp
      schema:
        $ref: '#/components/schemas/int01_def0'
      description: |
        Whether to estimate human body warp on the image.

    estimate_upper_body:
      in: query
      name: estimate_upper_body
      schema:
        $ref: '#/components/schemas/int01_def0'
      description: |
        Whether to estimate human upper body attributes on the image (headwear type, clothing color, sleeve length).

    estimate_lower_body:
      in: query
      name: estimate_lower_body
      schema:
        $ref: '#/components/schemas/int01_def0'
      description: |
        Whether to estimate human lower body attributes on the image (lower garment type, clothing color, shoes color).

    estimate_accessories:
      in: query
      name: estimate_accessories
      schema:
        $ref: '#/components/schemas/int01_def0'
      description: |
        Whether to estimate human body accessories on the image (backpack presence).

    estimate_face_occlusion:
      in: query
      name: estimate_face_occlusion
      schema:
        $ref: '#/components/schemas/int01_def0'
      description: |
        Whether to estimate face occlusion on the image.

    estimate_body_basic_attributes:
      in: query
      name: estimate_body_basic_attributes
      schema:
        $ref: '#/components/schemas/int01_def0'
      description: |
        Whether to estimate human body basic attributes on the image (age, gender).

    estimate_face_warp:
      in: query
      name: estimate_face_warp
      schema:
        $ref: '#/components/schemas/int01_def0'
      description: |
        Whether to estimate human face warp on the image.

    estimate_head_pose:
      in: query
      name: estimate_head_pose
      schema:
        $ref: '#/components/schemas/estimate_head_pose'

    estimate_emotions:
      in: query
      name: estimate_emotions
      schema:
        $ref: '#/components/schemas/int01_def0'
      description: |
        Whether to estimate emotions on the image.

    estimate_landmarks5:
      in: query
      name: estimate_landmarks5
      schema:
        $ref: '#/components/schemas/detect_landmarks5'

    estimate_landmarks68:
      in: query
      name: estimate_landmarks68
      schema:
        $ref: '#/components/schemas/detect_landmarks68'

    estimate_quality:
      in: query
      name: estimate_quality
      schema:
        $ref: '#/components/schemas/estimate_quality'
      description: |
        Whether to estimate input face image quality.

    estimate_gaze:
      in: query
      name: estimate_gaze
      schema:
        $ref: '#/components/schemas/estimate_gaze'

    estimate_eyes_attributes:
      in: query
      name: estimate_eyes_attributes
      schema:
        $ref: '#/components/schemas/estimate_eyes_attributes'

    estimate_mouth_attributes:
      in: query
      name: estimate_mouth_attributes
      schema:
        $ref: '#/components/schemas/estimate_mouth_attributes'
      description: |
        Whether to estimate mouth attributes on the image.

    estimate_mask:
      in: query
      name: estimate_mask
      schema:
        $ref: '#/components/schemas/estimate_mask'
      description: |
        Whether to estimate mask on the image.

    estimate_glasses:
      in: query
      name: estimate_glasses
      schema:
        $ref: '#/components/schemas/estimate_glasses'
      description: |
        Whether to estimate glasses on the image.

    estimate_liveness:
      in: query
      name: estimate_liveness
      schema:
        $ref: '#/components/schemas/int01_def0'
      description: |
        Whether to estimate liveness on the image.

        ⚠ **Good quality only on webcam or selfie photos**: otherwise the result may be incorrect.

        ⚠ **Liveness v.2 licensing feature is required to be enabled to perform liveness estimation.**

    estimate_deepfake:
      in: query
      name: estimate_deepfake
      schema:
        $ref: '#/components/schemas/int01_def0'
      description: |
        Whether to estimate deepfake feature on the image.
        
        ⚠ **Deepfake licensing feature is required to be enabled to perform deepfake estimation.**

    estimate_body_descriptor:
      in: query
      name: estimate_body_descriptor
      schema:
        $ref: '#/components/schemas/extract_descriptor'
      description: |
          Whether to estimate human body descriptor(s).

    estimate_face_descriptor:
      in: query
      name: estimate_face_descriptor
      schema:
        $ref: '#/components/schemas/extract_descriptor'
      description: |
          Whether to estimate face descriptor(s).

    estimate_basic_attributes:
      in: query
      name: estimate_basic_attributes
      schema:
        $ref: '#/components/schemas/extract_basic_attributes'
      description: |
        Whether to estimate face basic attributes (gender, age, ethnicity).

    aggregate_attributes:
      in: query
      name: aggregate_attributes
      schema:
        $ref: '#/components/schemas/aggregate_attributes'

      description: |
          Whether to aggregate face descriptor(s).

          If true, all extracted attributes will be aggregated and stored as a single attribute.
          Otherwise, all attributes will be stored for each sample.

    pitch_threshold:
      in: query
      name: pitch_threshold
      schema:
        $ref: '#/components/schemas/pitch_threshold'
      description: |
        Maximum deviation pitch angle from 0.

    roll_threshold:
      in: query
      name: roll_threshold
      schema:
        $ref: '#/components/schemas/roll_threshold'
      description: |
        Maximum deviation roll angle from 0.

    yaw_threshold:
      in: query
      name: yaw_threshold
      schema:
        $ref: '#/components/schemas/yaw_threshold'

      description: |
        Maximum deviation yaw angle from 0.

    face_occlusion_states:
      in: query
      name: face_occlusion_states
      schema:
        $ref: '#/components/schemas/face_occlusion_threshold'

    mask_states:
      in: query
      name: mask_states
      schema:
        $ref: '#/components/schemas/mask_states'

      description: |
        Filter by mask states.

        | masks      | value |
        |----------------|---|
        | missing        | 1 |
        | medical_mask   | 2 |
        | occluded       | 3 |

    liveness_states:
      in: query
      name: liveness_states
      schema:
        $ref: '#/components/schemas/liveness_states'

      description: |
        Filter by liveness states.

        | liveness state | value |
        |----------------|-------|
        | spoof          |   0   |
        | real           |   1   |
        | unknown        |   2   |

    deepfake_states:
      in: query
      name: deepfake_states
      schema:
        $ref: '#/components/schemas/deepfake_states'

      description: |
        Filter by deepfake states.

        | liveness state | value |
        |----------------|-------|
        | fake           |   0   |
        | real           |   1   |

    score_threshold:
      in: query
      name: score_threshold
      schema:
        $ref: '#/components/schemas/score_threshold'

    use_exif_info:
      in: query
      name: use_exif_info
      schema:
        type: integer
        enum: [0, 1]
        default: 1
      description: |
        Whether to try to auto orient image based on exif data

        *Has no effect with tiff images (they're always auto oriented).*

        *Ignored with warped images (see `warped_image` or `image_type` parameter).*
      example: 1

    extract_exif:
      in: query
      name: extract_exif
      schema:
        $ref: '#/components/schemas/extract_exif'
      description: |
        Whether to extract EXIF meta information from input JPEG images.

        Exact output will vary since there are no mandatory requirements for both authoring software and digital cameras how to write the data.

        This function will only parse the tags and output their names and values as they are. Please refer to JEITA CP-3451 EXIF specification for details.

  schemas:
    error:
      type: object
      properties:
        error_code:
          type: integer
          description: error code.
        desc:
          type: string
          description: short error description.
        detail:
          type: string
          description: error details.
        link:
          type: string
          description: link to the documentation website with the error description.
      required: [error_code, detail, desc, link]
      example:
        error_code: 1
        detail: internal server error
        desc: internal server error
        link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-1"

    int_version:
      type: integer
      minimum: 0

    accept_docs_handler:
      type: string
      enum:
        - application/x-yaml
        - text/html
      description: One of application/x-yaml, text/html

    version:
      type: object
      properties:
        Version:
          type: object
          properties:
            api:
              allOf:
                - $ref: '#/components/schemas/int_version'
              description: an api version of service.
            major:
              allOf:
                - $ref: '#/components/schemas/int_version'
              description: a major version of service.
            minor:
              allOf:
                - $ref: '#/components/schemas/int_version'
              description: a minor version of service.
            patch:
              allOf:
                - $ref: '#/components/schemas/int_version'
              description: a patch version of service.
          required: [ api, major, minor, patch ]
      required: [ Version ]

      example:
        Version:
          api: 1
          major: 0
          minor: 0
          patch: 0

    uuid:
      type: string
      format: uuid
      pattern: '^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$'
      example: "557d54ec-29ad-4f3c-93b4-c9092ef12515"

    health_ok:
      description: successful healthcheck execution info
      type: object
      properties:
        execution_time:
          type: number
          example: 0.123
          description: request execution time in seconds
      required: [ execution_time ]

    health_errors:
      type: object
      properties:
        errors:
          description: failed healthcheck execution info
          type: array
          items:
            type: object
            properties:
              component:
                description: component name
                type: string
              error:
                allOf:
                  - description: healthcheck error
                  - $ref: '#/components/schemas/error'
              status:
                description: component health status
                type: integer
                enum: [ 0, 1 ]
            required: [ component, error, status ]
      required: [ errors ]
      example:
        errors:
          - component: licenses
            error:
              error_code: 38001
              desc: Health check error
              detail: License error
              link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-38001
            status: 0

    int01:
      type: integer
      enum: [0,1]

    int01_def0:
      type: integer
      default: 0
      enum: [0,1]

    int02:
      type: integer
      default: 1
      enum: [0,1,2]

    int0100:
      type: integer
      minimum: 0
      maximum: 100

    number01:
      type: number
      minimum: 0
      maximum: 1

    image_type:
      type: integer
      default: 0
      enum: [0,1,2]
      description: Image type of input image.  0 - raw image, 1 - face warped image, 2 - body warped image.

    extract_exif:
      allOf:
        - $ref: '#/components/schemas/int01_def0'
        - type: integer
        - description: |
            Whether to extract EXIF meta information from input images.
            
            Exact output will vary since there are no mandatory requirements to both authoring software and digital cameras how to write the data.
            
            This function will only parse the tags and output their names and values as is. Please refer to JEITA CP-3451 EXIF specification for details.

    detect_face:
      allOf:
        - $ref: '#/components/schemas/int01_def0'
        - default: 1
        - description: |
            Whether to detect faces from the image.

    detect_body:
      allOf:
        - default: 0
        - $ref: '#/components/schemas/int01_def0'
        - description: |
            Whether to detect bodies from the image.

    extract_basic_attributes:
      allOf:
        - $ref: '#/components/schemas/int01_def0'
        - type: integer
          description: |
            Whether to extract basic attributes (gender, age, ethnicity).

    extract_descriptor:
      allOf:
        - default: 1
        - $ref: '#/components/schemas/int01_def0'
        - description: |
            Whether to extract face descriptor(s).

    extract_body_descriptor:
      allOf:
        - default: 0
        - $ref: '#/components/schemas/int01_def0'
        - description: |
            Whether to extract body descriptor(s).
            

    estimate_face_warp:
      allOf:
         - default: 0
         - $ref: '#/components/schemas/int01_def0'
         - description: |
            Whether to estimate human face warp on the image.

    aggregate_attributes:
      allOf:

        - type: integer
          enum: [0, 1]
          description: |
            Whether to aggregate attribute(s).
            
            If true, all extracted attributes will be aggregated and stored as a single attribute.
            Otherwise, all attributes will be stored for each sample.
          default: 0

    score_threshold:
      type: number
      minimum: 0
      maximum: 1
      example: 0.99
      default: 0
      description: |
        Face descriptor quality score threshold. All the attributes with quality score below the threshold will be
        ignored (and not stored in the DB). The function will proceed as usual with all the remaining descriptors
        (if left).
        

    detect_landmarks68:
      allOf:
        - $ref: '#/components/schemas/int01_def0'
        - type: integer
        - description: |
            Whether to detect basic 68-point facial landmarks on the image.
            
            *Not supported with warped images (see `warped_image` or `image_type` parameter).*

    detect_landmarks5:
      allOf:
        - $ref: '#/components/schemas/int01_def0'
        - type: integer
        - description: |
            Whether to detect basic 5-point facial landmarks on the image.
            
            *Not supported with warped images (see `warped_image` or `image_type` parameter).*

    estimate_eyes_attributes:
      allOf:
        - $ref: '#/components/schemas/int01_def0'
        - type: integer
        - description: |
            Whether to estimate eye attributes on the image.
            
            *Not supported with warped images (see `warped_image` or `image_type` parameter).*

    estimate_head_pose:
      allOf:
        - $ref: '#/components/schemas/int01_def0'
      description: |
        Whether to estimate head pose on the image.

        *Not supported with warped images (see `warped_image` or `image_type` parameter).*
        

    estimate_gaze:
      allOf:
        - $ref: '#/components/schemas/int01_def0'
        - type: integer
        - description: |
            Whether to estimate eye gaze on the image.
            
            *Not supported with warped images (see `warped_image` or `image_type` parameter).*

    estimate_mouth_attributes:
      allOf:
        - $ref: '#/components/schemas/int01_def0'
        - type: integer
        - description: |
            Whether to estimate mouth attributes on the image.

    estimate_quality:
      allOf:
        - $ref: '#/components/schemas/int01_def0'
        - type: integer
        - description: |
            Whether to estimate input face image quality.

    estimate_emotions:
      allOf:
        - $ref: '#/components/schemas/int01_def0'
        - type: integer
        - description: |
            Whether to estimate emotions on the image.

    estimate_mask:
      allOf:
        - $ref: '#/components/schemas/int01_def0'
        - description: |
            Whether to estimate mask on the image.
            

    estimate_glasses:
      allOf:
        - $ref: '#/components/schemas/int01_def0'
        - description: |
            Whether to estimate glasses on the image.

    estimate_liveness:
      allOf:
        - $ref: '#/components/schemas/int01_def0'
        - description: | 
            Whether to estimate liveness on the image.
            
            ⚠ **Liveness licensing feature is required to be enabled to perform liveness estimation.**
      

    estimate_deepfake:
      allOf:
        - $ref: '#/components/schemas/int01_def0'
        - description: | 
            Whether to estimate deepfake feature on the image.
            
            ⚠ **Deepfake licensing feature is required to be enabled to perform deepfake estimation.**

    estimate_face_occlusion:
      allOf:
        - $ref: '#/components/schemas/int01_def0'
        - description: | 
            Whether to estimate face occlusion on the image.

    estimate_body_warp:
      allOf:
        - $ref: '#/components/schemas/int01_def0'
        - description:  Whether to estimate human body warp on the image.

    estimate_body_basic_attributes:
      allOf:
        - $ref: '#/components/schemas/int01_def0'
        - description: Whether to estimate human body basic attributes on the image (age, gender).

    estimate_upper_body:
      allOf:
        - $ref: '#/components/schemas/int01_def0'
        - description: |
            Whether to estimate upper body attributes (headwear_state, upper_clothing_color, sleeve_length) from the image.

    estimate_lower_body:
      allOf:
        - $ref: '#/components/schemas/int01_def0'
        - description: |
            Whether to estimate human lower body attributes on the image (lower garment type, clothing color, shoes color).

    image_format_threshold:
      type: array
      items:
        type: string
        enum: [ JPEG, JPEG2000, PNG ]
      minItems: 1
      default: [ JPEG, JPEG2000, PNG ]
      description: List of allowed image formats.

    estimate_flag:
      type: integer
      enum: [0, 1]
      default: 1
      description: Whether to enable estimation.

    check_base:
      type: object
      properties:
        estimate:
          $ref: '#/components/schemas/estimate_flag'

    image_format_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/image_format_threshold'
        - description: Image format check.

    illumination_quality_threshold:
      allOf:
        - $ref: '#/components/schemas/check_threshold_float_0_1'
        - default:
            min: 0.5
            max: 1.0
        - example:
            min: 0.3
            max: 0.9

    illumination_quality_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/illumination_quality_threshold'
        - description: Image quality check for uniformity of illumination.

    specularity_quality_threshold:
      allOf:
        - $ref: '#/components/schemas/check_threshold_float_0_1'
        - default:
            min: 0.3
            max: 1.0
        - example:
            min: 0.3
            max: 0.9

    specularity_quality_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/specularity_quality_threshold'
        - description: Image quality check for specularity.

    blurriness_quality_threshold:
      allOf:
        - $ref: '#/components/schemas/check_threshold_float_0_1'
        - default:
            min: 0.61
            max: 1.0
        - example:
            min: 0.3
            max: 0.9

    blurriness_quality_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/blurriness_quality_threshold'
        - description: Image quality check for blurriness.

    dark_quality_threshold:
      allOf:
        - $ref: '#/components/schemas/check_threshold_float_0_1'
        - default:
            min: 0.5
            max: 1.0
        - example:
            min: 0.3
            max: 0.9

    dark_quality_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/dark_quality_threshold'
        - description: Image quality check for underexposure.

    light_quality_threshold:
      allOf:
        - $ref: '#/components/schemas/check_threshold_float_0_1'
        - default:
            min: 0.57
            max: 1.0
        - example:
            min: 0.3
            max: 0.9

    light_quality_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/light_quality_threshold'
        - description: Image quality check for overexposure.

    head_angles_threshold:
      allOf:
        - $ref: '#/components/schemas/base_float_threshold'
        - properties:
            min:
              allOf:
                - description: Inclusive lower bound of the allowed range.
                - $ref: '#/components/schemas/base_float_min_threshold'
                - minimum: -180.0
                - maximum: 180.0
            max:
              allOf:
                - description: Inclusive upper bound of the allowed range.
                - $ref: '#/components/schemas/base_float_max_threshold'
                - minimum: -180.0
                - maximum: 180.0

    head_yaw_threshold:
      allOf:
        - $ref: '#/components/schemas/head_angles_threshold'
        - default:
            min: -5.0
            max: 5.0
        - example:
            min: 0.3
            max: 0.9

    head_yaw_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/head_yaw_threshold'
        - description: Head yaw check.

    head_pitch_threshold:
      allOf:
        - $ref: '#/components/schemas/head_angles_threshold'
        - default:
            min: -5.0
            max: 5.0
        - example:
            min: 0.3
            max: 0.9

    head_pitch_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/head_pitch_threshold'
        - description: Head pitch check.

    head_roll_threshold:
      allOf:
        - $ref: '#/components/schemas/head_angles_threshold'
        - default:
            min: -8.0
            max: 8.0
        - example:
            min: 0.3
            max: 0.9

    head_roll_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/head_roll_threshold'
        - description: Head roll check.

    check_threshold_float_180_180:
      allOf:
        - $ref: '#/components/schemas/base_float_threshold'
        - properties:
            min:
              allOf:
                - $ref: '#/components/schemas/base_float_min_threshold'
                - minimum: -180.0
                - maximum: 180.0
            max:
              allOf:
                - $ref: '#/components/schemas/base_float_max_threshold'
                - minimum: -180.0
                - maximum: 180.0

    gaze_yaw_threshold:
      allOf:
        - $ref: '#/components/schemas/check_threshold_float_180_180'
        - default:
            min: -5.0
            max: 5.0
        - example:
            min: 0.3
            max: 0.9

    gaze_yaw_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/gaze_yaw_threshold'
        - description: Gaze yaw check.

    gaze_pitch_threshold:
      allOf:
        - $ref: '#/components/schemas/check_threshold_float_180_180'
        - default:
            min: -5.0
            max: 5.0
        - example:
            min: 0.3
            max: 0.9

    gaze_pitch_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/gaze_pitch_threshold'
        - description: Gaze pitch check.

    mouth_threshold:
      allOf:
        - $ref: '#/components/schemas/base_float_threshold'
        - properties:
            min:
              allOf:
                - $ref: '#/components/schemas/base_float_min_threshold'
                - minimum: 0.0
                - maximum: 1.0
            max:
              allOf:
                - description: Inclusive upper bound of the allowed range.
                - $ref: '#/components/schemas/base_float_max_threshold'
                - minimum: 0.0
                - maximum: 1.0

    mouth_smiling_threshold:
      allOf:
        - $ref: '#/components/schemas/mouth_threshold'
        - default:
            min: 0.0
            max: 0.5
        - example:
            min: 0.3
            max: 0.9

    mouth_smiling_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/mouth_smiling_threshold'
        - description: Mouth smiling check.

    mouth_occluded_threshold:
      allOf:
        - $ref: '#/components/schemas/mouth_threshold'
        - default:
            min: 0.0
            max: 0.5
        - example:
            min: 0.3
            max: 0.9

    mouth_occluded_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/mouth_occluded_threshold'
        - description: Mouth occluded check.

    mouth_open_threshold:
      allOf:
        - $ref: '#/components/schemas/mouth_threshold'
        - default:
            min: 0.0
            max: 0.5
        - example:
            min: 0.3
            max: 0.9

    mouth_open_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/mouth_open_threshold'
        - description: Mouth open check.


    glasses_threshold:
      type: array
      items:
        type: string
        enum: [ "no_glasses", "eyeglasses", "sunglasses" ]
      minItems: 1
      default: ["no_glasses", "eyeglasses"]
      description: List of image formats allowed by standard.

    glasses_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/glasses_threshold'
        - description: Glasses check.


    eye_threshold:
      type: array
      items:
        type: string
        enum: [ "open", "occluded", "closed" ]
      minItems: 1
      default: ["open"]
      description: List of image formats allowed by standard.

    left_eye_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/eye_threshold'
        - description: Left eye check.

    right_eye_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/eye_threshold'
        - description: Right eye check.

    head_horizontal_threshold:
      allOf:
        - $ref: '#/components/schemas/check_threshold_float_0_1'
        - default:
            min: 0.45
            max: 0.55

    head_horizontal_center_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/head_horizontal_threshold'
        - description: Check for horizontal position of face center point relative to image | not available for warped images.

    head_vertical_threshold:
      allOf:
        - $ref: '#/components/schemas/check_threshold_float_0_1'
        - default:
            min: 0.3
            max: 0.5

    head_vertical_center_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/head_vertical_threshold'
        - description: Check for vertical position of face center point relative to image | not available for warped images.

    check_threshold_float_positive:
      allOf:
        - $ref: '#/components/schemas/base_float_threshold'
        - properties:
            min:
              allOf:
                - $ref: '#/components/schemas/base_float_min_threshold'
                - description: Inclusive lower bound of the allowed range.
                - minimum: 0.0
            max:
              allOf:
                - $ref: '#/components/schemas/base_float_max_threshold'
                - description: Inclusive upper bound of the allowed range.
                - minimum: 0.0
                - nullable: true

    head_width_threshold:
      allOf:
        - $ref: '#/components/schemas/check_threshold_float_positive'
        - default:
            min: 0.5
            max: 0.75

    head_width_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/head_width_threshold'
        - description: Check for horizontal head size relative to image size | not available for warped images.

    head_height_threshold:
      allOf:
        - $ref: '#/components/schemas/check_threshold_float_positive'
        - default:
            min: 0.6
            max: 0.9

    head_height_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/head_height_threshold'
        - description: Check for vertical head size relative to image size | not available for warped images.

    check_threshold_float_positive_max_nullable:
      allOf:
        - $ref: '#/components/schemas/base_float_threshold'
        - properties:
            min:
              allOf:
                - type: number
                - minimum: 0.0
                - description: Inclusive lower bound of the allowed range.
                - $ref: '#/components/schemas/base_float_min_threshold'
            max:
              allOf:
                - type: number
                - minimum: 0.0
                - nullable: true
                - description: Inclusive upper bound of the allowed range.
                - $ref: '#/components/schemas/base_float_min_threshold'

    eye_distance_threshold:
      allOf:
        - $ref: '#/components/schemas/check_threshold_float_positive_max_nullable'
        - default:
            min: 90.0
        - example:
            min: 91.1
            max: 92.2

    eye_distance_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/eye_distance_threshold'
        - description: Eye distance check | not available for warped images.

    base_int_min_threshold:
      type: integer
      nullable: false
      description: Exclusive lower bound of the allowed range.
      example: 0

    base_int_max_threshold:
      type: integer
      nullable: false
      description: Exclusive upper bound of the allowed range.
      example: 0

    base_int_max_threshold_nullable:
      type: integer
      nullable: true
      description: Exclusive upper bound of the allowed range.
      example: 0

    check_threshold_inclusive_int_positive:
      type: object
      description: Allowed range of the estimation value.
      properties:
        min:
          allOf:
            - description: Inclusive lower bound of the allowed range.
            - $ref: '#/components/schemas/base_int_min_threshold'
            - minimum: 0
        max:
          allOf:
            - description: Inclusive upper bound of the allowed range.
            - $ref: '#/components/schemas/base_int_max_threshold'
            - nullable: true
            - minimum: 0

    image_width_threshold:
      allOf:
        - description: Allowed range of the estimation value (in pixels).
        - $ref: '#/components/schemas/check_threshold_inclusive_int_positive'
        - default:
            min: 180
            max: 1920

    image_width_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/image_width_threshold'
        - description: Image width check.

    image_height_threshold:
      allOf:
        - description: Allowed range of the estimation value (in pixels).
        - $ref: '#/components/schemas/check_threshold_inclusive_int_positive'
        - default:
            min: 180
            max: 1080

    image_height_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/image_height_threshold'
        - description: Image height check.

    aspect_ratio_threshold:
      allOf:
        - $ref: '#/components/schemas/check_threshold_float_positive'
        - default:
            min: 0.74
            max: 0.8

    aspect_ratio_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/aspect_ratio_threshold'
        - description: Image aspect ratio check.



    check_threshold_inclusive_int_positive_max_nullable:
      type: object
      description: Allowed range of the estimation value.
      properties:
        min:
          allOf:
            - description: Inclusive lower bound of the allowed range.
            - $ref: '#/components/schemas/base_int_min_threshold'
            - minimum: 0
        max:
          allOf:
            - description: Inclusive upper bound of the allowed range.
            - $ref: '#/components/schemas/base_int_max_threshold_nullable'
            - minimum: 0

    face_width_threshold:
      allOf:
        - description: Allowed range of the estimation value (in pixels).
        - $ref: '#/components/schemas/check_threshold_inclusive_int_positive_max_nullable'
        - default:
            min: 180

    face_width_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/face_width_threshold'
        - description: Face width check | not available for warped images.

    face_height_threshold:
      allOf:
        - description: Allowed range of the estimation value (in pixels).
        - $ref: '#/components/schemas/check_threshold_inclusive_int_positive_max_nullable'
        - default:
            min: 180

    face_height_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/face_height_threshold'
        - description: Face height check | not available for warped images.

    indent_left_threshold:
      allOf:
        - description: Allowed range of the estimation value (in pixels).
        - $ref: '#/components/schemas/check_threshold_inclusive_int_positive_max_nullable'
        - default:
            min: 20

    indent_left_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/indent_left_threshold'
        - description: Check for indent from the left image border to the left face border | not available for warped images.

    indent_right_threshold:
      allOf:
        - description: Allowed range of the estimation value (in pixels).
        - $ref: '#/components/schemas/check_threshold_inclusive_int_positive_max_nullable'
        - default:
            min: 20

    indent_right_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/indent_right_threshold'
        - description: Check for indent from the right image border to the right face border | not available for warped images.


    indent_upper_threshold:
      allOf:
        - description: Allowed range of the estimation value (in pixels).
        - $ref: '#/components/schemas/check_threshold_inclusive_int_positive_max_nullable'
        - default:
            min: 20

    indent_upper_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/indent_upper_threshold'
        - description: Check for indent from the upper image border to the upper face border | not available for warped images.

    indent_lower_threshold:
      allOf:
        - description: Allowed range of the estimation value (in pixels).
        - $ref: '#/components/schemas/check_threshold_inclusive_int_positive_max_nullable'
        - default:
            min: 20

    indent_lower_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/indent_lower_threshold'
        - description: Check for indent from the lower image border to the lower face border | not available for warped images.

    image_size_threshold:
      allOf:
        - description: Allowed range of the estimation value (in bytes).
        - $ref: '#/components/schemas/check_threshold_inclusive_int_positive'
        - default:
            min: 5120
            max: 2097152

    image_size_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/image_size_threshold'
        - description: Image size check.


    eyebrow:
      type: string
      enum: ["squinting", "frowning", "raised", "neutral"]

    eyebrows_state_check:
      type: object
      description: Eyebrows type check configuration.
      properties:
        estimate:
          $ref: '#/components/schemas/estimate_flag'
        threshold:
          type: array
          items:
            $ref: '#/components/schemas/eyebrow'
          description: List of values to consider successful.
          minItems: 1
          default: ["neutral"]
      required: [estimate]

    headwear:
      type: string
      description: |
        > **WARNING** This enum may be to expand. This field must be interpret as arbitrary string which can be equal 
        to one element from enum.
      enum: ["none", "baseball_cap", "beanie", "peaked_cap", "shawl", "hat_with_earflaps", "helmet", "hood", "hat", "other"]

    headwear_threshold:
      type: array
      items:
        $ref: '#/components/schemas/headwear'
      description: List of values to consider successful.
      minItems: 1

    headwear_type_check:
      type: object
      description: Headwear_type check configuration.
      properties:
        estimate:
          $ref: '#/components/schemas/estimate_flag'
        threshold:
          type: array
          items:
            $ref: '#/components/schemas/headwear'
          description: List of values to consider successful.
          minItems: 1
          default: ["none"]
      required: [estimate]

    smile:
      type: string
      enum: ["none", "smile_lips", "smile_teeth"]

    smile_threshold:
      type: array
      items:
        $ref: '#/components/schemas/smile'
      description: List of successful values.
      minItems: 1

    smile_properties_check:
      type: object
      description: Smile_properties check configuration.
      properties:
        estimate:
          $ref: '#/components/schemas/estimate_flag'
        threshold:
          type: array
          items:
            $ref: '#/components/schemas/smile'
          description: List of successful values.
          minItems: 1
          default: ["none"]
      required: [estimate]

    face_color:
      type: string
      enum: ["color", "grayscale", "infrared"]

    face_color_type_threshold:
      type: array
      items:
        $ref: '#/components/schemas/face_color'
      description: List of values to consider successful.
      minItems: 1

    face_color_type_check:
      type: object
      description: Face color type check configuration.
      properties:
        estimate:
          $ref: '#/components/schemas/estimate_flag'
        threshold:
          type: array
          items:
            $ref: '#/components/schemas/face_color'
          description: List of values to consider successful.
          minItems: 1
          default: ["color"]
      required: [estimate]

    natural_light_check:
      type: object
      description: Natural_light check configuration.
      properties:
        estimate:
          $ref: '#/components/schemas/estimate_flag'
        threshold:
          type: integer
          enum: [ 0, 1 ]
          default: 1
          description: Value to consider successful.
      required: [estimate]

    red_eyes_check:
      type: object
      description: Red_eyes check configuration.
      properties:
        estimate:
          $ref: '#/components/schemas/estimate_flag'
        threshold:
          type: integer
          enum: [ 0, 1 ]
          default: 0
          description: Value to consider successful.
      required: [estimate]

    radial_distortion_check:
      type: object
      description: Radial_distortion check configuration.
      properties:
        estimate:
          $ref: '#/components/schemas/estimate_flag'
        threshold:
          type: integer
          enum: [ 0, 1 ]
          default: 0
          description: Value to consider successful.
      required: [estimate]

    base_float_threshold:
      type: object
      description: Allowed range of the estimation value.

    base_float_min_threshold:
      type: number
      nullable: false
      description: Exclusive lower bound of the allowed range.
      example: 0.0

    base_float_max_threshold:
      type: number
      nullable: false
      description: Exclusive upper bound of the allowed range.
      example: 0.0

    illumination_uniformity_threshold:
      allOf:
        - $ref: '#/components/schemas/base_float_threshold'
        - properties:
            min:
              allOf:
                - minimum: 0.0
                - maximum: 1.0
                - description: Inclusive lower bound of the allowed range.
                - $ref: '#/components/schemas/base_float_min_threshold'
            max:
              allOf:
                - minimum: 0.0
                - maximum: 1.0
                - description: Inclusive lower bound of the allowed range.
                - $ref: '#/components/schemas/base_float_max_threshold'
        - default:
            min: 0.5
            max: 1.0

    illumination_uniformity_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/illumination_uniformity_threshold'
        - description: Illumination uniformity check | not available for warped images.

    check_threshold_float_0_1:
      allOf:
        - $ref: '#/components/schemas/base_float_threshold'
        - properties:
            min:
              allOf:
                - $ref: '#/components/schemas/base_float_min_threshold'
                - minimum: 0.0
                - maximum: 1.0
            max:
              allOf:
                - $ref: '#/components/schemas/base_float_max_threshold'
                - minimum: 0.0
                - maximum: 1.0

    background_uniformity_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/background_lightness_threshold'
        - description: Face detection background uniformity check | not available for warped images.

    background_lightness_threshold:
      allOf:
        - $ref: '#/components/schemas/check_threshold_float_0_1'
        - default:
            min: 0.2
            max: 1.0
        - description: Background uniformity threshold, 1 - background is light, 0 - background is dark

    background_lightness_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/background_lightness_threshold'
        - description: Face detection background lightness check | not available for warped images.

    dynamic_range_threshold:
      allOf:
        - $ref: '#/components/schemas/base_float_threshold'
        - properties:
            min:
              allOf:
                - minimum: 0.0
                - maximum: 1.0
                - description: Inclusive lower bound of the allowed range.
                - $ref: '#/components/schemas/base_float_min_threshold'
            max:
              allOf:
                - minimum: 0.0
                - maximum: 1.0
                - description: Inclusive lower bound of the allowed range.
                - $ref: '#/components/schemas/base_float_max_threshold'
        - default:
            min: 0.5
            max: 1.0

    dynamic_range_check:
      allOf:
        - $ref: '#/components/schemas/check_base'
        - properties:
            threshold:
              $ref: '#/components/schemas/dynamic_range_threshold'
        - description: Dynamic range of facial skin tone (eliminate extremely light or dark skin tone) | not available for warped images.

    shoulders_position:
      type: string
      enum: ["non-parallel", "parallel", "hidden"]

    shoulders_position_threshold:
      type: array
      items:
        $ref: '#/components/schemas/shoulders_position'
      description: List of values to consider successful.
      minItems: 1

    shoulders_position_check:
      type: object
      description: Soulders position status check configuration.
      properties:
        estimate:
          $ref: '#/components/schemas/estimate_flag'
        threshold:
          type: array
          items:
            $ref: '#/components/schemas/shoulders_position'
          description: List of values to consider successful.
          minItems: 1
          default: ["parallel"]
      required: [ estimate ]

    face_occlusion_check:
      type: object
      description: face_occlusion_check check configuration.
      properties:
        estimate:
          $ref: '#/components/schemas/estimate_flag'
        threshold:
          type: integer
          enum: [ 0, 1 ]
          default: 0
          description: |
            Value to consider successful.  1 - detected face should be overlapped, 0 - face should not be overlapped.
      required: [ estimate ]

    lower_face_occlusion_check:
      type: object
      description: lower_face_occlusion_check check configuration.
      properties:
        estimate:
          $ref: '#/components/schemas/estimate_flag'
        threshold:
          type: integer
          enum: [ 0, 1 ]
          default: 0
          description: |
            Value to consider successful.  1 - detected face should be overlapped, 0 - face should not be overlapped.
      required: [ estimate ]

    forehead_occlusion_check:
      type: object
      description: forehead_occlusion_check check configuration.
      properties:
        estimate:
          $ref: '#/components/schemas/estimate_flag'
        threshold:
          type: integer
          enum: [ 0, 1 ]
          default: 0
          description: |
            Value to consider successful.  1 - detected face should be overlapped, 0 - face should not be overlapped.
      required: [ estimate ]

    nose_occlusion_check:
      type: object
      description: nose_occlusion_check check configuration.
      properties:
        estimate:
          $ref: '#/components/schemas/estimate_flag'
        threshold:
          type: integer
          enum: [ 0, 1 ]
          default: 0
          description: |
            Value to consider successful.  1 - detected face should be overlapped, 0 - face should not be overlapped.
      required: [ estimate ]

    face_quality_checks:
      type: object
      description: Face quality checks and filters.
      properties:
        image_format:
          $ref: '#/components/schemas/image_format_check'
        illumination_quality:
          $ref: '#/components/schemas/illumination_quality_check'
        specularity_quality:
          $ref: '#/components/schemas/specularity_quality_check'
        blurriness_quality:
          $ref: '#/components/schemas/blurriness_quality_check'
        dark_quality:
          $ref: '#/components/schemas/dark_quality_check'
        light_quality:
          $ref: '#/components/schemas/light_quality_check'
        head_yaw:
          $ref: '#/components/schemas/head_yaw_check'
        head_pitch:
          $ref: '#/components/schemas/head_pitch_check'
        head_roll:
          $ref: '#/components/schemas/head_roll_check'
        gaze_yaw:
          $ref: '#/components/schemas/gaze_yaw_check'
        gaze_pitch:
          $ref: '#/components/schemas/gaze_pitch_check'
        mouth_smiling:
          $ref: '#/components/schemas/mouth_smiling_check'
        mouth_occluded:
          $ref: '#/components/schemas/mouth_occluded_check'
        mouth_open:
          $ref: '#/components/schemas/mouth_open_check'
        glasses:
          $ref: '#/components/schemas/glasses_check'
        left_eye:
          $ref: '#/components/schemas/left_eye_check'
        right_eye:
          $ref: '#/components/schemas/right_eye_check'
        head_horizontal_center:
          $ref: '#/components/schemas/head_horizontal_center_check'
        head_vertical_center:
          $ref: '#/components/schemas/head_vertical_center_check'
        head_width:
          $ref: '#/components/schemas/head_width_check'
        head_height:
          $ref: '#/components/schemas/head_height_check'
        eye_distance:
          $ref: '#/components/schemas/eye_distance_check'
        image_width:
          $ref: '#/components/schemas/image_width_check'
        image_height:
          $ref: '#/components/schemas/image_height_check'
        aspect_ratio:
          $ref: '#/components/schemas/aspect_ratio_check'
        face_width:
          $ref: '#/components/schemas/face_width_check'
        face_height:
          $ref: '#/components/schemas/face_height_check'
        indent_left:
          $ref: '#/components/schemas/indent_left_check'
        indent_right:
          $ref: '#/components/schemas/indent_right_check'
        indent_upper:
          $ref: '#/components/schemas/indent_upper_check'
        indent_lower:
          $ref: '#/components/schemas/indent_lower_check'
        image_size:
          $ref: '#/components/schemas/image_size_check'
        eyebrows_state:
          $ref: '#/components/schemas/eyebrows_state_check'
        headwear_type:
          $ref: '#/components/schemas/headwear_type_check'
        smile_properties:
          $ref: '#/components/schemas/smile_properties_check'
        face_color_type:
          $ref: '#/components/schemas/face_color_type_check'
        natural_light:
          $ref: '#/components/schemas/natural_light_check'
        red_eyes:
          $ref: '#/components/schemas/red_eyes_check'
        radial_distortion:
          $ref: '#/components/schemas/radial_distortion_check'
        illumination_uniformity:
          $ref: '#/components/schemas/illumination_uniformity_check'
        background_uniformity:
          $ref: '#/components/schemas/background_uniformity_check'
        background_lightness:
          $ref: '#/components/schemas/background_lightness_check'
        dynamic_range:
          $ref: '#/components/schemas/dynamic_range_check'
        shoulders_position:
          $ref: '#/components/schemas/shoulders_position_check'
        face_occlusion:
          $ref: '#/components/schemas/face_occlusion_check'
        lower_face_occlusion:
          $ref: '#/components/schemas/lower_face_occlusion_check'
        forehead_occlusion:
          $ref: '#/components/schemas/forehead_occlusion_check'
        nose_occlusion:
          $ref: '#/components/schemas/nose_occlusion_check'

    face_quality:
      type: object
      description: |
        Face quality estimations checks.

        It enables you to perform various face quality checks by manually specifying thresholds.

        ⚠ **ISO licensing feature is required to be enabled to perform face quality estimation.**
      properties:
        estimate:
          type: integer
          enum: [0, 1]
          default: 0
          description: Whether to estimate face quality.
        filter:
          type: integer
          enum: [0, 1]
          default: 0

          description: |
            Whether to enable face quality filtering.

            If one of the `face_quality` checks for the detection fails, then the results and the reason for filtering will be returned. No further policies will be performed for this detection.
        checks:
          $ref: '#/components/schemas/face_quality_checks'

    estimate_people_count:
      type: object
      description: |
        People count estimations.
        
        ⚠ **People counter licensing feature is required to be enabled to perform estimation.**
      properties:
        estimate:
          type: integer
          enum: [ 0, 1 ]
          default: 0
          description: Whether to estimate people count.
        people_coordinates:
          allOf:
            - $ref: '#/components/schemas/int01'
            - description: Whether to return people coordinates.
            - default: 1

    estimator_targets:
      type: object
      properties:
        exif:
          $ref: '#/components/schemas/extract_exif'
        people_count:
          $ref: '#/components/schemas/estimate_people_count'
        face_detection:
          $ref: '#/components/schemas/detect_face'
        face_warp:
          $ref: '#/components/schemas/estimate_face_warp'
        face_landmarks5:
          $ref: '#/components/schemas/detect_landmarks5'
        face_landmarks68:
          $ref: '#/components/schemas/detect_landmarks68'
        gaze:
          $ref: '#/components/schemas/estimate_gaze'
        head_pose:
          $ref: '#/components/schemas/estimate_head_pose'
        eyes:
          $ref: '#/components/schemas/estimate_eyes_attributes'
        mouth_attributes:
          $ref: '#/components/schemas/estimate_mouth_attributes'
        face_warp_quality:
          $ref: '#/components/schemas/estimate_quality'
        emotions:
          $ref: '#/components/schemas/estimate_emotions'
        face_descriptor:
          $ref: '#/components/schemas/extract_descriptor'
        basic_attributes:
          $ref: '#/components/schemas/extract_basic_attributes'
        mask:
          $ref: '#/components/schemas/estimate_mask'
        glasses:
          $ref: '#/components/schemas/estimate_glasses'
        liveness:
          $ref: '#/components/schemas/estimate_liveness'
        deepfake:
          $ref: '#/components/schemas/estimate_deepfake'
        face_occlusion:
          $ref: '#/components/schemas/estimate_face_occlusion'
        body_warp:
          $ref: '#/components/schemas/estimate_body_warp'
        body_detection:
          $ref: '#/components/schemas/detect_body'
        body_descriptor:
          $ref: '#/components/schemas/extract_body_descriptor'
        body_attributes:
          $ref: '#/components/schemas/estimate_body_basic_attributes'
        upper_body:
          $ref: '#/components/schemas/estimate_upper_body'
        lower_body:
          $ref: '#/components/schemas/estimate_lower_body'
        face_quality:
          $ref: '#/components/schemas/face_quality'
      description: Estimation targets

    pitch_threshold:
      allOf:
        - $ref: '#/components/schemas/int0180'
        - type: integer
        - description: |
            Maximum deviation pitch angle from 0.

    roll_threshold:
      allOf:
        - $ref: '#/components/schemas/int0180'
        - type: integer
        - description: |
            Maximum deviation roll angle from 0.

    yaw_threshold:
      allOf:
        - $ref: '#/components/schemas/int0180'
        - type: integer
        - description: |
            Maximum deviation yaw angle from 0.

    mask_states:
      type: array
      items:
        type: integer
        enum: [1, 2, 3]
      minItems: 1
      description: |
        Filter by mask states

        | masks      | value |
        |----------------|---|
        | missing        | 1 |
        | medical_mask   | 2 |
        | occluded       | 3 |

    liveness_states:
      type: array
      items:
        type: integer
        enum: [ 0, 1, 2, null ]
      minItems: 1
      description: |
        Filter by liveness states.
        The filter value `unknown` is supported for backwards compatibility, but is never reachable for estimation result. Please manage to not use it for filtration.

        | liveness   | value |
        |----------------|---|
        | spoof          | 0 |
        | real           | 1 |
        | unknown        | 2 |

    deepfake_states:
      type: array
      items:
        type: integer
        enum: [ 0, 1, null ]
      minItems: 1
      description: |
        Filter by deepfake states.

        | liveness   | value |
        |----------------|---|
        | fake           | 0 |
        | real           | 1 | 

    face_occlusion_threshold:
      type: array
      items:
        type: string
        enum: ["face", "forehead", "eye", "nose", "mouth", "lower_face"]
      minItems: 1
      description: |
        List of face area which must not be occluded. If any area are occluded on face then 
        face will be filtered. `face` means that `overall_score` must be lower than corresponding threshold.
      example: ["face"] 

    face_detection_filters:
      type: object
      properties:
        pitch_threshold:
          $ref: '#/components/schemas/pitch_threshold'
        roll_threshold:
          $ref: '#/components/schemas/roll_threshold'
        yaw_threshold:
          $ref: '#/components/schemas/yaw_threshold'
        liveness_states:
          $ref: '#/components/schemas/liveness_states'
        deepfake_states:
          $ref: '#/components/schemas/deepfake_states'
        mask_states:
          $ref: '#/components/schemas/mask_states'
        score_threshold:
          $ref: '#/components/schemas/score_threshold'
        face_occlusion_states:
          $ref: '#/components/schemas/face_occlusion_threshold'
      description: Face detection filters

    estimator_filters:
      type: object
      properties:
        face_detection_filters:
          $ref: '#/components/schemas/face_detection_filters'
      description: Estimation filters

    liveness_settings:
      type: object
      properties:
        score_threshold:
          allOf:
            - $ref: '#/components/schemas/number01'
            - description: Liveness estimation real score threshold.
          default: 0.5
        quality_threshold:
          allOf:
            - $ref: '#/components/schemas/number01'
            - description: Liveness estimation quality threshold. Support in backwards compatibility, never applied.
            - deprecated: true
          default: 0.5
      description: |
        Liveness estimation configuration.

    deepfake_settings:
      type: object
      properties:
        real_threshold:
          allOf:
            - $ref: '#/components/schemas/number01'
            - description: Deepfake estimation real score threshold.
          default: 0.5
        mode:
          type: int
          enum: [1, 2]
          description: ""
          default: 2

      description: |
        Deepfake estimation configuration.

    face_occlusion_settings:
      type: object
      properties:
        occlusion_threshold:
          allOf:
            - $ref: '#/components/schemas/number01'
            - description: |
                Face occlusion threshold. If an face occlusion has area greater than this threshold than face
                is considered as occluded.
          default: 0.07
        hair_threshold:
          allOf:
            - $ref: '#/components/schemas/number01'
            - description: |
                The "hair_threshold" sets the threshold for hair overlap. When hair overlap exceeds the 
                specified threshold, the value is included into the total face occlusion score and the forehead 
                occlusion score.  Othervise it is considered that face is not occluded by hair.
          default: 0.15
        forehead_threshold:
          allOf:
            - $ref: '#/components/schemas/number01'
            - description: |
                Forehead occlusion threshold. If a forehead occlusion has area greater than this threshold than forehead
                is considered as occluded.
          default: 0.2
        eye_threshold:
          allOf:
            - $ref: '#/components/schemas/number01'
            - description: |
                Eyes occlusion threshold.If occlusion of any eye has area greater than this threshold than eyes are 
                considered as occluded.
          default: 0.15
        nose_threshold:
          allOf:
            - $ref: '#/components/schemas/number01'
            - description: |
                Nose occlusion threshold. If a nose occlusion has area greater than this threshold than nose
                is considered as occluded.
          default: 0.2
        mouth_threshold:
          allOf:
            - $ref: '#/components/schemas/number01'
            - description: |
                Mouth occlusion threshold. If a mouth occlusion has area greater than this threshold than mouth
                is considered as occluded.
          default: 0.15
        lower_face_threshold:
          allOf:
            - $ref: '#/components/schemas/number01'
            - description: |
                Lower face occlusion threshold. If a lower face occlusion has area greater than this threshold than 
                lower face is considered as occluded.
          default: 0.2

    estimators_params:
      type: object
      properties:
        liveness_params:
          $ref: '#/components/schemas/liveness_settings'
        deepfake_params:
          $ref: '#/components/schemas/deepfake_settings'
        occlusion_params:
          $ref: '#/components/schemas/face_occlusion_settings'
        face_descriptor_version:
          type: integer
        body_descriptor_version:
          type: integer
      description: Estimation parameters

    multiface_policy:
      allOf:
        - $ref: '#/components/schemas/int02'
        - type: integer
        - description: |
            Multiple face detection policy:

            - *`0`* - do not process images with several detected faces.

              If *`detect_body`* is enabled, the system will attempt to detect a human body related to the detected face. If a human body is detected, its detection will be associated with the same event as the face.

              If there is no face detected in the image, no human body detections will be returned. Thus there will be no human body detection returned if *`detect_face`* is disabled.


            - *`1`* - process images with several detected faces and/or human bodies.

              If *`detect_body`* is enabled, all the detections of human bodies will be returned. Face detection and human body detection of the same person will be associated with the same event.

              The detections of human bodies are returned even if there were no faces found.


            - *`2`* - get the best face detection from the image. A single face of the best quality is detected in the image.

              If *`detect_body`* is enabled, the system will attempt to detect a human body related to the detected face. If a human body is detected, its detection will be associated with the same event as the face.

              If there is no face detected in the image, no human body detections will be returned. Thus there will be no human body detection returned if *`detect_face`* is disabled.

    int0180:
      type: integer
      minimum: 0
      maximum: 180

    use_exif_info:
      type: integer
      enum: [0, 1]
      default: 1
      description: |
        Whether to try to auto orient image based on exif data

        *Ignored with warped images (see `warped_image` or `image_type` parameter).*
      example: 1

    estimator_parameters:
      type: object
      properties:
        use_exif_info:
          $ref: '#/components/schemas/use_exif_info'
        targets:
          $ref: '#/components/schemas/estimator_targets'
        filters:
          $ref: '#/components/schemas/estimator_filters'
        estimators_params:
          $ref: '#/components/schemas/estimators_params'
        aggregate:
          $ref: '#/components/schemas/aggregate_attributes'
        multiface_policy:
          $ref: '#/components/schemas/multiface_policy'
      required: [targets]

    trusted_detections:
      allOf:
        - description: |
            Whether detections were received with VL algorithms or not.
            
            **Note that enabling this parameter with detections from external sources may affect estimations in an unexpected way**.
        - default: 0
        - $ref: '#/components/schemas/int01'

    estimator_image:
      type: object
      properties:
        filename:
          $ref: '#/components/schemas/filename'
        body:
          type: string
          format: binary
          description: Image in raw bytes
        image_type:
          $ref: '#/components/schemas/image_type'
        trusted_detections:
          $ref: '#/components/schemas/trusted_detections'
        face_detections:
          allOf:
            - description: Array with face bounding boxes for image (now support only 1 bounding box).
            - $ref: '#/components/schemas/base_bounding_boxes'
        body_detections:
          allOf:
            - description: Array with body bounding boxes for image (now support only 1 bounding box).
            - $ref: '#/components/schemas/base_bounding_boxes'
      required: [body]

    estimator_request_body:
      type: object
      properties:
        params:
          $ref: '#/components/schemas/estimator_parameters'
        images:
          type: array
          items:
            $ref: '#/components/schemas/estimator_image'
      required: [params, images]

    filename:
      type: string
      example: "penelope.jpeg"
      description: |
        Source image file name.

    emotions_estimations:
      type: object
      properties:
        anger:
          type: number
          format: double
          maximum: 1
          minimum: 0
          description: Anger probability.
        disgust:
          type: number
          format: double
          maximum: 1
          minimum: 0
          description: Disgust probability.
        fear:
          type: number
          format: double
          maximum: 1
          minimum: 0
          description: Fear probability.
        happiness:
          type: number
          format: double
          maximum: 1
          minimum: 0
          description: Happiness probability.
        neutral:
          type: number
          format: double
          maximum: 1
          minimum: 0
          description: Neutral face probability.
        sadness:
          type: number
          format: double
          maximum: 1
          minimum: 0
          description: Sadness probability.
        surprise:
          type: number
          format: double
          maximum: 1
          minimum: 0
          description: Surprise probability.
      required: [surprise, sadness, neutral, happiness, fear, disgust, anger]
      description: Emotion classifier response.

    emotions:
      type: object
      properties:
        estimations:
          allOf:
            - $ref: '#/components/schemas/emotions_estimations'
            - description: Emotion classifier response.
        predominant_emotion:
          type: string
          description: Name of predominant emotion.
          enum: [surprise, sadness, neutral, happiness, fear, disgust, anger]
      required: [estimations, predominant_emotion]

    liveness:
      type: object
      description: Liveness prediction.
      properties:
        prediction:
          type: string
          enum: [spoof, real]
          description: Liveness prediction name
        estimations:
          type: object
          description: Liveness estimations.
          properties:
            quality:
              allOf:
                - $ref: '#/components/schemas/number01'
              description: Liveness quality score. Support in backwards compatibility, always set to 1.
              deprecated: true
            score:
              allOf:
                - $ref: '#/components/schemas/number01'
              description: Liveness prediction score.
          required: [score]
      required: [prediction, estimations]

    deepfake:
      type: object
      description: Deepfake prediction.
      properties:
        prediction:
          type: string
          enum: [fake, real]
          description: Deepfake prediction name
        score:
          allOf:
            - $ref: '#/components/schemas/number01'
          description: Deepfake prediction score.
      required: [prediction, score]

    mask_estimations:
      type: object
      description: Raw mask estimations.
      properties:
        medical_mask:
          allOf:
            - $ref: '#/components/schemas/number01'
          description: The probability that the `medical mask` exists on the face and is worn properly.
        missing:
          allOf:
            - $ref: '#/components/schemas/number01'
          description: The probability that the `medical mask` doesn't exist on the face.
        occluded:
          allOf:
            - $ref: '#/components/schemas/number01'
          description: The probability that the face is occluded by other object (not by `medical mask`).
      required: [medical_mask, missing, occluded]

    age:
      allOf:
        - $ref: '#/components/schemas/int0100'
        - description: Age.

    gender:
      allOf:
        - $ref: '#/components/schemas/int01'
        - description: Gender, 0 - female, 1 - male.

    ethnicities_estimations:
      type: object
      description: Ethnicity classifier response.
      properties:
        asian:
          type: number
          format: double
          maximum: 1
          minimum: 0
          description: Asian ethnicity probability.
        indian:
          type: number
          format: double
          maximum: 1
          minimum: 0
          description: Indian ethnicity probability.
        caucasian:
          type: number
          format: double
          maximum: 1
          minimum: 0
          description: Caucasian ethnicity probability.
        african_american:
          type: number
          format: double
          maximum: 1
          minimum: 0
          description: African American ethnicity probability.
      required: [african_american, caucasian, indian, asian]

    ethnicities:
      description: Estimated ethnicities.
      type: object
      properties:
        estimations:
          allOf:
          - $ref: '#/components/schemas/ethnicities_estimations'
          - description: Ethnicity classifier response.
        predominant_ethnicity:
          type: string
          description: name of predominant ethnicity.
      required: [estimations, predominant_ethnicity]
      example:
        estimations:
          african_american: 1.92238889737406e-12
          asian: 0.954671621322632
          caucasian: 0.045328326523304
          indian: 7.65100649502415e-10
        predominant_ethnicity: "asian"

    basic_attributes:
      type: object
      description: Basic attributes.
      properties:
        age:
          allOf:
            - $ref: '#/components/schemas/age'
            - example: 29
        gender:
          allOf:
            - $ref: '#/components/schemas/gender'
            - example: 1
        ethnicities:
          $ref: '#/components/schemas/ethnicities'
      required: [age, gender, ethnicities]

    mask_predominant:
      type: string
      enum: [medical_mask, missing, occluded]
      description: Most likely mask state.

    masks_base:
      type: object
      description: Estimated face mask state.
      properties:
        estimations:
          $ref: '#/components/schemas/mask_estimations'
        predominant_mask:
          $ref: '#/components/schemas/mask_predominant'
        face_occlusion:
          type: object
          description: Estimated face occlusion.
          properties:
            predominant_occlusion:
              type: string
              enum: ["full", "clear", "correct", "partially", "mouth", "chin"]
              description: The most likely face occlusion state.
            estimations:
              type: object
              description: Raw face occlusion estimations scores.
              properties:
                full:
                  allOf:
                  - $ref: '#/components/schemas/number01'
                  description: The probability that the mask occlude whole face.
                clear:
                  allOf:
                  - $ref: '#/components/schemas/number01'
                  description: The probability that the mask absent.
                correct:
                  allOf:
                  - $ref: '#/components/schemas/number01'
                  description: The probability that the mask is put on correctly.
                partially:
                  allOf:
                  - $ref: '#/components/schemas/number01'
                  description: The probability that the mask is put on partially correct.
                mouth:
                  allOf:
                  - $ref: '#/components/schemas/number01'
                  description: The probability that the mask is put on mouth only.
                chin:
                  allOf:
                  - $ref: '#/components/schemas/number01'
                  description: The probability that the mask is put on chin only.
              required: [full, clear, correct, partially, mouth, chin]
          required: [predominant_occlusion, estimations]
      example:
        mask:
          estimations:
            medical_mask: 0.7108324766
            missing: 0.0700698048
            occluded: 0.2190976739
          predominant_mask: "medical_mask"
          face_occlusion:
            predominant_occlusion: "correct"
            estimations:
              full: 0.1
              correct: 0.25
              clear: 0.05
              mouth: 0.2
              partially: 0.2
              chin: 0.2

    masks:
      allOf:
        - $ref: '#/components/schemas/masks_base'
      required: [estimations, predominant_mask, face_occlusion]

    rect:
      description: Bounding rectangle.
      type: object
      properties:
        height:
          type: integer
          description: Rectangle height.
          example: 200
        width:
          type: integer
          description: Rectangle width.
          example: 100
        x:
          type: integer
          description: Top left corner "x" coordinate.
          example: 17
        y:
          type: integer
          description: Top left corner "y" coordinate.
          example: 10
      required: [height, width, x, y]
      example:
        height: 240
        width: 209
        x: 170
        y: 198

    sdk_descriptor:
      type: string
      format: byte
      description: SDK descriptor (descriptor version, signature, descriptor bytes).

    extracted_sdk_descriptor:
      description: SDK descriptor.
      type: object
      properties:
        sdk_descriptor:
          $ref: '#/components/schemas/sdk_descriptor'
        score:
          allOf:
            - $ref: '#/components/schemas/number01'
            - description: Descriptor score (always 1 for body descriptor).

    short_palette:
      description: |
        short color palette
        
        > **WARNING** This enum may be to expand. This field must be interpret as arbitrary string which can be equal
        to one element from enum.
      type: string
      enum: [ black, other, white, undefined ]

    expanded_palette:
      description: |
        expanded color palette for clothing
        
        > **WARNING** This enum may be to expand. This field must be interpret as arbitrary string which can be equal
        to one element from enum.
      type: string
      enum: [ black, blue, green, gray, orange, purple, red, white, yellow, pink, brown, beige, khaki, multicolored, undefined ]

    upper_body_attributes_base:
      type: object
      description: Upper body attributes.
      properties:
        headwear:
          type: object
          properties:
            state:
              type: integer
              enum: [ 0, 1, 2 ]
              description: Headwear state (0 - absent, 1 - present, 2 - undefined).
            apparent_color:
              allOf:
              - $ref: "#/components/schemas/short_palette"
              description: |
                Headwear apparent color.

                > **WARNING** This enum may be to expand. This field must be interpret as arbitrary string which can be equal
                to one element from enum.
          required: [ state ]
          description: Headwear attributes.
        sleeve:
          type: object
          properties:
            length:
              type: string
              enum: [ short, long, undefined ]
              description: Sleeve length.
          required: [ length ]
          description: Sleeve attributes.
        upper_clothing:
          type: object
          properties:
            colors:
              type: array
              items:
                $ref: "#/components/schemas/expanded_palette"
              description: |
                Upper clothing color set.

                > **WARNING** This enum may be to expand. This field must be interpret as arbitrary string which can be equal
                to one element from enum.
          required: [ colors ]
          description: Upper clothing attibutes.
      required: [ headwear, sleeve, upper_clothing ]

    lower_garment_type:
      type: string
      enum: [ skirt, shorts, trousers, undefined ]
      description: |
        lower garment type.

        > **WARNING** This enum may be to expand. This field must be interpret as arbitrary string which can be equal
        to one element from enum.

    lower_body_attributes:
      type: object
      description: Lower body attributes.
      nullable: true
      properties:
        shoes:
          type: object
          properties:
            apparent_color:
              allOf:
              - $ref: "#/components/schemas/short_palette"
              description: |
                Shoes apparent color.

                > **WARNING** This enum may be to expand. This field must be interpret as arbitrary string which can be equal
                to one element from enum.
          required: [ apparent_color ]
          description: shoes attributes.
        lower_garment:
          type: object
          properties:
            colors:
              type: array
              items:
                $ref: "#/components/schemas/expanded_palette"
              description: |
                lower garment color set.

                > **WARNING** This enum may be to expand. This field must be interpret as arbitrary string which can be equal
                to one element from enum.
            type:
              $ref: "#/components/schemas/lower_garment_type"
          required: [ colors ]
          description: Lower garment attibutes.
      required: [ lower_garment, shoes]

    lower_body_attributes_not_nullable:
      allOf:
      - $ref: "#/components/schemas/lower_body_attributes"
      nullable: false

    body_basic_attributes:
      type: object
      description: Body basic attributes.
      nullable: true
      properties:
        apparent_age:
          type: integer
          maximum: 100
          minimum: 0
          description: Apparent age.
        apparent_gender:
          type: integer
          enum: [ 0, 1, 2 ]
          description: Apparent gender (0 - female, 1 - male, 2 - undefined).
      required: [ apparent_age, apparent_gender ]

    body_basic_attributes_not_nullable:
      allOf:
      - $ref: "#/components/schemas/body_basic_attributes"
      nullable: false

    body_accessories:
      type: object
      description: Body accessories.
      nullable: true
      properties:
        backpack:
          type: object
          properties:
            state:
              type: integer
              enum: [ 0, 1, 2 ]
              description: Backpack state (0 - absent, 1 - present, 2 - undefined).
          description: Backpack attributes.
          required: [state]
      required: [ backpack ]

    body_accessories_not_nullable:
      allOf:
      - $ref: "#/components/schemas/body_accessories"
      nullable: false

    Error:
      type: object
      properties:
        error_code:
          type: integer
          description: Error code.
        desc:
          type: string
          description: Short error description.
        detail:
          type: string
          description: Error details.
        link:
          type: string
          description: Link to the documentation website with the error description.
      required:
      - error_code
      - detail
      - desc
      - link
      example:
        error_code: 11009
        detail: Internal server error
        desc: Internal server error
        link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11009

    image_error:
      type: object
      properties:
        error:
          $ref: '#/components/schemas/Error'
        filename:
          $ref: '#/components/schemas/filename'
      required:
        - error
        - filename
      example:
        error:
          error_code: 3001
          desc: Failed to decode image data
          detail: Failed to decode image image data
          link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-3001"
        filename: n.jpg

    estimated_upper_body_attributes:
      allOf:
        - $ref: "#/components/schemas/upper_body_attributes_base"
        - properties:
            headwear:
              required: [ state, apparent_color ]
      nullable: false

    aggregate_estimations:
      type: object
      description: |
        Aggregated attributes.
        If one of **body** or **face** field is *null*, it means that either the corresponding aggregation is disabled
        (see *aggregate_attributes*, *estimate_face_descriptor*, *estimate_body_descriptor* parameters),
        or the attribute has been filtered.
      properties:
        body:
          type: object
          properties:
            attributes:
              description: Human body aggregate estimations.
              type: object
              properties:
                descriptor:
                  $ref: '#/components/schemas/extracted_sdk_descriptor'
                upper_body:
                  $ref: "#/components/schemas/estimated_upper_body_attributes"
                lower_body:
                  $ref: "#/components/schemas/lower_body_attributes_not_nullable"
                basic_attributes:
                  $ref: "#/components/schemas/body_basic_attributes_not_nullable"
                accessories:
                  $ref: "#/components/schemas/body_accessories_not_nullable"
          required: [attributes]
          nullable: true
        face:
          type: object
          properties:
            attributes:
              description: Face aggregate estimations.
              type: object
              properties:
                descriptor:
                  $ref: '#/components/schemas/extracted_sdk_descriptor'
                basic_attributes:
                  $ref: '#/components/schemas/basic_attributes'
                mask:
                  $ref: '#/components/schemas/masks'
                emotions:
                  $ref: '#/components/schemas/emotions'
                liveness:
                  $ref: '#/components/schemas/liveness'
                deepfake:
                  $ref: '#/components/schemas/deepfake'
          required: [attributes]
          nullable: true
      required: [face, body]

    people_coordinates:
      type: array
      description: People coordinates estimation
      items:
        type: array
        items:
          type: integer
        minItems: 2
        maxItems: 2
        description: Human x, y coordinates
        example: [64, 128]
      example: [[64, 128], [491, 375]]

    image_estimations:
      type: object
      description: Image estimations.
      properties:
        people:
          type: object
          properties:
            count:
              type: integer
              description: People count estimation.
            coordinates:
              allOf:
                - $ref: '#/components/schemas/people_coordinates'
              nullable: true

    sdk_response_json:
      type: object
      properties:
        images_estimations:
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/one_image_estimation'
              - $ref: '#/components/schemas/image_error'
        aggregate_estimations:
          $ref: '#/components/schemas/aggregate_estimations'
      required: [images_estimations]

    sdk_response_msgpack:
      type: object
      properties:
        images_estimations:
          type: array
          items:
            oneOf:
              - allOf:
                - properties:
                    estimations:
                      items:
                        properties:
                          face:
                            properties:
                              detection:
                                properties:
                                  warp:
                                    format: binary
                                  attributes:
                                    properties:
                                      descriptor:
                                        properties:
                                          sdk_descriptor:
                                            format: binary
                          body:
                            properties:
                              detection:
                                properties:
                                  warp:
                                    format: binary
                                  attributes:
                                    properties:
                                      descriptor:
                                        properties:
                                          sdk_descriptor:
                                            format: binary
                - $ref: '#/components/schemas/one_image_estimation'
              - $ref: '#/components/schemas/image_error'
        aggregate_estimations:
          allOf:
          - properties:
              face:
                properties:
                  attributes:
                    properties:
                      descriptor:
                        properties:
                          sdk_descriptor:
                            format: binary
              body:
                properties:
                  attributes:
                    properties:
                      descriptor:
                        properties:
                          sdk_descriptor:
                            format: binary
          - $ref: '#/components/schemas/aggregate_estimations'
      required: [ images_estimations ]

    body_warp:
      type: string
      format: byte
      description: Human body warped image in jpg format.

    sdk_body_attributes:
      description: Human body attributes.
      type: object
      properties:
        descriptor:
          $ref: '#/components/schemas/extracted_sdk_descriptor'
        upper_body:
          $ref: "#/components/schemas/estimated_upper_body_attributes"
        lower_body:
          $ref: "#/components/schemas/lower_body_attributes_not_nullable"
        basic_attributes:
          $ref: "#/components/schemas/body_basic_attributes_not_nullable"
        accessories:
          $ref: "#/components/schemas/body_accessories_not_nullable"

    sdk_body_detections:
      type: object
      properties:
        attributes:
          $ref: '#/components/schemas/sdk_body_attributes'
        rect:
          allOf:
            - $ref: '#/components/schemas/rect'
            - description: Face detection bounding box.
        warp:
          $ref: '#/components/schemas/body_warp'

    sdk_body_estimations:
      description: Human body detection estimations.
      type: object
      properties:
        detection:
          $ref: '#/components/schemas/sdk_body_detections'
      required: [detection]
      nullable: true

    exif:
      description: |
        select image EXIF tags.
        See [CIPA DC-008-2016]( http://www.cipa.jp/std/documents/e/DC-008-Translation-2016-E.pdf) for details.
        Tag to string conversions is handled by libEXIF.
      type: object
      properties:
        make:
          type: string
          description: Make tag (IFD0 0x010f).
        model:
          type: string
          description: Model tag (IFD0 0x0110).
        gps:
          type: object
          description: GPS tag (IFD 0x8825).
          properties:
            latitude:
              type: string
              description: GPS latitude (IFD GPS 0x0002).
            longitude:
              type: string
              description: GPS longitude (IFD GPS 0x0004).
          required: [latitude, longitude]
        artist:
          type: string
          description: Artist tag (IFD0 0x013b).
        software:
          type: string
          description: Software tag (IFD0 0x0131).
        flash:
          type: string
          description: Flash tag (IFD_EXIF 0x9209).
        orientation:
          type: integer
          description: Orientation (IFD0 0x0112).
      example:
        software: "Adobe Photoshop CS5 Macintosh"

    base_bounding_boxes:
      type: array
      description: Array with bounding boxes.
      items:
        $ref: '#/components/schemas/rect'
      minItems: 1

    json_with_base_64_image:
      type: object
      properties:
        image:
          type: string
          description: Image in base64.
        mimetype:
          type: string
          enum: [ "image/x-jpeg-base64", "image/x-png-base64", "image/x-bmp-base64", "image/x-tiff-base64",
                  "image/x-portable-pixmap-base64" ]
          description: Image mimetype.
        trusted_detections:
          $ref: '#/components/schemas/trusted_detections'
        face_bounding_boxes:
          allOf:
            - description: Array with face bounding boxes for image (now support only 1 bounding box).
            - $ref: '#/components/schemas/base_bounding_boxes'
      required: [ image, mimetype ]

    sdk_json_with_base_64_image:
      allOf:
        - $ref: '#/components/schemas/json_with_base_64_image'
        - properties:
            body_bounding_boxes:
              allOf:
                - description: Array with body bounding boxes for image (now support only 1 bounding box).
                - $ref: '#/components/schemas/base_bounding_boxes'


    url_for_detection:
      type: object
      description: URL object for processing pipeline.
      properties:
        url:
          type: string
          format: uri-reference
          description: Image url.
          example: "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c4/Abbey_Lee_2015.jpg/800px-Abbey_Lee_2015.jpg"
        trusted_detections:
          $ref: '#/components/schemas/trusted_detections'
        face_bounding_boxes:
          allOf:
            - description: Array with face bounding boxes for image (now support only 1 bounding box for each image).
            - $ref: '#/components/schemas/base_bounding_boxes'
      required: [ url ]

    sdk_json_request_body_urls:
      type: object
      properties:
        urls:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/url_for_detection'
              - properties:
                  body_bounding_boxes:
                    allOf:
                      - description: Array with body bounding boxes for image (now support only 1 bounding box for each image).
                      - $ref: '#/components/schemas/base_bounding_boxes'
            required: [ url ]
          minItems: 1
          maxItems: 8
      required: [ urls ]

    sample_id:
      allOf:
      - $ref: '#/components/schemas/uuid'
      - nullable: true
      - description: Sample ID. Will be null if not stored.
      example: "b668c4a5-2191-476e-a261-3b4f9ce2e25e"

    list_samples:
      type: object
      properties:
        samples:
          type: array
          items:
            allOf:
            - $ref: '#/components/schemas/sample_id'
          minItems: 1
          maxItems: 8
          description: |
            List of sample IDs.

            > **WARNING** The type of samples is determined by *`image_type`* / *`warped_image`* parameter.
            The detector stage of image processing pipeline is triggered for non-warped images and skipped for warps.

          example:
          - "c724fea1-d1bb-44c5-af6d-9833d22f3eb7"
          - "f78c6156-3946-4767-be65-4748f25aefd4"
      required: [samples]

    sdk_json_request_body:
      oneOf:
        - $ref: '#/components/schemas/sdk_json_with_base_64_image'
        - $ref: '#/components/schemas/sdk_json_request_body_urls'
        - $ref: '#/components/schemas/list_samples'

    iso_json_request_body:
      oneOf:
        - $ref: '#/components/schemas/json_with_base_64_image'
        - $ref: '#/components/schemas/url_for_detection'
        - $ref: '#/components/schemas/list_samples'

    image:
       type: string
       format: binary or byte

    image_binary_for_multipart:
      type: string
      format: binary
      description: |
        Binary image.

        Content-Disposition header must contain actual filename.

        Filenames are used to differentiate images, they must be unique within the request.

        This part must have valid Content-Type header (one of "image/jpeg", "image/png", "image/bmp", "image/tiff",
        "image/x-portable-pixmap").
        
        Trusted detections can be set by passing X-Luna-Trusted-Detections header (0 or 1).
        Note that enabling trusted detections with detections from external sources may affect estimations in an unexpected way.

    image_base64_for_multipart:
      type: string
      description: |
        Image encoded in base64.
        
        This part must have valid Content-Type header (one of "image/x-jpeg-base64", "image/x-png-base64",
        "image/x-bmp-base64", "image/x-tiff-base64", "image/x-portable-pixmap-base64").
        
        Trusted detections can be set by passing X-Luna-Trusted-Detections header (0 or 1).
        Note that enabling trusted detections with detections from external sources may affect estimations in an unexpected way.

    image_for_multipart:
      oneOf:
        - $ref: '#/components/schemas/image_binary_for_multipart'
        - $ref: '#/components/schemas/image_base64_for_multipart'

    image_list_for_multipart:
      type: array
      items:
        $ref: '#/components/schemas/image_for_multipart'
      minItems: 1

    face_bounding_boxes:
       type: array
       description: Map with image filenames and arrays of face bounding boxes.
       items:
         type: object
         properties:
           filename:
             type: string
             description: Image filename. It must be the same as one of 'image' request part filename
           face_bounding_boxes:
              allOf:
                - description: Array with face bounding boxes for image (now support only 1 bounding box).
                - $ref: '#/components/schemas/base_bounding_boxes'
         required: [filename, face_bounding_boxes]
       minItems: 1

    body_bounding_boxes:
      type: array
      description: Map with image filenames and arrays of body bounding boxes.
      items:
        type: object
        properties:
          filename:
            type: string
            description: Image filename. It must be the same as one of 'image' request part filename
          body_bounding_boxes:
            allOf:
              - description: Array with body bounding boxes for image (now support only 1 bounding box).
              - $ref: '#/components/schemas/base_bounding_boxes'
        required: [filename, body_bounding_boxes]
      minItems: 1

    multipart_sdk_image_schema:
      type: object
      properties:
        image:
          $ref: '#/components/schemas/image_list_for_multipart'
        face_bounding_boxes:
          $ref: '#/components/schemas/face_bounding_boxes'
        body_bounding_boxes:
          $ref: '#/components/schemas/body_bounding_boxes'
      required: [image]

    multipart_iso_image_schema:
      type: object
      properties:
        image:
          $ref: '#/components/schemas/image_list_for_multipart'
        face_bounding_boxes:
          $ref: '#/components/schemas/face_bounding_boxes'
      required: [ image ]

    one_image_estimation:
      type: object
      properties:
        filename:
          $ref: '#/components/schemas/filename'
        exif:
          $ref: '#/components/schemas/exif'
        estimations:
          description: |
            List of related detections, i.e. body & face related samples that refer to the one person.
            If one of **body** or **face** field is *null*, it means that either the corresponding detection is disabled
            (see *detect_face*, *detect_body* parameters), or the detection has been filtered.
            Both **body** and **face** fields in a related detection can not be *null* at the same time.
          type: array
          items:
            type: object
            properties:
              face:
                $ref: '#/components/schemas/sdk_face_estimations'
              body:
                $ref: '#/components/schemas/sdk_body_estimations'
            required: [face, body]
        image_estimations:
          $ref: '#/components/schemas/image_estimations'
      required: [filename, estimations, image_estimations]

    estimator_one_image_estimation:
      type: object
      properties:
        filename:
          $ref: '#/components/schemas/filename'
        exif:
          $ref: '#/components/schemas/exif'
        estimations:
          description: |
            List of related detections, i.e. body & face related samples that refer to the one person.
            If one of **body** or **face** field is *null*, it means that either the corresponding detection is disabled
            (see *detect_face*, *detect_body* parameters), or the detection has been filtered.
            Both **body** and **face** fields in a related detection can not be *null* at the same time.
          type: array
          items:
            type: object
            properties:
              face:
                $ref: '#/components/schemas/estimator_face_estimations'
              body:
                allOf:
                  - properties:
                      detection:
                        properties:
                          warp:
                            format: binary
                            description: Human body warped image in jpg format (Not returned if image type is body warp).
                          attributes:
                            properties:
                              descriptor:
                                properties:
                                  sdk_descriptor:
                                    format: binary
                  - $ref: '#/components/schemas/sdk_body_estimations'
            required: [face, body]
        image_estimations:
          $ref: '#/components/schemas/image_estimations'
        filtered_estimations:
          $ref: '#/components/schemas/estimator_filtered_detections'
      required: [filename, estimations, image_estimations, filtered_estimations]

    face_warp:
      type: string
      format: byte
      description: Face warped image in jpg format.

    landmark:
      type: array
      items:
        type: integer
      description: |
        Key point coordinates. First element is `x` coordinate, second is `y`.
      minItems: 2
      maxItems: 2
      example: [12, 13]

    landmarks68:
      description: Array of 68 landmarks.
      type: array
      items:
        $ref: '#/components/schemas/landmark'
      minItems: 68
      maxItems: 68

    landmarks5:
      type: array
      items:
        $ref: '#/components/schemas/landmark'
      description: Array of 5 landmarks.
      minItems: 5
      maxItems: 5
      example:
        - - 23
          - 72
        - - 82
          - 71
        - - 42
          - 114
        - - 29
          - 140
        - - 79
          - 138

    quality:
      description: |
        Image quality. Estimation of image visual properties.
      type: object
      properties:
        dark:
          allOf:
            - $ref: '#/components/schemas/number01'
            - description: Low value means under-exposured face area (i.e. due to backlight, poor lighting, sensor underexposure).
        light:
          allOf:
            - $ref: '#/components/schemas/number01'
            - description: Low value means over-exposured face area (i.e. overbright lighting, sensor overexposure).
        illumination:
          allOf:
            - $ref: '#/components/schemas/number01'
            - description: Low value means illumination nonuniformity.
        specularity:
          allOf:
            - $ref: '#/components/schemas/number01'
            - description: Low value means low specularity.
        blurriness:
          allOf:
            - $ref: '#/components/schemas/number01'
            - description: Low value means blurred image (e.g. due to depth of field or motion blur). High value means sharp image.
      required: [blurriness, specularity, illumination, light, dark]
      example:
        light: 0.87
        dark: 0.13
        illumination: 0.1
        specularity: 0.1
        blurriness: 0.2

    glasses_estimations:
      type: string
      enum: [no_glasses, eyeglasses, sunglasses]
      description: Glasses estimation.

    glasses:
      type: object
      description: Estimated glasses.
      properties:
        glasses:
          $ref: '#/components/schemas/glasses_estimations'
      required: [glasses]

    gaze_direction:
      type: object
      properties:
        yaw:
          type: number
          description: Yaw angle in degrees.
        pitch:
          type: number
          description: Pitch angle in degrees.
      required: [yaw, pitch]

    head_pose:
      description: Head pose.
      type: object
      properties:
        yaw:
          type: number
          description: Yaw angle in degrees.
        pitch:
          type: number
          description: Pitch angle in degrees.
        roll:
          type: number
          description: Roll angle in degrees.
      required: [yaw, pitch, roll]

    landmarks32:
      description: Array of 32 landmarks.
      type: array
      items:
        $ref: '#/components/schemas/landmark'
      minItems: 32
      maxItems: 32

    eye_attributes:
      description: Eye attributes.
      type: object
      properties:
        state:
          type: string
          enum: [open, closed, occluded]
          description: Eye state.
        iris_landmarks:
          allOf:
            - $ref: '#/components/schemas/landmarks32'
            - description: Iris landmarks.
      required: [state, iris_landmarks]

    eyes_attributes:
      description: Eyes attributes.
      type: object
      properties:
        left_eye:
          allOf:
            - $ref: '#/components/schemas/eye_attributes'
            - description: Left eye attributes.
        right_eye:
          allOf:
            - $ref: '#/components/schemas/eye_attributes'
            - description: Right eye attributes.
      required: [left_eye, right_eye]

    mouth_attributes:
      description: Mouth attributes.
      type: object
      properties:
        score:
          allOf:
            - $ref: '#/components/schemas/number01'
          description: Mouth detection confidence.
        smile:
          allOf:
            - $ref: '#/components/schemas/number01'
          description: Smile probability.
        opened:
          allOf:
            - $ref: '#/components/schemas/number01'
          description: Opened mouth probability.
        occluded:
          allOf:
            - $ref: '#/components/schemas/number01'
          description: occlusion probability.
      required: [score, smile, occluded, opened]

    face_occlusion:
      description: Face occlusion estimation
      type: object
      properties:
        prediction:
          allOf:
            - $ref: '#/components/schemas/int01'
            - description: overall prediction. A face overlap area is greater or not of `occlusion_threshold`
        estimations:
          description: Estimation scores
          type: object
          properties:
            overall_score:
              allOf:
                - $ref: '#/components/schemas/number01'
                - description: overlapped face area (takin the `hair_threshold` parameter).
            hair_score:
              allOf:
                - $ref: '#/components/schemas/number01'
                - description: overlapped face area by hair.
            lower_face_score:
              allOf:
                - $ref: '#/components/schemas/number01'
                - description: |
                    score of a overlapped area of a lower face. The area is measuremented relativity of a lower face area 
                    (not all face area), 1 means that all lower face area is overlapped.
            nose_score:
              allOf:
                - $ref: '#/components/schemas/number01'
                - description: |
                    score of a overlapped area of a nose. The area is measuremented relativity of a nose area 
                    (not all face area), 1 means that all nose area is overlapped.
            mouth_score:
              allOf:
                - $ref: '#/components/schemas/number01'
                - description: |
                    score of a overlapped area of a mouth. The area is measuremented relativity of a mouth area 
                    (not all face area), 1 means that all mouth area is overlapped.
            forehead_score:
              allOf:
                - $ref: '#/components/schemas/number01'
                - description: |
                    score of a overlapped area of a forehead. The area is measuremented relativity of a forehead area 
                    (not all face area), 1 means that all overlapped area is overlapped.
            left_eye_score:
              allOf:
                - $ref: '#/components/schemas/number01'
                - description: |
                    score of a overlapped area of a left eye. The area is measuremented relativity of a left eye area 
                    (not all face area), 1 means that all left eye area is overlapped
            right_eye_score:
              allOf:
                - $ref: '#/components/schemas/number01'
                - description: |
                    score of a overlapped area of a right eye. The area is measuremented relativity of a right eye area 
                    (not all face area), 1 means that all right eye area is overlapped  
          required: [overall_score, hair_score, lower_face_score, nose_score, mouth_score, forehead_score,
                     left_eye_score, right_eye_score]
        face_occlusion:
          description: an occlusion predict by each area
          type: object
          properties:
            lower_face_occluded:
              allOf:
                - $ref: '#/components/schemas/int01'
                - description: lower face is overlapped or not
            mouth_occluded:
              allOf:
                - $ref: '#/components/schemas/int01'
                - description: mouth is overlapped or not
            nose_occluded:
              allOf:
                - $ref: '#/components/schemas/int01'
                - description: nose is overlapped or not
            left_eye_occluded:
              allOf:
                - $ref: '#/components/schemas/int01'
                - description: left eye is overlapped or not
            right_eye_occluded:
              allOf:
                - $ref: '#/components/schemas/int01'
                - description: right eye is overlapped or not
            forehead_occluded:
              allOf:
                - $ref: '#/components/schemas/int01'
                - description: forehead is overlapped or not
          required: [lower_face_occluded, mouth_occluded, nose_occluded, left_eye_occluded, right_eye_occluded,
                     forehead_occluded]
      required: [prediction, estimations, face_occlusion]

    sdk_face_attributes:
      description: Face attributes.
      type: object
      properties:
        mouth_attributes:
          allOf:
            - $ref: '#/components/schemas/mouth_attributes'
            - description: Optional mouth attributes.
        eyes_attributes:
          $ref: '#/components/schemas/eyes_attributes'
        emotions:
          allOf:
            - $ref: '#/components/schemas/emotions'
            - description: Face emotions estimation.
        head_pose:
          allOf:
            - $ref: '#/components/schemas/head_pose'
            - description: Head pose estimation.
        gaze:
          allOf:
            - $ref: '#/components/schemas/gaze_direction'
            - description: Gaze direction estimation.
        descriptor:
          $ref: '#/components/schemas/extracted_sdk_descriptor'
        face_occlusion:
          $ref: '#/components/schemas/face_occlusion'
        basic_attributes:
          $ref: '#/components/schemas/basic_attributes'
        mask:
          $ref: '#/components/schemas/masks'
        glasses:
          $ref: '#/components/schemas/glasses'
        liveness:
          $ref: '#/components/schemas/liveness'
        deepfake:
          $ref: '#/components/schemas/deepfake'

    sdk_face_detections:
      type: object
      properties:
        attributes:
          allOf:
            - $ref: '#/components/schemas/sdk_face_attributes'
            - description: Face attributes estimation.
        quality:
          allOf:
            - $ref: '#/components/schemas/quality'
            - description: Image quality estimation for this face detection region.
        rect:
          allOf:
            - $ref: '#/components/schemas/rect'
            - description: Face detection bounding box.
        landmarks5:
          allOf:
            - $ref: '#/components/schemas/landmarks5'
            - description: Facial landmarks.
        landmarks68:
          allOf:
            - $ref: '#/components/schemas/landmarks68'
            - description: Facial landmarks.
        warp:
          $ref: '#/components/schemas/face_warp'

    estimator_face_estimations:
      description: Face detection estimations.
      type: object
      properties:
        detection:
          allOf:
            - properties:
                face_quality:
                  allOf:
                    - $ref: '#/components/schemas/face_quality_checks_estimations'
                  description: Face quality checks estimations.
                warp:
                  format: binary
                  description: Face warped image in jpg format (Not returned if image type is face warp).
                attributes:
                  properties:
                    descriptor:
                      properties:
                        sdk_descriptor:
                          format: binary
                    face_occlusion:
                      $ref: '#/components/schemas/face_occlusion'
            - $ref: '#/components/schemas/sdk_face_detections'
      required: [detection]
      nullable: true

    sdk_face_estimations:
      description: Face detection estimations.
      type: object
      properties:
        detection:
          $ref: '#/components/schemas/sdk_face_detections'
      required: [detection]
      nullable: true

    check_result:
      type: integer
      enum: [ 0, 1 ]
      description: Check result (1 - succeeded, 0 - failed).

    check_image_format:
      type: object
      properties:
        name:
          type: string
          enum: [ image_format ]
          description: Unique estimation name.
        object_value:
          type: string
          enum: [ JPEG, JPEG2000, PNG, BMP, TIFF, Portable pixmap ]
          nullable: true
          description: Original image format.
          example: JPEG
        threshold_value:
          $ref: '#/components/schemas/image_format_threshold'
        result:
          $ref: '#/components/schemas/check_result'
      required: [ name, object_value, threshold_value, result ]
      description: Checking the image format for compliance with the standard.

    face_check_name:
      type: string
      description: Unique estimation name.

    face_check_result:
      type: integer
      enum: [ 0, 1 ]
      description: Check result (1 - succeeded, 0 - failed).

    face_object_value_score:
      type: number
      format: double
      minimum: 0
      maximum: 1
      nullable: true
      description: Estimated value as a number.
      example: 0.15675428

    face_threshold_value_number:
      type: object
      properties:
        min:
          type: number
          nullable: true
          description: Lower bound of the allowed range.
          example: 0
        max:
          type: number
          nullable: true
          description: Upper bound of the allowed range.
          example: 1
      required: [ min, max ]
      description: Allowed range of the estimation value.

    face_check_element_score:
      type: object
      properties:
        name:
          $ref: '#/components/schemas/face_check_name'
        object_value:
          $ref: '#/components/schemas/face_object_value_score'
        threshold_value:
          $ref: '#/components/schemas/face_threshold_value_number'
        result:
          $ref: '#/components/schemas/face_check_result'
      required: [ name, object_value, threshold_value, result ]

    check_image_quality:
      allOf:
        - $ref: '#/components/schemas/face_check_element_score'
        - properties:
            name:
              enum: [ blurriness_quality, specularity_quality, illumination_quality, dark_quality, light_quality ]
        - description: Checking the image quality.

    iso_object_value_string:
      type: string
      nullable: true
      description: Estimated value as a string.

    face_check_element_string:
      type: object
      properties:
        name:
          $ref: '#/components/schemas/face_check_name'
        object_value:
          $ref: '#/components/schemas/iso_object_value_string'
        threshold_value:
          type: array
          items:
            type: string
          description: List of estimation values allowed.
        result:
          $ref: '#/components/schemas/face_check_result'
      required: [ name, object_value, threshold_value, result ]

    check_glasses_state:
      allOf:
        - $ref: '#/components/schemas/face_check_element_string'
        - properties:
            name:
              enum: [ glasses ]
            object_value:
              type: string
              enum: [ no_glasses, eyeglasses, sunglasses ]
              example: eyeglasses
        - description: Checking eyes state.

    check_eyes_state:
      allOf:
        - $ref: '#/components/schemas/face_check_element_string'
        - properties:
            name:
              enum: [ left_eye, right_eye ]
            object_value:
              type: string
              enum: [ open, occluded, closed ]
              example: occluded
        - description: Checking eyes state.

    face_object_value_number:
      type: number
      format: double
      nullable: true
      description: Estimated value as a number.
      example: 0.15675428

    face_check_element_number:
      type: object
      properties:
        name:
          $ref: '#/components/schemas/face_check_name'
        object_value:
          $ref: '#/components/schemas/face_object_value_number'
        threshold_value:
          $ref: '#/components/schemas/face_threshold_value_number'
        result:
          $ref: '#/components/schemas/face_check_result'
      required: [ name, object_value, threshold_value, result ]

    check_gaze_direction:
      allOf:
        - $ref: '#/components/schemas/face_check_element_number'
        - properties:
            name:
              enum: [ gaze_pitch, gaze_yaw ]
        - description: Checking the gaze direction angles.

    check_mouth_state:
      allOf:
        - $ref: '#/components/schemas/face_check_element_score'
        - properties:
            name:
              enum: [ mouth_open, mouth_smiling, mouth_occluded ]
        - description: Checking the mouth state.

    check_head_rotation:
      allOf:
        - $ref: '#/components/schemas/face_check_element_number'
        - properties:
            name:
              enum: [ head_pitch, head_roll, head_yaw ]
        - description: Checking the head rotation angles.

    check_head_position:
      allOf:
        - $ref: '#/components/schemas/face_check_element_number'
        - properties:
            name:
              enum: [ head_horizontal_center, head_vertical_center ]
        - description: Checking the head position is normally centered in relation to the original image.

    check_head_proportions:
      allOf:
        - $ref: '#/components/schemas/face_check_element_number'
        - properties:
            name:
              enum: [ head_width, head_height ]
        - description: Checking the head width & height are normal in relation to the size of the image.

    check_eye_distance_threshold_value_number:
      type: object
      properties:
        min:
          type: number
          description: Lower bound of the allowed range.
          example: 0
        max:
          type: number
          nullable: true
          description: Upper bound of the allowed range.
          example: 1
      required: [ min, max ]
      description: Allowed range of the estimation value.

    check_eye_distance_element_number:
      type: object
      properties:
        name:
          $ref: '#/components/schemas/face_check_name'
        object_value:
          $ref: '#/components/schemas/face_object_value_number'
        threshold_value:
          $ref: '#/components/schemas/check_eye_distance_threshold_value_number'
        result:
          $ref: '#/components/schemas/face_check_result'
      required: [ name, object_value, threshold_value, result ]

    check_eye_distance:
      allOf:
        - $ref: '#/components/schemas/check_eye_distance_element_number'
        - properties:
            name:
              enum: [ eye_distance ]
        - description: Checking the distance between the eyes is sufficient.

    face_threshold_value_int_positive:
      type: object
      properties:
        min:
          type: integer
          minimum: 0
          nullable: true
          description: Lower bound of the allowed range.
          example: 0
        max:
          type: integer
          minimum: 0
          nullable: true
          description: Upper bound of the allowed range.
          example: 1
      required: [ min, max ]
      description: Allowed range of the estimation value.

    face_object_value_int_positive:
      type: integer
      minimum: 0
      nullable: true
      description: Estimated value as an integer.
      example: 1

    image_check_element_int_positive:
      type: object
      properties:
        name:
          $ref: '#/components/schemas/face_check_name'
        object_value:
          $ref: '#/components/schemas/face_object_value_int_positive'
        threshold_value:
          $ref: '#/components/schemas/face_threshold_value_int_positive'
        result:
          $ref: '#/components/schemas/face_check_result'
      required: [ name, object_value, threshold_value, result ]

    check_image_properties:
      allOf:
        - $ref: '#/components/schemas/image_check_element_int_positive'
        - properties:
            name:
              enum: [ image_width, image_height, image_size ]
        - description: Checking the image width & height (in pixels) and the image size (in bytes).

    check_aspect_ratio:
      allOf:
        - $ref: '#/components/schemas/face_check_element_number'
        - properties:
            name:
              enum: [ aspect_ratio ]
        - description: Checking the image width to height aspect ratio.

    face_threshold_value_int_positive_max_nullable:
      type: object
      properties:
        min:
          type: integer
          minimum: 0
          description: Lower bound of the allowed range.
          example: 0
        max:
          type: integer
          minimum: 0
          nullable: true
          description: Upper bound of the allowed range.
          example: 1
      required: [ min, max ]
      description: Allowed range of the estimation value.

    face_check_element_int_positive:
      type: object
      properties:
        name:
          $ref: '#/components/schemas/face_check_name'
        object_value:
          $ref: '#/components/schemas/face_object_value_int_positive'
        threshold_value:
          $ref: '#/components/schemas/face_threshold_value_int_positive_max_nullable'
        result:
          $ref: '#/components/schemas/face_check_result'
      required: [ name, object_value, threshold_value, result ]

    check_face_properties:
      allOf:
        - $ref: '#/components/schemas/face_check_element_int_positive'
        - properties:
            name:
              enum: [ face_width, face_height, indent_left, indent_right, indent_upper, indent_lower ]
        - description: Checking the face width, height and horizontal and vertical indents (in pixels).

    eyebrows_threshold:
      type: array
      items:
        $ref: '#/components/schemas/eyebrow'
      description: List of values to consider successful.
      minItems: 1

    eyebrows_state:
      description: Eyebrows state check.
      type: object
      properties:
        name:
          type: string
          enum: ["eyebrows_state"]
          description: Unique estimation name.
        object_value:
          allOf:
            - $ref: '#/components/schemas/eyebrow'
            - nullable: true
              description: Eyebrows_state estimated value.
        threshold_value:
          $ref: '#/components/schemas/eyebrows_threshold'
        result:
          $ref: '#/components/schemas/check_result'
      required: [ name, object_value, threshold_value, result ]

    headwear_type:
      description: Headwear_type check.
      type: object
      properties:
        name:
          type: string
          enum: ["headwear_type"]
          description: Unique estimation name.
        object_value:
          allOf:
            - $ref: '#/components/schemas/headwear'
            - nullable: true
              description: |
                Estimated value for headwear_type.
                
                > **WARNING** This enum may be to expand. This field must be interpret as arbitrary string which can be equal 
                to one element from enum.
        threshold_value:
          $ref: '#/components/schemas/headwear_threshold'
        result:
          $ref: '#/components/schemas/check_result'
      required: [ name, object_value, threshold_value, result ]

    smile_properties:
      type: object
      properties:
        name:
          type: string
          enum: ["smile_properties"]
          description: Unique estimation name.
        object_value:
          allOf:
            - $ref: '#/components/schemas/smile'
            - nullable: true
              description: Smile_properties estimated value.
        threshold_value:
          $ref: '#/components/schemas/smile_threshold'
        result:
          $ref: '#/components/schemas/check_result'
      required: [ name, object_value, threshold_value, result ]
      description: Smile_properties check.

    bool_threshold:
      type: integer
      enum: [ 0, 1 ]
      description: Value to consider successful.

    natural_light:
      type: object
      properties:
        name:
          type: string
          enum: ["natural_light"]
          description: Unique estimation name.
        object_value:
          nullable: true
          type: integer
          enum: [ 0, 1 ]
          description: Estimated value, 1 - detected face has a natural light, 0 - face lighting is not natural.
        threshold_value:
          $ref: '#/components/schemas/bool_threshold'
        result:
          $ref: '#/components/schemas/check_result'
      required: [ name, object_value, threshold_value, result ]
      description: Natural_light estimation.

    radial_distortion:
      description: Radial_distortion check.
      type: object
      properties:
        name:
          type: string
          enum: ["radial_distortion"]
          description: Unique estimation name.
        object_value:
          nullable: true
          type: integer
          enum: [ 0, 1 ]
          description: Estimated value, 1 - the detection has a radial distortion, 0 - there is no radial distortion.
        threshold_value:
          $ref: '#/components/schemas/bool_threshold'
        result:
          $ref: '#/components/schemas/check_result'
      required: [ name, object_value, threshold_value, result ]

    red_eyes:
      type: object
      description: Red eyes check.
      properties:
        name:
          type: string
          enum: ["red_eyes"]
          description: Unique estimation name.
        object_value:
          nullable: true
          type: integer
          enum: [ 0, 1 ]
          description: Estimated value, 1 - the detection has a red-eye effect, 0 - there is no red-eye effect.
        threshold_value:
          $ref: '#/components/schemas/bool_threshold'
        result:
          $ref: '#/components/schemas/check_result'
      required: [ name, object_value, threshold_value, result ]

    face_color_type:
      type: object
      description: Face color type check.
      properties:
        name:
          type: string
          enum: ["face_color_type"]
          description: Unique estimation name.
        object_value:
          allOf:
            - $ref: '#/components/schemas/face_color'
            - nullable: true
              description: Face_color_type estimated value.
        threshold_value:
          $ref: '#/components/schemas/face_color_type_threshold'
        result:
          $ref: '#/components/schemas/check_result'
      required: [ name, object_value, threshold_value, result ]

    check_face_illumination_uniformity:
      allOf:
        - $ref: '#/components/schemas/face_check_element_score'
        - properties:
            name:
              enum: [ illumination_uniformity, dynamic_range ]
        - description: Checking the face uniformity and dynamic illumination.

    background_uniformity:
      allOf:
        - $ref: '#/components/schemas/face_check_element_score'
        - properties:
            name:
              enum: [background_uniformity]
        - title: background_uniformity
          description: Face detection background uniformity check.

    background_lightness:
      allOf:
        - $ref: '#/components/schemas/face_check_element_score'
        - properties:
            name:
              enum: [background_lightness]
        - title: background_lightness
        - description: Face detection background lightness check.

    shoulders_position_status:
      title: shoulders_position
      description: Shoulders position status check.
      type: object
      properties:
        name:
          type: string
          enum: ["shoulders_position"]
          description: Unique estimation name.
        object_value:
          allOf:
            - $ref: '#/components/schemas/shoulders_position'
            - nullable: true
              description: Eyebrows_state estimated value.
        threshold_value:
          $ref: '#/components/schemas/shoulders_position_threshold'
        result:
          $ref: '#/components/schemas/check_result'
      required: [ name, object_value, threshold_value, result ]

    face_occlusion_face_quality:
      type: object
      properties:
        name:
          type: string
          enum: [ "face_occlusion" ]
          description: Unique estimation name.
        object_value:
          nullable: true
          type: integer
          enum: [ 0, 1 ]
          description: Estimated value, 1 - detected face has an overlap, 0 - face is not overlapped.
        threshold_value:
          $ref: '#/components/schemas/bool_threshold'
        result:
          $ref: '#/components/schemas/check_result'
      required: [ name, object_value, threshold_value, result ]
      description: face_occlusion estimation.

    lower_face_occlusion_face_quality:
      type: object
      properties:
        name:
          type: string
          enum: [ "lower_face_occlusion" ]
          description: estimation name.
        object_value:
          nullable: true
          type: integer
          enum: [ 0, 1 ]
          description: Estimated value, 1 - detected face has an overlap on lower face, 0 - lower face is not overlapped.
        threshold_value:
          $ref: '#/components/schemas/bool_threshold'
        result:
          $ref: '#/components/schemas/check_result'
      required: [ name, object_value, threshold_value, result ]
      description: lower_face_occlusion estimation.

    forehead_occlusion_face_quality:
      type: object
      properties:
        name:
          type: string
          enum: [ "forehead_occlusion" ]
          description: estimation name.
        object_value:
          nullable: true
          type: integer
          enum: [ 0, 1 ]
          description: Estimated value, 1 - forehead is overlapped by something, 0 - forehead is not overlapped.
        threshold_value:
          $ref: '#/components/schemas/bool_threshold'
        result:
          $ref: '#/components/schemas/check_result'
      required: [ name, object_value, threshold_value, result ]
      description: forehead_occlusion estimation.

    nose_occlusion_face_quality:
      type: object
      properties:
        name:
          type: string
          enum: [ "nose_occlusion" ]
          description: estimation name.
        object_value:
          nullable: true
          type: integer
          enum: [ 0, 1 ]
          description: Estimated value, 1 - nose is overlapped by something, 0 - nose is not overlapped.
        threshold_value:
          $ref: '#/components/schemas/bool_threshold'
        result:
          $ref: '#/components/schemas/check_result'
      required: [ name, object_value, threshold_value, result ]
      description: nose_occlusion estimation.

    face_quality_checks_reply:
      type: array
      description: Face quality container with all estimates.
      items:
        oneOf:
          - $ref: '#/components/schemas/check_image_format'
          - $ref: '#/components/schemas/check_image_quality'
          - $ref: '#/components/schemas/check_glasses_state'
          - $ref: '#/components/schemas/check_eyes_state'
          - $ref: '#/components/schemas/check_gaze_direction'
          - $ref: '#/components/schemas/check_mouth_state'
          - $ref: '#/components/schemas/check_head_rotation'
          - $ref: '#/components/schemas/check_head_position'
          - $ref: '#/components/schemas/check_head_proportions'
          - $ref: '#/components/schemas/check_eye_distance'
          - $ref: '#/components/schemas/check_image_properties'
          - $ref: '#/components/schemas/check_aspect_ratio'
          - $ref: '#/components/schemas/check_face_properties'
          - $ref: '#/components/schemas/eyebrows_state'
          - $ref: '#/components/schemas/headwear_type'
          - $ref: '#/components/schemas/smile_properties'
          - $ref: '#/components/schemas/natural_light'
          - $ref: '#/components/schemas/radial_distortion'
          - $ref: '#/components/schemas/red_eyes'
          - $ref: '#/components/schemas/face_color_type'
          - $ref: '#/components/schemas/check_face_illumination_uniformity'
          - $ref: '#/components/schemas/background_uniformity'
          - $ref: '#/components/schemas/background_lightness'
          - $ref: '#/components/schemas/shoulders_position_status'
          - $ref: '#/components/schemas/face_occlusion_face_quality'
          - $ref: '#/components/schemas/lower_face_occlusion_face_quality'
          - $ref: '#/components/schemas/nose_occlusion_face_quality'
          - $ref: '#/components/schemas/forehead_occlusion_face_quality'

      minItems: 0
      maxItems: 48
      uniqueItems: true
      example:
        [
          {
            "name": image_format,
            "object_value": JPEG,
            "threshold_value": [ JPEG, JPEG2000, PNG ],
            "result": 1
          },
          {
            "name": illumination_quality,
            "object_value": 0.6005162000656128,
            "threshold_value": { "min": 0.3, "max": 1 },
            "result": 1
          },
          {
            "name": specularity_quality,
            "object_value": 0.7662366628646851,
            "threshold_value": { "min": 0.3, "max": 1 },
            "result": 1
          },
          {
            "name": blurriness_quality,
            "object_value": 0.9429352283477783,
            "threshold_value": { "min": 0.61, "max": 1 },
            "result": 1
          },
          {
            "name": dark_quality,
            "object_value": 0.9020983576774597,
            "threshold_value": { "min": 0.5, "max": 1 },
            "result": 1
          },
          {
            "name": light_quality,
            "object_value": 0.7881984114646912,
            "threshold_value": { "min": 0.57, "max": 1 },
            "result": 1
          },
          {
            "name": head_yaw,
            "object_value": 2.818983316421509,
            "threshold_value": { "min": -5.0, "max": 5.0 },
            "result": 1
          },
          {
            "name": head_pitch,
            "object_value": 3.816443920135498,
            "threshold_value": { "min": -5.0, "max": 5.0 },
            "result": 1
          },
          {
            "name": head_roll,
            "object_value": 5.434040069580078,
            "threshold_value": { "min": -8.0, "max": 8.0 },
            "result": 1
          },
          {
            "name": gaze_yaw,
            "object_value": -3.773012399673462,
            "threshold_value": { "min": -5.0, "max": 5.0 },
            "result": 1
          },
          {
            "name": gaze_pitch,
            "object_value": 0.7140519022941589,
            "threshold_value": { "min": -5.0, "max": 5.0 },
            "result": 1
          },
          {
            "name": mouth_smiling,
            "object_value": 0.000290759839117527,
            "threshold_value": { "min": 0, "max": 0.5 },
            "result": 1
          },
          {
            "name": mouth_occluded,
            "object_value": 9.619363845558837e-05,
            "threshold_value": { "min": 0, "max": 0.5 },
            "result": 1
          },
          {
            "name": mouth_open,
            "object_value": 0.6226108074188232,
            "threshold_value": { "min": 0, "max": 0.5 },
            "result": 1
          },
          {
            "name": glasses,
            "object_value": no_glasses,
            "threshold_value": [ no_glasses, eyeglasses ],
            "result": 1
          },
          {
            "name": left_eye,
            "object_value": open,
            "threshold_value": [ open ],
            "result": 1
          },
          {
            "name": right_eye,
            "object_value": open,
            "threshold_value": [ open ],
            "result": 1
          },
          {
            "name": head_horizontal_center,
            "object_value": 0.51,
            "threshold_value": { "min": 0.45, "max": 0.55 },
            "result": 1
          },
          {
            "name": head_vertical_center,
            "object_value": 0.51,
            "threshold_value": { "min": 0.3, "max": 0.5 },
            "result": 1
          },
          {
            "name": head_width,
            "object_value": 0.61,
            "threshold_value": { "min": 0.5, "max": 0.75 },
            "result": 1
          },
          {
            "name": head_height,
            "object_value": 0.71,
            "threshold_value": { "min": 0.6, "max": 0.9 },
            "result": 1
          },
          {
            "name":eye_distance,
            "object_value": 110,
            "threshold_value": { "min": 90, "max": null },
            "result": 1
          },
          {
            "name": image_width,
            "object_value": 1000,
            "threshold_value": { "min": 200, "max": 1100 },
            "result": 1
          },
          {
            "name": image_height,
            "object_value": 2000,
            "threshold_value": { "min": 200, "max": 1100 },
            "result": 1
          },
          {
            "name": aspect_ratio,
            "object_value": 0.5,
            "threshold_value": { "min": 0.1, "max": 1.0 },
            "result": 1
          },
          {
            "name": face_width,
            "object_value": 500,
            "threshold_value": { "min": 400, "max": 600 },
            "result": 1
          },
          {
            "name": face_height,
            "object_value": 500,
            "threshold_value": { "min": 400, "max": 600 },
            "result": 1
          },
          {
            "name": indent_left,
            "object_value": 100,
            "threshold_value": { "min": 10, "max": 500 },
            "result": 1
          },
          {
            "name": indent_right,
            "object_value": 100,
            "threshold_value": { "min": 10, "max": 500 },
            "result": 1
          },
          {
            "name": indent_upper,
            "object_value": 100,
            "threshold_value": { "min": 10, "max": 500 },
            "result": 1
          },
          {
            "name": indent_lower,
            "object_value": 100,
            "threshold_value": { "min": 10, "max": 500 },
            "result": 1
          },
          {
            "name": image_size,
            "object_value": 100500,
            "threshold_value": { "min": 10, "max": 100600 },
            "result": 1
          },
          {
            "name": eyebrows_state,
            "object_value": "neutral",
            "threshold_value": ["neutral"],
            "result": 1
          },
          {
            "name": smile_properties,
            "object_value": "smile_lips",
            "threshold_value": ["none"],
            "result": 0
          },
          {
            "name": headwear_type,
            "object_value": "hat",
            "threshold_value": ["none"],
            "result": 0
          },
          {
            "name": natural_light,
            "object_value": 1,
            "threshold_value": 1,
            "result": 1
          },
          {
            "name": radial_distortion,
            "object_value": 0,
            "threshold_value": 0,
            "result": 1
          },
          {
            "name": red_eyes,
            "object_value": 0,
            "threshold_value": 0,
            "result": 1
          },
          {
            "name": face_color_type,
            "object_value": "color",
            "threshold_value": ["color"],
            "result": 1
          },
          {
            "name": illumination_uniformity,
            "object_value": 0.4305162000656128,
            "threshold_value": { "min": 0.5, "max": 1.0 },
            "result": 1
          },
          {
            "name": dynamic_range,
            "object_value": 0.7605162000656128,
            "threshold_value": { "min": 0.5, "max": 1.0 },
            "result": 1
          },
          {
            "name": background_lightness,
            "object_value": 0.5780888795852661,
            "threshold_value": { "min": 0.2, "max": 1.0 },
            "result": 1
          },
          {
            "name": background_uniformity,
            "object_value": 0.8874394297599792,
            "threshold_value": { "min": 0.5, "max": 1.0 },
            "result": 1
          },
          {
            "name": shoulders_position,
            "object_value": 'parallel',
            "threshold_value": ['parallel'],
            "result": 1
          }
        ]


    face_quality_checks_estimations:
      type: object
      description: Face quality estimations checks.
      properties:
        status:
          type: integer
          enum: [ 0, 1 ]
          description: Check status for all estimates.
        checks:
          $ref: '#/components/schemas/face_quality_checks_reply'
      required: [ status, checks ]

    detection_filter_reason:
      type: object
      properties:
        filter_name:
          type: string
          enum: ['pitch_threshold', 'roll_threshold', 'yaw_threshold', 'score_threshold', 'mask_states', 'liveness_states', 'face_occlusion_states',
                 'image_format', 'illumination_quality', 'specularity_quality', 'blurriness_quality', 'dark_quality',
                 'light_quality', 'head_yaw', 'head_pitch', 'head_roll', 'gaze_yaw', 'gaze_pitch', 'mouth_smiling',
                 'mouth_occluded', 'mouth_open', 'glasses', 'left_eye', 'right_eye', 'head_horizontal_center',
                 'head_vertical_center', 'head_width', 'head_height', 'eye_distance', 'image_width', 'image_height',
                 'aspect_ratio', 'face_width', 'face_height', 'indent_left', 'indent_right', 'indent_upper',
                 'eyebrows_state', 'smile_properties', 'headwear_type', 'natural_light', 'radial_distortion', 'red_eyes',
                 'face_color_type', 'indent_lower', 'image_size', 'illumination_uniformity', 'dynamic_range',
                 'background_lightness', 'background_uniformity', 'shoulders_position', 'deepfake_states',
                 'face_occlusion', 'lower_face_occlusion', 'forehead_occlusion', 'nose_occlusion']
          description: |
            Filter name. For resource */detector* available values are: 'pitch_threshold', 'roll_threshold',
            'yaw_threshold', For resources */handlers/{handler_id}/events* and */verifiers/{verifier_id}/verifications* all values are available.
        object_value:
          anyOf:
            - type: integer
              description: Estimate value.
            - type: number
              description: Estimate value.
            - type: string
              description: Estimate value.
            - type: array
              items:
                type: string
              description: Estimate value.
        threshold_value:
          oneOf:
            - type: number
              description: Threshold value.
            - type: array
              items:
                type: integer
              minItems: 1
              description: Threshold values.
            - type: array
              items:
                type: string
              minItems: 1
              description: Threshold values.
            - type: object
              description: Threshold values.
              properties:
                min:
                  type: number
                  description: Minimum allowed value.
                  nullable: true
                max:
                  type: number
                  description: Maximum allowed value.
                  nullable: true

      required:
        - filter_name
        - object_value
        - threshold_value



    estimator_filtered_detections:
      type: object
      properties:
        face_detections:
          type: array
          items:
            type: object
            description: Filtered detection.
            properties:
              filter_reasons:
                type: array
                items:
                  $ref: '#/components/schemas/detection_filter_reason'
                minItems: 1
              detection:
                allOf:
                  - properties:
                      face_quality:
                        allOf:
                          - $ref: '#/components/schemas/face_quality_checks_estimations'
                        description: Face quality checks estimations.
                      warp:
                        format: binary
                        description: Face warped image in jpg format (Not returned if image type is face warp).
                      attributes:
                        properties:
                          descriptor:
                            properties:
                              sdk_descriptor:
                                format: binary
                          face_occlusion:
                            $ref: '#/components/schemas/face_occlusion'
                  - $ref: '#/components/schemas/sdk_face_detections'
      required: [face_detections]

    estimator_images_estimations:
      type: array
      items:
        oneOf:
          - $ref: '#/components/schemas/estimator_one_image_estimation'
          - $ref: '#/components/schemas/image_error'

    estimator_response_msgpack:
      type: object
      properties:
        images_estimations:
          $ref: '#/components/schemas/estimator_images_estimations'
        aggregate_estimations:
          allOf:
            - properties:
                face:
                  properties:
                    attributes:
                      properties:
                        descriptor:
                          properties:
                            sdk_descriptor:
                              format: binary
                body:
                  properties:
                    attributes:
                      properties:
                        descriptor:
                          properties:
                            sdk_descriptor:
                              format: binary
            - $ref: '#/components/schemas/aggregate_estimations'
      required: [images_estimations]

    check_iso_response:
      type: object
      properties:
        images:
          description: Estimation results for provided images.
          type: array
          items:
            type: object
            properties:
              filename:
                $ref: '#/components/schemas/filename'
              status:
                type: integer
                enum: [ 0, 1 ]
                description: |
                  Status 1 means that the image was processed without errors. Status 0 means
                  that the image was processed with errors, information about error is contained in field `error`
              error:
                allOf:
                  - $ref: '#/components/schemas/Error'
                  - example:
                      error_code: 0
                      detail: Success
                      desc: Success
                      link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-0"
                description: Image error information.
              exif:
                $ref: '#/components/schemas/exif'
              estimations:
                description: |
                  List of related detections, i.e. face related samples that refer to the one person.
                  Can be empty if an error occurred during image processing or the image does not contain faces.
                type: array
                items:
                  type: object
                  properties:
                    face:
                      description: ISO face detection estimations.
                      type: object
                      properties:
                        detection:
                          type: object
                          description: ISO face detections.
                          properties:
                            iso:
                              $ref: '#/components/schemas/face_quality_checks_estimations'
                            rect:
                              allOf:
                                - $ref: '#/components/schemas/rect'
                                - description: Face detection bounding box.
                          required: [ iso ]
                      required: [ detection ]
                  required: [ face ]
            required: [ filename, status, error, estimations ]
      required: [ images ]

    roi_int_coordinates:
      type: integer
      minimum: 0
      default: 0
      maximum: 65536
      example: 3327

    roi_float_percent:
      type: number
      format: float
      minimum: 0
      default: 0.0
      maximum: 100.0
      example: 87.4

    roi_float_percent_size:
      type: number
      format: float
      minimum: 0.00001
      maximum: 100.0
      example: 66.3

    roi_abs:
      type: object
      properties:
        x:
          $ref: '#/components/schemas/roi_int_coordinates'
        y:
          $ref: '#/components/schemas/roi_int_coordinates'
        width:
          $ref: '#/components/schemas/roi_int_coordinates'
        height:
          $ref: '#/components/schemas/roi_int_coordinates'
        mode:
          type: string
          enum: [abs]
          example: "abs"
          description: Coordinates and size are set in pixels.
      required: [x, y, width, height, mode]

    roi_percent:
      type: object
      properties:
        x:
          $ref: '#/components/schemas/roi_float_percent'
        y:
          $ref: '#/components/schemas/roi_float_percent'
        width:
          $ref: '#/components/schemas/roi_float_percent_size'
        height:
          $ref: '#/components/schemas/roi_float_percent_size'
        mode:
          type: string
          enum: [ percent ]
          example: "percent"
          description: Coordinates and size are set in percentage.
      required: [x, y, width, height, mode]

    roi:
      oneOf:
        - $ref: '#/components/schemas/roi_abs'
        - $ref: '#/components/schemas/roi_percent'
      description: |
          Region of interest on a frame. Boundaries of the area are described in `x`, `y` coordinates 
          of the top left point and `width`, `height` properties
          **Region must not be any bigger than the original frame**

    rate_frame:
      type: object
      properties:
        period:
          type: integer
          minimum: 1
          description: period length
        unit:
          type: string
          enum:
            - frame
          description: unit for a period calculation
          required: [ unit, period ]

    rate_seconds:
      type: object
      properties:
        period:
          type: number
          minimum: 0
          description: period length
        unit:
          type: string
          enum:
            - second
          description: unit for a period calculation
          required: [ unit, period ]

    rate:
      required: [ unit, period ]
      discriminator:
        propertyName: unit
        mapping:
          frame: '#/components/schemas/rate_frame'
          second: '#/components/schemas/rate_seconds'
      oneOf:
        - $ref: '#/components/schemas/rate_frame'
        - $ref: '#/components/schemas/rate_seconds'
      description: |
        Frame processing rate configuration is used to lower the number of frames that are processed by analytics.
        One frame will be processed each period of units.

    plugin_status:
      type: object
      properties:
        name:
          type: string
          description: Plugin name
        running:
          allOf:
            - $ref: '#/components/schemas/int01'
            - description: Whether plugin is running or not.
      required: [name, running]

    plugins:
      type: object
      properties:
        plugins:
          description: list of imported plugins
          type: array
          items:
            $ref: '#/components/schemas/plugin_status'
      required: [plugins]
      example:
        plugins:
          - name: foo
            running: 1
  responses:
    internal_server_error:
      description: internal server error.
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'

    license_problem:
      description: license problem.
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            error_code: 11055
            desc: Forbidden
            detail: "License problem: 'License expired'"
            link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11055"

    image_not_found:
      description: Image not found.
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            sample_not_found:
              value:
                error_code: 13003
                desc: Object not found
                detail: Image with ID '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-13003"

    forbidden_resource_error:
      description: Forbidden.
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            resource_is_disabled:
              value:
                error_code: 12049
                desc: Forbidden
                detail: Resource is disabled.
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12049"
    timeout_error:
      description: Timeout error.
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            request_timeout:
              value:
                error_code: 43009
                desc: Timeout error
                detail: "Failed to open video by url http://127.0.0.1:64434/vide3245o.mkv, status code: 504, Request timeout"
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-43009"
            connect_timeout:
              value:
                error_code: 43009
                desc: Timeout error
                detail: "Failed to open video by url http://127.0.0.1:64434/vide3245o.mkv, status code: 504, Connect timeout"
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-43009"
            sock_connect_timeout:
              value:
                error_code: 43009
                desc: Timeout error
                detail: "Failed to open video by url http://127.0.0.1:64434/vide3245o.mkv, status code: 504, Socket connect timeout"
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-43009"
            sock_read_timeout:
              value:
                error_code: 43009
                desc: Timeout error
                detail: "Failed to open video by url http://127.0.0.1:64434/vide3245o.mkv, status code: 504, Socket read timeout"
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-43009"
paths:
  /version:
    get:
      tags:
      - version

      summary: get version
      description: get service version
      operationId: getVersion

      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/version'
        500:
          $ref: '#/components/responses/internal_server_error'
  /1/sdk:
    post:
      tags: [sdk]
      summary: sdk resource
      description: |
        Detect faces, human bodies and estimate attributes on input images. Resource estimates only available attributes
        for corresponding images. For example, if user sends warped face image and wants to calculate a body descriptor,
        landmarks5 and basic attributes - only basic attributes will be estimated.

        Order of input images is corresponding to order elements in output json. If an image is broken resource will
        returns error for it image, other images will be correct processing.

        > **WARNING**: this resource is unstable. A resource API can be changes in any release.

        Notes for incoming data:
          - face or body *bounding boxes* passed with face or body wapred image will be ignored.

      operationId: sdk
      parameters:
        - $ref: '#/components/parameters/application_json_or_msgpack_accept'
        - $ref: '#/components/parameters/luna_request_id'
        - in: header
          name: Content-Type

          schema:
            type: string
            enum:
              - application/json
              - multipart/form-data
              - image/jpeg
              - image/png
              - image/bmp
              - image/x-portable-pixmap
              - image/tiff
              - image/x-jpeg-base64
              - image/x-png-base64
              - image/x-bmp-base64
              - image/x-tiff-base64
              - image/x-portable-pixmap-base64
        - $ref: '#/components/parameters/image_type'
        - $ref: '#/components/parameters/estimate_people_count'
        - $ref: '#/components/parameters/people_count_coordinates'
        - $ref: '#/components/parameters/multiface_policy'
        - $ref: '#/components/parameters/detect_face'
        - $ref: '#/components/parameters/detect_body'
        - $ref: '#/components/parameters/estimate_head_pose'
        - $ref: '#/components/parameters/estimate_emotions'
        - $ref: '#/components/parameters/estimate_landmarks68'
        - $ref: '#/components/parameters/estimate_landmarks5'
        - $ref: '#/components/parameters/estimate_quality'
        - $ref: '#/components/parameters/estimate_gaze'
        - $ref: '#/components/parameters/estimate_eyes_attributes'
        - $ref: '#/components/parameters/estimate_mouth_attributes'
        - $ref: '#/components/parameters/estimate_mask'
        - $ref: '#/components/parameters/estimate_glasses'
        - $ref: '#/components/parameters/estimate_liveness'
        - $ref: '#/components/parameters/estimate_deepfake'
        - $ref: '#/components/parameters/estimate_face_descriptor'
        - $ref: '#/components/parameters/estimate_basic_attributes'
        - $ref: '#/components/parameters/estimate_body_descriptor'
        - $ref: '#/components/parameters/estimate_upper_body'
        - $ref: '#/components/parameters/estimate_lower_body'
        - $ref: '#/components/parameters/estimate_accessories'
        - $ref: '#/components/parameters/estimate_face_occlusion'
        - $ref: '#/components/parameters/estimate_body_basic_attributes'
        - $ref: '#/components/parameters/estimate_body_warp'
        - $ref: '#/components/parameters/estimate_face_warp'
        - $ref: '#/components/parameters/aggregate_attributes'
        - $ref: '#/components/parameters/pitch_threshold'
        - $ref: '#/components/parameters/roll_threshold'
        - $ref: '#/components/parameters/yaw_threshold'
        - $ref: '#/components/parameters/score_threshold'
        - $ref: '#/components/parameters/face_occlusion_states'
        - $ref: '#/components/parameters/mask_states'
        - $ref: '#/components/parameters/liveness_states'
        - $ref: '#/components/parameters/deepfake_states'
        - $ref: '#/components/parameters/use_exif_info'
        - $ref: '#/components/parameters/extract_exif'
      requestBody:
        content:
          image/jpeg:
            schema:
              type: string
              format: binary
          image/png:
            schema:
              type: string
              format: binary
          image/bmp:
            schema:
              type: string
              format: binary
          image/x-portable-pixmap:
            schema:
              type: string
              format: binary
          image/tiff:
            schema:
              type: string
              format: binary
          image/x-jpeg-base64:
            schema:
              type: string
              format: byte
          image/x-png-base64:
            schema:
              type: string
              format: byte
          image/x-bmp-base64:
            schema:
              type: string
              format: byte
          image/x-tiff-base64:
            schema:
              type: string
              format: byte
          image/x-portable-pixmap-base64:
            schema:
              type: string
              format: byte
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/multipart_sdk_image_schema'
            encoding:
              filename:
                contentType: |
                  image/jpeg, image/png, image/bmp, image/x-portable-pixmap, image/tiff, image/x-jpeg-base64,
                  image/x-png-base64, image/x-bmp-base64, image/x-tiff-base64, image/x-portable-pixmap-base64
          application/json:
            schema:
              $ref: '#/components/schemas/sdk_json_request_body'
        required: true
      responses:
        200:
          description: Estimated.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json_or_msgpack_content'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/sdk_response_json'
              examples:
                all:
                  value:
                    images_estimations:
                      - filename: raw image
                        exif:
                          make: Apple
                          model: iPhone 11
                          gps:
                            latitude: 55.0, 45.0, 18.29
                            longitude: 37.0, 39.0, 16.32
                          software: 13.6.1
                          orientation: 6
                        estimations:
                          - face:
                              detection:
                                rect:
                                  x: 71
                                  'y': 45
                                  width: 134
                                  height: 178
                                landmarks5: [ [ 25, 25 ], [ 83, 83 ], [ 47, 47 ], [ 33, 33 ], [ 82, 82 ] ]
                                landmarks68: [ [ 1, 1 ], [ 1, 1 ], [ 4, 4 ], [ 8, 8 ], [ 14, 14 ], [ 23, 23 ], [ 33, 33 ], [ 43, 43 ], [ 60, 60 ], [ 78, 78 ], [ 96, 96 ], [ 112, 112 ], [ 124, 124 ], [ 132, 132 ], [ 135, 135 ], [ 137, 137 ], [ 138, 138 ], [ 1, 1 ], [ 8, 8 ], [ 17, 17 ], [ 26, 26 ], [ 35, 35 ], [ 59, 59 ], [ 73, 73 ], [ 86, 86 ], [ 100, 100 ], [ 113, 113 ], [ 47, 47 ], [ 45, 45 ], [ 44, 44 ], [ 43, 43 ], [ 37, 37 ], [ 42, 42 ], [ 47, 47 ], [ 54, 54 ], [ 61, 61 ], [ 14, 14 ], [ 20, 20 ], [ 29, 29 ], [ 36, 36 ], [ 28, 28 ], [ 19, 19 ], [ 69, 69 ], [ 77, 77 ], [ 86, 86 ], [ 95, 95 ], [ 88, 88 ], [ 78, 78 ], [ 33, 33 ], [ 38, 38 ], [ 45, 45 ], [ 50, 50 ], [ 57, 57 ], [ 69, 69 ], [ 82, 82 ], [ 72, 72 ], [ 60, 60 ], [ 52, 52 ], [ 45, 45 ], [ 38, 38 ], [ 36, 36 ], [ 46, 46 ], [ 51, 51 ], [ 58, 58 ], [ 77, 77 ], [ 58, 58 ], [ 51, 51 ], [ 45, 45 ] ]
                                attributes:
                                  eyes_attributes:
                                    left_eye:
                                      iris_landmarks: [ [ 92, 92 ], [ 92, 92 ], [ 93, 93 ], [ 93, 93 ], [ 94, 94 ], [ 95, 95 ], [ 96, 96 ], [ 98, 98 ], [ 99, 99 ], [ 100, 100 ], [ 101, 101 ], [ 102, 102 ], [ 103, 103 ], [ 104, 104 ], [ 105, 105 ], [ 105, 105 ], [ 105, 105 ], [ 105, 105 ], [ 105, 105 ], [ 104, 104 ], [ 103, 103 ], [ 102, 102 ], [ 101, 101 ], [ 100, 100 ], [ 99, 99 ], [ 98, 98 ], [ 97, 97 ], [ 96, 96 ], [ 95, 95 ], [ 94, 94 ], [ 93, 93 ], [ 93, 93 ] ]
                                      state: open
                                    right_eye:
                                      iris_landmarks: [ [ 152, 152 ], [ 153, 153 ], [ 153, 153 ], [ 154, 154 ], [ 154, 154 ], [ 155, 155 ], [ 157, 157 ], [ 158, 158 ], [ 159, 159 ], [ 161, 161 ], [ 162, 162 ], [ 163, 163 ], [ 164, 164 ], [ 165, 165 ], [ 166, 166 ], [ 166, 166 ], [ 166, 166 ], [ 166, 166 ], [ 166, 166 ], [ 165, 165 ], [ 164, 164 ], [ 163, 163 ], [ 162, 162 ], [ 161, 161 ], [ 159, 159 ], [ 158, 158 ], [ 158, 158 ], [ 157, 157 ], [ 156, 156 ], [ 154, 154 ], [ 154, 154 ], [ 153, 153 ] ]
                                      state: open
                                  head_pose:
                                    pitch: 12.7464532852
                                    roll: -2.9892115593
                                    yaw: 17.7173442841
                                  gaze:
                                    yaw: -5.9912848473
                                    pitch: -10.2646684647
                                  emotions:
                                    predominant_emotion: neutral
                                    estimations:
                                      anger: 8.682e-7
                                      disgust: 1.0670000000000001e-7
                                      fear: 4.386e-7
                                      happiness: 0.45658952
                                      sadness: 4.951e-7
                                      surprise: 0.0000029291
                                      neutral: 0.543405652
                                  mask:
                                    estimations:
                                      medical_mask: 0.7108324766
                                      missing: 0.0700698048
                                      occluded: 0.2190976739
                                    predominant_mask: "medical_mask"
                                  liveness:
                                    estimations:
                                      quality: 1
                                      score: 0.9872102737426758
                                    prediction: "real"
                                  deepfake:
                                    score: 0.525161345345
                                    prediction: "real"
                                  glasses:
                                    glasses: "no_glasses"
                                  mouth_attributes:
                                    score: 1.0
                                    opened: 0.3884400725
                                    occluded: 1.4000000000000001e-9
                                    smile: 0.6115599275
                                  basic_attributes:
                                    ethnicities:
                                      predominant_ethnicity: caucasian
                                      estimations:
                                        asian: 0.0000025556
                                        indian: 6.417e-7
                                        caucasian: 0.9999949932000001
                                        african_american: 0.0000017718000000000001
                                    age: 24
                                    gender: 0
                                  descriptor:
                                    sdk_descriptor: ZHAAADgAAAB0k4SAf...IB6gHyAgH19fQ==
                                    score: 0.7854047418000001
                                quality:
                                  blurriness: 0.9769582748000001
                                  dark: 0.9542820454000001
                                  illumination: 0.8248310089
                                  specularity: 0.8472354412
                                  light: 0.8179533482
                                warp: /9j/4AAQSkZJRgABAQAAAQABA..C4gb+KneZD/erEHWn0/asOTzP/9k=
                          - body:
                              detection:
                                rect:
                                  x: 32
                                  'y': 4
                                  width: 224
                                  height: 255
                                warp: /9j/4AAQSkZJRgABAQAAAQABAA...CX6kdapTi1qS00f/Z
                                attributes:
                                  descriptor:
                                    sdk_descriptor: ZHAAAGUAAAC....AfX9
                                    score: 1
                                  basic_attributes:
                                    apparent_age: 0
                                    apparent_gender: 0
                                  upper_body:
                                    headwear:
                                      state: 0
                                    sleeve:
                                      length: "short"
                                    upper_clothing:
                                      colors: [ "white", "black" ]
                                  accessories:
                                    backpack:
                                      state: 0
                        image_estimations:
                          people:
                            count: 1

                with_error:
                  value:
                    images_estimations:
                      - error:
                          error_code: 100033
                          desc: Unsupported image type
                          detail: Unsupported type
                          link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-100033"
                        filename: bad_image.jpg
                      - filename: Claudia_Schiffer_warp.jpg
                        estimations:
                          - face:
                              detection:
                                rect:
                                  x: 71
                                  'y': 45
                                  width: 134
                                  height: 178
                with_aggregation:
                  value:
                    images_estimations:
                      - filename: image1.jpg
                        estimations:
                          - body:
                              detection:
                                rect:
                                  x: 118
                                  'y': -17
                                  width: 410
                                  height: 627
                      - filename: image2.jpg
                        estimations:
                          - body:
                              detection:
                                rect:
                                  x: 7
                                  'y': -60
                                  width: 1682
                                  height: 2523
                    aggregate_estimations:
                      body:
                        attributes:
                          descriptor:
                            sdk_descriptor: ZHAAAGUAAACBeX1w==
                            score: 0
            application/msgpack:
              schema:
                $ref: '#/components/schemas/sdk_response_msgpack'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'estimate_eyes_attributes'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12017"
                bad_content_type_download_image:
                  value:
                    error_code: 11028
                    desc: Bad/incomplete input data
                    detail: 'Bad content type of image ''https://www.google.ru'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11028"
                bad_content_type_multipart:
                  value:
                    error_code: 11029
                    desc: Bad/incomplete input data
                    detail: Bad content type of image in multipart body
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11029"
                failed_load_image:
                  value:
                    error_code: 11027
                    desc: External request failed
                    detail: 'Failed  to download image by url ''https://www.gooogle.ru'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11027"
        403:
          description: Access to this resource on the server is denied.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                one_rect_available:
                  value:
                    error_code: 11045
                    desc: Forbidden
                    detail: Only one detection rect for each image available at the moment
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11045"
                fsdk_liveness_disabled:
                  value:
                    error_code: 11055
                    desc: Forbidden
                    detail: "License problem: Liveness v.2 feature disabled"
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11055"
                liveness_disabled:
                  value:
                    error_code: 11055
                    desc: Forbidden
                    detail: "License problem: Liveness feature disabled"
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11055"
                licence_expired:
                  value:
                    error_code: 11055
                    desc: Forbidden
                    detail: "License problem: License expired"
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11055"
        404:
          $ref: '#/components/responses/image_not_found'
        500:
          $ref: '#/components/responses/internal_server_error'
  /1/iso:
    post:
      tags: [iso]
      summary: iso resource
      description: |
        The resource performs a visual examination of frontal type images based on ISO/IEC 19794-5 standard.
        This means that the images that have passed the validation are standardized and attributes of the person's face meet the established requirements.
        For more information on the requirements for face attributes in the image, see [ISO/IEC 19794-5 Clauses 7-10](https://www.iso.org/obp/ui/#iso:std:iso-iec:19794:-5:en).

        The response contains the result of the check for each estimator.
        The image check is considered successful if the set of these results complies with the ISO standard.

        The order of input images is corresponding to elements order in response. If an image is broken, the resource will
        return an error for this image and other images will be correctly processed.

        Notes for incoming data:
          - face or body *bounding boxes* passed with face or body wapred image will be ignored.

      operationId: iso
      parameters:
        - $ref: '#/components/parameters/application_json_or_msgpack_accept'
        - $ref: '#/components/parameters/luna_request_id'
        - in: header
          name: Content-Type
          schema:
            type: string
            enum:
            - application/json
            - multipart/form-data
            - image/jpeg
            - image/png
            - image/bmp
            - image/x-portable-pixmap
            - image/tiff
            - image/x-jpeg-base64
            - image/x-png-base64
            - image/x-bmp-base64
            - image/x-tiff-base64
            - image/x-portable-pixmap-base64
        - $ref: '#/components/parameters/raw_or_face_image_type'
        - $ref: '#/components/parameters/iso_multiface_policy'
        - $ref: '#/components/parameters/extract_exif'

      requestBody:
        content:
          image/jpeg:
            schema:
              type: string
              format: binary
          image/png:
            schema:
              type: string
              format: binary
          image/bmp:
            schema:
              type: string
              format: binary
          image/x-portable-pixmap:
            schema:
              type: string
              format: binary
          image/tiff:
            schema:
              type: string
              format: binary
          image/x-jpeg-base64:
            schema:
              type: string
              format: byte
          image/x-png-base64:
            schema:
              type: string
              format: byte
          image/x-bmp-base64:
            schema:
              type: string
              format: byte
          image/x-tiff-base64:
            schema:
              type: string
              format: byte
          image/x-portable-pixmap-base64:
            schema:
              type: string
              format: byte
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/multipart_iso_image_schema'
            encoding:
              filename:
                contentType: |
                  image/jpeg, image/png, image/bmp, image/x-portable-pixmap, image/tiff, image/x-jpeg-base64,
                  image/x-png-base64, image/x-bmp-base64, image/x-tiff-base64, image/x-portable-pixmap-base64
          application/json:
            schema:
               $ref: '#/components/schemas/iso_json_request_body'
        required: true
      responses:
        200:
          description: Estimated.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json_or_msgpack_content'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/check_iso_response'
              example:
                {
                  "images": [
                    {
                      "filename": "raw image",
                      "status": 1,
                      "error": {
                        "error_code": 0,
                        "desc": "Success",
                        "detail": "Success",
                        "link": "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-0"
                      },
                      "estimations": [
                        {
                          "face": {
                            "detection": {
                              "iso": {
                                "status": 1,
                                "checks": [
                                  {
                                    "name": image_format,
                                    "object_value": JPEG,
                                    "threshold_value": [ JPEG, JPEG2000, PNG ],
                                    "result": 1
                                  },
                                  {
                                    "name": illumination_quality,
                                    "object_value": 0.6005162000656128,
                                    "threshold_value": { "min": 0.3, "max": 1 },
                                    "result": 1
                                  },
                                  {
                                    "name": specularity_quality,
                                    "object_value": 0.7662366628646851,
                                    "threshold_value": { "min": 0.3, "max": 1 },
                                    "result": 1
                                  },
                                  {
                                    "name": blurriness_quality,
                                    "object_value": 0.9429352283477783,
                                    "threshold_value": { "min": 0.61, "max": 1 },
                                    "result": 1
                                  },
                                  {
                                    "name": dark_quality,
                                    "object_value": 0.9020983576774597,
                                    "threshold_value": { "min": 0.5, "max": 1 },
                                    "result": 1
                                  },
                                  {
                                    "name": light_quality,
                                    "object_value": 0.7881984114646912,
                                    "threshold_value": { "min": 0.57, "max": 1 },
                                    "result": 1
                                  },
                                  {
                                    "name": head_yaw,
                                    "object_value": 2.818983316421509,
                                    "threshold_value": { "min": -5.0, "max": 5.0 },
                                    "result": 1
                                  },
                                  {
                                    "name": head_pitch,
                                    "object_value": 3.816443920135498,
                                    "threshold_value": { "min": -5.0, "max": 5.0 },
                                    "result": 1
                                  },
                                  {
                                    "name": head_roll,
                                    "object_value": 5.434040069580078,
                                    "threshold_value": { "min": -8.0, "max": 8.0 },
                                    "result": 1
                                  },
                                  {
                                    "name": gaze_yaw,
                                    "object_value": -3.773012399673462,
                                    "threshold_value": { "min": -5.0, "max": 5.0 },
                                    "result": 1
                                  },
                                  {
                                    "name": gaze_pitch,
                                    "object_value": 0.7140519022941589,
                                    "threshold_value": { "min": -5.0, "max": 5.0 },
                                    "result": 1
                                  },
                                  {
                                    "name": mouth_smiling,
                                    "object_value": 0.000290759839117527,
                                    "threshold_value": { "min": 0, "max": 0.5 },
                                    "result": 1
                                  },
                                  {
                                    "name": mouth_occluded,
                                    "object_value": 9.619363845558837e-05,
                                    "threshold_value": { "min": 0, "max": 0.5 },
                                    "result": 1
                                  },
                                  {
                                    "name": mouth_open,
                                    "object_value": 0.6226108074188232,
                                    "threshold_value": { "min": 0, "max": 0.5 },
                                    "result": 1
                                  },
                                  {
                                    "name": glasses,
                                    "object_value": no_glasses,
                                    "threshold_value": [ no_glasses, eyeglasses ],
                                    "result": 1
                                  },
                                  {
                                    "name": left_eye,
                                    "object_value": open,
                                    "threshold_value": [ open ],
                                    "result": 1
                                  },
                                  {
                                    "name": right_eye,
                                    "object_value": open,
                                    "threshold_value": [ open ],
                                    "result": 1
                                  },
                                  {
                                    "name": head_horizontal_center,
                                    "object_value": 0.51,
                                    "threshold_value": { "min": 0.45, "max": 0.55 },
                                    "result": 1
                                  },
                                  {
                                    "name": head_vertical_center,
                                    "object_value": 0.51,
                                    "threshold_value": { "min": 0.3, "max": 0.5 },
                                    "result": 1
                                  },
                                  {
                                    "name": head_width,
                                    "object_value": 0.61,
                                    "threshold_value": { "min": 0.5, "max": 0.75 },
                                    "result": 1
                                  },
                                  {
                                    "name": head_height,
                                    "object_value": 0.71,
                                    "threshold_value": { "min": 0.6, "max": 0.9 },
                                    "result": 1
                                  },
                                  {
                                    "name":eye_distance,
                                    "object_value": 110,
                                    "threshold_value": { "min": 90, "max": null },
                                    "result": 1
                                  },
                                  {
                                    "name": background_lightness,
                                    "object_value": 0.5780888795852661,
                                    "threshold_value": { "min": 0.2, "max": 1.0 },
                                    "result": 1
                                  },
                                  {
                                    "name": background_uniformity,
                                    "object_value": 0.8874394297599792,
                                    "threshold_value": { "min": 0.5, "max": 1.0 },
                                    "result": 1
                                  },
                                  {
                                    "name": shoulders_position,
                                    "object_value": 'parallel',
                                    "threshold_value": [ 'parallel' ],
                                    "result": 1
                                  }
                                ]
                              },
                              "rect": {
                                "x": 108,
                                "y": 58,
                                "width": 113,
                                "height": 165
                              }
                            }
                          }
                        }
                      ]
                    }
                  ]
                }
            application/msgpack:
              schema:
                $ref: '#/components/schemas/check_iso_response'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'multiface_policy'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12017"
                bad_content_type_download_image:
                  value:
                    error_code: 11028
                    desc: Bad/incomplete input data
                    detail: 'Bad content type of image ''https://www.google.ru'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11028"
                bad_content_type_multipart:
                  value:
                    error_code: 11029
                    desc: Bad/incomplete input data
                    detail: Bad content type of image in multipart body
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11029"
                failed_load_image:
                  value:
                    error_code: 11027
                    desc: External request failed
                    detail: 'Failed  to download image by url ''https://www.gooogle.ru'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11027"
        403:
          description: Access to this resource on the server is denied.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                one_rect_available:
                  value:
                    error_code: 11045
                    desc: Forbidden
                    detail: Only one detection rect for each image available at the moment
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11045"
                licence_expired:
                  value:
                    error_code: 11055
                    desc: Forbidden
                    detail: "License problem: License expired"
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11055"
                license_iso_disabled:
                  value:
                    error_code: 11055
                    desc: Forbidden
                    detail: "License problem: ISO feature is disabled"
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11055"
        404:
          $ref: '#/components/responses/image_not_found'
        500:
          $ref: '#/components/responses/internal_server_error'
  /1/estimator:
    post:
      tags: [estimator]
      summary: estimator resource
      description: estimator
      operationId: estimator
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - in: header
          name: Content-Type
          schema:
            type: string
            enum:
              - application/msgpack
      requestBody:
        content:
          application/msgpack:
            schema:
              $ref: '#/components/schemas/estimator_request_body'
        required: true
      responses:
        200:
          description: Estimated.
          content:
            application/msgpack:
              schema:
                $ref: '#/components/schemas/estimator_response_msgpack'
                all:
                  value:
                    images_estimations:
                      - filename: raw image
                        exif:
                          make: Apple
                          model: iPhone 11
                          gps:
                            latitude: 55.0, 45.0, 18.29
                            longitude: 37.0, 39.0, 16.32
                          software: 13.6.1
                          orientation: 6
                        estimations:
                          - face:
                              detection:
                                rect:
                                  x: 71
                                  'y': 45
                                  width: 134
                                  height: 178
                                landmarks5: [ [ 25, 25 ], [ 83, 83 ], [ 47, 47 ], [ 33, 33 ], [ 82, 82 ] ]
                                landmarks68: [ [ 1, 1 ], [ 1, 1 ], [ 4, 4 ], [ 8, 8 ], [ 14, 14 ], [ 23, 23 ], [ 33, 33 ], [ 43, 43 ], [ 60, 60 ], [ 78, 78 ], [ 96, 96 ], [ 112, 112 ], [ 124, 124 ], [ 132, 132 ], [ 135, 135 ], [ 137, 137 ], [ 138, 138 ], [ 1, 1 ], [ 8, 8 ], [ 17, 17 ], [ 26, 26 ], [ 35, 35 ], [ 59, 59 ], [ 73, 73 ], [ 86, 86 ], [ 100, 100 ], [ 113, 113 ], [ 47, 47 ], [ 45, 45 ], [ 44, 44 ], [ 43, 43 ], [ 37, 37 ], [ 42, 42 ], [ 47, 47 ], [ 54, 54 ], [ 61, 61 ], [ 14, 14 ], [ 20, 20 ], [ 29, 29 ], [ 36, 36 ], [ 28, 28 ], [ 19, 19 ], [ 69, 69 ], [ 77, 77 ], [ 86, 86 ], [ 95, 95 ], [ 88, 88 ], [ 78, 78 ], [ 33, 33 ], [ 38, 38 ], [ 45, 45 ], [ 50, 50 ], [ 57, 57 ], [ 69, 69 ], [ 82, 82 ], [ 72, 72 ], [ 60, 60 ], [ 52, 52 ], [ 45, 45 ], [ 38, 38 ], [ 36, 36 ], [ 46, 46 ], [ 51, 51 ], [ 58, 58 ], [ 77, 77 ], [ 58, 58 ], [ 51, 51 ], [ 45, 45 ] ]
                                attributes:
                                  eyes_attributes:
                                    left_eye:
                                      iris_landmarks: [ [ 92, 92 ], [ 92, 92 ], [ 93, 93 ], [ 93, 93 ], [ 94, 94 ], [ 95, 95 ], [ 96, 96 ], [ 98, 98 ], [ 99, 99 ], [ 100, 100 ], [ 101, 101 ], [ 102, 102 ], [ 103, 103 ], [ 104, 104 ], [ 105, 105 ], [ 105, 105 ], [ 105, 105 ], [ 105, 105 ], [ 105, 105 ], [ 104, 104 ], [ 103, 103 ], [ 102, 102 ], [ 101, 101 ], [ 100, 100 ], [ 99, 99 ], [ 98, 98 ], [ 97, 97 ], [ 96, 96 ], [ 95, 95 ], [ 94, 94 ], [ 93, 93 ], [ 93, 93 ] ]
                                      state: open
                                    right_eye:
                                      iris_landmarks: [ [ 152, 152 ], [ 153, 153 ], [ 153, 153 ], [ 154, 154 ], [ 154, 154 ], [ 155, 155 ], [ 157, 157 ], [ 158, 158 ], [ 159, 159 ], [ 161, 161 ], [ 162, 162 ], [ 163, 163 ], [ 164, 164 ], [ 165, 165 ], [ 166, 166 ], [ 166, 166 ], [ 166, 166 ], [ 166, 166 ], [ 166, 166 ], [ 165, 165 ], [ 164, 164 ], [ 163, 163 ], [ 162, 162 ], [ 161, 161 ], [ 159, 159 ], [ 158, 158 ], [ 158, 158 ], [ 157, 157 ], [ 156, 156 ], [ 154, 154 ], [ 154, 154 ], [ 153, 153 ] ]
                                      state: open
                                  head_pose:
                                    pitch: 12.7464532852
                                    roll: -2.9892115593
                                    yaw: 17.7173442841
                                  gaze:
                                    yaw: -5.9912848473
                                    pitch: -10.2646684647
                                  emotions:
                                    predominant_emotion: neutral
                                    estimations:
                                      anger: 8.682e-7
                                      disgust: 1.0670000000000001e-7
                                      fear: 4.386e-7
                                      happiness: 0.45658952
                                      sadness: 4.951e-7
                                      surprise: 0.0000029291
                                      neutral: 0.543405652
                                  mask:
                                    estimations:
                                      medical_mask: 0.7108324766
                                      missing: 0.0700698048
                                      occluded: 0.2190976739
                                    predominant_mask: "medical_mask"
                                  liveness:
                                    estimations:
                                      quality: 1
                                      score: 0.9872102737426758
                                    prediction: "real"
                                  deepfake:
                                    score: 0.7265425622
                                    prediction: "real"
                                  glasses:
                                    glasses: "no_glasses"
                                  mouth_attributes:
                                    score: 1.0
                                    opened: 0.3884400725
                                    occluded: 1.4000000000000001e-9
                                    smile: 0.6115599275
                                  basic_attributes:
                                    ethnicities:
                                      predominant_ethnicity: caucasian
                                      estimations:
                                        asian: 0.0000025556
                                        indian: 6.417e-7
                                        caucasian: 0.9999949932000001
                                        african_american: 0.0000017718000000000001
                                    age: 24
                                    gender: 0
                                  descriptor:
                                    sdk_descriptor: ZHAAADgAAAB0k4SAf...IB6gHyAgH19fQ==
                                    score: 0.7854047418000001
                                quality:
                                  blurriness: 0.9769582748000001
                                  dark: 0.9542820454000001
                                  illumination: 0.8248310089
                                  specularity: 0.8472354412
                                  light: 0.8179533482
                                warp: /9j/4AAQSkZJRgABAQAAAQABA..C4gb+KneZD/erEHWn0/asOTzP/9k=
                          - body:
                              detection:
                                rect:
                                  x: 32
                                  'y': 4
                                  width: 224
                                  height: 255
                                warp: /9j/4AAQSkZJRgABAQAAAQABAA...CX6kdapTi1qS00f/Z
                                attributes:
                                  descriptor:
                                    sdk_descriptor: ZHAAAGUAAAC....AfX9
                                    score: 1
                                  basic_attributes:
                                    apparent_age: 0
                                    apparent_gender: 0
                                  upper_body:
                                    headwear:
                                      state: 0
                                    sleeve:
                                      length: "short"
                                    upper_clothing:
                                      colors: [ "white", "black" ]
                                  accessories:
                                    backpack:
                                      state: 0
                        image_estimations:
                          people:
                            count: 1
                        filtered_estimations:
                          face_detections:
                            filter_reasons:
                              filter_name: roll_threshold
                              object_value: 0.9
                              threshold_value: 0.5
                with_error:
                  value:
                    images_estimations:
                      - error:
                          error_code: 100033
                          desc: Unsupported image type
                          detail: Unsupported type
                          link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-100033"
                        filename: bad_image.jpg
                      - filename: Claudia_Schiffer_warp.jpg
                        estimations:
                          - face:
                              detection:
                                rect:
                                  x: 71
                                  'y': 45
                                  width: 134
                                  height: 178
                with_aggregation:
                  value:
                    images_estimations:
                      - filename: image1.jpg
                        estimations:
                          - body:
                              detection:
                                rect:
                                  x: 118
                                  'y': -17
                                  width: 410
                                  height: 627
                      - filename: image2.jpg
                        estimations:
                          - body:
                              detection:
                                rect:
                                  x: 7
                                  'y': -60
                                  width: 1682
                                  height: 2523
                    aggregate_estimations:
                      body:
                        attributes:
                          descriptor:
                            sdk_descriptor: ZHAAAGUAAACBeX1w==
                            score: 0
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12017"
        403:
          description: Access to this resource on the server is denied.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                one_rect_available:
                  value:
                    error_code: 11045
                    desc: Forbidden
                    detail: Only one detection rect for each image available at the moment
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11045"
                fsdk_liveness_disabled:
                  value:
                    error_code: 11055
                    desc: Forbidden
                    detail: "License problem: Liveness v.2 feature disabled"
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11055"
                liveness_disabled:
                  value:
                    error_code: 11055
                    desc: Forbidden
                    detail: "License problem: Liveness feature disabled"
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11055"
                licence_expired:
                  value:
                    error_code: 11055
                    desc: Forbidden
                    detail: "License problem: License expired"
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11055"
        500:
          $ref: '#/components/responses/internal_server_error'
  /1/docs/spec:
    get:
      tags:
        - documents
      summary: get openapi documentation
      description: |
        Get service OpenApi documentation. If *Accept* request header is of type `application/x-yaml`,
        returns documentation in `yaml` format or returns `html` documentation, if *Accept-Type* is `text/html`
      operationId: getSpec

      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/accept_docs_handler'
      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/docs_content_type'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/x-yaml:
              schema:
                type: string
                description: yaml format documentation
            text/html:
              schema:
                type: string
                description: html format documentation
        415:
          description: Unsupported Media Type
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                unsupported_media_type:
                  value:
                    error_code: 12024
                    detail: 'Bad/incomplete input data'
                    desc: "Unsupported media type"
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12024"
        500:
          $ref: '#/components/responses/internal_server_error'
  /1/docs/dev:
    parameters:
      - $ref: '#/components/parameters/Accept'
    get:
      tags:
        - documents
      summary: get development manual
      description: |
        Get sphinx documentation - *Development Manual*. After the request you will be redirected to the page `/docs/dev/index.html`
      operationId: getDevManual

      parameters:
        - $ref: '#/components/parameters/luna_request_id'
      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/text_html'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            text/html:
              schema:
                type: string
                description: html format documentation
        500:
          $ref: '#/components/responses/internal_server_error'
  /1/config:
    get:
      tags:
        - config
      summary: get service configuration
      description: Get service configuration. Passwords and tokens will be hidden in the response.
      operationId: getConfig

      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/accept_config_handler'
      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/config_accept_content_type'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                type: object
                description: json format configuration
              example:
                INFLUX_MONITORING:
                  SEND_DATA_FOR_MONITORING: 0
                  ORGANIZATION: ORGANIZATION_NAME
                  TOKEN: '********'
                  BUCKET: luna_monitoring
                  HOST: 127.0.0.1
                  PORT: 8086
                  USE_SSL: 0
                  FLUSHING_PERIOD: 1.0
            text/plain:
              schema:
                type: string
                description: text format configuration
              example: |
                [INFLUX_MONITORING]
                SEND_DATA_FOR_MONITORING = 0
                ORGANIZATION = ORGANIZATION_NAME
                TOKEN = ********
                BUCKET = luna_monitoring
                HOST = 127.0.0.1
                PORT = 8086
                USE_SSL = 0
                FLUSHING_PERIOD = 1.0
        415:
          description: Unsupported Media Type
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                unsupported_media_type:
                  value:
                    error_code: 12024
                    detail: 'Bad/incomplete input data'
                    desc: "Unsupported media type"
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12024"
        500:
          $ref: '#/components/responses/internal_server_error'
  /1/plugins:
    get:
      tags:
        - plugins
      summary: get list of plugins
      description: |
        Get list of service plugins
      operationId: getPlugins
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
      responses:
        200:
          description: OK.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/plugins'
        500:
          $ref: '#/components/responses/internal_server_error'
  /metrics:

    get:
      tags:
        - metrics
      summary: get service requests statistics
      description: Get statistics of success and failed requests to the service in prometheus format.
      operationId: metrics
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
      responses:
        200:
          description: OK.
          headers:
            Content-Type:
              schema:
                type: string
                enum:
                  - text/plain; charset=UTF-8
              required: true
              description: Content type is `text/plain`.
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            text/plain:
              schema:
                type: string
                description: Prometheus plain text format.
              example: |
                # HELP request_count_total Counter of requests
                # TYPE request_count_total counter
                request_count_total{path="GET:/healthcheck",status_code="200"} 1.0
        403:
          $ref: '#/components/responses/forbidden_resource_error'
        500:
          $ref: '#/components/responses/internal_server_error'
  /healthcheck:
    get:
      tags:
      - health
      summary: get health
      description: get health of service
      operationId: healthcheck
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/include_luna_services'
      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/health_ok'
        500:
          $ref: '#/components/responses/internal_server_error'
        502:
          description: Unhealthy
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/health_errors'