openapi: 3.0.0
info:
  version: 'v.1.2.11'
  title: 'LUNA Backport 4 API'
  description: |
          VisionLabs Luna Backport 4 API. The API version is 5.      
          
          OpenAPI specification is the only valid document providing up-to-date information about the service API. 

          The specification can be used:

          - By documentation generation tools to visualize the API.
          - By code generation tools.

          All the documents and code generated using this specification can include inaccuracies and should be carefully checked.

          OpenAPI specification can be received using the "/docs/spec" resource. The "Accept" header should be set to "application/x-yaml".    
      
servers:
- description: SwaggerHub API Auto Mocking
  url: https://virtserver.swaggerhub.com/visionlabs/Luna3API/v.1.2.11


components:
  headers:
    application_json:
      schema:
        type: string
        enum:
        - application/json
      required: true
      description: content type is application/json

    octet_stream:
      schema:
        type: string
        enum:
        - application/octet-stream
      required: true
      description: content type is application/octet-stream

    text_plain:
      schema:
        type: string
        enum:
        - text/plain
      required: true
      description: content type is text/plain

    text_html:
      schema:
        type: string
        enum:
          - text/html
      required: true
      description: content type is text/html

    docs_content_type:
      schema:
        type: string
        enum:
          - application/x-yaml
          - text/html
      required: true
      description: Type of recieving data

    image_content_type:
      schema:
        type: string
        enum:
        - image/jpeg
        - image/png
      description: content type is image/jpeg or image/png
      required: true

    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

    application_zip:
      schema:
        type: string
        enum:
        - application/zip
      required: true
      description: content type is application/zip

    content_disposition:
      schema:
        type: string
      example: 'attachment; filename=task_146.zip'
      required: true
      description: content disposition with filename

    allow_methods:
      schema:
        type: string
      example: 'PUT, DELETE, GET, OPTIONS'
      required: true
      description: allow methods header

    access_control_allow_origin:
      schema:
        type: string
        enum: ['*']
      example: '*'
      description: access control allow origin header. Is supported by CORS requests to the server

    access_control_allow_headers:
      schema:
        type: string
        enum: ['*']
      example: '*'
      description: access control allow headers. Is supported by CORS requests to the server

    access_control_allow_methods:
      schema:
        type: string
        enum: ['*']
      example: '*'
      description: access control allow methods. Is supported by CORS requests to the server

    access_control_max_age:
      schema:
        type: string
        enum: ['86400']
      example: '86400'
      description: access control max age header. Is supported by CORS requests to the server

    config_accept_content_type:
      schema:
        type: string
        enum:
          - application/json
          - text/plain
      required: false
      description: The content type of the response body.
  parameters:
    page:
      in: query
      name: page
      schema:
        type: integer
        minimum: 1
        default: 1
      description: a page number.

    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, the system will set it to the default format ("timestamp,UUID"). It will be returned with response.
      name: Luna-Request-Id

    cors_origin:
      in: header
      name: Origin
      schema:
        type: string
      example: 'http://example.com'
      description: The Origin header indicates the origin of the cross-site access request

    luna_account_id:
      in: header
      schema:
        type: string
        format: uuid4
        example: 8b8b5937-2e9c-4e8b-a7a7-5caf86621b5a
        pattern: ^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$
      description: |
        account ID. Account is a limitation for all user actions (matching, removing, updating and other)
        on data which does not have corresponding account id. For example: it is impossible to attach a face with one
        account to a list with another account id. User can make a limited set of requests without this header
        (requests with methods *GET, HEAD, OPTIONS*, match requests and getting events statistics requests).
      name: Luna-Account-Id

    required_luna_account_id:
      in: header
      required: true
      schema:
        type: string
        format: uuid4
        example: 8b8b5937-2e9c-4e8b-a7a7-5caf86621b5a
        pattern: ^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$
      description: |
        account ID. Account is a limitation for all user actions (matching, removing, updating and other)
        on data which does not have corresponding account id. For example: it is impossible to attach a face with one
        account to a list with another account id. User can make a limited set of requests without this header
        (requests with methods *GET, HEAD, OPTIONS*, match requests and getting events statistics requests).
      name: Luna-Account-Id

    page_size:
      in: query
      name: page_size
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 10
      description: the number of items on page.

    page_size10000:
      in: query
      name: page_size
      schema:
        type: integer
        minimum: 1
        maximum: 10000
        default: 10
      description: the number of items on page.

    page_size1000:
      in: query
      name: page_size
      schema:
        type: integer
        minimum: 1
        maximum: 1000
        default: 10
      description: the number of items on page.

    order:
      in: query
      name: order
      schema:
        type: string
        enum: ["asc", "desc"]
      description: the sort order. If "desc" is set, the newest events will be shown first. If "asc" is set, the oldest events will be shown first.

    gender:
      in: query
      name: gender
      schema:
        type: integer
        enum: [0, 1]
      description: Gender. 1 - male, 0 - female.
      example: 1

    emotions:
      in: query
      name: emotions
      schema:
        type: string
        format: list of integer (1, 2, 3, 4, 5, 6, 7)
      description: |
        comma-separated list of predominant emotions. Each event from result will contain one of the given emotions.

        | emotions    | value |
        |-----------------|---|
        | anger           | 1 |
        | disgust         | 2 |
        | fear            | 3 |
        | happiness       | 4 |
        | neutral         | 5 |
        | sadness         | 6 |
        | surprise        | 7 |
      example: "1,2,3"

    ethnic_groups:
      in: query
      name: ethnic_groups
      schema:
        type: string
        format: list of integer (1, 2, 3, 4)
      description: |
        comma-separated list of dominant ethnic group. Each event from result will contain one of the given ethnic groups.

        | ethnicity   | value |
        |-----------------|---|
        | AfricanAmerican | 1 |
        | Indian          | 2 |
        | Asian           | 3 |
        | Caucasian       | 4 |

      example: "1,2"

    tags:
      in: query
      name: tags
      schema:
        type: array
        items:
          $ref: '#/components/schemas/tag'
        minItems: 0
      explode: false
      description: |
        A comma-separated list of tags. Each event from result will contain all of the given tags.
        Each tag can be at most 36 characters.
      example:
        - tag_1
        - tag_2

    time__lt:
      in: query
      name: time__lt
      schema:
        $ref: '#/components/schemas/time'
      description: upper bound for object create_time.
      example: "2018-08-11T09:11:41.674Z"

    time__gte:
      in: query
      name: time__gte
      schema:
        $ref: '#/components/schemas/time'
      description: lower included bound for object create_time.
      example: "2018-08-11T09:11:41.674Z"

    event_time__lt:
      in: query
      name: create_time__lt
      schema:
        $ref: '#/components/schemas/time'
      description: upper bound for object create_time. Current datetime if no time bound specified.
      example: "2018-08-11T09:11:41.674Z"

    event_time__gte:
      in: query
      name: create_time__gte
      schema:
        $ref: '#/components/schemas/time'
      description: lower included bound for object create_time. Current datetime minus month if no time bound specified.
      example: "2018-08-11T09:11:41.674Z"

    list_create_time__lt:
      in: query
      name: create_time__lt
      schema:
        $ref: '#/components/schemas/time'
      description: upper bound for list create_time.
      example: "2018-08-11T09:11:41.674Z"

    list_create_time__gte:
      in: query
      name: create_time__gte
      schema:
        $ref: '#/components/schemas/time'
      description: lower included bound for list create_time.
      example: "2018-08-11T09:11:41.674Z"

    list_last_update_time__lt:
      in: query
      name: last_update_time__lt
      schema:
        $ref: '#/components/schemas/time'
      description: upper excluded bound for list last_update_time.
      example: "2018-08-11T09:11:41.674Z"

    list_last_update_time__gte:
      in: query
      name: last_update_time__gte
      schema:
        $ref: '#/components/schemas/time'
      description: lower included bound for list last_update_time.
      example: "2018-08-11T09:11:41.674Z"

    age__lt:
      in: query
      name: age__lt
      schema:
        type: integer
      description: age upper excluded bound.
      example: 50

    age__gte:
      in: query
      name: age__gte
      schema:
        type: integer
      description: age lower included bound.
      example: 50

    face_ids:
      in: query
      name: face_ids
      schema:
        type: string
        format: list of uuid4
      description: list of comma-separated face ids.

      example: '8950722f-3fd4-4223-b48f-03f95f0e8dfb,346a5645-ec89-4806-820a-dbcb6e0dc38'

    event_ids:
      in: query
      name: event_ids
      schema:
        type: string
        format: list of uuid4.
      example: '8950722f-3fd4-4223-b48f-03f95f0e8dfb,346a5645-ec89-4806-820a-dbcb6e0dc38'

      description: a list of comma-separated event ids.

    handler_ids:
      in: query
      name: handler_ids
      schema:
        type: string
        format: list of uuid4.
      example: '8950722f-3fd4-4223-b48f-03f95f0e8dfb,346a5645-ec89-4806-820a-dbcb6e0dc38'
      description: a list of comma-separated handler ids.

    external_id:
      in: query
      name: external_id
      schema:
        type: string
        maxLength: 36
      description: |
        external ID.
        When filtering by an external ID, you must specify the full `external_id` value.

    external_ids:
      in: query
      name: external_ids
      schema:
        type: string
        format: list of string.
      example: 'external_id_1,external_id_2'
      description: a list of comma-separated external ids.

    user_data:
      in: query
      name: user_data
      schema:
        type: string
      description: |
        find all objects with `user_data` that is similar to this parameter.
        You can specify only part of the `user_data` value for this filter.
      example: "user_data_text"

    sources:
      in: query
      name: sources
      schema:
        type: string
      description: Comma-separated list of sources. Each event from result will contain one of the given sources.
      example: "cam1,cam2"

    top_similar_face_list:
      in: query
      name: top_similar_face_list
      schema:
        $ref: '#/components/schemas/uuid4'
      description: ID of top similar face list.

    top_similar_face_lists:
      in: query
      name: top_similar_face_lists
      schema:
        type: array
        items:
          $ref: '#/components/schemas/uuid4'
      description: IDs of top similar face lists.

    top_similar_face_ids:
      in: query
      name: top_similar_face_ids
      schema:
        type: array
        items:
          $ref: '#/components/schemas/uuid4'
      description: Comma-separated list of top similar face ids. Each event from result will contain one of the given top similar face ids.

    top_similar_face_similarity__gte:
      in: query
      name: top_similar_face_similarity__gte
      schema:
        type: number
      description: Top similar face similarity lower included bound.
      example: 0.5

    top_similar_face_similarity__lt:
      in: query
      name: top_similar_face_similarity__lt
      schema:
        type: number
      description: Top similar face similarity upper excluded bound.
      example: 0.5

    get_event_target:
      in: query
      name: target
      schema:
        type: string
        enum: ["create_time", "event_id", "handler_id", "external_id", "attribute_id", "source",
               "top_similar_face_id", "top_similar_face_list", "top_similar_face_similarity", "match_result",
               "extract_result", "face_id", "attach_result", "gender", "age", "emotion", "ethnic_group", "tags",
               "user_data"]
      description: |
        Comma-separated list of event fields.
        If set, each event from result will contain only specified fields, otherwise, events with all fields will be returned.
      example: "create_time,event_id,extract_result"

    get_face_target:
      in: query
      name: targets
      schema:
        type: string
        enum: ["face_id", "attribute_id", "event_id", "user_data", "create_time", "external_id", "avatar", "lists"]
      description: |
        Comma-separated list of face fields.
        If set, each face from result will contain only specified fields, otherwise, faces with all the fields will be returned.
      example: "face_id,user_data"

    get_face_target_match:
      in: query
      name: targets
      schema:
        type: string
        enum: ["face_id", "attribute_id", "event_id", "user_data", "create_time", "external_id", "avatar", "lists"]
      description: Comma-separated list of candidate face fields to enrich the match result.
          If set, each face from result will contain specified fields besides the "face_id", otherwise, faces with all fields will be returned.
      example: "face_id,user_data"

    list_id:
      in: query
      name: list_id
      schema:
        $ref: '#/components/schemas/uuid4'
      description: id of a list that contains faces.

    list_ids:
      in: query
      name: list_ids
      schema:
        type: string
        format: list of uuid4
      description: list of comma-separated list ids.

    applicationJsonContent:
      in: header
      name: Content-Type
      schema:
        type: string
        enum:
        - application/json
      description: content type is application/json.

    estimate_head_pose:
      in: query
      name: estimate_head_pose
      schema:
        $ref: '#/components/schemas/estimate_head_pose'
      description: |
        whether to estimate head pose in the image.
        *Not supported with warped images (see `warped_image` parameter).*

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

    detect_landmarks68:
      in: query
      name: detect_landmarks68
      schema:
        $ref: '#/components/schemas/detect_landmarks68'
      description: |
        whether to detect basic 68-point facial landmarks in the image.
        *Not supported with warped images (see `warped_image` parameter).*

    extract_exif:
      in: query
      name: estimate_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.

    estimate_quality:
      in: query
      name: estimate_quality
      schema:
        $ref: '#/components/schemas/estimate_quality'
      description: |
        whether to estimate input face image quality. Each of the following parameters is estimated: light, darkness, saturation and blur

    estimate_gaze:
      in: query
      name: estimate_gaze
      schema:
        $ref: '#/components/schemas/estimate_gaze'
      description: |
        whether to estimate eye gaze in the image.
        *Not supported with warped images (see `warped_image` parameter).*

    estimate_eyes_attributes:
      in: query
      name: estimate_eyes_attributes
      schema:
        $ref: '#/components/schemas/estimate_eyes_attributes'
      description: |
        whether to estimate eye attributes in the image.
        *Not supported with warped images (see `warped_image` parameter).*

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

    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.

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

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

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

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


    warped_image:
      in: query
      name: warped_image
      schema:
        $ref: '#/components/schemas/warped_image'
      description: Whether input image is a sample or not.


    luna_event_time:
      in: header
      name: Luna-Event-Time
      schema:
        $ref: '#/components/schemas/time'
      examples:
        with_time_zone:
          summary: time with timezone
          value: 2018-12-16T15:29:59.300275+03:00
        utc:
          summary: utc time
          value: 2018-12-16T15:29:59.300275Z
      description: |
        user defined event time. All events will be saved with this time as "create_time". Format of time is
        [rfc3339](https://www.ietf.org/rfc/rfc3339.txt). All other format is ignored.

    create_time__lt:
      in: query
      name: create_time__lt
      schema:
        $ref: '#/components/schemas/time'
      description: upper bound for object create_time.
      example: "2018-08-11T09:11:41.674Z"

    create_time__gte:
      in: query
      name: create_time__gte
      schema:
        $ref: '#/components/schemas/time'
      description: lower included bound for object create_time.
      example: "2018-08-11T09:11:41.674Z"

    last_update_time__lt:
      in: query
      name: last_update_time__lt
      schema:
        $ref: '#/components/schemas/time'
      description: upper bound for object create_time.
      example: "2018-08-11T09:11:41.674Z"

    last_update_time__gte:
      in: query
      name: last_update_time__gte
      schema:
        $ref: '#/components/schemas/time'
      description: lower included bound for object create_time.
      example: "2018-08-11T09:11:41.674Z"

    end_time__lt:
      in: query
      name: end_time__lt
      schema:
        $ref: '#/components/schemas/time'
      description: upper bound for object end_time.
      example: "2018-08-11T09:11:41.674Z"

    end_time__gte:
      in: query
      name: end_time__gte
      schema:
        $ref: '#/components/schemas/time'
      description: lower included bound for object end_time.
      example: "2018-08-11T09:11:41.674Z"

    error_time__lt:
      in: query
      name: error_time__lt
      schema:
        $ref: '#/components/schemas/time'
      description: upper bound for object error_time.
      example: "2018-08-11T09:11:41.674Z"

    error_time__gte:
      in: query
      name: error_time__gte
      schema:
        $ref: '#/components/schemas/time'
      description: lower included bound for object error_time.
      example: "2018-08-11T09:11:41.674Z"

    error_id:
      in: query
      name: error_id
      schema:
        $ref: '#/components/schemas/errorId'
      description: error id
      example: 10

    error_ids:
      in: query
      name: error_ids
      schema:
        $ref: '#/components/schemas/errorIds'
      description: comma-separated error ids

    task_ids:
      in: query
      name: task_ids
      schema:
        $ref: '#/components/schemas/taskIds'
      description: comma-separated task ids

    error_code:
      in: query
      name: error_code
      schema:
        $ref: '#/components/schemas/error_code'
      description: error code

    task_type:
      in: query
      name: task_type

      schema:
        $ref: '#/components/schemas/taskType'
      example: 1

    task_status:
      in: query
      name: task_status

      schema:
        $ref: '#/components/schemas/taskStatus'
      example: 1

    subtask_status:
      in: query
      name: subtask_status
      description: |
        subtask status

        | subtask status| value |
        |-------------------|---|
        | pending           | 0 |
        | in progress       | 1 |
        | cancelled         | 2 |
        | failed            | 3 |
        | done              | 4 |

      schema:
        $ref: '#/components/schemas/subtaskStatus'
      example: 2

    result_id:
      in: query
      name: result_id

      schema:
        allOf:
        - $ref: '#/components/schemas/result_id'
        - nullable: true
      description: id of task result, which stored in  the Image Store service.
      example: 8f4f0070-c464-460b-bf78-fac225df72e9

    status_code:
      in: query
      name: status_code
      schema:
        $ref: '#/components/schemas/status_code'
      description: http status code

    with_faces:
      in: query
      name: with_faces
      schema:
        $ref: '#/components/schemas/int01'
      description: whether to delete list with all its' faces

    multiple_images_content_type:
      in: header
      name: Content-Type

      schema:
        type: string
        enum:
          - image/jpeg
          - image/png
          - image/bmp
          - image/x-portable-pixmap
          - image/tiff
          - multipart/form-data
          - application/json
          - image/x-jpeg-base64
          - image/x-png-base64
          - image/x-bmp-base64
          - image/x-tiff-base64
          - image/x-portable-pixmap-base64

    attribute_ids:
      in: query
      name: attribute_ids
      required: true
      schema:
        type: string
        format: list of uuid4
      description: list of comma-separated temporary attribute ids.

      example: '8950722f-3fd4-4223-b48f-03f95f0e8dfb,346a5645-ec89-4806-820a-dbcb6e0dc38'

    accept_docs_handler:
      in: header
      name: Accept
      schema:
        $ref: '#/components/schemas/accept_docs_handler'
      description: acceptable type of recieving 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.

    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
  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.
      required:
      - error_code
      - detail
      - desc
      example:
        error_code: 11009
        detail: internal server error
        desc: internal server error

    image_binary:
      type: string
      format: binary
      description: |
        The sample has the following properties
         * its size is always 250x250 pixels
         * it's always in RGB color format
         * it always contains just a single face
         * the face is always centered and rotated so that imaginary line between the eyes is horizontal.

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

    attribute_id:
      allOf:
      - $ref: '#/components/schemas/uuid4'
      description: attribute ID. This ID links the descriptor, the face attributes, the sample, and the face received from a single image.
      example: "b668c4a5-2191-476e-a261-3b4f9ce2e25e"

    sample_id:
      allOf:
        - $ref: '#/components/schemas/uuid4'
      description: sample ID.
      example: "b668c4a5-2191-476e-a261-3b4f9ce2e25e"

    sample_ids:
      type: array
      maxItems: 8
      minItems: 1
      description: sample ID list.
      items:
        $ref: '#/components/schemas/sample_id'

    result_id:
      allOf:
        - $ref: '#/components/schemas/uuid4'
      description: ID of task result, which stored in the Image Store service.
      example: "b668c4a5-2191-476e-a261-3b4f9ce2e25e"

    face_external_id:
      description: user-defined external ID for the face. External ID can be used to link several *faces* which belong to one person.
      type: string
      maxLength: 36
      example: "3.1415926"
      default: ""

    event_external_id:
      description: user-defined external ID for the event. External
      type: string
      maxLength: 36
      example: "3.1415926"
      default: ""

    face_id:
      allOf:
      - $ref: '#/components/schemas/uuid4'
      description: face ID.
      example: "b668c4a5-2191-476e-a261-3b4f9ce2e25e"

    avatar:
      type: string
      maxLength: 256
      format: uri-reference
      example: 'https://upload.wikimedia.org/wikipedia/commons/thumb/2/2d/Yfke-sturm-1326186044.jpg/800px-Yfke-sturm-1326186044.jpg'
      default: ""
      description: |
        avatar is a visual representation of a face.

        The avatar can be used in the user interface.

        You can use a sample or an external image as the avatar.

    list_id:
      allOf:
      - $ref: '#/components/schemas/uuid4'
      description: list ID.
      example: "b668c4a5-2191-476e-a261-3b4f9ce2e25e"

    event_id:
      allOf:
      - $ref: '#/components/schemas/uuid4'
      description: event ID.
      example: "b668c4a5-2191-476e-a261-3b4f9ce2e25e"

    handler_id:
      allOf:
      - $ref: '#/components/schemas/uuid4'
      description: handler ID.
      example: "b668c4a5-2191-476e-a261-3b4f9ce2e25e"

    account_id:
      allOf:
        - $ref: '#/components/schemas/uuid4'
      description: Account ID.
      example: "b668c4a5-2191-476e-a261-3b4f9ce2e25e"

    count:
      type: integer
      minimum: 0
      description: object count.
      example: 1

    int01:
      type: integer
      default: 0
      enum:
      - 0
      - 1

    int0100:
      type: integer
      minimum: 0
      maximum: 100

    int0180:
      type: integer
      minimum: 0
      maximum: 180

    double01:
      type: number
      format: double
      minimum: 0
      maximum: 1

    time:
      type: string
      format: date-time
      example: "2018-08-11T09:11:41.674Z"
      description: time in format RFC 3339

    estimate_head_pose:
      allOf:
      - $ref: '#/components/schemas/int01'
      description: whether to estimate head angles (yaw, pitch and roll) in the image.

    estimate_emotions:
      allOf:
      - $ref: '#/components/schemas/int01'
      description: whether to estimate emotions in the image.

    estimate_quality:
      allOf:
      - $ref: '#/components/schemas/int01'
      description: whether to estimate quality of the image (darkness, light, blur, saturation).

    estimate_gaze:
      allOf:
      - $ref: '#/components/schemas/int01'
      description: whether to estimate gaze in the image (yaw and pitch angles for each of the eyes).

    estimate_eyes_attributes:
      allOf:
      - $ref: '#/components/schemas/int01'
      description: whether to estimate eye attributes in the image (iris landmarks and state of the eyes).

    estimate_mouth_attributes:
      allOf:
      - $ref: '#/components/schemas/int01'
      description: |
        whether to estimate:
          - occlusion of the mouth in the image,
          - the score for the mouth detection confidence,
          - the smile probability.

    detect_landmarks68:
      allOf:
      - $ref: '#/components/schemas/int01'
      description: whether to detect basic 68-point facial landmarks in the image.

    extract_exif:
      allOf:
      - $ref: '#/components/schemas/int01'
      description: |
        whether to extract EXIF meta-information (artist, date, software, orientation, etc.) from input JPEG 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.

    pitch_threshold:
      example: 180
      allOf:
      - $ref: '#/components/schemas/int0180'
      description: maximum deviation pitch angle from 0. If the estimated value is equal to or less than the threshold, the image is filtered

    roll_threshold:
      example: 180
      allOf:
      - $ref: '#/components/schemas/int0180'
      description: maximum deviation roll angle from 0. If the estimated value is equal to or less than the threshold, the image is filtered

    yaw_threshold:
      example: 180
      allOf:
      - $ref: '#/components/schemas/int0180'
      description: maximum deviation yaw angle from 0. If the estimated value is equal to or less than the threshold, the image is filtered

    extract_basic_attributes:
      allOf:
      - $ref: '#/components/schemas/int01'
      description: whether to extract basic attributes (gender, age, ethnicity).

    extract_descriptor:
      allOf:
      - $ref: '#/components/schemas/int01'
      example: 1
      default: 1
      description: whether to extract face descriptor(s).

    aggregate_attributes:
      type: integer
      description: |
        whether to aggregate face attributes.

        If the value is set to "0", a descriptor and basic attributes are extracted for each sample.

        If the value is set to "1", you can create an aggregated descriptor, receive aggregated basic attributes, or both. The behavior depends on the `extract_basic_attributes` and `extract_descriptor` parameters:

        - If `extract_descriptor` is enabled, all the samples in the request will be used to create a single descriptor. An aggregated descriptor gives you more accurate results upon descriptors comparison.

        - If `extract_basic_attributes` is enabled, all the samples in the request will be used to extract basic attributes. Age, gender and ethnicity values received from several samples are more precise.

        >Make sure that all the samples in the request belong to the same person.

        >If there are several faces in the input image, an error occurs.

      default: 0

    score_threshold:
      type: number
      minimum: 0
      maximum: 1
      example: 0.74
      default: 0
      description: |
        descriptor quality score threshold. The higher the quality score for the image, the better the extraction results.

        All the attributes with a 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).

        *Consult VisionLabs about the recommended value of this parameter.*

        **Note!** This parameter is **not** related to the image quality estimated in the detect faces request (`estimate_quality` request parameter).

    column:
      type: string
      enum: [event_id, external_id, handler_id, attribute_id, source, top_similar_face_id, top_similar_face_list,
             create_time, top_similar_face_similarity, face_id, gender, age, emotion, ethnic_group, user_data,
             tags]
      description: fields to aggregate.
      example: source

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

    age:
      $ref: '#/components/schemas/int0100'


    aggregator:
      type: string
      enum: [count, max, min, avg, group_by]
      example: count
      description: aggregation function for column.
      default: count

    operator_filter:
      type: string
      enum: [eq, neq, in, nin, like, nlike, gt, gte, lt, lte]
      description: filter operator. For tags it is required to be like/nlike only.
      example: eq

    operator_period:
      type: string
      enum: [gt, gte, lt, lte]
      description: filter operator for event creation time.
      example: gt

    value_period:
      type: string
      format: date-time
      example: "2018-01-01T00:00:00Z"
      description: filter value for event creation time. In ISO or now-time format.

    value_filter:
      anyOf:
        - type: string
        - type: number
        - type: integer
        - type: array
      description: filter value. It is required to be string, array, integer or number.
      example: "Main_hall_camera"

    face_user_data:
      type: string
      maxLength: 128
      description: user data associated with face
      example: "face of person"
      default: ""

    event_user_data:
      type: string
      maxLength: 128
      description: user data associated with event
      example: "save event"
      default: ""

    list_user_data:
      type: string
      maxLength: 128
      description: user data associated with list
      example: "list of good persons"
      default: ""

    target:
      type: object
      description: an event field and corresponding function-aggregator for statistic selection
      properties:
        column:
          $ref: '#/components/schemas/column'
        aggregator:
          $ref: '#/components/schemas/aggregator'
      required: [column , aggregator]
      example:
        column: "age"
        aggregator: "avg"

    targets:
      type: array
      description: |
        You can specify one or several event fields and functions for them for data aggregation.

        The table includes event fields and available functions for them:

        | Field                       | Function   |     |     |     |          |
        |-----------------------------|------------|-----|-----|-----|----------|
        |                             | count      | max | min | avg | group_by |
        | event_id                    | +          | -   | -   | -   | +        |
        | external_id                 | +          | -   | -   | -   | +        |
        | handler_id                  | +          | -   | -   | -   | +        |
        | attribute_id                | +          | -   | -   | -   | +        |
        | source                      | +          | -   | -   | -   | +        |
        | top_similar_face_id         | +          | -   | -   | -   | +        |
        | top_similar_face_list       | +          | -   | -   | -   | +        |
        | create_time                 | +          | +   | +   | -   | -        |
        | top_similar_face_similarity | +          | +   | +   | +   | -        |
        | face_id                     | +          | -   | -   | -   | +        |
        | gender                      | +          | +   | +   | +   | +        |
        | age                         | +          | +   | +   | +   | +        |
        | emotion                     | +          | +   | +   | +   | +        |
        | ethnic_group                | +          | +   | +   | +   | +        |
        | user_data                   | +          | -   | -   | -   | +        |
        | tags                        | +          | +   | +   | -   | -        |

        >Note! There **must** be at least one function different from `group_by` in the `targets`, otherwise an error occurs.

      items:
        $ref: '#/components/schemas/target'
      minItems: 0
      default:
        - {'column': 'event_id', 'aggregator': 'count'}

    filter:
      type: object
      description: filter for sample restriction.
      properties:
        column:
          $ref: '#/components/schemas/column'
        operator:
          $ref: '#/components/schemas/operator_filter'
        value:
          $ref: '#/components/schemas/value_filter'
      required: [column , operator, value]

    filters:
      type: array
      description: |
        specifies filters for events.

        Operators available for each filter:

        | Filter                      | Operator    |         |         |                  |
        |-----------------------------|-------------|---------|---------|------------------|
        |                             | like, nlike | in, nin | eq, neq | gt, gte, lt, lte |
        | tags                        | +           | -       | -       | -                |
        | source                      | -           | +       | +       | -                |
        | user_data                   | -           | +       | +       | -                |
        | event_id                    | -           | +       | +       | +                |
        | external_id                 | -           | +       | +       | +                |
        | handler_id                  | -           | +       | +       | +                |
        | attribute_id                | -           | +       | +       | +                |
        | top_similar_face_id         | -           | +       | +       | +                |
        | top_similar_face_list       | -           | +       | +       | +                |
        | top_similar_face_similarity | -           | -       | -       | +                |
        | face_id                     | -           | +       | +       | +                |
        | gender                      | -           | +       | +       | +                |
        | age                         | -           | +       | +       | +                |
        | emotion                     | -           | +       | +       | +                |
        | ethnic_group                | -           | +       | +       | +                |

      items:
        $ref: '#/components/schemas/filter'
      minItems: 0

    period:
      type: object
      properties:
        operator:
          $ref: '#/components/schemas/operator_period'
        value:
          $ref: '#/components/schemas/value_period'
      required: [operator, value]

    periods:
      type: array
      description: |
        specifies the period of event creation. All the events created during this period will be included in the statistics.

        You can set the start and end of the period or only one of the bounds.

        >**Note!** You can specify **only one** period!
      items:
        $ref: '#/components/schemas/period'
      minItems: 0

    group_by:
      type: string
      description: |
        enables you to group events by creation time according to one of two ways:

        1) Grouping by time intervals - number and dimension

        | The parameter value | Description  |
        |---------------------|--------------|
        | `1m`                | one minute   |
        | `2h`                | two hours    |
        | `7d`                | seven days   |
        | `5w`                | five weeks   |
        | `3M`                | three months |
        | `10y`               | ten years    |

        2) The frequency grouping - one of the following

        | The parameter value | Description        |
        |---------------------|--------------------|
        | `monthOfYear`       | by month of year   |
        | `weekOfYear`        | by week of year    |
        | `dayOfYear`         | by day of year     |
        | `dayOfMonth`        | by day of month    |
        | `dayOfWeek`         | by day of week     |
        | `hourOfDay`         | by hours of day    |
        | `minuteOfHour`      | by minutes of hour |

      example: "dayOfWeek"


    detect_policy:
      type: object
      properties:

        estimate_head_pose:
          $ref: '#/components/schemas/estimate_head_pose'

        estimate_emotions:
          $ref: '#/components/schemas/estimate_emotions'

        estimate_quality:
          $ref: '#/components/schemas/estimate_quality'

        estimate_gaze:
          $ref: '#/components/schemas/estimate_gaze'

        estimate_eyes_attributes:
          $ref: '#/components/schemas/estimate_eyes_attributes'

        estimate_mouth_attributes:
          $ref: '#/components/schemas/estimate_mouth_attributes'

        detect_landmarks68:
          $ref: '#/components/schemas/detect_landmarks68'

        extract_exif:
          $ref: '#/components/schemas/extract_exif'

        yaw_threshold:
          allOf:
            - $ref: '#/components/schemas/yaw_threshold'
          nullable: true

        roll_threshold:
          allOf:
            - $ref: '#/components/schemas/roll_threshold'
          nullable: true

        pitch_threshold:
          allOf:
            - $ref: '#/components/schemas/pitch_threshold'
          nullable: true

      description: |
        The policy specifies face detection parameters.

        This policy execution depends on the status of the `warped_image` parameter in the "generate events" request:

        - If `warped_image` is set to "1" and `detect_policy` is not set in the handler, then images are not processed by Detector and are directly saved into Image Store.

        - If `warped_image` is set to "1" and `detect_policy` is specified in the handler, Detector estimates all the properties specified in the handler and does not create new samples.

        - If  `warped_image` is set to "0", then images are processed according to the `detect_policy`, and new samples are created for them.

        > The estimated face properties are not stored in the Events database (except emotion). The properties are only returned in the response.

    detect_policy_required:
      allOf:
        - $ref: '#/components/schemas/detect_policy'
      required: [estimate_head_pose, estimate_emotions, estimate_quality, estimate_gaze,
                 estimate_eyes_attributes, estimate_mouth_attributes, detect_landmarks68, extract_exif]

    extract_policy:
      type: object
      properties:
        extract_basic_attributes:
          $ref: '#/components/schemas/extract_basic_attributes'

        extract_descriptor:
          $ref: '#/components/schemas/extract_descriptor'

        score_threshold:
          $ref: '#/components/schemas/score_threshold'

      description: |
        specifies parameters for the extraction of descriptors and basic attributes.

    extract_policy_required:
      allOf:
        - $ref: '#/components/schemas/extract_policy'
      required: [extract_basic_attributes, extract_descriptor, score_threshold]

    gender_filter:
      type: integer
      enum: [0, 1]
      description: gender. 1 - male, 0 - female.
      example: 1

    age_lt_filter:
      allOf:
        - $ref: '#/components/schemas/age'
      description: upper excluded bound for age.
      example: 30

    age_gte_filter:
      allOf:
        - $ref: '#/components/schemas/age'
      description: lower included bound for age.
      example: 22

    matching_limit:
      type: integer
      minimum: 1
      maximum: 100
      default: 3
      description: The maximum number of match results per candidate's list.

    ethnicity:
      type: integer
      enum: [1, 2, 3, 4]
      example: 1
      description: |
        ethnicity

        | ethnicity   | value |
        |-----------------|---|
        | AfricanAmerican | 1 |
        | Indian          | 2 |
        | Asian           | 3 |
        | Caucasian       | 4 |

    ethnicities_enum:
      example: [4, 3]
      type: array
      items:
        type: integer
        enum: [1, 2, 3, 4]
      minItems: 1
      description: |
        ethnicity

        | ethnicity   | value |
        |-----------------|---|
        | AfricanAmerican | 1 |
        | Indian          | 2 |
        | Asian           | 3 |
        | Caucasian       | 4 |

    emotion_enum:
      description: |
        predominant emotion.

        | emotions    | value |
        |-----------------|---|
        | anger           | 1 |
        | disgust         | 2 |
        | fear            | 3 |
        | happiness       | 4 |
        | neutral         | 5 |
        | sadness         | 6 |
        | surprise        | 7 |

      type: integer
      enum: [1, 2, 3, 4, 5, 6, 7]

    emotions_map:
      type: array
      description: list of emotion
      items:
        $ref: '#/components/schemas/emotion_enum'

    match_filter:
      type: object
      properties:
        list_id:
          allOf:
            - $ref: '#/components/schemas/list_id'
          description: ID of the luna list, which was used for matching.
        similarity__lte:
          type: number
          maximum: 1
          minimum: 0
          example: 0.90
          description: upper included bound  for the best match by the list.
        similarity__gte:
          type: number
          maximum: 1
          minimum: 0
          example: 0.78
          description: lower included bound for the best match by the list.
      required: [list_id]

    match_lists_policy:
      type: array
      items:
        type: object
        properties:
          list_id:
            allOf:
              - $ref: '#/components/schemas/list_id'
            description: ID of the list for matching.
          filters:
            type: object
            properties:
              gender:
                $ref: '#/components/schemas/gender_filter'
              ethnicities:
                $ref: '#/components/schemas/ethnicities_enum'
              age__lt:
                $ref: '#/components/schemas/age_lt_filter'
              age__gte:
                $ref: '#/components/schemas/age_gte_filter'
            description: filters for matching are based on the results of the extraction.
          limit:
            $ref: '#/components/schemas/matching_limit'
        required: [list_id]
      minItems: 0
      description: |
        this policy enables you to match the received events with the faces from the specified lists. You can specify several lists with filters.
        The event descriptor is matched with descriptors from the specified list.
        The event must have a successfully extracted descriptor to be matched using this policy. If an event does not satisfy the list filters or has no descriptor, the event is not matched.
    create_face_policy:
      type: object
      description: |
        the policy specifies filters for new face creation. You can specify filters by age, gender, and ethnicity as well as filters by matching results.

        The `extract_basic_attributes` parameter in the `extraction_policy` must be enabled for filtration by basic attributes.

        Matching results must be received in the `match_policy` to use the `match` section of the filters.
      properties:
        filters:
          allOf:
          - $ref: '#/components/schemas/post_filters'
          description: filters determine whether to create face or not.
        create_faces:
          allOf:
          - $ref: '#/components/schemas/int01'
          description: whether to create faces from events.
          default: 0
        set_sample_as_avatar:
          allOf:
          - $ref: '#/components/schemas/int01'
          description: whether to set a sample as an avatar for created faces. The avatar can be used for visual representation in the user interface.
          default: 1

    create_face_policy_required:
      allOf:
        - $ref: '#/components/schemas/create_face_policy'
      required: [create_faces, set_sample_as_avatar, filters]

    link_to_lists_policy:
      type: array
      items:
        type: object
        properties:
          list_id:
            $ref: '#/components/schemas/list_id'
          filters:
            allOf:
            - $ref: '#/components/schemas/post_filters'
            description: filters determine whether to link the created face to the list.
        required: [list_id]

      minItems: 0
      description: |
        the policy specifies filters for linking of the created faces to specified lists. You can specify filters by age, gender, and ethnicity as well as filters by matching results.

        The `extract_basic_attributes` parameter in the `extraction_policy` must be enabled for filtration by basic attributes.

        Matching results must be received in the `match_policy` to use the `match` section of the filters.

    link_to_lists_policy_required:
      type: array
      items:
        type: object
        properties:
          list_id:
            $ref: '#/components/schemas/list_id'
          filters:
            allOf:
            - $ref: '#/components/schemas/post_filters'
            description: filters determine whether to link created face to the list.
        required: [list_id, filters]
      minItems: 0
      description: a set of luna lists for linking of created faces.

    int_version:
      type: integer
      minimum: 0

    base_version_schema:
      type: object
      properties:
        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: [major, minor, patch]
      example:
        major: 1
        minor: 3
        patch: 2

    version:
      allOf:
        - $ref: '#/components/schemas/base_version_schema'
      properties:
        api:
          allOf:
            - $ref: '#/components/schemas/int_version'
          description: an api version of service.
      required: [api, major, minor, patch]
      example:
        api: 1
        major: 0
        minor: 0
        patch: 0


    New_Face:
      type: object
      properties:
        external_id:
          $ref: '#/components/schemas/face_external_id'
        attribute_id:
          $ref: '#/components/schemas/attribute_id'
        user_data:
          $ref: '#/components/schemas/face_user_data'
        avatar:
          $ref: '#/components/schemas/avatar'
        lists:
          type: array
          items:
            $ref: '#/components/schemas/list_id'
          minItems: 1
          description: luna lists for linking face with them.
        event_id:
          allOf:
          - $ref: '#/components/schemas/event_id'
          description: the event ID associated with the face creation.
          nullable: true
      example:
        external_id: 2xQ2gprbMUePw1s9gw9fvA==
        attribute_id: 'b668c4a5-2191-476e-a261-3b4f9ce2e25e'
        user_data: some_string
        avatar: 'https://upload.wikimedia.org/wikipedia/commons/thumb/c/c4/Abbey_Lee_2015.jpg/800px-Abbey_Lee_2015.jpg'
        lists: ['234fc28c-a767-42fc-a0c2-e01ad00b5c59', 'c2a09aff-0116-41cf-a7c7-91631d40d0c2']

    Update_Face:
      type: object
      properties:
        external_id:
          description: user-defined external ID for the face.
          type: string
          maxLength: 36
        attribute_id:
          allOf:
          - $ref: '#/components/schemas/attribute_id'
          description: the attribute ID associated with the face.
        event_id:
          allOf:
            - $ref: '#/components/schemas/event_id'
          description: the event ID associated with the face creation.
          nullable: true
        user_data:
          description: user-defined data for the face.
          type: string
          maxLength: 36
        avatar:
          $ref: '#/components/schemas/avatar'
      example:
        external_id: 2xQ2gprbMUePw1s9gw9fvA==
        attribute_id: 'b668c4a5-2191-476e-a261-3b4f9ce2e25e'
        user_data: some_string
        avatar: 'https://upload.wikimedia.org/wikipedia/commons/7/7f/Emma_Watson_2013.jpg'

    Face:
      type: object
      properties:
        face_id:
          $ref: '#/components/schemas/face_id'
        external_id:
          $ref: '#/components/schemas/face_external_id'
        attribute_id:
          allOf:
            - $ref: '#/components/schemas/attribute_id'
          description: the attribute ID equals "00000000-0000-4000-a000-000000000000" cause LUNA do not associate face with attribute ID from now.
        user_data:
          $ref: '#/components/schemas/face_user_data'
        create_time:
          allOf:
            - $ref: "#/components/schemas/time"
          description: time of the face creation.
        avatar:
          $ref: '#/components/schemas/avatar'
        lists:
          type: array
          items:
            $ref: '#/components/schemas/list_id'
          description: list of luna lists, which contain the face.
        event_id:
          allOf:
            - $ref: '#/components/schemas/event_id'
          nullable: true
          description: the event ID associated with the face creation.
      example:
        face_id: 426542d6-5509-4e5b-8a01-e2abd5c0a8c6
        external_id: 2xQ2gprbMUePw1s9gw9fvA==
        attribute_id: 'b668c4a5-2191-476e-a261-3b4f9ce2e25e'
        user_data: fox1991
        create_time: "2018-08-11T09:11:41.674Z"
        lists: ["429b0e78-4616-426a-b57f-02baa72d638d", '6d037c33-31ec-4d73-b3b3-ec80b09446c2']
        avatar: 'https://st.kp.yandex.net/images/actor_iphone/iphone360_460188.jpg'
        event_id: f9687459-986b-406d-9c1f-0d6289be5256

    Link:
      type: object
      properties:
        action:
          type: string
          enum:
          - attach
          - detach
          description: expected action with list and faces.
        face_ids:
          type: array
          items:
            $ref: '#/components/schemas/face_id'
          minItems: 1
          description: faces to attach or detach to/from list.
      required: [action, face_ids]

    basic_attributes:
      type: object
      properties:
        gender:
          allOf:
            - $ref: '#/components/schemas/gender'
          nullable: true
        age:
          allOf:
            - $ref: '#/components/schemas/int0100'
          description: detected age
          nullable: true
        ethnicity:
          allOf:
            - $ref: '#/components/schemas/ethnicity'
          nullable: true
      required: [age, gender, ethnicity]

    attributes_with_basic_attributes:
      type: object
      properties:
        create_time:
          description: time of the attribute creation
          type: string
          format: date-time
        basic_attributes:
          $ref: '#/components/schemas/basic_attributes'
      required: [create_time, basic_attributes]

    Attributes:
      type: object
      properties:
        attribute_id:
          allOf:
            - $ref: '#/components/schemas/attribute_id'
          description: the attribute ID equals "00000000-0000-4000-a000-000000000000" cause LUNA do not associate face with attribute ID from now.
          nullable: true
        gender:
          allOf:
          - $ref: '#/components/schemas/gender'
          nullable: true
        age:
          allOf:
            - $ref: '#/components/schemas/int0100'
          description: detected age
          nullable: true
        ethnicity:
          allOf:
          - $ref: '#/components/schemas/ethnicity'
          nullable: true
        create_time:
          description: time of the attribute creation
          type: string
          format: date-time
          nullable: true
      required: [attribute_id, create_time, age, gender, ethnicity]
      example:
        age: 20
        gender: 1
        ethnic_group: 2
        create_time: "2018-08-11T09:08:29.414Z"
        attribute_id: "00000000-0000-4000-a000-000000000000"

    New_List:
      type: object
      properties:
        user_data:
          $ref: '#/components/schemas/list_user_data'
      required:
      - user_data

    List:
      type: object
      properties:
        list_id:
          allOf:
          - $ref: '#/components/schemas/list_id'
          readOnly: true
        user_data:
          $ref: '#/components/schemas/list_user_data'
        create_time:
          type: string
          format: date-time
          readOnly: true
          description: list creation time.
        last_update_time:
          type: string
          format: date-time
          readOnly: true
          description: list update time (face was attached or detached, user_data was changed).
      required:
      - list_id
      - user_data
      - create_time
      - last_update_time
      example:
        list_id: c004aae2-f191-4a1a-9d2a-e5894f8cecbf
        user_data: good guys
        create_time: 2018-08-11T09:11:41.674Z
        last_update_time: 2018-08-11T09:11:41.674Z

    post_filters:
      type: object
      properties:
        gender:
          $ref: '#/components/schemas/gender_filter'
        ethnicities:
          $ref: '#/components/schemas/ethnicities_enum'
        age__lt:
          $ref: '#/components/schemas/age_lt_filter'
        age__gte:
          $ref: '#/components/schemas/age_gte_filter'
        match:
          type: array
          items:
            $ref: '#/components/schemas/match_filter'
          minItems: 0
          description: |
            filtering using matching results, received in the match_policy.

            If there are no matching results for any event, the event is skipped.

            You can specify several lists with similarity boundaries. All the events with similarity within the specified boundaries are processed by the policy.
    Policies:
      type: object
      description: the set of rules, which determine input images processing.
      properties:
        detect_policy:
          allOf:
          - $ref: '#/components/schemas/detect_policy'
          description: face detection policy.
        multiface_policy:
          allOf:
          - $ref: '#/components/schemas/int01'
          default: 1
          description: whether to process images with several faces.
        extract_policy:
          allOf:
            - $ref: '#/components/schemas/extract_policy'
          description: extract attributes policy.
        match_policy:
          $ref: '#/components/schemas/match_lists_policy'
        create_face_policy:
          allOf:
            - $ref: '#/components/schemas/create_face_policy'
          description: whether to create faces.
        link_to_lists_policy:
          $ref: '#/components/schemas/link_to_lists_policy'
      nullable: true

    PoliciesWithRequired:
      type: object
      description: a set of rules, which determine input images processing. Empty policies refer to dynamic handler.
      properties:
        detect_policy:
          allOf:
          - $ref: '#/components/schemas/detect_policy_required'
          description: face detection policy.
        multiface_policy:
          allOf:
          - $ref: '#/components/schemas/int01'
          description: |
              whether to process images with several faces. If the value is set to "0", images with several faces are skipped.
          default: 1
        extract_policy:
          $ref: '#/components/schemas/extract_policy_required'
        match_policy:
          $ref: '#/components/schemas/match_lists_policy'
        create_face_policy:
          $ref: '#/components/schemas/create_face_policy_required'
        link_to_lists_policy:
          $ref: '#/components/schemas/link_to_lists_policy_required'
      required: [detect_policy, extract_policy, match_policy, create_face_policy, link_to_lists_policy, multiface_policy]

    New_Handler:
      type: object
      properties:
        description:
          type: string
          maxLength: 128
          description: |
            description of the handler.

            Use it to distinguish the handler from other created handlers and filter handlers using corresponding requests.
          example: Handler example
        policies:
          $ref: '#/components/schemas/Policies'
        create_time:
          type: string
          format: date-time
          readOnly: true
          description: the handler creation time.
        last_update_time:
          type: string
          format: date-time
          readOnly: true
          description: the handler last update time.
      required: [policies, description, create_time, last_update_time]

    HandlerWithRequiredPolicies:
      type: object
      properties:
        handler_id:
          allOf:
          - $ref: '#/components/schemas/handler_id'
          description: handler ID.
          readOnly: true
        description:
          type: string
          maxLength: 128
          description: user description.
        policies:
          $ref: '#/components/schemas/PoliciesWithRequired'
        create_time:
          type: string
          format: date-time
          readOnly: true
          description: the handler creation time.
        last_update_time:
          type: string
          format: date-time
          readOnly: true
          description: the handler last update time.
      required: [policies, handler_id, description, create_time, last_update_time]

    EventFromHandler:
      type: object
      description: event format from handler.
      properties:
        samples:
          type: array
          minItems: 1
          description: list of samples associated with the event.
          items:
            $ref: '#/components/schemas/sample_id'
        attributes:
          allOf:
          - $ref: '#/components/schemas/AttributeWithFilter'
          description: attributes extracted from samples.
        source:
          type: string
          description: additional information that the user provided with the event.
          nullable: true
          example: "Main_hall_camera"
        tags:
          description: tag array.
          type: array
          items:
            $ref: '#/components/schemas/tag'
          example: ['tag1', 'tag2']
          nullable: true
        external_id:
          $ref: '#/components/schemas/event_external_id'
        user_data:
          $ref: '#/components/schemas/event_user_data'
        face:
          nullable: true
          type: object
          properties:
            face_id:
              $ref: '#/components/schemas/face_id'
            external_id:
              $ref: '#/components/schemas/face_external_id'
            event_id:
              allOf:
                - $ref: '#/components/schemas/event_id'
              nullable: true
            user_data:
              $ref: '#/components/schemas/face_user_data'
            avatar:
              type: string
              format: uri-reference
              description: avatar for the face, references to a sample or a user-defined reference.
              nullable: true
            lists:
              type: array
              items:
                $ref: '#/components/schemas/list_id'
              description: list of luna lists, which contains the face.
              nullable: true
            url:
              type: string
              format: uri-reference
              description: location of face.
          required: [lists, avatar, user_data, external_id, face_id, url]
        event_id:
          allOf:
          - $ref: '#/components/schemas/event_id'
          description: Event ID.
        url:
          type: string
          format: uri-reference
          example: /0/events/24d405ce-bc56-4bf7-98e1-bdc962b4cf34
          description: location of event.
        matches:
          allOf:
            - $ref: '#/components/schemas/Matches'
          description: sorted list with match results for the event.
          nullable: true
      required: [matches, url, event_id, face, tags, source, attributes, samples]

    Source:
      description: additional information that the user provided with the event.
      type: string
      maxLength: 128
      example: "Main_hall_camera"

    Tags:
      description: tag array.
      type: array
      items:
        type: string
      example: ['tag1', 'tag2']

    Event:
      type: object
      description: event.
      properties:
        create_time:
          allOf:
            - $ref: "#/components/schemas/time"
          description: time of the event creation.
        event_id:
          $ref: '#/components/schemas/event_id'
        handler_id:
          allOf:
            - $ref: '#/components/schemas/handler_id'
          description: ID of the handler, which gave birth to the event.
        attribute_id:
          allOf:
            - $ref: '#/components/schemas/attribute_id'
          nullable: true
        external_id:
          $ref: '#/components/schemas/event_external_id'
        source:
          allOf:
            - $ref: '#/components/schemas/Source'
          nullable: true
        top_similar_face_id:
          allOf:
            - $ref: '#/components/schemas/face_id'
          nullable: true
          description: most similar face ID.
        top_similar_face_list:
          allOf:
            - $ref: '#/components/schemas/list_id'
          nullable: true
          description: the list that contains the most similar face.
        top_similar_face_similarity:
          nullable: true
          description: similarity to the most similar face.
          type: number
          example: 0.7
        match_result:
          description: object that contains match result.
          type: array
          nullable: true
          items:
            type: object
            properties:
              list_id:
                $ref: '#/components/schemas/list_id'
              candidates:
                type: array
                items:
                  type: object
                  properties:
                    similarity:
                      type: number
                      minimum: 0
                      maximum: 1
                    face:
                      type: object
                      properties:
                        face_id:
                          $ref: '#/components/schemas/face_id'
                        external_id:
                          $ref: '#/components/schemas/face_external_id'
                        attribute_id:
                          allOf:
                            - $ref: '#/components/schemas/attribute_id'
                          description: attributes associated with the face.
                        user_data:
                          $ref: '#/components/schemas/face_user_data'
                        create_time:
                          allOf:
                            - $ref: "#/components/schemas/time"
                          description: time of the face creation.
        extract_result:
          description: Extract result. List of all detection and corresponding sample IDs
          type: array
          nullable: true
          items:
            type: object
            properties:
              sample_id:
                $ref: '#/components/schemas/sample_id'
              detection:
                type: object
                description: detection
                properties:
                  rect:
                    type: object
                    description: detection rectangle
                    properties:
                      x:
                        type: integer
                        description: detection rectangle x coordinate
                      y:
                        type: integer
                        description: detection rectangle y coordinate
                      width:
                        type: integer
                        description: detection rectangle width
                      height:
                        type: integer
                        description: detection rectangle height
                    required: [x, y, width, height]
                required: [rect]
            required: [sample_id]
        face_id:
          allOf:
            - $ref: '#/components/schemas/face_id'
          nullable: true
        attach_result:
          description: contains attached lists IDs.
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/list_id'
            nullable: true
        gender:
          allOf:
          - $ref: '#/components/schemas/gender'
          nullable: true
        age:
          description: Age.
          type: integer
          nullable: true
          maximum: 100
          minimum: 0
        emotion:
          allOf:
          - $ref: '#/components/schemas/emotion_enum'
          nullable: true
        ethnic_group:
          allOf:
            - $ref: '#/components/schemas/ethnicity'
          nullable: true
        tags:
          allOf:
            - $ref: '#/components/schemas/Tags'
          nullable: true
        user_data:
          $ref: '#/components/schemas/event_user_data'

    Events:
      type: array
      items:
        $ref: '#/components/schemas/Event'

    EventsWithCount:
      type: object
      properties:
        total:
          $ref: '#/components/schemas/count'
        events:
          $ref: '#/components/schemas/Events'

    getEventStats:
      type: object
      properties:
        targets:
          $ref: '#/components/schemas/targets'
        filters:
          $ref: '#/components/schemas/filters'
        period:
          $ref: '#/components/schemas/periods'
        group_by:
          $ref: '#/components/schemas/group_by'


    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]

    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]

    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

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

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

    mouth_attributes:
      description: mouth attributes.
      type: object
      properties:
        score:
          type: number
          maximum: 1
          minimum: 0
          description: mouth detection confidence.
        smile:
          type: number
          maximum: 1
          minimum: 0
          description: smile probability.
        occluded:
          type: number
          maximum: 1
          minimum: 0
          description: occlusion probability.
      required: [score, smile, occluded]

    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]

    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]

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

    gaze:
      description: gaze direction.
      type: object
      properties:
        left_eye:
          allOf:
          - $ref: '#/components/schemas/eye_gaze'
          description: left eye estimation.
        right_eye:
          allOf:
          - $ref: '#/components/schemas/eye_gaze'
          description: right eye estimation.
      required: [left_eye, right_eye]

    attributes:
      description: face attributes.
      type: object
      properties:
        mouth_attributes:
          allOf:
          - $ref: '#/components/schemas/mouth_attributes'
          description: optional mouth attributes.
        eyes_attributes:
          allOf:
          - $ref: '#/components/schemas/eyes_attributes'
          description: optional eye 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'
          description: gaze estimation.
      example:
        mouth_attributes:
          occluded: 0.0
          score: 0.999999165534973
          smile: 0.0
        emotions:
          estimations:
            anger: 0.00894705578684807
            disgust: 0.00000965219624049496
            fear: 0.00121302821207792
            happiness: 0.00129503419157118
            neutral: 0.986027479171753
            sadness: 0.00187553185969591
            surprise: 0.000632198702078313
          predominant_emotion: "neutral"
        head_pose:
          pitch: 18.6827487945557
          roll: -10.3542232513428
          yaw: 15.4102487564087
        gaze:
          left_eye:
            pitch: 9.26744079589844
            yaw: -19.4657287597656
          right_eye:
            pitch: 10.7074518203735
            yaw: -14.6733160018921

    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

    quality:
      description: |
        image quality. Estimation of image visual properties.
      type: object
      properties:
        dark:
          type: number
          description: low value means underlit face area (i.e. due to backlight, poor lighting, sensor underexposure).
          maximum: 1
          minimum: 0
        light:
          type: number
          description: low value means overexposed face area (i.e. overbright lighting, sensor overexposure).
          maximum: 1
          minimum: 0
        saturation:
          type: number
          description: low value means low saturation (e.g. grayscale images).
          maximum: 1
          minimum: 0
        blurriness:
          type: number
          description: low value means blurred image (e.g. due to depth of field or motion blur). High value means sharp image.
          maximum: 1
          minimum: 0
      required: [blurriness, saturation, light, dark]
      example:
        light: 0.87
        dark: 0.13
        saturation: 0.93
        blurriness: 0.2

    warped_image:
      type: integer
      default: 0
      enum:
      - 0
      - 1

    detector_filter:
      type: object
      properties:
        is_filtered:
          type: boolean
          description: true if sample is filtered by a threshold otherwise false.
        filter_reason:
          type: array
          description: list with an informaion why sample is filtered
          items:
            type: object
            properties:
              filter_name:
                type: string
                enum: ['pitch_threshold', 'roll_threshold', 'yaw_threshold', 'score_threshold']
                description: |
                  filter name.  Available values depend on the resource:

                    - for the "detect faces" request the following values are available: 'pitch_threshold', 'roll_threshold',
                    'yaw_threshold',

                    - for the "generate events" request all the values are available.
              object_value:
                example: 67
                type: number
                description: estimate value
              threshold_value:
                example: 40
                type: number
                description: threshold value
          required:
          - filter_name
          - object_value
          - threshold_value

    extractor_filter:
      type: object
      properties:
        is_filtered:
          type: boolean
          description: true if sample is filtered by a threshold otherwise false
        filter_reason:
          properties:
            filter_name:
              type: string
              enum: ['score_threshold']
              description: filter name
            object_value:
              example: 0.75
              type: number
              description: estimated parameter value
            threshold_value:
              example: 0.8
              type: number
              description: current threshold value
          required:
          - filter_name
          - object_value
          - threshold_value
      description: extractor filters

    FaceDetection:
      type: object
      description: face detection
      properties:
        attributes:
          allOf:
          - $ref: '#/components/schemas/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.

    FaceDetectionWithFilter:
      allOf:
        - $ref: '#/components/schemas/FaceDetection'
      properties:
        filter:
          allOf:
            - $ref: '#/components/schemas/detector_filter'
          description: filtering result

    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).
        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).
        gps:
          type: object
          description: gps tag (IFD_EXIF 0x8825).
          properties:
            latitude:
              type: string
              description: |
                GPS latitude (IFD GPS).

                Combined latitude ref (0x0001) + latitude (0x0002).
            longitude:
              type: string
              description: |
                GPS longitude (IFD GPS).

                Combined longitude ref (0x0003) + longitude (0x0004).
          required: [latitude, longitude]
      example:
        artist: "Photomaker Vadim"
        model: "Canon PX-200"
        software: "Adobe Photoshop CS5 Macintosh"

    Detections:
      type: array
      items:
        type: object
        description: face detection sample
        properties:
          sample_id:
            $ref: '#/components/schemas/sample_id'
          detection:
            $ref: '#/components/schemas/FaceDetectionWithFilter'
          url:
            type: string
            description: detection url
            format: uri-reference
            example: "/0/samples/a16c8b6c-2818-4bae-9fd5-65acc8d4bb5c"
        required:
        - detection

    Detected_images:
      type: object
      properties:
        failed_images:
          type: array
          items:
            type: object
            properties:
              error:
                $ref: '#/components/schemas/Error'
              filename:
                type: string
                example: "penelope.jpeg"
                description: |
                  source image file name (preserved only for multipart-form-data requests, otherwise "Raw Image")
            required:
            - error
            - filename
          example:
            error:
              desc: Failed to decode image data
              detail: Failed to decodeImage image data.
              error_code: 3001
            filename: n.jpg
          description: list of images which is failed processing
        succeeded_images:
          type: array
          items:
            type: object
            properties:
              samples:
                $ref: '#/components/schemas/Detections'
              filename:
                type: string
                example: "claudia.jpg"
                description: |
                  source image file name (preserved only for multipart-form-data requests, otherwise "Raw Image")
              exif:
                $ref: '#/components/schemas/exif'
            required:
            - samples
            - filename
          description: list of succeeded processing images. It doesn’t mean that anything face found
      required:
      - succeeded_images
      - failed_images

    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"

    Attribute:
      type: object
      properties:
        attribute_id:
          allOf:
            - $ref: '#/components/schemas/attribute_id'
          description: attribute ID. The value is set to null if the descriptor score is lower than the score threshold.
          nullable: true
        basic_attributes:
          type: object
          properties:
            age:
              $ref: '#/components/schemas/age'
            gender:
              $ref: '#/components/schemas/gender'
            ethnicities:
              $ref: '#/components/schemas/ethnicities'
          required: [age, gender, ethnicities]
        score:
          type: number
          minimum: 0
          maximum: 1
          description: face descriptor quality score.
        url:
          type: string
          format: uri-reference
          nullable: true
          example: /5/attributes/24d405ce-bc56-4bf7-98e1-bdc962b4cf34
          description: location of attribute. The value is set to null if the descriptor score is lower than the score threshold.
        samples:
          type: array
          items:
            $ref: '#/components/schemas/sample_id'
          example: ['a3e8716f-70dc-42ad-8428-7a552e800a37']
          description: resources for attributes.
      required: [attribute_id, url, samples]

    AttributeWithFilter:
      allOf:
        - $ref: '#/components/schemas/Attribute'
      properties:
        filter:
          $ref: '#/components/schemas/extractor_filter'
      required: [attribute_id, url, samples]

    Extracted_Attributes:
      type: array
      items:
        $ref: '#/components/schemas/AttributeWithFilter'

    Face_Reference:
      type: object
      description: face ID as reference for matching
      properties:
        type:
          enum:
          - face
          description: type of reference (face)
        id:
          $ref: '#/components/schemas/face_id'
      required:
      - id
      - type
      example:
        type: "face"
        id: "9c27cb6f-b0c6-43ea-a0e7-b21c7dbd698a"

    Event_Reference:
      type: object
      description: event ID as reference for matching
      properties:
        type:
          enum:
            - event
          description: type of reference (event)
        id:
          $ref: '#/components/schemas/event_id'
      required:
      - id
      - type

    Attribute_Reference:
      type: object
      description: attribute id as reference for matching
      properties:
        type:
          enum:
          - attribute
          description: type of reference (attribute)
        id:
          $ref: '#/components/schemas/attribute_id'
      required:
      - id
      - type

    External_Face_Reference:
      type: object
      description: external face ID as reference for matching
      properties:
        type:
          enum:
            - face_external_id
          description: type of reference (external id)
        id:
          $ref: '#/components/schemas/face_external_id'
      required:
      - id
      - type

    Match_body:
      type: object
      properties:
        candidates:
          type: object
          properties:
            type:
              type: string
              enum: ["lists", "faces"]
              description: resource candidates type. Faces or lists of faces.
            ids:
              type: array
              items:
                $ref: '#/components/schemas/list_id'
              description: list of candidate IDs.
              minItems: 1
              maxItems: 30
          required:
          - ids
          - type
          description: candidates for matching. You can specify the array of face IDs or the array of lists.

        references:
          type: array
          items:
            oneOf:
            - $ref: '#/components/schemas/Face_Reference'
            - $ref: '#/components/schemas/Event_Reference'
            - $ref: '#/components/schemas/Attribute_Reference'
            - $ref: '#/components/schemas/External_Face_Reference'

          description: |
            references for matching. Each reference is matched with all the given candidates. You can specify one or several references of one or several types.
          minItems: 1
          maxItems: 30
      required:
      - references
      - candidates

      example:
        candidates:
          type: "faces"
          ids: ["3772ea92-1198-40ea-8bae-fe912505a379", "557d54ec-29ad-4f3c-93b4-c9092ef12515"]
        references:
          - type: "attribute"
            id: "ef10bb7d-11b3-40b3-b4b0-c996a5f38150"
          - type: "attribute"
            id: "4aca35cf-a3b2-4f77-8d8b-5496a2782d37"
          - type: "face"
            id: "35229c93-85f8-44f3-ab30-3248d7051af9"
          - type: "face_external_id"
            id: "9dd0000-ff99093-1111"
          - type: "event"
            id: "5d56ff7a-be2b-497a-bb73-9099d1ba72ca"

    Candidate_Match_Result:
      type: object
      properties:
        similarity:
          type: number
          minimum: 0
          maximum: 1
        face:
          $ref: '#/components/schemas/Face'
      description: sorted list with match result for the *reference_id* and a luna list or a list of faces.
      required: [similarity, face]

    Matches:
      type: array
      items:
        type: object
        properties:
          candidates:
            type: array
            items:
              $ref: '#/components/schemas/Candidate_Match_Result'
            description: a top similar faces from a luna list or a list of faces.
          list_info:
            type: object
            description: luna list that contains candidates
            properties:
              list_id:
                allOf:
                  - $ref: '#/components/schemas/list_id'
                description: ID of the luna list that contains candidates.
              user_data:
                allOf:
                  - $ref: '#/components/schemas/list_user_data'
                example: "bad guys"
                description: |
                  user data associated with the list. Service cache this value and refresh every 5 minutes for
                  matching process acceleration
            required:
              - list_id
              - user_data
            nullable: true
        required:
        - candidates
        - list_info

    Match_result:
      type: object
      description: |
        match result. If reference count is equal to *n* and candidate list count is equal to *m*, than expected match
        match result count should be equal *mn* (success and fails).
      properties:
        succeeded_matches:
          type: array
          items:
            type: object
            properties:
              reference_id:
                type: string
                description: reference ID.
              face_id:
                allOf:
                  - $ref: '#/components/schemas/uuid4'
                description: face ID, which corresponds to the external ID set as a reference.
              matches:
                allOf:
                  - $ref: '#/components/schemas/Matches'
                description: sorted list with match result for the *reference_id*.
            required: [reference_id, matches]
          description: list of succeeded matches

        failed_matches:
          type: array
          items:
            type: object
            properties:
              reference_id:
                allOf:
                - $ref: '#/components/schemas/uuid4'
                description: reference ID.
              error:
                $ref: '#/components/schemas/Error'
          description: |
            list of failed matches.

            > **WARNING**: if some reference does not exist corresponding error will be duplicate for every
              candidates list

      example:

      - succeeded_matches:
        - reference_id: ef10bb7d-11b3-40b3-b4b0-c996a5f38150
          matches:
          - candidates:
            - similarity: 0.9
              face:
                face_id: 3772ea92-1198-40ea-8bae-fe912505a379
                external_id: 2xQ2gprbMUePw1s9gw9fvA==
                attribute_id: b668c4a5-2191-476e-a261-3b4f9ce2e25e
                user_data: some_string
                create_time: '2019-11-11T09:11:41.674Z'
                avatar: '/5/samples/92ba3457-71b5-4744-b94a-2beb37db7d94'
            list_info:
              list_id: 8591e883-b5af-4ebd-a67c-5e9d4b0c474b
              user_data: customers
        - reference_id: 4aca35cf-a3b2-4f77-8d8b-5496a2782d37
          matches:
          - candidates:
            - similarity: 0.234
              face:
                face_id: 3772ea92-1198-40ea-8bae-fe912505a379
                external_id: 2xQ2gprbMUePw1s9gw9fvA==
                attribute_id: b668c4a5-2191-476e-a261-3b4f9ce2e25e
                user_data: some_string
                create_time: '2019-11-11T09:11:41.674Z'
                avatar: '/5/samples/92ba3457-71b5-4744-b94a-2beb37db7d94'
            list_info:
              list_id: 8591e883-b5af-4ebd-a67c-5e9d4b0c474b
              user_data: customers
        - reference_id: 35229c93-85f8-44f3-ab30-3248d7051af9
          matches:
          - candidates:
            - similarity: 0.1542
              face:
                face_id: 3772ea92-1198-40ea-8bae-fe912505a379
                external_id: 2xQ2gprbMUePw1s9gw9fvA==
                attribute_id: b668c4a5-2191-476e-a261-3b4f9ce2e25e
                user_data: some_string
                create_time: '2019-11-11T09:11:41.674Z'
                avatar: '/5/samples/92ba3457-71b5-4744-b94a-2beb37db7d94'
            list_info:
              list_id: 8591e883-b5af-4ebd-a67c-5e9d4b0c474b
              user_data: customers
        - reference_id: 5d56ff7a-be2b-497a-bb73-9099d1ba72ca
          matches:
          - candidates:
            - similarity: 0.032432
              face:
                face_id: 3772ea92-1198-40ea-8bae-fe912505a379
                external_id: 2xQ2gprbMUePw1s9gw9fvA==
                attribute_id: b668c4a5-2191-476e-a261-3b4f9ce2e25e
                user_data: some_string
                create_time: '2019-11-11T09:11:41.674Z'
                avatar: '/5/samples/92ba3457-71b5-4744-b94a-2beb37db7d94'
            list_info:
              list_id: 8591e883-b5af-4ebd-a67c-5e9d4b0c474b
              user_data: customers
        - reference_id: 9dd0000-ff99093-1111
          matches:
          - candidates:
            - similarity: 0.025235
              face:
                face_id: 3772ea92-1198-40ea-8bae-fe912505a379
                external_id: 2xQ2gprbMUePw1s9gw9fvA==
                attribute_id: b668c4a5-2191-476e-a261-3b4f9ce2e25e
                user_data: some_string
                create_time: '2019-11-11T09:11:41.674Z'
                avatar: '/5/samples/92ba3457-71b5-4744-b94a-2beb37db7d94'
            list_info:
              list_id: 8591e883-b5af-4ebd-a67c-5e9d4b0c474b
              user_data: customers
          face_id: c1c5c22f-4fc9-4fb5-be31-99c7d1c7030f
        failed_matches:
        - reference_id: 557d54ec-29ad-4f3c-93b4-c9092ef12515
          error:
            error_code: 1
            detail: internal server error
            desc: internal server error
    Sample:
      type: object
      properties:
        sample_id:
          $ref: '#/components/schemas/sample_id'
        url:
          type: string
          format: uri-reference
          description: location of a new sample.
      required: [sample_id, url]
      example:
        sample_id: b5d6fd45-fcca-453d-ac05-3e594054b813
        url: /5/samples/b5d6fd45-fcca-453d-ac05-3e594054b813

    Samples:
      type: array
      items:
        $ref: '#/components/schemas/Sample'

    error_code:
      type: integer
      description: error code.

    errorId:
      type: integer
      example: 10

    errorIds:
      type: string
      format: comma-separate task ids
      minItems: 1
      example: 4,5,6

    taskStatus:
      type: integer
      enum: [0, 1, 2, 3, 4, 5]
      example: 1
      description: |
        task status

        | task status | value |
        |-----------------|---|
        | pending         | 0 |
        | in progress     | 1 |
        | cancelled       | 2 |
        | failed          | 3 |
        | collect results | 4 |
        | done            | 5 |

    subtaskStatus:
      type: integer
      enum: [0, 1, 2, 3, 4]
      example: 2

    taskCount:
      type: object
      properties:
        count:
          type: integer
          minimum: 0
          example: 152
          description: number of tasks

    errorCount:
      type: object
      properties:
        count:
          type: integer
          minimum: 0
          example: 101
          description: errors count

    taskType:
      type: integer
      enum: [0, 1, 2, 3, 4, 6, 7]
      example: 3
      description: |
        task type

        | task type     | value |
        |------------------- |---|
        | unknown            | 0 |
        | linker             | 1 |
        | clustering         | 2 |
        | report             | 3 |
        | garbage collection | 4 |
        | cross match        | 6 |
        | ROC calculation    | 7 |

    taskIds:
      type: string
      format: comma-separate task ids
      description: task IDs.
      example: 1,2,3

    task_description:
      type: string
      maxLength: 128
      description: task description
      example: "task description"

    task_content:
      anyOf:
        - $ref: '#/components/schemas/ClusteringTaskContent'
        - $ref: '#/components/schemas/LinkerTaskContent'
        - $ref: '#/components/schemas/GcAttributesTaskContent'
        - $ref: '#/components/schemas/GcDescriptorsTaskContent'
        - $ref: '#/components/schemas/ReporterTaskContent'
        - $ref: '#/components/schemas/CrossMatchTaskContent'
        - $ref: '#/components/schemas/ROCTaskContent'

    subtask_content:
      type: object
      description: content of subtask
      example: content

    error_description:
      type: string
      description: error description
      example: Faces not found

    error_detail:
      type: string
      description: error detail
      example: One or more faces not found, including face with id '8f4f0070-c464-460b-bf78-fac225df72e9'

    errors_additional_info:
      type: string
      description: additional error info
      example: 8f4f0070-c464-460b-bf78-fac225df72e9

    tasks_objects_type:
      type: string
      description: objects type - faces or events
      enum: ["faces", "events"]

    count_task_parts_done:
      type: integer
      minimum: 0
      description: count of task finished parts
      example: 10

    count_task_parts_all:
      type: integer
      minimum: 1
      description: count of task parts
      example: 100

    status_code:
      type: integer
      minimum: 400
      maximum: 599
      description: error status code
      example: 500

    task_id:
      type: integer
      minimum: 1
      description: task id
      example: 123

    subtask_id:
      type: integer
      minimum: 1
      description: subtask id
      example: 5

    Task:
      type: object
      properties:
        task_id:
          $ref: '#/components/schemas/task_id'
        create_time:
          allOf:
            - $ref: '#/components/schemas/time'
          description: task create time
        end_time:
          allOf:
            - $ref: '#/components/schemas/time'
          description: task end time
          nullable: true
        last_update_time:
          allOf:
            - $ref: '#/components/schemas/time'
          description: task last update time
        task_type:
          $ref: '#/components/schemas/taskType'
        task_status:
          $ref: '#/components/schemas/taskStatus'
        result_id:
          allOf:
            - $ref: '#/components/schemas/result_id'
          nullable: true
        count_task_parts_done:
          $ref: '#/components/schemas/count_task_parts_done'
        count_task_parts_all:
          $ref: '#/components/schemas/count_task_parts_all'
        content:
          $ref: '#/components/schemas/task_content'
        description:
          allOf:
            - $ref: '#/components/schemas/task_description'
          nullable: true
      required: [task_id, create_time, last_update_time, task_type, task_status, count_task_parts_done,
                 count_task_parts_all, content, result_id, end_time, description]

    Tasks:
      description: tasks
      properties:
        tasks:
          type: array
          items:
            $ref: '#/components/schemas/Task'
          minItems: 0
      required: [tasks]

    SubTask:
      type: object
      properties:
        subtask_id:
          $ref: '#/components/schemas/subtask_id'
        task_id:
          $ref: '#/components/schemas/task_id'
        result_id:
          allOf:
            - $ref: '#/components/schemas/result_id'
          nullable: true
        create_time:
          allOf:
          - $ref: '#/components/schemas/time'
          description: subtask create time
        end_time:
          allOf:
            - $ref: '#/components/schemas/time'
          description: subtask end time
        subtask_status:
          $ref: '#/components/schemas/subtaskStatus'
        content:
          $ref: '#/components/schemas/subtask_content'
      required: [subtask_id, task_id, create_time, subtask_status, content, result_id]

    SubTasks:
      type: array
      items:
        $ref: '#/components/schemas/SubTask'
      minItems: 1

    TaskError:
      type: object
      properties:
        error_id:
          $ref: '#/components/schemas/errorId'
        task_id:
          $ref: '#/components/schemas/task_id'
        subtask_id:
          allOf:
            - $ref: '#/components/schemas/subtask_id'
          nullable: true
        error_code:
          $ref: '#/components/schemas/error_code'
        description:
          $ref: '#/components/schemas/error_description'
        detail:
          $ref: '#/components/schemas/error_detail'
        additional_info:
          allOf:
            - $ref: '#/components/schemas/errors_additional_info'
          nullable: true
        error_time:
          allOf:
          - $ref: '#/components/schemas/time'
          description: error time
      required: [error_id, task_id, subtask_id, error_code, description, detail, error_time, additional_info]

    TaskErrorsArray:
      type: array
      items:
        $ref: '#/components/schemas/TaskError'
      minItems: 0
      maxItems: 100000
      description: array of errors occurred while task processing

    TaskErrors:
      description: task errors
      type: object
      properties:
        errors:
          $ref: '#/components/schemas/TaskErrorsArray'
      required: [errors]

    task_face_filters_no_account:
      description: faces filters mapping
      type: object
      properties:
        create_time__gte:
          allOf:
            - $ref: '#/components/schemas/time'
          description: lower bound for faces create time
        create_time__lt:
          allOf:
            - $ref: '#/components/schemas/time'
          description: upper bound for faces create time.
        list_id:
          allOf:
            - $ref: '#/components/schemas/uuid4'
          description: list ID filter. Only the faces linked to the specified list will be processed.

    task_event_filters_no_account:
      type: object
      properties:
        create_time__gte:
          allOf:
            - $ref: '#/components/schemas/time'
          description: lower bound for events create time.
        create_time__lt:
          allOf:
            - $ref: '#/components/schemas/time'
          description: upper bound for events create time.
        sources:
          description: sources. Each event from result will contain one of the given sources.
          type: array
          items:
            type: string
        event_ids:
          description: events IDs
          type: array
          items:
            $ref: '#/components/schemas/event_id'
        handler_ids:
          description: handler IDs. Each event from the result will contain one of the given handlers.
          type: array
          items:
            $ref: '#/components/schemas/handler_id'
        top_similar_face_list:
          allOf:
            - $ref: '#/components/schemas/uuid4'
          description: list ID with the most similar face
        top_similar_face_ids:
          description: IDs of the most similar faces
          type: array
          items:
            $ref: '#/components/schemas/face_id'
        top_similar_face_similarity__gte:
          allOf:
          - $ref: '#/components/schemas/double01'
          description: the lower including boundary of the most similar face similarity
        top_similar_face_similarity__lt:
          allOf:
          - $ref: '#/components/schemas/double01'
          description: the upper excluding boundary of the most similar face similarity
        age__lt:
          allOf:
          - $ref: '#/components/schemas/age'
          description: age upper excluded bound.
        age__gte:
          allOf:
          - $ref: '#/components/schemas/age'
          description: age lower included bound.
        gender:
          $ref: '#/components/schemas/gender'
        emotions:
          $ref: '#/components/schemas/emotions_map'
        ethnic_groups:
          $ref: '#/components/schemas/ethnicities_enum'
        face_ids:
          description: created face IDs
          type: array
          items:
            allOf:
            - $ref: '#/components/schemas/face_id'
        user_data:
          $ref: '#/components/schemas/event_user_data'
        tags:
          description: list of tags. Each event from result will contain all of the given tags.
          type: array
          items:
            $ref: '#/components/schemas/tag'

    LinkerTaskContent:
      type: object
      description: linker task content
      properties:
        create_list:
          description: |
            create list to link faces to. If set to 1, a new list is created.

            If set to 0, you must specify the existing list ID in the list_id field
          type: integer
          enum: [0, 1]
          example: 1
        list_id:
          allOf:
            - $ref: '#/components/schemas/uuid4'
          description: |
            ID of the list to link faces to. It there is no list with the specified ID, the list is created.

            If create_list is set to 1, the `list_id` field must be deleted from the request body.
        user_data:
          allOf:
            - $ref: '#/components/schemas/list_user_data'
          description: user data to create the list with. It is only used if create_list is set to 1
        objects_type:
          $ref: '#/components/schemas/tasks_objects_type'
        filters:
          anyOf:
            - $ref: '#/components/schemas/task_face_filters_no_account'
            - $ref: '#/components/schemas/task_event_filters_no_account'
      required: [objects_type]

    LinkerTask:
      type: object
      properties:
        description:
          type: string
          description: provided user data for current task
          example: linker task one
        content:
          $ref: '#/components/schemas/LinkerTaskContent'
      required: [objects_type, content]

    GcAttributesTaskContent:
      description: garbage collection task content
      type: object
      properties:
        target:
          type: string
          enum: ['attributes']
        filters:
          type: object
          description: attributes' filter garbage collection
          properties:
            create_time__lt:
              allOf:
                - $ref: '#/components/schemas/time'
              description: create time upper excluding boundary
            account_id:
              $ref: '#/components/schemas/account_id'
      required: [target]

    GcDescriptorsTaskContent:
      description: garbage collecting task content to delete descriptors by version
      type: object
      properties:
        target:
          type: string
          enum: ['descriptors']
        filters:
          type: object
          properties:
            descriptor_version:
              description: version of descriptors to delete
              type: integer
            account_id:
              $ref: '#/components/schemas/account_id'
          required: [descriptor_version]
      required: [target]

    GcTask:
      type: object
      properties:
        description:
          type: string
          description: provided user data for current task
          example: gc task one
          default:
        content:
          allOf:
            - $ref: '#/components/schemas/GcAttributesTaskContent'
          description: garbage collection task content, target "attributes" is to remove unattached attributes
      required: [content]

    ClusteringTaskContent:
      type: object
      description: clustering task content
      properties:
        objects_type:
          $ref: '#/components/schemas/tasks_objects_type'
        filters:
          anyOf:
            - $ref: '#/components/schemas/task_face_filters_no_account'
            - $ref: '#/components/schemas/task_event_filters_no_account'
        threshold:
          description: The minimum acceptable degree of similarity. If the similarity of two descriptors exceeds the specified value, it is considered that they belong to the same person. In this case, both descriptors are added to the same cluster.
          type: number
          maximum: 1
          minimum: 0
          example: 0.5
          default: 0.81
      required: [objects_type]

    ClusteringTask:
      type: object
      properties:
        description:
          type: string
          description: provided user data for current task
          example: clustering faces
        content:
          allOf:
          - $ref: '#/components/schemas/ClusteringTaskContent'
      required: [content]

    GCTaskResult:
      description: Garbage collection task result
      type: object
      properties:
        result:
          description: removed attributes
          type: array
          items:
            description: removed attribute
            type: object
            properties:
              attributes_id:
                description: removed attribute id
                allOf:
                - $ref: '#/components/schemas/attribute_id'
              samples:
                description: samples of the removed attribute
                type: array
                items:
                  description: sample of the removed attribute
                  allOf:
                  - $ref: '#/components/schemas/sample_id'
            required: [attributes_id, samples]
        errors:
          description: errors occurred during the task processing.
          allOf:
          - $ref: '#/components/schemas/TaskErrorsArray'
      required: [errors]

    LinkerTaskResult:
      description: Linking task result
      type: object
      properties:
        errors:
          allOf:
            - $ref: '#/components/schemas/TaskErrorsArray'
          description: errors occurred during the task processing.
        result:
          type: object
          description: linked faces' IDs
          properties:
            list_id:
              $ref: '#/components/schemas/list_id'
            face_ids:
              description: linked faces' IDs
              type: array
              items:
                allOf:
                  - $ref: '#/components/schemas/face_id'
                description: linked face id
          required: [list_id, face_ids]
      required: [errors]

    ClusteringTaskResult:
      description: Clustering task result
      type: object
      properties:
        result:
          description: clustering result
          type: object
          properties:
            clusters:
              description: generated clusters - lists of objects IDs
              type: array
              items:
                description: single cluster - list of objects' IDs
                type: array
                example: ["bf749384-0e30-4b8a-a884-dfdfcafd0a55", "0a2ce15b-a6f7-4713-97ce-64410f55031a", "60bacd78-64a3-4206-9434-bc94c73ff2c1", "cd7bae5a-8144-47e8-8d75-928ed8dc576b", "b20ebff6-1973-40b2-a190-b72ff1ef8927"]
                items:
                  description: object id
                  allOf:
                  - $ref: '#/components/schemas/uuid4'
            total_objects:
              type: integer
              description: total objects count
              example: 5
            total_clusters:
              type: integer
              description: total clusters count
              example: 1
        errors:
          description: errors occurred during the task processing.
          allOf:
          - $ref: '#/components/schemas/TaskErrorsArray'
      required: [errors]

    ReporterTaskContent:
      type: object
      description: reporter task content
      properties:
        filters:
          type: object
          description: reporter task objects' filters
          properties:
            account_id:
              $ref: '#/components/schemas/account_id'
            task_id:
              type: integer
              description: id of task
              example: 146
          required: [task_id]
        columns:
          anyOf:
            - type: array
              items:
                type: string
                description: |
                  Event columns.

                  The default columns are: `"create_time", "external_id", "handler_id", "attribute_id", "source", "top_similar_face_id", "top_similar_face_list", "top_similar_face_similarity", "face_id", "gender", "age", "emotion", "ethnic_group", "user_data"`
                enum: [ "create_time", "external_id", "handler_id", "attribute_id", "source",
                        "top_similar_face_id", "top_similar_face_list", "top_similar_face_similarity",
                        "match_result", "extract_result", "face_id", "attach_result", "gender", "age", "emotion",
                        "ethnic_group", "tags", "user_data" ]
            - type: array
              items:
                type: string
                description: |
                  Face columns.

                  The default columns are: `"user_data", "create_time", "external_id", "attribute_id", "avatar", "event_id"`
                enum: [ "user_data", "create_time", "lists", "external_id", "attribute_id", "avatar", "event_id" ]
        csv_delimiter:
          default: ','
          type: string
          description: CSV delimiter
          maxLength: 1
          minLength: 1
          example: '$'
        save_images:
          default: 0
          type: integer
          enum: [0, 1]
          description: "Whether to save object images. If set, images for each object will be loaded: first sample for an event, avatar for face. Image will be ignored if not available."
          example: 1
      required: [filters]

    ReporterTask:
      type: object
      properties:
        description:
          type: string
          description: provided user data for the current task
          example: report clustering events from cam1
        content:
          $ref: '#/components/schemas/ReporterTaskContent'
      required: [content]

    AttributesFilters:
      description: attributes filters
      type: object

    DetectOrEmitEventJsonRequestBodyUrls:
      type: object
      properties:
        urls:
          $ref: '#/components/schemas/ListOfUrlsWithImages'
      required: [urls]

    DetectOrEmitEventJsonRequestBodySamples:
      type: object
      properties:
        samples:
          type: array
          items:
            allOf:
            - $ref: '#/components/schemas/sample_id'
          minItems: 1
          maxItems: 8
          description: list of sample IDs
          example:
          - "c724fea1-d1bb-44c5-af6d-9833d22f3eb7"
          - "f78c6156-3946-4767-be65-4748f25aefd4"
      required: [samples]

    DetectOrEmitEventJsonRequestBody:
      oneOf:
      - $ref: '#/components/schemas/DetectOrEmitEventJsonRequestBodyUrls'
      - $ref: '#/components/schemas/DetectOrEmitEventJsonRequestBodySamples'

    CrossMatchTaskReferenceFilters:
      description: Object filters for references.
      anyOf:
        - $ref: '#/components/schemas/task_face_filters_no_account'
        - $ref: '#/components/schemas/task_event_filters_no_account'

    CrossMatchTaskCandidateFilters:
      description: Object filters for candidates.
      anyOf:
        - $ref: '#/components/schemas/task_face_filters_no_account'
        - $ref: '#/components/schemas/task_event_filters_no_account'

    CrossMatchTaskContent:
      type: object
      description: cross match task content
      properties:
        filters:
          description: Task objects' filters.
          type: object
          properties:
            account_id:
              $ref: '#/components/schemas/account_id'
            reference_type:
              $ref: '#/components/schemas/tasks_objects_type'
            candidate_type:
              $ref: '#/components/schemas/tasks_objects_type'
            reference_filters:
              $ref: '#/components/schemas/CrossMatchTaskReferenceFilters'
            candidate_filters:
              $ref: '#/components/schemas/CrossMatchTaskCandidateFilters'
          required: [reference_type, candidate_type, reference_filters, candidate_filters]
          example:
            reference_type: events
            candidate_type: faces
            reference_filters:
              gender: 1
              sources: "Main_hall_camera"
            candidate_filters:
              create_time__gte: "2018-02-11T09:11:41.674Z"
              create_time__lt: "2020-02-12T09:11:41.674Z"
              list_id: "557d54ec-29ad-4f3c-93b4-c9092ef12515"
        threshold:
          description: The minimum acceptable degree of similarity. If the similarity of two descriptors is lower then the specified value, the matching result will be ignored. References with all filtered matches also will be ignored.
          type: number
          maximum: 1
          minimum: 0
          example: 0.5
          default: 0.0
        limit:
          description: Maximum number of matching candidates returned for every match.
          type: integer
          minimum: 1
          example: 3
          default: 5
      required: [filters]

    CrossMatchTask:
      type: object
      properties:
        description:
          type: string
          description: provided user data for current task
          example: matching visitors with the list of VIP customers
        content:
          $ref: '#/components/schemas/CrossMatchTaskContent'
      required: [content]

    CrossMatchTaskResult:
      description: Cross Match task result
      type: object
      properties:
        result:
          description: task result
          type: array
          items:
            type: object
            properties:
              reference_id:
                allOf:
                  - $ref: '#/components/schemas/uuid4'
                description: reference ID. The ID corresponds to the specified reference type. The reference type is specified in the `reference_type` field on the `filters` section of the "cross-matching tasks" request.
              candidates:
                description: match candidates for the reference
                type: array
                items:
                  type: object
                  description: match with a candidate
                  properties:
                    candidate_id:
                      allOf:
                        - $ref: '#/components/schemas/uuid4'
                      description: candidate id (see candidate_type field in CrossMatchTask filters)
                    similarity:
                      description: similarity for the reference - candidate pair.
                      type: number
                      minimum: 0
                      maximum: 1
                  required: [candidate_id, similarity]
                minItems: 1
            required: [reference_id, candidates]
          example:
            - reference_id: e99d42df-6859-4ab7-98d4-dafd18f47f30
              candidates:
                - candidate_id: 93de0ea1-0d21-4b67-8f3f-d871c159b740
                  similarity: 0.548252
                - candidate_id: 54860fc6-c726-4521-9c7f-3fa354983e02
                  similarity: 0.62344
            - reference_id: 345af6e3-625b-4f09-a54c-3be4c834780d
              candidates:
                - candidate_id: 6ade1494-1138-49ac-bfd3-29e9f5027240
                  similarity: 0.7123213
                - candidate_id: e0e3c474-9099-4fad-ac61-d892cd6688bf
                  similarity: 0.9543
        errors:
          description: errors occurred during the task processing.
          allOf:
          - $ref: '#/components/schemas/TaskErrorsArray'
      required: [errors]

    ROCTaskContent:
      type: object
      description: roc task content.
      properties:
        markup:
          description: markup of face IDs to labels (group IDs).
          type: array
          minItems: 2
          items:
            type: object
            properties:
              face_id:
                $ref: '#/components/schemas/face_id'
              label:
                type: integer
                description: face label (group id)
                example: 12
            required: [ face_id, label ]
        filters:
          type: object
          properties:
            account_id:
              $ref: '#/components/schemas/account_id'
        threshold_hit_top:
          allOf:
            - $ref: '#/components/schemas/double01'
          description: similarity threshold to calculate hit into the top-N.
          default: 0
        limit:
          description: maximum candidates count for every match.
          type: integer
          minimum: 1
          example: 100
          default: 5
        key_FPRs:
          description: roc-curve key FPR values
          type: array
          items:
            $ref: '#/components/schemas/double01'
          example: [ 0.000001, 0.001 ]
      required: [ markup, filters ]

    ROCTask:
      type: object
      properties:
        description:
          description: provided user data for current task.
          type: string
          example: matching famous people with customers
        content:
          $ref: '#/components/schemas/ROCTaskContent'
      required: [content]

    ROCpoints:
      type: object
      properties:
        FPR:
          allOf:
            - $ref: '#/components/schemas/double01'
          description: false positive rate.
        TPR:
          allOf:
            - $ref: '#/components/schemas/double01'
          description: true positive rate.
        similarity:
          allOf:
            - $ref: '#/components/schemas/double01'
          description: similarity threshold.
      required: [FPR, TPR, similarity]

    ROCTaskResult:
      description: roc task result.
      type: object
      properties:
        result:
          description: roc-curve calculation result.
          type: object
          properties:
            roc:
              type: array
              items:
                $ref: '#/components/schemas/ROCpoints'
              description: roc-curve points.
              example:
                - FPR: 0.1
                  TPR: 0.95
                  similarity: 0.9
                - FPR: 0.15
                  TPR: 0.96
                  similarity: 0.8
            hit_top_probability:
              type: object
              description: propability of hit into the top.
              properties:
                top-1:
                  allOf:
                    - $ref: '#/components/schemas/double01'
                  nullable: true
                  description: propability of hit into the top-1.
                top-2:
                  allOf:
                    - $ref: '#/components/schemas/double01'
                  description: propability of hit into the top-2.
                  nullable: true
                top-3:
                  allOf:
                    - $ref: '#/components/schemas/double01'
                  description: propability of hit into the top-3.
                  nullable: true
                top-4:
                  allOf:
                    - $ref: '#/components/schemas/double01'
                  description: propability of hit into the top-4.
                  nullable: true
                top-5:
                  allOf:
                    - $ref: '#/components/schemas/double01'
                  description: propability of hit into the top-5.
                  nullable: true
              required: [top-1, top-2, top-3, top-4, top-5]
              example:
                top-1: 0.995
                top-2: 0.997
                top-3: 0.999
                top-4: 0.999
                top-5: 0.999
            auc:
              allOf:
                - $ref: '#/components/schemas/double01'
              description: area under the roc-curve.
              example: 0.99
            type_I_and_II_error_rates_equal_point:
              allOf:
                - $ref: '#/components/schemas/ROCpoints'
              description: ROC-curve point where type I error rate (1 - TPR) and type II error rate (FPR) are equal, i.e. intersection point of the ROC-curve and the secondary main diagonal.
              example:
                FPR: 0.15
                TPR: 0.85
                similarity: 0.8
              nullable: true
            key_points:
              type: array
              items:
                $ref: '#/components/schemas/ROCpoints'
              description: roc-curve points.
              example:
                - FPR: 0.000001
                  TPR: 0.95
                  similarity: 0.9
                - FPR: 0.001
                  TPR: 0.96
                  similarity: 0.8
              nullable: true
          required: [roc, hit_top_probability, auc, type_I_and_II_error_rates_equal_point, key_points]
        errors:
          $ref: '#/components/schemas/TaskErrorsArray'
      required: [errors]

    ListOfUrlsWithImages:
      type: array
      items:
        type: string
        format: uri-reference
      minItems: 1
      maxItems: 8
      description: list of urls with images
      example:
      - "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c4/Abbey_Lee_2015.jpg/800px-Abbey_Lee_2015.jpg"
      - "https://upload.wikimedia.org/wikipedia/commons/thumb/2/2d/Yfke-sturm-1326186044.jpg/800px-Yfke-sturm-1326186044.jpg"

    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")

    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")

    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

    LivenessMeta:
      type: object
      required: [OS]
      properties:
        OS:
          type: string
          enum: ["IOS", "ANDROID", "DESKTOP", "UNKNOWN"]
          description: device OS.
        MANUFACTURE:
          type: string
          description: device manufacturer.
        MODEL:
          type: string
          description: device model.
      description: |
          Device information. This information can significantly decrease the overall error rate.

          The "meta" object is not mandatory. If you are not sure about any of the parameters, set "UNKNOWN" value or don't pass meta.

          > The specified meta is applied to all the images within the request.

    liveness_response:
      type: object
      properties:
        failed_images:
          type: array
          description: list of images which is failed processing
          items:
            type: object
            properties:
              error:
                allOf:
                  - $ref: '#/components/schemas/Error'
                description: errors occurred during the liveness processing
              filename:
                type: string
                example: "penelope.jpeg"
                description: |
                  source image file name (preserved only for multipart-form-data requests, otherwise "Raw Image")
            required: [error, filename]
          example:
            error:
              desc: Failed to decode image data
              detail: Failed to decodeImage image data.
              error_code: 3001
            filename: n.jpg
        succeeded_images:
          type: array
          items:
            type: object
            description: list of images which is succeeded processing
            properties:
              filename:
                type: string
                example: "claudia.jpg"
                description: |
                  source image file name (preserved only for multipart-form-data requests, otherwise "Raw Image")
              prediction:
                type: object
                description: liveness prediction result
                properties:
                  probability:
                    type: number
                    maximum: 1
                    minimum: 0
                    description: |
                      The parameter shows the probability of a live person being present in the
                      image, i.e. it is not a presentation attack.

                      In general, the estimated probability must exceed the theoretical
                      threshold of 50%. The value may be increased according to your business rules.
                    example: 0.99
                  quality:
                    type: number
                    maximum: 1
                    minimum: 0
                    description: |
                      The parameter describes the integral value of image, facial,
                      and environmental characteristics. In general, the estimated quality must exceed
                      the theoretical threshold of 50%. The threshold may be increased according to
                      the photo shooting conditions.
                    example: 1.0
                required: [probability, quality]
            required: [filename, prediction]
      required: [succeeded_images, failed_images]

    Message_from_ws:
      type: object
      properties:
        event:
          type: object
          description: event format from handler.
          properties:
            samples:
              type: array
              minItems: 1
              description: list of samples assoсiated with the event.
              items:
                $ref: '#/components/schemas/sample_id'
            attributes:
              allOf:
                - $ref: '#/components/schemas/Attribute'
              description: extracted attributes from samples.
            source:
              type: string
              description: additional information that user provides with event.
              nullable: true
              example: "3rd Avenue"
            user_data:
              $ref: '#/components/schemas/event_user_data'
            tags:
              description: tag array.
              type: array
              items:
                $ref: '#/components/schemas/tag'
              example: ['tag1', 'tag2']
              nullable: true
            face:
              type: object
              description: face associated with event
              nullable: true
              properties:
                face_id:
                  $ref: '#/components/schemas/face_id'
                external_id:
                  $ref: '#/components/schemas/face_external_id'
                user_data:
                  $ref: '#/components/schemas/face_user_data'
                avatar:
                  allOf:
                    - $ref: '#/components/schemas/avatar'
                  nullable: true
                lists:
                  type: array
                  items:
                    $ref: '#/components/schemas/list_id'
                  description: list of luna lists, which contain the face.
                event_id:
                  allOf:
                    - $ref: '#/components/schemas/event_id'
                  description: the event ID associated with the face creation.
                url:
                  type: string
                  description: face url
              required: [face_id, external_id, user_data, avatar, lists, event_id, url]
              example:
                face_id: 426542d6-5509-4e5b-8a01-e2abd5c0a8c6
                external_id: 2xQ2gprbMUePw1s9gw9fvA==
                user_data: fox1991
                lists: ["429b0e78-4616-426a-b57f-02baa72d638d", '6d037c33-31ec-4d73-b3b3-ec80b09446c2']
                avatar: 'https://st.kp.yandex.net/images/actor_iphone/iphone360_460188.jpg'
                event_id: f9687459-986b-406d-9c1f-0d6289be5256

            event_id:
              $ref: '#/components/schemas/event_id'
            url:
              type: string
              format: uri-reference
              example: /0/events/24d405ce-bc56-4bf7-98e1-bdc962b4cf34
              description: location of event.
            matches:
              allOf:
                - $ref: '#/components/schemas/Matches'
              description: sorted list with match result for the event.
              nullable: true
            external_id:
              $ref: '#/components/schemas/event_external_id'
            detections:
              type: array
              description: all detecticions which was generat the event.
              items:
                type: object
                properties:
                  filename:
                    type: string
                    description: face detection filename
                    example: "penelope.jpeg"
                  sample:
                    type: object
                    description: detection sample
                    properties:
                      url:
                        type: string
                        format: uri-reference
                        description: location of face.
                      detection:
                        allOf:
                          - $ref: '#/components/schemas/FaceDetection'
                        required: [landmarks5, rect]
                      sample_id:
                        $ref: '#/components/schemas/sample_id'
                    required: [url, detection, sample_id]
                required: [filename, sample]
          required: [matches, url, event_id, face, tags, source, attributes, samples, detections, user_data, external_id]
        handler_id:
          allOf:
            - $ref: '#/components/schemas/uuid4'
          description: id of the handler, which has produced the event.
        event-time:
          description: event time
          type: string
          format: date-time
        Luna-Request-id:
          type: string
          example: "1536751345,8b8b5937-2e9c-4e8b-a7a7-5caf86621b5a"
          pattern: "^[0-9]{10},[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$"
          description: id of the request, which gave birth to the event.
      required: [event, handler_id, event-time, Luna-Request-id]
      description: example message that will be send by websocket

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

    tag:
      type: string
      example: "good"
      maxLength: 36

    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:
            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: api
            error:
              error_code: 10017
              desc: Health check error
              detail: Timed out
            status: 0
          - component: faces
            error:
              error_code: 0
              desc: Success
              detail: Success
            status: 1
          - component: sender
            error:
              error_code: 0
              desc: Success
              detail: Success
            status: 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'
        Access-Control-Allow-Origin:
          $ref: '#/components/headers/access_control_allow_origin'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'

    forbidden_error_backport:
      description: forbidden, access to this resouce is denied.
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
        Access-Control-Allow-Origin:
          $ref: '#/components/headers/access_control_allow_origin'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error_code: 12042
            desc: Gone
            detail: Access to this resource on the server is no longer available

    forbidden_error:
      description: forbidden, user did not set header Luna-Account-Id.
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
        Access-Control-Allow-Origin:
          $ref: '#/components/headers/access_control_allow_origin'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error_code: 11036
            desc: Forbidden
            detail: Luna-Account-Id header is required for requests that change the state of system

    forbidden_events_error:
      description: forbidden, luna-events support is disabled on server
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
        Access-Control-Allow-Origin:
          $ref: '#/components/headers/access_control_allow_origin'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error_code: 11040
            desc: Forbidden
            detail: Luna Events service is disabled

    forbidden_tasks_error:
      description: forbidden, luna-tasks support is disabled on server
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
        Access-Control-Allow-Origin:
          $ref: '#/components/headers/access_control_allow_origin'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error_code: 11039
            desc: Forbidden
            detail: Luna Tasks service is disabled

    forbidden_sender_error:
      description: forbidden, luna-sender support is disabled on server
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
        Access-Control-Allow-Origin:
          $ref: '#/components/headers/access_control_allow_origin'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error_code: 35001
            desc: Forbidden
            detail: Luna Sender service is disabled
paths:
  /version:
    parameters:
      - $ref: '#/components/parameters/cors_origin'

    get:
      tags:
      - version

      summary: get version
      description: get versions of services
      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'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                type: object
                properties:
                  luna-api:
                    $ref: '#/components/schemas/version'
                  luna-faces:
                    $ref: '#/components/schemas/version'
                  luna-image-store-faces-samples:
                    $ref: '#/components/schemas/version'
                  luna-image-store-bodies-samples:
                    $ref: '#/components/schemas/version'
                  luna-image-store-images:
                    $ref: '#/components/schemas/version'
                  luna-handlers:
                    $ref: '#/components/schemas/version'
                  luna-python-matcher:
                    $ref: '#/components/schemas/version'
                  luna-matcher-proxy:
                    $ref: '#/components/schemas/version'
                  luna-events:
                    $ref: '#/components/schemas/version'
                  LUNA PLATFORM:
                    $ref: '#/components/schemas/base_version_schema'
                  luna-tasks:
                    $ref: '#/components/schemas/version'
                  luna-backport4:
                    $ref: '#/components/schemas/version'
                required:
                  - luna-api
                  - luna-faces
                  - luna-image-store-faces-samples
                  - luna-image-store-bodies-samples
                  - luna-image-store-images
                  - luna-handlers
                  - LUNA PLATFORM
                  - luna-backport4
              example:
                luna-api: 
                  api: 6
                  major: 3
                  minor: 1
                  patch: 2
                luna-faces: 
                  api: 2
                  major: 2
                  minor: 3
                  patch: 9
                luna-image-store-faces-samples:
                  api: 1
                  major: 2
                  minor: 1
                  patch: 11
                luna-image-store-bodies-samples:
                  api: 1
                  major: 2
                  minor: 1
                  patch: 11
                luna-image-store-images:
                  api: 1
                  major: 2
                  minor: 1
                  patch: 11
                LUNA PLATFORM: 
                  major: 0
                  minor: 0
                  patch: 0
                luna-handlers:
                  api: 1
                  major: 1
                  minor: 2
                  patch: 5
                luna-events: 
                  api: 1
                  major: 1
                  minor: 0
                  patch: 5
                luna-matcher-proxy:
                  api: 1
                  major: 1
                  minor: 2
                  patch: 7
                luna-tasks: 
                  api: 1
                  major: 1
                  minor: 0
                  patch: 13
                luna-backport4:
                  api: 5
                  major: 1
                  minor: 2
                  patch: 3
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - version

      summary: version options
      description: get options for the resource
      operationId: getVersionOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/detector:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    post:
      tags: [samples]
      summary: detect faces
      description: |
        Detect faces in input images.

        The request enables you to detect faces in input images, create samples, and estimate face properties.

        You can specify thresholds for the head angles. If a head angle exceeds the specified threshold the image is not processed.

        > The estimated face properties are not saved to the Faces database. They are only returned in the response.
      operationId: detectFaces
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      - $ref: '#/components/parameters/multiple_images_content_type'
      - $ref: '#/components/parameters/estimate_head_pose'
      - $ref: '#/components/parameters/estimate_emotions'
      - $ref: '#/components/parameters/detect_landmarks68'
      - $ref: '#/components/parameters/extract_exif'
      - $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/pitch_threshold'
      - $ref: '#/components/parameters/roll_threshold'
      - $ref: '#/components/parameters/yaw_threshold'
      - $ref: '#/components/parameters/warped_image'

      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: base64
          image/x-png-base64:
            schema:
              type: string
              format: base64
          image/x-bmp-base64:
            schema:
              type: string
              format: base64
          image/x-tiff-base64:
            schema:
              type: string
              format: base64
          image/x-portable-pixmap-base64:
            schema:
              type: string
              format: base64
          multipart/form-data:
            schema:
              type: object
              properties:
                filename:
                  oneOf:
                    - type: array
                      items:
                        anyOf:
                        - type: string
                          format: binary
                        - type: string
                          format: base64
                    - type: string
                      format: binary
                    - type: string
                      format: base64
            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/DetectOrEmitEventJsonRequestBody'
        required: true
      responses:
        201:
          description: Created
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Detected_images'
        400:
          description: Bad request
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          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'
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                bad_conten_type_download_image:
                  value:
                    error_code: 11028
                    desc: Bad/incomplete input data
                    detail: 'Bad content type of image ''https://www.google.ru'''
                bad_conten_type_multepart:
                  value:
                    error_code: 11029
                    desc: Bad/incomplete input data
                    detail: Bad content type of image in multipart body
                failed_load_image:
                  value:
                    error_code: 11027
                    desc: External request failed
                    detail: 'Failed  to download image by url ''https://www.gooogle.ru'''
                boundary_missed_multipart:
                  value:
                    error_code: 11049
                    desc: Bad/incomplete input data
                    detail: "Failed to read multipart: boundary missed for Content-Type: multipart/form-data"
        403:
          $ref: '#/components/responses/forbidden_error'
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - samples

      summary: detector options
      description: get options for the resource
      operationId: geteDetectorOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/samples:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    post:
      tags: [samples]
      summary: save sample
      description: |
        Save sample to the storage.        
      operationId: saveSample
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/required_luna_account_id'
      - in: header
        name: Content-Type

        schema:
          type: string
          enum: [image/jpeg, image/png, image/bmp, image/tiff, image/gif, image/x-portable-pixmap]

      requestBody:
        content:
          image/jpeg:
            schema:
              $ref: '#/components/schemas/image_binary'
          image/png:
            schema:
              $ref: '#/components/schemas/image_binary'
          image/bmp:
            schema:
              $ref: '#/components/schemas/image_binary'
          image/tiff:
            schema:
              $ref: '#/components/schemas/image_binary'
          image/gif:
            schema:
              $ref: '#/components/schemas/image_binary'
          image/x-portable-pixmap:
            schema:
              $ref: '#/components/schemas/image_binary'
        required: true
      responses:
        201:
          description: created.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Location:
              schema:
                type: string
                pattern: ^/5/samples/[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$
              required: true
              description: sample location.
              example: /5/samples/b5d6fd45-fcca-453d-ac05-3e594054b813
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Sample'
              example:
                sample_id: b5d6fd45-fcca-453d-ac05-3e594054b813
                url: /5/samples/b5d6fd45-fcca-453d-ac05-3e594054b813
        400:
          description: bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          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
                bad_size:
                  value:
                    error_code: 11030
                    desc: Bad/incomplete input data
                    detail: Image size is not equal 250x250
        403:
          $ref: '#/components/responses/forbidden_error'
        500:
          $ref: '#/components/responses/forbidden_error'

    options:
      tags:
      - samples

      summary: samples options
      description: get options for the resource
      operationId: getSmplesOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/samples/{sample_id}:
    parameters:
    - in: path
      name: sample_id
      schema:
        $ref: '#/components/schemas/uuid4'
      required: true
    - $ref: '#/components/parameters/cors_origin'

    get:
      tags:
      - samples
      summary: get sample
      description: Get sample by ID.
      operationId: getSample
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'

      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/image_content_type'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            image/jpeg:
              schema:
                $ref: '#/components/schemas/image_binary'
            image/png:
              schema:
                $ref: '#/components/schemas/image_binary'
        404:
          description: Sample not found
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          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
        500:
          $ref: '#/components/responses/internal_server_error'
    head:
      tags:
      - samples
      summary: check to exist a sample
      description: Check existence of the sample with `id=sample_id`.
      operationId: checkSample
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/image_content_type'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
        404:
          description: sample not found.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
        500:
          description: internal server error.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
    delete:
      tags:
      - samples
      summary: remove sample
      description: Remove sample by ID.
      operationId: deleteSample
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/required_luna_account_id'
      responses:
        204:
          description: the resource was deleted successfully.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
        403:
          $ref: '#/components/responses/forbidden_error'
        404:
          description: Sample not found
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          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
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - samples

      summary: sample options
      description: get options for the resource
      operationId: getSmpleOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/extractor:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    post:
      tags:
      - attributes
      summary: extract attributes
      description: |
        Extract descriptors and basic attributes from samples.
        WARNING: Extracted attributes are temporary. Lifetime of temporary attributes can be configured using *ATTRIBUTES_STORAGE_POLICY.MAX_TTL* setting.
        
      operationId: extractAttributes
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/required_luna_account_id'
      - $ref: '#/components/parameters/applicationJsonContent'
      - $ref: '#/components/parameters/score_threshold'
      - $ref: '#/components/parameters/extract_descriptor'
      - $ref: '#/components/parameters/extract_basic_attributes'
      - $ref: '#/components/parameters/aggregate_attributes'

      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/sample_ids'
        required: true

      responses:
        201:
          description: created.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Extracted_Attributes'
        400:
          description: bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          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
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'extract_basic_attributes'
                sample_not_found:
                  value:
                    error_code: 11031
                    desc: Bad/incomplete input data
                    detail: Sample 483037a5-8d67-427d-a498-f8f62bb06fb1 not found
                bad_json:
                  value:
                    error_code: 12022
                    desc: Bad/incomplete input data
                    detail: 'Failed to validate input json. Path: ''items'',  message: ''''^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$'' is not valid under any of the given schemas'''
        404:
          description: image not found
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error_code: 13003
                desc: Object not found
                detail: Image with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
        403:
          $ref: '#/components/responses/forbidden_error'
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - attributes

      summary: extractor options
      description: get options for the resource
      operationId: geteEtractorOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/attributes:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    get:
      tags:
      - attributes

      summary: get attributes ids
      description: |
        Get temporary attributes IDs by filters.
        WARNING: Resource works with temporary attributes. Lifetime of temporary attributes can be configured using *ATTRIBUTES_STORAGE_POLICY.MAX_TTL* setting.
      operationId: getAttributesList
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      - $ref: '#/components/parameters/attribute_ids'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                type: object
                properties:
                  attributes:
                    type: array
                    items:
                      type: object
                      properties:
                        attribute_id:
                          allOf:
                          - $ref: '#/components/schemas/uuid4'
                          - type: string
                            description: attributes id.
                        create_time:
                          type: string
                          format: date-time
                      required: [attribute_id, create_time]
                    required: [attributes]
              example:
                attributes: [{
                  create_time: "2018-08-11T09:08:29.414Z",
                  attribute_id: "dc8a97d4-e7f5-44f7-af1b-183b6ca8eef9"
                }, {
                  create_time: "2018-05-11T09:08:29.414Z",
                  attribute_id: "dc8a97e4-e7f5-44f7-af1b-183b6ca8eef9"
                }]
        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'time__lt'

        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - attributes
      summary: attributes options
      description: get options for the resource
      operationId: getAttributesOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/attributes/count:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    get:
      tags:
      - attributes
      summary: get attributes count
      description: |
        Count temporary attributes.
        WARNING: Resource works with temporary attributes. Lifetime of temporary attributes can be configured using *ATTRIBUTES_STORAGE_POLICY.MAX_TTL* setting.
      operationId: getAttributesCount

      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'

      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/text_plain'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            text/plain:
              schema:
                type: object
                properties:
                  attributes_count:
                    allOf:
                    - $ref: '#/components/schemas/count'
                    - type: integer
                      description: attributes count
              examples:
                some_attrs_count:
                  value: "123"
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - attributes

      summary: attributes count options
      description: get options for the resource
      operationId: getAttributesCountOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/attributes/{attribute_id}:
    parameters:
    - in: path
      name: attribute_id
      description: attribute id
      schema:
        $ref: '#/components/schemas/uuid4'
      required: true
    - $ref: '#/components/parameters/cors_origin'
    get:
      tags:
      - attributes
      summary: get basic attributes
      description: |
        Get basic attributes (gender, age, ethnicity) by temporary attribute ID.
        If temporary attribute with specified ID does not exist, try to get face attribute with *face_id* equal to *attribute_id*.
      operationId: getAttributes
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/attributes_with_basic_attributes'
        404:
          description: attributes not found.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                  error_code: 22011
                  desc: Object not found
                  detail: Attributes with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
        500:
          $ref: '#/components/responses/internal_server_error'

    head:
      tags:
      - attributes
      summary: check attributes existence 
      description: |
        Check the existence of the attribute with the ID equal to `attribute_id`.
        If temporary attribute with specified ID does not exist, try to check face attribute existence with *face_id* equal to *attribute_id*.
      operationId: checkAttributes
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      responses:
        200:
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          description: OK
        404:
          description: attributes not found.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        500:
          $ref: '#/components/responses/internal_server_error'

    delete:
      tags:
      - attributes
      summary: delete attributes
      description: |
        Delete the attribute by its ID.
        If temporary attribute with specified ID does not exist, try to delete face attribute existence with *face_id* equal to *attribute_id*.
      operationId: deleteAttributes
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/required_luna_account_id'
      responses:
        204:
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          description: the resource was deleted successfully.
        404:
          description: attributes not found.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error_code: 22011
                desc: Object not found
                detail: Attributes with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
        403:
          $ref: '#/components/responses/forbidden_error'
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - attributes

      summary: attribute options
      description: get options for the resource
      operationId: getAttributeOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/attributes/{attribute_id}/samples:
    parameters:
    - in: path
      name: attribute_id
      description: attribute id
      schema:
        $ref: '#/components/schemas/uuid4'
      required: true
    - $ref: '#/components/parameters/cors_origin'
    get:
      tags:
      - attributes
      summary: get samples of attributes
      description: |
        Get samples associated with attribute ID.
        If temporary attribute with specified ID does not exist, try to get face samples with *face_id* equal to *attribute_id*.
      operationId: getAttributeSamples
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      responses:
        200:
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          description: OK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Samples'
        404:
          description: attributes not found.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error_code: 22011
                desc: Object not found
                detail: Attributes with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - attributes

      summary: attribute samples options
      description: get options for the resource
      operationId: geteAttributeSamplesOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/faces:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    post:
      tags:
      - faces
      summary: create face
      description: |
        Create a new face. 
        
        The face can be attached to one or several lists.      
        
      operationId: createFace
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/required_luna_account_id'
      - $ref: '#/components/parameters/applicationJsonContent'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/New_Face'
          application/octet-stream:
            schema:
              type: object
        required: true
      responses:
        201:
          description: a face is created.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Location:
              schema:
                type: string
                pattern: ^/5/faces/[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$
              required: true
              description: face location.
              example: /5/faces/b5d6fd45-fcca-453d-ac05-3e594054b813
          content:
            application/json:
              schema:
                type: object
                properties:
                  face_id:
                    $ref: '#/components/schemas/uuid4'
                  url:
                    type: string
                    format: uri-reference
                required:
                - url
                - face_id
              example:
                face_id: b5d6fd45-fcca-453d-ac05-3e594054b813
                url: /5/faces/b5d6fd45-fcca-453d-ac05-3e594054b813
        400:
          description: bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_json:
                  value:
                    error_code: 12022
                    desc: Bad/incomplete input data
                    detail: 'Failed to validate input json. Path: '''',  message: ''Additional properties are not allowed (''userdata'' was unexpected)'''
        403:
          $ref: '#/components/responses/forbidden_error'
        500:
          $ref: '#/components/responses/internal_server_error'
    get:
      tags:
      - faces
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/page_size'
      - $ref: '#/components/parameters/time__lt'
      - $ref: '#/components/parameters/time__gte'
      - $ref: '#/components/parameters/face_ids'
      - $ref: '#/components/parameters/external_id'
      - $ref: '#/components/parameters/user_data'
      - $ref: '#/components/parameters/list_id'
      - $ref: '#/components/parameters/get_face_target'

      summary: get faces
      description: Get faces according to filters.
      operationId: getFaces

      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Face'
        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'time__lt'
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - faces

      summary: faces options
      description: get options for the resource
      operationId: getFacesOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/faces/count:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    get:
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      - $ref: '#/components/parameters/time__lt'
      - $ref: '#/components/parameters/time__gte'
      - $ref: '#/components/parameters/face_ids'
      - $ref: '#/components/parameters/external_id'
      - $ref: '#/components/parameters/user_data'
      - $ref: '#/components/parameters/list_id'
      tags:
      - faces
      summary: get face count
      description: Count faces according to the filters.
      operationId: getFacesCount
      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/text_plain'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            text/plain:
              schema:
                type: object
                properties:
                  faces_count:
                    $ref: '#/components/schemas/count'
                required:
                - faces_count
              examples:
                some_faces_count:
                  value: "105"
        400:
          description: bad request
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'time__lt'
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - faces

      summary: faces count options
      description: get options for the resource
      operationId: getFacesCountOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/faces/{face_id}:
    parameters:
    - in: path
      name: face_id
      schema:
        $ref: '#/components/schemas/uuid4'
      required: true
      description: ID of the face (face_id received in the "create face" request).
    - $ref: '#/components/parameters/cors_origin'
    get:
      tags:
      - faces
      summary: get face
      description: Get face by ID.
      operationId: getFace
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      - $ref: '#/components/parameters/get_face_target'

      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Face'
        400:
          description: Bad request
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error_code: 22016
                desc: Bad input data
                detail: '"invalid_target" is not valid target to get faces.
                  Valid target should be one of ["face_id", "attribute_id", "event_id", "user_data", "create_time", "external_id", "avatar", "lists"].'
        404:
          description: face not found
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error_code: 22002
                desc: Object not found
                detail: Face with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
        500:
          $ref: '#/components/responses/internal_server_error'
    patch:
      tags:
      - faces
      summary: patch face
      description: |
        Update face fields: user_data, external_id, attribute_id.
      operationId: patchFace
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/required_luna_account_id'
      - $ref: '#/components/parameters/applicationJsonContent'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Update_Face'
        required: true
      responses:
        204:
          description: Updated
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
        400:
          description: Bad request
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_json:
                  value:
                    error_code: 12022
                    desc: Bad/incomplete input data
                    detail: 'Failed to validate input json. Path: '''',  message: ''Additional properties are not allowed (''userdata'' was unexpected)'''
        403:
          $ref: '#/components/responses/forbidden_error'
        404:
          description: face not found
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error_code: 22002
                desc: Object not found
                detail: Face with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
        500:
          $ref: '#/components/responses/internal_server_error'
    delete:
      tags:
      - faces
      summary: remove face
      description: |
        Remove face by ID. 
        
        When a face is removed, attributes (descriptors and basic attributes) linked to the face are deleted. Samples linked to the face are not deleted.
      operationId: deleteFace
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/required_luna_account_id'
      responses:
        204:
          description: The resource was deleted successfully.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
        403:
          $ref: '#/components/responses/forbidden_error'
        404:
          description: face not found
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error_code: 22002
                desc: Object not found
                detail: Face with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
        500:
          $ref: '#/components/responses/internal_server_error'
    head:
      tags:
      - faces
      summary: check to exist a face
      description: Check a face with id=face_id existence
      operationId: checkFace
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
        404:
          description: face not found
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - faces

      summary: face options
      description: get options for the resource
      operationId: getFaceOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/faces/{face_id}/attributes:
    parameters:
    - in: path
      name: face_id
      schema:
        $ref: '#/components/schemas/uuid4'
      required: true
      description: face id (face_id received in the "create face" request).
    - $ref: '#/components/parameters/cors_origin'
    get:
      tags:
      - faces
      summary: get face attributes
      description: Get face attributes.
      operationId: getFaceAttributes
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Attributes'
        404:
          description: face not found
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error_code: 22002
                desc: Object not found
                detail: Face with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - faces

      summary: face attributes options
      description: get options for the resource
      operationId: getFaceAttributesOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/faces/{face_id}/attributes/samples:
    parameters:
    - in: path
      name: face_id
      description: ID of the face (face_id received in the "create face" request). 
      schema:
        $ref: '#/components/schemas/uuid4'
      required: true
    - $ref: '#/components/parameters/cors_origin'

    get:
      tags:
      - faces
      summary: get samples of faces
      description: |
        Get samples associated with the attribute ID linked to the face.
      operationId: getFaceSamples
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      responses:
        200:
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Samples'
        404:
          description: Face not found
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                face_not_found:
                  value:
                    error_code: 22002
                    desc: Object not found
                    detail: Face with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                face_without_attributes:
                  value:
                    error_code: 11032
                    desc: Object not found
                    detail: Face with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' does not have attributes yet
                  summary: face does have any attributes

        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - faces

      summary: face attributes samples options
      description: get options for the resource
      operationId: getFaceAttributesSamplesOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/lists:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    post:
      tags:
      - lists
      summary: create list
      description: Create a new list.
      operationId: createList
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/required_luna_account_id'
      - $ref: '#/components/parameters/applicationJsonContent'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/New_List'
      responses:
        201:
          description: Created
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Location:
              schema:
                type: string
                pattern: ^/5/lists/[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$
              required: true
              description: list location.
              example: /5/lists/b5d6fd45-fcca-453d-ac05-3e594054b813
          content:
            application/json:
              schema:
                type: object
                properties:
                  list_id:
                    allOf:
                    - description: list id
                    - $ref: '#/components/schemas/uuid4'
                  url:
                    type: string
                    format: uri-reference
                    description: list location
                required:
                - url
                - list_id
              example:
                list_id: b5d6fd45-fcca-453d-ac05-3e594054b813
                url: /lists/b5d6fd45-fcca-453d-ac05-3e594054b813
        400:
          description: Bad request
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          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
                bad_json:
                  value:
                    error_code: 12022
                    desc: Bad/incomplete input data
                    detail: 'Failed to validate input json. Path: '''',  message: ''Additional properties are not allowed (''userData'' was unexpected)'''
        403:
          $ref: '#/components/responses/forbidden_error'
        500:
          $ref: '#/components/responses/internal_server_error'
    get:
      tags:
      - lists
      summary: get lists
      description: Get lists according to the filters.
      operationId: getLists
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      - $ref: '#/components/parameters/list_create_time__lt'
      - $ref: '#/components/parameters/list_create_time__gte'
      - $ref: '#/components/parameters/list_last_update_time__lt'
      - $ref: '#/components/parameters/list_last_update_time__gte'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/page_size10000'
      - $ref: '#/components/parameters/user_data'

      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/List'
        400:
          description: bad request
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'user_data'
        500:
          $ref: '#/components/responses/internal_server_error'


    options:
      tags:
      - lists

      summary: lists options
      description: get options for the resource
      operationId: getListsOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/lists/count:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    get:
      tags:
      - lists
      summary: get list count
      description: Count lists according to the filters.
      operationId:  getListCount
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      - $ref: '#/components/parameters/user_data'
      - $ref: '#/components/parameters/list_create_time__lt'
      - $ref: '#/components/parameters/list_create_time__gte'
      - $ref: '#/components/parameters/list_last_update_time__lt'
      - $ref: '#/components/parameters/list_last_update_time__gte'
      - $ref: '#/components/parameters/list_ids'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/text_plain'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            text/plain:
              schema:
                type: string
              examples:
                some_lists_count:
                  value: "15"
        400:
          description: bad request
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'user_data'
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - lists

      summary: lists count options
      description: get options for the resource
      operationId: getListsCountOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/lists/{list_id}:
    parameters:
    - in: path
      name: list_id
      schema:
        $ref: '#/components/schemas/uuid4'
      required: true
      description: list id  (list_id received in the "create list" request)
    - $ref: '#/components/parameters/cors_origin'

    get:
      tags:
      - lists
      summary: get list
      description: Get list by id
      operationId: getList
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/List'
        404:
          description: list not found
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error_code: 22003
                desc: Object not found
                detail: List with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
        500:
          $ref: '#/components/responses/internal_server_error'
    head:
      tags:
      - lists
      summary: check list existence
      description:  Check existence of the list with `id=list_id`.
      operationId: checkList
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      responses:
        200:
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          description: OK
        404:
          description: list not found
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
        500:
          $ref: '#/components/responses/internal_server_error'
    patch:
      tags:
      - lists
      summary: update list
      description:  Update the *user_data* field of the list.
      operationId: patchList
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/required_luna_account_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/New_List'
        required: true
      responses:
        204:
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          description: Updated
        400:
          description: Bad request
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error_code: 12022
                desc: Bad/incomplete input data
                detail: "Failed to validate input json. Path: 'user_data',  message: 'user_data must be string'"
        403:
          $ref: '#/components/responses/forbidden_error'
        404:
          description: Bad request
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          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
                bad_json:
                  value:
                    error_code: 12022
                    desc: Bad/incomplete input data
                    detail: 'Failed to validate input json. Path: '''',  message: ''Additional properties are not allowed (''userData'' was unexpected)'''
                list_not_found:
                  value:
                    error_code: 22003
                    desc: Object not found
                    detail: List with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
        500:
          $ref: '#/components/responses/internal_server_error'
    delete:
      tags:
      - lists
      summary: delete list
      description: Delete list by id
      operationId: deleteList
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/required_luna_account_id'
      - $ref: '#/components/parameters/with_faces'
      responses:
        204:
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          description: The resource was deleted successfully.
        403:
          $ref: '#/components/responses/forbidden_error'
        404:
          description: list not found
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error_code: 22003
                desc: Object not found
                detail: List with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - lists

      summary: list options
      description: get options for the resource
      operationId: getListOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/lists/{list_id}/faces:
    parameters:
    - in: path
      name: list_id
      schema:
        $ref: '#/components/schemas/uuid4'
      required: true
      description: list id (list_id received in the "create list" request)
    - $ref: '#/components/parameters/cors_origin'

    patch:
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/required_luna_account_id'
      tags:
      - lists
      summary: attach/detach faces to the list
      description: Attach or detach faces to the list.
      operationId: linkFaces
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Link'
        required: true

      responses:
        204:
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          description: Updated
        400:
          description: Bad request
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          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
                bad_json:
                  value:
                    error_code: 12022
                    desc: Bad/incomplete input data
                    detail: 'Failed to validate input json. Path: ''action'',  message: ''''detach1'' is not one of [''attach'', ''detach'']'''

                list_not_found:
                  value:
                    error_code: 22003
                    desc: Object not found
                    detail: List with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                faces_not_found:
                  value:
                    error_code: 22004
                    desc: Object not found
                    detail: One or more faces not found, including face with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37'
        403:
          $ref: '#/components/responses/forbidden_error'
        404:
          description: list not found
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error_code: 22003
                desc: Object not found
                detail: List with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - lists

      summary: link options
      description: get options for the resource
      operationId: getLinkerOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/matcher:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    post:
      tags:
      - matcher
      summary: matching
      description: |
        Matcher API allows to submit tasks to a service that searches for faces similar to a given reference(s) by
        matching them.

        >**Note!** *Descriptors must be extracted for reference(s) and candidate(s). Objects without descriptors cannot be matched.*

        The sources for references are events, attributes, face external IDs and faces. The sources for candidates are faces and lists.

        If reference source is attribute and there is face with specified ID, matching will be executed against attributes of this face.
      operationId: matching
      parameters:
      - in: header
        name: Content-Type
        schema:
          type: string
          enum:
          - application/json
      - in: query
        name: limit
        description: count of match result for each reference by every candidate list.
        schema:
          type: integer
          default: 3
          minimum: 1
          maximum: 100
      - $ref: '#/components/parameters/get_face_target_match'
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Match_body'
        required: true
      responses:
        201:
          description: Created
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Match_result'
        400:
          description: Bad request
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          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
                bad_json:
                  value:
                    error_code: 12022
                    desc: Bad/incomplete input data
                    detail: 'Failed to validate input json. Path: ''action'',  message: ''''detach1'' is not one of [''attach'', ''detach'']'''
                list_not_found:
                  value:
                    error_code: 22003
                    desc: Object not found
                    detail: List with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                lists_not_found:
                  value:
                    error_code: 22003
                    desc: Object not found
                    detail: One or more lists not found
                face_not_found:
                  value:
                    desc: Object not found
                    detail: Face with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                    error_code: 22002
                faces_not_found:
                  value:
                    error_code: 22004
                    desc: Object not found
                    detail: One or more faces not found, including face with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37'
                descriptor_not_extracted:
                  value:
                    desc: Bad/incomplete input data
                    detail: Descriptor for attribute '793877ae-171a-4810-8d29-ad7c0f404dfe' was not extracted
                    error_code: 11034
        403:
          $ref: '#/components/responses/forbidden_events_error'
        500:
          $ref: '#/components/responses/internal_server_error'
    options:
      tags:
      - matcher

      summary: matcher options
      description: get options for the resource
      operationId: getMatcherOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/handlers:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    post:
      tags:
      - handlers
      summary: create handler
      description: |
        Create a new handler. 
        
        The handler determines the list of rules (policies) for the processing of input images. 
        
        >After the handler is created, you should use the "create events" request to process images using the handler.        
      operationId: createHandler
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/required_luna_account_id'
      - $ref: '#/components/parameters/applicationJsonContent'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/New_Handler'
        required: true

      responses:
        201:
          description: Created
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Location:
              schema:
                type: string
                pattern: ^/5/handlers/[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$
              required: true
              description: hahdler location.
              example: /5/handlers/b5d6fd45-fcca-453d-ac05-3e594054b813
          content:
            application/json:
              schema:
                type: object
                properties:
                  handler_id:
                    $ref: '#/components/schemas/uuid4'
                  url:
                    type: string
                    format: uri-reference
                required:
                - handler_id
                - url
              example:
                handler_id: b5d6fd45-fcca-453d-ac05-3e594054b813
                url: /5/handlers/b5d6fd45-fcca-453d-ac05-3e594054b813
        403:
          $ref: '#/components/responses/forbidden_error'
        400:
          description: Bad request
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          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
                list_not_found:
                  value:
                    error_code: 22003
                    desc: Object not found
                    detail: List with id 'b5d6fd45-fcca-453d-ac05-3e594054b813' not found
                bad_json:
                  value:
                    error_code: 12027
                    desc: Bad/incomplete input data
                    detail: 'Failed to validate input json. Message: ''{''policies'': {''create_face_policy'': {''create_faces'': [''create_faces must be 0 or 1''], ''filters'': {''gender'': [''gender must be 0 or 1'']}}}}'''
        500:
          $ref: '#/components/responses/internal_server_error'

    get:
      tags:
      - handlers
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/page_size'
      # - $ref: '#/components/parameters/time__lt'
      # - $ref: '#/components/parameters/time__gte'
      - in: query
        name: description
        schema:
          type: string
        description: find all the handlers with description similar to this parameter.

      summary: get handlers
      description: Get handlers by filters.
      operationId: getHandlers
      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/HandlerWithRequiredPolicies'
        400:
          description: bad request
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'page'
        500:
          description: internal server error
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                internal_error:
                  value:
                    error_code: 11009
                    detail: internal server error
                    desc: internal server error
                invalid_handler:
                  value:
                    error_code: 35002
                    detail: Invalid handler with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37'
                    desc: Handler is not supported

    options:
      tags:
      - handlers

      summary: handlers options
      description: get options for the resource
      operationId: getHandlersOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/handlers/count:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    get:
      tags:
      - handlers
      summary: get handler count
      description: Count handlers.
      operationId:  getHandlerCount
      parameters:
      - in: query
        name: description
        schema:
          type: string
        description: Find all the handlers with description similar to this parameter.
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                type: object
                properties:
                  handlers_count:
                    $ref: '#/components/schemas/count'
                required:
                - handlers_count
        400:
          description: bad request
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'description'
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - handlers

      summary: handler count options
      description: get options for the resource
      operationId: getHandlersCountOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/handlers/{handler_id}:
    parameters:
    - in: path
      name: handler_id
      schema:
        $ref: '#/components/schemas/uuid4'
      required: true
      description: handler id
    - $ref: '#/components/parameters/cors_origin'

    get:
      tags:
      - handlers
      summary: get handler
      description: Get handler by ID.
      operationId: getHandler
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HandlerWithRequiredPolicies'
        404:
          description: handler not found
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error_code: 11033
                desc: Object not found
                detail: Handler with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
        500:
          description: internal server error
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                internal_error:
                  value:
                    error_code: 11009
                    detail: internal server error
                    desc: internal server error
                invalid_handler:
                  value:
                    error_code: 35002
                    detail: Invalid handler with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37'
                    desc: Handler is not supported
    put:
      tags:
      - handlers
      summary: update handler
      description: |
        Update a handler. You cannot update a part of a handler, so you must specify all the fields for your handler.
      operationId: putHandler
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/required_luna_account_id'
      - $ref: '#/components/parameters/applicationJsonContent'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/New_Handler'
        required: true

      responses:
        204:
          description: Updated
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
        400:
          description: Bad request
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          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
                list_not_found:
                  value:
                    error_code: 22003
                    desc: Object not found
                    detail: List with id 'b5d6fd45-fcca-453d-ac05-3e594054b813' not found
                bad_json:
                  value:
                    error_code: 12027
                    desc: Bad/incomplete input data
                    detail: 'Failed to validate input json. Message: ''{''policies'': {''create_face_policy'': {''create_faces'': [''create_faces must be 0 or 1''], ''filters'': {''gender'': [''gender must be 0 or 1'']}}}}'''
        404:
          description: handler not found
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error_code: 11033
                desc: Object not found
                detail: Handler with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
        403:
          $ref: '#/components/responses/forbidden_error'
        500:
          $ref: '#/components/responses/internal_server_error'
    head:
      tags:
      - handlers
      summary: check to exist a handler
      description:  Check a handler with `id=handler_id` existence.
      operationId: checkHandler
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      responses:
        200:
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          description: OK
        404:
          description: handler not found
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
        500:
          $ref: '#/components/responses/internal_server_error'

    delete:
      tags:
      - handlers
      summary: remove handler
      description: Remove handler by id.
      operationId: removeHandler
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/required_luna_account_id'
      responses:
        204:
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          description: The resource was deleted successfully.
        403:
          $ref: '#/components/responses/forbidden_error'
        404:
          description: handler not found
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error_code: 11033
                desc: Object not found
                detail: Handler not found
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - handlers

      summary: handler options
      description: get options for the resource
      operationId: getHandlerOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/handlers/{handler_id}/events:
    parameters:
    - in: path
      name: handler_id
      schema:
        $ref: '#/components/schemas/uuid4'
      required: true
      description: handler id
    - $ref: '#/components/parameters/cors_origin'

    post:
      tags: [events]
      summary: generate events
      description: |
        Process images using the specified handler and generate events.

        If the Events service support is disabled on the server, events will not be saved to the database.
      operationId: generateEvents
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/required_luna_account_id'
      - $ref: '#/components/parameters/luna_event_time'
      - $ref: '#/components/parameters/multiple_images_content_type'
      - in: query
        name: external_id
        schema:
          $ref: '#/components/schemas/event_external_id'
        description: external ID for created faces.
      - in: query
        name: user_data
        schema:
          $ref: '#/components/schemas/event_user_data'
        description: User data for created faces
      - $ref: '#/components/parameters/warped_image'

      - $ref: '#/components/parameters/aggregate_attributes'
      - in: query
        name: source
        schema:
          $ref: '#/components/schemas/Source'
        description: Additional information, provided by user with event.

      - $ref: '#/components/parameters/tags'
      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: base64
          image/x-png-base64:
            schema:
              type: string
              format: base64
          image/x-bmp-base64:
            schema:
              type: string
              format: base64
          image/x-tiff-base64:
            schema:
              type: string
              format: base64
          image/x-portable-pixmap-base64:
            schema:
              type: string
              format: base64
          multipart/form-data:
            schema:
              type: object
              properties:
                filename:
                  oneOf:
                    - type: array
                      items:
                        anyOf:
                        - type: string
                          format: binary
                        - type: string
                          format: base64
                    - type: string
                      format: binary
                    - type: string
                      format: base64
            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/DetectOrEmitEventJsonRequestBody'
        required: true
      responses:
        201:
          description: Created
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                type: object
                properties:
                  events:
                    type: array
                    items:
                      $ref: '#/components/schemas/EventFromHandler'
                  detections:
                    $ref: '#/components/schemas/Detected_images'
                required: ["events", "detections"]
        400:
          description: Bad request
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          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'
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                bad_conten_type_download_image:
                  value:
                    error_code: 11028
                    desc: Bad/incomplete input data
                    detail: 'Bad content type of image ''https://www.google.ru'''
                bad_conten_type_multepart:
                  value:
                    error_code: 11029
                    desc: Bad/incomplete input data
                    detail: Bad content type of image in multipart body
                failed_load_image:
                  value:
                    error_code: 11027
                    desc: External request failed
                    detail: 'Failed  to download image by url ''https://www.gooogle.ru'''
                boundary_missed_multipart:
                  value:
                    error_code: 11049
                    desc: Bad/incomplete input data
                    detail: "Failed to read multipart: boundary missed for Content-Type: multipart/form-data"
        403:
          $ref: '#/components/responses/forbidden_error'
        404:
          description: handler not found
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error_code: 11033
                desc: Object not found
                detail: Handler with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
        500:
          description: internal server error
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                internal_error:
                  value:
                    error_code: 11009
                    detail: internal server error
                    desc: internal server error
                invalid_handler:
                  value:
                    error_code: 35002
                    detail: Invalid handler with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37'
                    desc: Handler is not supported

    options:
      tags:
      - events

      summary: generate events options
      description: get options for the resource
      operationId: generateEventsOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/events/statistic:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    post:
      tags:
      - events
      summary: get statistics on events.
      description: |
        Get event statistics by target(s) with applied filters.

        Event fields and/or functions (count, min, etc.) can be set as targets for aggregation of events.
               
        Grouping by frequency or grouping by time intervals is available.
      operationId: getEventStats
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      - $ref: '#/components/parameters/applicationJsonContent'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/getEventStats'
            example:
              targets:
                - column: event_id
                  aggregator: count
                - column: age
                  aggregator: group_by
                - column: gender
                  aggregator: group_by
              filters:
                - column: source
                  operator: eq
                  value: Main_hall_camera
              period:
                - operator: gt
                  value: 2020-02-04T00:00:00Z
                - operator: lt
                  value: 2020-02-06T00:00:00Z
              group_by: dayOfWeek
        required: true
      responses:
        200:
          description: Created
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                type: object
                properties:
                  fields:
                    type: array
                    items:
                      type: string
                    description: |
                      Response has the following structure:
                      - The first element of the list is `Group by time` section if request includes time or frequency grouping;
                      - The next elements are fields with the `group_by` function set;   
                      - Other elements are pairs of columns and aggregators for the columns.

                      The fields and functions pairs in the "fields" section are in the same order as in the "stats" section.
                  stats:
                    type: array
                    items:
                      anyOf:
                        - type: integer
                        - type: number
                        - type: string
                        - type: array
                    description: any type of items
              examples:
                count_dayOfWeek:
                  value:
                    fields:
                      - "Group by time: dayOfWeek"
                      - "gender, aggregator 'group_by'"
                      - "age, aggregator 'group_by'"
                      - "event_id, aggregator 'count'"
                    stats:
                    - - Tuesday
                      - 0
                      - 22
                      - 45
                    - - Tuesday
                      - 0
                      - 27
                      - 23
                    - - Tuesday
                      - 1
                      - 27
                      - 45
                    - - Wednesday
                      - 0
                      - 25
                      - 34
                    - - Wednesday
                      - 1
                      - 33
                      - 345

        400:
          description: Bad request
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_json:
                  value:
                    error_code: 12022
                    desc: Bad/incomplete input data
                    detail: 'Failed to validate input json. Path: '''',  message: ''Additional properties are not allowed (''userdata'' was unexpected)'''
        403:
          $ref: '#/components/responses/forbidden_events_error'
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - events

      summary: events statistics options
      description: get options for the resource
      operationId: geteEventsStatisticsOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/events:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    get:
      tags:
      - events
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      - $ref: '#/components/parameters/get_event_target'
      - $ref: '#/components/parameters/create_time__gte'
      - $ref: '#/components/parameters/create_time__lt'
      - $ref: '#/components/parameters/sources'
      - $ref: '#/components/parameters/top_similar_face_list'
      - $ref: '#/components/parameters/top_similar_face_ids'
      - $ref: '#/components/parameters/top_similar_face_similarity__gte'
      - $ref: '#/components/parameters/top_similar_face_similarity__lt'
      - $ref: '#/components/parameters/age__lt'
      - $ref: '#/components/parameters/age__gte'
      - $ref: '#/components/parameters/gender'
      - $ref: '#/components/parameters/emotions'
      - $ref: '#/components/parameters/ethnic_groups'
      - $ref: '#/components/parameters/face_ids'
      - $ref: '#/components/parameters/event_ids'
      - $ref: '#/components/parameters/handler_ids'
      - $ref: '#/components/parameters/external_ids'
      - $ref: '#/components/parameters/user_data'
      - $ref: '#/components/parameters/tags'
      - $ref: '#/components/parameters/order'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/page_size1000'

      summary: get events
      description: |
        Get events that satisfy filters.
        The `target` parameter determines field that will be shown for each event. If target is not set, the response will contain all the fields.
      operationId: getEvents
      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventsWithCount'
        400:
          description: bad request
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'create_time__lt'
        403:
          $ref: '#/components/responses/forbidden_events_error'
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - events

      summary: events options
      description: get options for the resource
      operationId: geteEventsOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/events/{event_id}:
    parameters:
    - in: path
      name: event_id
      schema:
        $ref: '#/components/schemas/uuid4'
      required: true
      description: event id
    - $ref: '#/components/parameters/cors_origin'
    get:
      tags:
      - events
      summary: get event
      description: Get event by ID.
      operationId: getEvent
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'

      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Event'
        403:
          $ref: '#/components/responses/forbidden_events_error'
        404:
          description: event not found
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error_code: 23001
                desc: Object not found
                detail: Event with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
        500:
          $ref: '#/components/responses/internal_server_error'
    head:
      tags:
      - events
      summary: check event existence
      description: Check existence of the event with `id=event_id`.
      operationId: checkEvent
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
        404:
          description: Event not found
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - events

      summary: event options
      description: get options for the resource
      operationId: geteEventOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'

  /5/tasks/clustering:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    post:
      tags:
      - task processing

      summary: clustering task
      description: |
        Create a new clustering task.

        The Filters section enables to specify filters for faces or events clustering. Objects corresponding to all of the filters will be added to the cluster. 

        Available filters depend on the object type: events or faces. 

      operationId: createClusteringTask

      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/applicationJsonContent'
      - $ref: '#/components/parameters/required_luna_account_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClusteringTask'
        required: true

      responses:
        202:
          description: Accepted
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                type: object
                properties:
                  task_id:
                    $ref: '#/components/schemas/task_id'
                required:
                - task_id
        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_json_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'create_time__lt'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - task processing

      summary: clustering options
      description: get options for the resource
      operationId: getClusteringOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/tasks/linker:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    post:
      tags:
      - task processing

      summary: linker task
      description: |
        Create a new linker task.

        The task enables you to attach faces to the specified list according to the filters. 
        
        You can use faces or events as objects for the task. When events are used, a new face is created for each of the events.

        A list is required for the task processing:
        - If you specified a list, the Tasks service checks its existence. If there is no such a list, it will be created.
        - If you set new list creation using *create_list = 1*, a new list is created.
        
      operationId: createLinkerTask

      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/applicationJsonContent'
      - $ref: '#/components/parameters/required_luna_account_id'

      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LinkerTask'
        required: true

      responses:
        202:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                type: object
                properties:
                  task_id:
                    $ref: '#/components/schemas/task_id'
                required:
                  - task_id
        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12022
                    desc: Bad/incomplete input data
                    detail: 'Failed to validate input json. Path: '''',  message: ''Additional properties are not allowed (''userdata'' was unexpected)'''
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - task processing

      summary: linker options
      description: get options for the resource
      operationId: getTaskLinkerOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/tasks/gc:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    post:
      tags:
      - task processing

      summary: garbage collection task
      description: |

        Task is not available  because all attributes is temporary and will be removed automatically.

      operationId: createGCTask

      responses:
        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 35000
                    desc: Bad/incomplete input data
                    detail: Attributes gc is not available
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - task processing

      summary:  gc options
      description: get options for the resource
      operationId: getGCOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/tasks/reporter:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    post:
      tags:
      - task processing

      summary: reporter task
      description: |
        Create a report in csv format for a task. 
        
        Now the report is only created for clustering tasks. 
        
        The report contains additional information about clustering objects (faces or events). You can specify additional information that will be added to the report. 
        The first and the second columns in the report always correspond to a cluster number and an object ID.
        
      operationId: createReporterTask

      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/applicationJsonContent'
      - $ref: '#/components/parameters/required_luna_account_id'

      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReporterTask'
        required: true

      responses:
        202:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                type: object
                properties:
                  task_id:
                    $ref: '#/components/schemas/task_id'
                required:
                - task_id
        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12022
                    desc: Bad/incomplete input data
                    detail: 'Failed to validate input json. Path: '''',  message: ''Additional properties are not allowed (''userdata'' was unexpected)'''
                task_not_foud:
                  value:
                    error_code: 28001
                    desc: Object not found
                    detail: Task with id '147' not found
                bad_task_type:
                  value:
                    error_code: 28013
                    desc: Bad/incomplete input data
                    detail: Tasks with type '0' does not support a build report
                bad_task_status:
                  value:
                    error_code: 28015
                    desc: Bad/incomplete input data
                    detail: Tasks with type '0' does not support a build report
        403:
          $ref: '#/components/responses/forbidden_tasks_error'

        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - task processing

      summary: reporter options
      description: get options for the resource
      operationId: getReporterOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/tasks/cross_match:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    post:
      tags:
      - task processing

      summary: cross-matching task
      description: |
        Create a new cross-matching task. 
        
        The cross-matching task enables you to compare references (faces or events) with candidates (faces or events) according to the specified filters.
        
        All the references are matched with all the candidates. 
        
        You can limit the number of candidates returned in matching results and set the minimum acceptable similarity threshold.        
      operationId: createCrossMatchTask

      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/applicationJsonContent'
      - $ref: '#/components/parameters/required_luna_account_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CrossMatchTask'
        required: true

      responses:
        202:
          description: Accepted
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                type: object
                properties:
                  task_id:
                    $ref: '#/components/schemas/task_id'
                required:
                - task_id
        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_json_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'create_time__lt'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        500:
          $ref: '#/components/responses/internal_server_error'
    options:
      tags:
      - task processing

      summary: cross match options
      description: get options for the resource
      operationId: getCrossMatchOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/tasks/roc:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    post:
      tags:
      - task processing

      summary: ROC-curve calculating task
      description:  |
        create a ROC-curve calculating task. 
        
        ROC (or Receiver Operating Characteristic) is a performance measurement for the classification problem at various threshold settings. The ROC-curve is plotted with TPR (True Positive Rate) against the FPR (False Positive Rate). 
        
        TPR is a true positive match pair count divided by a count of total expected positive match pairs, and FPR is a false positive match pair count divided by a count of total expected negative match pairs. Each point (FPR, TPR) of the ROC-cure corresponds to a certain similarity threshold. 
        
        Using ROC the model performance is determined by looking at the area under the ROC-curve (or AUC) and the ROC-curve and the secondary main diagonal intersection point, where type I and type II error rates are equal. The model performance also determined by getting into the top-N probability, i.e. probability of getting a positive match pair into the top-N for any match result group sorted by similarity.
      operationId: createROCTask

      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/applicationJsonContent'
      - $ref: '#/components/parameters/required_luna_account_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ROCTask'
        required: true

      responses:
        202:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                type: object
                properties:
                  task_id:
                    $ref: '#/components/schemas/task_id'
                required:
                  - task_id
        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12022
                    desc: Bad/incomplete input data
                    detail: 'Failed to validate input json. Path: '''',  message: ''Additional properties are not allowed (''userdata'' was unexpected)'''
                task_not_foud:
                  value:
                    error_code: 28001
                    desc: Object not found
                    detail: Task with id '147' not found
                bad_task_type:
                  value:
                    error_code: 28013
                    desc: Bad/incomplete input data
                    detail: Tasks with type '0' does not support a build report
                bad_task_status:
                  value:
                    error_code: 28015
                    desc: Bad/incomplete input data
                    detail: Tasks with type '0' does not support a build report
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - task processing

      summary: roc options
      description: get options for the resource
      operationId: getRocOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/tasks:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    get:
      tags:
      - tasks

      summary: get tasks
      description: Get tasks according to the filters.
      operationId: getTasks

      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/page_size'
      - $ref: '#/components/parameters/create_time__lt'
      - $ref: '#/components/parameters/create_time__gte'
      - $ref: '#/components/parameters/end_time__lt'
      - $ref: '#/components/parameters/end_time__gte'
      - $ref: '#/components/parameters/task_ids'
      - $ref: '#/components/parameters/task_type'
      - $ref: '#/components/parameters/task_status'
      - $ref: '#/components/parameters/luna_account_id'

      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Tasks'
        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'create_time__lt'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - tasks
      summary: tasks options
      description: get options for the resource
      operationId: getTasksOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/tasks/count:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    get:
      tags:
      - tasks

      summary: get tasks count
      description: Count tasks according to the filters.
      operationId: getTasksCount

      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/create_time__lt'
      - $ref: '#/components/parameters/create_time__gte'
      - $ref: '#/components/parameters/end_time__lt'
      - $ref: '#/components/parameters/end_time__gte'
      - $ref: '#/components/parameters/task_ids'
      - $ref: '#/components/parameters/task_type'
      - $ref: '#/components/parameters/task_status'
      - $ref: '#/components/parameters/luna_account_id'

      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/taskCount'
        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'create_time__lt'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - tasks

      summary: tasks count options
      description: get options for the resource
      operationId: getTasksCountOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/tasks/{task_id}:
    parameters:
    - in: path
      name: task_id
      schema:
        type: integer
        minimum: 1
      required: true
      description: task id
    - $ref: '#/components/parameters/cors_origin'

    get:
      tags:
      - tasks

      summary: get task
      description: Get task by ID.
      operationId: getTask

      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'

      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Task'
        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 11037
                    desc: Bad/incomplete input data
                    detail: 'Luna-Account-Id header is not UUID4, format: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        404:
          description: task not found.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 28001
                    desc: Object not found
                    detail: Task with id '146' not found
        500:
          $ref: '#/components/responses/internal_server_error'

    patch:
      tags:
      - tasks

      summary: cancel task
      description: Cancel task by ID.
      operationId: cancelTask

      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/required_luna_account_id'

      responses:
        202:
          description: Canceling
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
        404:
          description: task not found.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 28001
                    desc: Object not found
                    detail: Task with id '146' not found
        500:
          $ref: '#/components/responses/internal_server_error'

    delete:
      tags:
      - tasks

      summary: delete task
      description: Delete a task and the task results by the task ID.
      operationId: deleteTask

      parameters:
      - in: path
        name: task_id
        schema:
          type: integer
          minimum: 1
        required: true
        description: task id
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/required_luna_account_id'

      responses:
        204:
          description: Deleted
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                task_can_not_canceled:
                  value:
                    error_code: 28019
                    desc: Bad/incomplete input data
                    detail: Task '146' with status 5 can not canceled
        404:
          description: task not found.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 28001
                    desc: Object not found
                    detail: Task with id '146' not found
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - tasks

      summary: task options
      description: get options for the resource
      operationId: getTaskOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/tasks/{task_id}/result:
    parameters:
    - in: path
      name: task_id
      schema:
        type: integer
        minimum: 1
      required: true
      description: task id
    - $ref: '#/components/parameters/cors_origin'

    get:
      tags:
      - tasks

      summary: get task result
      description: Get task result by the task ID.
      operationId: getTaskResult

      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'

      responses:
        200:
          description: OK
          headers:
            Content-Type:
              schema:
                type: string
                enum:
                - application/json
                - application/zip
              required: true
              description: content type of body
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Disposition:
              $ref: '#/components/headers/content_disposition'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/GCTaskResult'
                  - $ref: '#/components/schemas/ClusteringTaskResult'
                  - $ref: '#/components/schemas/LinkerTaskResult'
                  - $ref: '#/components/schemas/CrossMatchTaskResult'
                  - $ref: '#/components/schemas/ROCTaskResult'
            application/zip:
              schema:
                type: string
                format: binary
                description: |
                  zip archive with task result (now zip is supported in tasks on reports).

                  Csv file and optional a folder with images in the case clustering report.

                  | cluster | event_id                             | create_time                      | external_id | handler_id                           | attribute_id                         | source | top_similar_face_id | top_similar_face_list | top_similar_face_similarity | face_id                              | gender | age | emotion | ethnic_group | user_data                         |
                  |---------|--------------------------------------|----------------------------------|-------------|--------------------------------------|--------------------------------------|--------|---------------------|-----------------------|-----------------------------|--------------------------------------|--------|-----|---------|--------------|-----------------------------------|
                  | 0       | 6a4053de-17ab-40b5-bf2b-a1495df39085 | 2019-02-13T18:04:40.723800+03:00 |             | d727b3f5-e8ca-4fca-b092-d170ef5f9e49 | b3f9e82d-1654-4250-b39e-f8bbbca9880c |        |                     |                       |                             | cfb8ca11-4901-4296-a71d-0783d61ccf05 | 1      | 28  |         | 2            | vl test events_with_created_faces |
                  | 1       | 110cc2d3-0350-418e-b956-90ef4dacbd23 | 2019-02-13T18:04:40.723800+03:00 |             | d727b3f5-e8ca-4fca-b092-d170ef5f9e49 | 3e1d0ffb-1fa6-449e-8c8b-8f9b56bfff6d |        |                     |                       |                             | f4f17cbe-9197-4347-b214-692fa4ca9f26 | 0      | 24  |         | 2            | vl test events_with_created_faces |
                  | 2       | 9a9c9445-6a3d-4f4d-b22a-64601f4c8675 | 2019-02-13T18:04:40.723800+03:00 |             | d727b3f5-e8ca-4fca-b092-d170ef5f9e49 | 91a7fd34-0877-46f5-844c-e88fd28d68f0 |        |                     |                       |                             | 83086070-bce2-40b9-a5c4-9df36a52fe4f | 0      | 19  |         | 4            | vl test events_with_created_faces |
                  | 2       | 979be9cd-6363-431a-a8a6-3f3fff806abf | 2019-02-13T18:04:40.723800+03:00 |             | d727b3f5-e8ca-4fca-b092-d170ef5f9e49 | 2cfacb32-fc7a-4abd-8518-0bf759acc4f9 |        |                     |                       |                             | e09228a7-8a7e-4581-b550-d5c0818c871f | 0      | 28  |         | 4            | vl test events_with_created_faces |
                  | 3       | 60b86bf7-3395-40cf-90f0-4e0756f50b9e | 2019-02-13T18:04:40.723800+03:00 |             | d727b3f5-e8ca-4fca-b092-d170ef5f9e49 | 67c823db-8e3c-4638-abf9-63078d2687d5 |        |                     |                       |                             | 301e8eb8-b6af-4c33-b5a1-6861509d2df4 | 1      | 56  |         | 4            | vl test events_with_created_faces |

        404:
          description: object not found.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                task_not_found:
                  value:
                    error_code: 28001
                    desc: Object not found
                    detail: Task with id '146' not found
                task_result_not_found:
                  value:
                    error_code: 28017
                    desc: Object not found
                    detail: Result of the task '146' not found
                task_does_not_have_result_yet:
                  value:
                    error_code: 28018
                    desc: Object not found
                    detail: task '146' does not have result yet
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - tasks
      summary: task result options
      description: get options for the resource
      operationId: getTasksResultOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/tasks/{task_id}/errors:
    parameters:
    - in: path
      name: task_id
      schema:
        type: integer
        minimum: 1
      required: true
      description: task id
    - $ref: '#/components/parameters/cors_origin'

    get:
      tags:
      - task errors

      summary: get task errors 
      description: Get errors of a task by the task ID.
      operationId: getTaskErrors

      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/page_size'

      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskErrors'
        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'create_time__lt'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - task errors

      summary: task errors options
      description: get options for the resource
      operationId: getTaskErrorsOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/tasks/{task_id}/subtasks:
    parameters:
    - in: path
      name: task_id
      schema:
        type: integer
        minimum: 1
      required: true
      description: task id
    - $ref: '#/components/parameters/cors_origin'

    get:
      tags:
      - tasks

      summary: get subtasks
      description: Get subtasks of a task by ID.
      operationId: getSubTasks

      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'

      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubTasks'
        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'create_time__lt'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - tasks

      summary: subtasks options
      description: get options for the resource
      operationId: getSubTasksOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/tasks/errors:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    get:
      tags:
      - task errors

      summary: get errors
      description: Get errors according to the filters.
      operationId: getErrors

      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/page_size'
      - $ref: '#/components/parameters/task_ids'
      - $ref: '#/components/parameters/error_code'
      - $ref: '#/components/parameters/error_ids'
      - $ref: '#/components/parameters/error_time__lt'
      - $ref: '#/components/parameters/error_time__gte'
      - $ref: '#/components/parameters/task_type'
      - $ref: '#/components/parameters/status_code'

      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskErrors'
        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'create_time__lt'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        500:
          $ref: '#/components/responses/internal_server_error'
    options:
      tags:
      - task errors

      summary: errors options
      description: get options for the resource
      operationId: getErrorsOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/tasks/errors/count:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    get:
      tags:
      - task errors

      summary: get errors count
      description: Count errors according to the filters.
      operationId: getErrorsCount

      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      - $ref: '#/components/parameters/error_time__lt'
      - $ref: '#/components/parameters/error_time__gte'
      - $ref: '#/components/parameters/task_type'
      - $ref: '#/components/parameters/status_code'

      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorCount'
        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'create_time__lt'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        500:
          $ref: '#/components/responses/internal_server_error'
    options:
      tags:
      - task errors

      summary: task errors count options
      description: get options for the resource
      operationId: getTasksErrorsCountOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/tasks/errors/{error_id}:
    parameters:
    - in: path
      name: error_id
      schema:
        type: integer
        minimum: 1
      required: true
      description: error id
    - $ref: '#/components/parameters/cors_origin'

    get:
      tags:
      - task errors

      summary: get error
      description: Get error by ID.
      operationId: getTaskError

      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/error_id'
      - $ref: '#/components/parameters/luna_account_id'

      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskError'
        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'create_time__lt'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - task errors

      summary: error options
      description: get options for the resource
      operationId: getTasksErrorsOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/liveness:
    parameters:
      - $ref: '#/components/parameters/cors_origin'

    post:
      tags: [liveness]
      summary: predict liveness
      description: |

        Predict liveness probability in input images.

        The response contains the probability that there is a real person in the image, and it is not a presentation attack.

        Liveness V1 or Liveness V2 can be used for this resource. Liveness V2 does not use "meta" section of the request.

        The incoming images should correspond the requirements of the utilized Liveness. See "Administrator’s manual" for details. 

        *Liveness estimation is not supported for samples (warped images).* 

      operationId: predictLiveness
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/luna_account_id'
      - $ref: '#/components/parameters/multiple_images_content_type'

      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              description: filename in the header of the subpart (content-disposition header) MUST be supplied.
              properties:
                meta:
                  $ref: '#/components/schemas/LivenessMeta'
                x_meta:
                  type: object
                  description: The JSON string with any additional information
                image:
                  $ref: '#/components/schemas/image_list_for_multipart'
              required: [image]
            encoding:
              image:
                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:
              type: object
              properties:
                meta:
                  $ref: '#/components/schemas/LivenessMeta'
                x_meta:
                  type: object
                  description: The JSON string with any additional information
                urls:
                  $ref: '#/components/schemas/ListOfUrlsWithImages'
              required: [urls]
          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
        required: true
      responses:
        200:
          description: Success
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/liveness_response'
        400:
          description: Bad request
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'devices'
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                bad_conten_type_download_image:
                  value:
                    error_code: 11028
                    desc: Bad/incomplete input data
                    detail: 'Bad content type of image ''https://www.google.ru'''
                bad_conten_type_multepart:
                  value:
                    error_code: 11029
                    desc: Bad/incomplete input data
                    detail: Bad content type of image in multipart body
                failed_load_image:
                  value:
                    error_code: 11027
                    desc: External request failed
                    detail: 'Failed  to download image by url ''https://www.gooogle.ru'''
                boundary_missed_multipart:
                  value:
                    error_code: 11049
                    desc: Bad/incomplete input data
                    detail: "Failed to read multipart: boundary missed for Content-Type: multipart/form-data"
        403:
          $ref: '#/components/responses/forbidden_error'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/ws:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    get:
      tags:
      - ws
      summary: ws handshake
      description: |
        ws handshake
        > ### Attention!
        > **Subscription to events occurs via [WebSocket](https://en.wikipedia.org/wiki/WebSocket).**
        > Messages sent by ws you can view in callback section.
        > Connection supports [autoping](https://tools.ietf.org/html/rfc6455#section-5.5.2).
      operationId: wsHandshake
      parameters:
        - $ref: '#/components/parameters/required_luna_account_id'
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/handler_ids'
        - $ref: '#/components/parameters/sources'
        - $ref: '#/components/parameters/top_similar_face_lists'
        - $ref: '#/components/parameters/top_similar_face_similarity__gte'
        - $ref: '#/components/parameters/top_similar_face_similarity__lt'
        - $ref: '#/components/parameters/age__lt'
        - $ref: '#/components/parameters/age__gte'
        - $ref: '#/components/parameters/gender'
        - $ref: '#/components/parameters/ethnic_groups'
        - $ref: '#/components/parameters/tags'

      responses:
        101:
          description: Success handshake
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Message_from_ws'
        400:
          description: Bad request
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
          content:
            application/json:
              schema:
                oneOf:
                - $ref: '#/components/schemas/Error'
              examples:
                bad_query:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'estimate_quality'
        403:
          $ref: '#/components/responses/forbidden_sender_error'
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/docs/spec:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    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"
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/docs/dev:
    parameters:
      - $ref: '#/components/parameters/cors_origin'
    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'
  /5/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
                  VERSION: 2
                  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
                VERSION = 2
                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"
        500:
          $ref: '#/components/responses/internal_server_error'
  /5/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'

    options:
      tags:
        - health

      summary: health options
      description: get options for the resource
      operationId: getHealthOptions

      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'
            Allow:
              $ref: '#/components/headers/allow_methods'
            Access-Control-Allow-Origin:
              $ref: '#/components/headers/access_control_allow_origin'
            Access-Control-Allow-Headers:
              $ref: '#/components/headers/access_control_allow_headers'
            Access-Control-Allow-Methods:
              $ref: '#/components/headers/access_control_allow_methods'
            Access-Control-Max-Age:
              $ref: '#/components/headers/access_control_max_age'
        500:
          $ref: '#/components/responses/internal_server_error'
  /healthcheck:
    get:
      tags:
        - health
      summary: get health (redirect)
      description: get health of service (redirect)
      operationId: healthcheck(redirect)
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/include_luna_services'
      responses:
        200:
          description: OK (redirected)
          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'
        308:
          description: Moved permanently
          headers:
            Location:
              schema:
                type: string
                enum:
                  - "/6/healthcheck"
              required: true
              description: redurect to the versioned resource
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        500:
          $ref: '#/components/responses/internal_server_error'

        502:
          description: Unhealthy (redirected)
          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'
