OpenApi

View spec in html.

openapi: 3.0.0
info:
  version: 'v.4.4.41'
  title: 'Luna-Faces API'
  description: |
     'VisionLabs Luna-Faces'

     Service is intended for creation and management following entities:

        1. Temporary attributes. A temporary attribute is represented by the following fields:
          * basic attributes: age, gender, ethnicity and sample id list. Service supposes that basic attributes are as
             aggregated as a descriptor - from all samples.
           * list of descriptors with difference versions. Service supposes that each descriptor was aggregated from all
             samples
           * account id - the attribute owner
           * ttl - time to store the attribute in the service
        2. Face. A Face is an user logical entity. A Face contains the following fields:
           * user data - some string which user associates with the face
           * create time - time of the face creation
           * event id - event id associated with the face creation.
           * external id - user defined external id (non unique)
           * face attributes - basic attributes, list of descriptors difference version and corresponding samples ids.
           * account id - the face owner
        3. Lists. The Luna-Faces list is user defined list of faces. Each list is determined by the following data:
           * user data - some string which user associates with the list
           * create time - time of the list creation
           * last update time - time of last attachment or detachment of a face from the list
           * faces - list of faces attached to the list

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

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

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

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

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

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

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

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

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

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

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

    account_id:
      in: query
      name: account_id
      schema:
        $ref: '#/components/schemas/account_id'
      description: luna account id
      example: '8950722f-3fd4-4223-b48f-03f95f0e8dfb'

    required_account_id:
      in: query
      name: account_id
      schema:
        $ref: '#/components/schemas/account_id'
      description: luna account id which is owner of the resource
      example: '8950722f-3fd4-4223-b48f-03f95f0e8dfb'
      required: true

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

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

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

    list_id_uri:
      in: path
      name: list_id
      schema:
        $ref: '#/components/schemas/list_id'
      required: true
      description: list id (list_id received in the "create list" response)

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

    list_id__gte:
      in: query
      name: list_id__gte
      schema:
        type: string
        format: uuid
      description: lower list id including boundary.

    list_id__lt:
      in: query
      name: list_id__lt
      schema:
        type: string
        format: uuid
      description: upper list id excluding boundary.

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

    ttl:
      in: query
      name: ttl
      schema:
        type: integer
        default: 300
        maximum: 86400
        minimum: 1
      description: lifetime for temporary attribute (seconds)

    force:
      in: query
      name: force
      schema:
        type: integer
        default: 0
        enum: [0, 1]
      description: |
        replace an attribute if there exist attribute with same *attribute_id*. If parameter is equal to 0 and
        attribute with same *attribute_id* is exists the request will be failed.

    temporary_attributes_targets:
      in: query
      name: targets
      schema:
        type: string
        format: comma-separated items
        default: basic_attributes
      description: |
        list of comma-separated temporary attributes targets. Available targets: `face_descriptor`, `basic_attributes`,
        `basic_attributes_samples`, `face_descriptor_samples`, `account_id`, `create_time`, `attribute_id`

      example: basic_attributes,basic_attributes_samples,account_id

    descriptor_version:
      in: query
      name: descriptor_version
      schema:
        $ref: '#/components/schemas/descriptor_version'
      description: |
        descriptor version of the face descriptor attribute in response. By default used the platform defualt descriptor
        version.

    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 some part of the `user_data` value for this filter.
      example: "user_data_text"

    user_data__eq:
      in: query
      name: user_data__eq
      schema:
        type: string
      description: |
        find all objects with same `user_data`.
      example: "user_data_text"

    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"

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

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

    face_id__gte:
      in: query
      name: face_id__gte
      schema:
        type: string
        format: uuid
      description: lower face id including boundary.

    face_id__lt:
      in: query
      name: face_id__lt
      schema:
        type: string
        format: uuid
      description: upper face id excluding boundary.

    external_ids:
      in: query
      name: external_ids
      schema:
        type: string
        format: list of strings
      description: list of comma-separated external ids.

    event_id:
      in: query
      name: event_id
      schema:
        type: string
        format: uuid
      description: the event ID associated with the face creation.

    get_face_target:
      in: query
      name: targets
      schema:
        type: string
        default: "face_id,account_id,event_id,external_id,user_data,create_time,avatar,lists"
      description: |
        Comma-separated list of face target fields. Available targets: `face_id`, `account_id`, `event_id`,
        `external_id`, `user_data`, `create_time`, `avatar`, `lists`
      example: "face_id,user_data"

    ignore:
      in: query
      name: ignore
      schema:
        allOf:
          - $ref: '#/components/schemas/int01'
          - default: 0
      description: whether to ignore some face does not exist

    face_attributes_targets:
      in: query
      name: targets
      schema:
        type: string
        format: comma-separated items
        default: create_time,basic_attributes,basic_attributes_samples,face_descriptor,face_descriptor_samples
      description: |
        list of comma-separated temporary attributes targets. Available targets:
        `create_time`, `basic_attributes`, `basic_attributes_samples`, `face_descriptor`, `face_descriptor_samples`

    limit:
      in: query
      name: limit
      schema:
        $ref: '#/components/schemas/limit'
      description: the maximum count of results in the reply

    link_key__lt:
      in: query
      name: link_key__lt
      schema:
        $ref: '#/components/schemas/link_key'
      description: the upper excluding link_key boundary

    link_key__gte:
      in: query
      name: link_key__gte
      schema:
        $ref: '#/components/schemas/link_key'
      description: the lower including link_key boundary

    unlink_key__lt:
      in: query
      name: link_key__lt
      schema:
        $ref: '#/components/schemas/unlink_key'
      description: the upper excluding unlink_key boundary

    unlink_key__gte:
      in: query
      name: link_key__gte
      schema:
        $ref: '#/components/schemas/unlink_key'
      description: the lower including unlink_key boundary

    parity:
      in: query
      name: parity
      schema:
        type: integer
        enum: [0, 1]
      description: |
          keys' parity: 0 for even keys in batch and 1 for odd keys, parity filter is not used if not set

    use_parity:
      in: query
      name: use_parity
      schema:
        type: integer
        enum: [0, 1]
      description: link/unlink keys' parity - if 0 get max link/unlink keys, if 1 get max even and odd link/unlink keys separetely

    check_existence:
      in: query
      name: check_existence
      schema:
        type: integer
        enum: [0, 1]
      description: whether to check requested objects' existense

    receive_external_id:
      in: query
      name: receive_external_id
      schema:
        type: integer
        enum: [0, 1]
      description: whether to return external ids in the response

    missing_version:
      in: query
      name: missing_version
      schema:
        type: integer
      required: true
      description: a face descriptor of this version must be missing

    missing_limit:
      in: query
      name: limit
      schema:
        $ref: '#/components/schemas/missing_limit'
      description: the maximum count of faces in the reply

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

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

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

    required_deletion_time__lt:
      in: query
      name: deletion_time__lt
      schema:
        $ref: '#/components/schemas/time'
      description: upper bound for list deletion time.
      example: "2018-08-11T09:11:41.674Z"
      required: true

    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.
        link:
          type: string
          description: link to the documentation website with the error description.
      required: [error_code, detail, desc, link]
      example:
        error_code: 1
        detail: internal server error
        desc: internal server error
        link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-1"

    int_version:
      type: integer
      minimum: 0

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

    count:
      type: integer
      minimum: 0
      example: 146

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

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

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

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

    age:
      type: integer
      minimum: 0
      maximum: 100
      description: estimated age
      example: 35

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

    ethnicity:
      type: integer
      enum: [1, 2, 3, 4]
      description: |
        estimated ethnicity (predominant)

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

    sample_id:
      allOf:
        - $ref: '#/components/schemas/uuid'
        - example: 6d037c33-31ec-4d73-b3b3-ec80b09446c2
      description: sample id

    attributes_samples:
      type: array
      items:
        $ref: '#/components/schemas/sample_id'
      minItems: 0
      maxItems: 1000
      uniqueItems: True
      description: |
        list of *uniqie* sample ids which are resources for estimation attributes.

        > **WARNING**: if user does not set any attributes samples faces with such attributes will be skipped in
        a process of updating attributes with using new estimation algorithm.
      default: []
      example: [ee4c42b6-23ae-410e-a2aa-a4220e64ba4b, e909cfbe-29d3-44ed-a949-6cb700b89eba]

    external_id:
      description: user-defined external id for face.
      type: string
      maxLength: 36
      default: ''
      example: "3.1415926"

    user_data:
      description: user data.
      type: string
      maxLength: 128
      example: "100-00-12"
      default: ''

    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 for face, references to a sample or a user-defined reference.

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

    face_id:
      allOf:
        - $ref: '#/components/schemas/uuid'
        - example: 426542d6-5509-4e5b-8a01-e2abd5c0a8c6
      description: face id

    attribute_id:
      allOf:
        - $ref: '#/components/schemas/uuid'
        - example: 7fdf9225-3c06-4c21-b774-8bea99bcce20
      description: temporary attribute id

    event_id:
      allOf:
        - $ref: '#/components/schemas/uuid'
        - example: f9687459-986b-406d-9c1f-0d6289be5256
      description: the event ID associated with the face creation

    list_id:
      allOf:
        - $ref: '#/components/schemas/uuid'
        - example: 429b0e78-4616-426a-b57f-02baa72d638d
      description: luna list id.

    account_id:
      allOf:
        - $ref: '#/components/schemas/uuid'
        - example: 0468ca85-f6ca-4841-b30c-5ccc26b6f397
      description: id of the luna account.

    basic_attributes:
      type: object
      description: |
        basic attributes. Each basic attribute was aggregated from the samples. Samples is needed for re-extract
        attributes of new algorithm version and visualisation.

      properties:
        age:
          $ref: '#/components/schemas/age'
        gender:
          $ref: '#/components/schemas/gender'
        ethnicity:
          $ref: '#/components/schemas/ethnicity'
      required: [age, gender, ethnicity]

    sdk_descriptor_base64:
      type: string
      format: base64
      description: luna sdk descriptor encoded in base64

    xpk_file:
      type: string
      format: binary
      description:  xpk file with descriptors and basic attributes

    descriptor_version:
      type: integer
      description: the descriptor version
      enum: [46, 52, 54, 56, 57, 58, 59]
      example: 56

    raw_descriptor:
      type: string
      format: byte
      description: raw descriptor encoded in base64
      example: 2xQ2gprbMUePw1s9gw9fvA==

    descriptor_data:
      type: object
      description: descriptor and descriptor version
      properties:
        descriptor:
          $ref: '#/components/schemas/raw_descriptor'
        version:
          $ref: '#/components/schemas/descriptor_version'
      required: [descriptor, version]

    descriptor_base64_with_version:
      type: object
      description: descriptor and descriptor version
      properties:
        descriptor:
          $ref: '#/components/schemas/sdk_descriptor_base64'
        descriptor_version:
          $ref: '#/components/schemas/descriptor_version'
      required: [descriptor, descriptor_version]

    descriptor_base64_with_only_version:
      type: object
      description: descriptor and descriptor version
      properties:
        descriptor:
          $ref: '#/components/schemas/sdk_descriptor_base64'
        version:
          $ref: '#/components/schemas/descriptor_version'
      required: [descriptor, version]

    descriptor_base64:
      oneOf:
        - $ref: '#/components/schemas/descriptor_data'
        - $ref: '#/components/schemas/descriptor_base64_with_only_version'

    output_attribute_base:
      type: object
      properties:
        basic_attributes:
          allOf:
          - $ref: '#/components/schemas/basic_attributes'
          - description: '`null` if descriptor of the corresponding version was not extracted'
          - nullable: true
        face_descriptor_samples:
          $ref: '#/components/schemas/attributes_samples'
        basic_attributes_samples:
          $ref: '#/components/schemas/attributes_samples'
        account_id:
          $ref: '#/components/schemas/account_id'
        attribute_id:
          $ref: '#/components/schemas/attribute_id'
        create_time:
          allOf:
          - $ref: '#/components/schemas/time'
          - description: the attribute create time

    output_attribute:
      allOf:
        - $ref: '#/components/schemas/output_attribute_base'
        - properties:
            face_descriptor:
              allOf:
              - $ref: '#/components/schemas/sdk_descriptor_base64'
              - description: '`null` if descriptor of the corresponding version was not extracted'
              - nullable: true

    output_attribute_binary_descriptor:
      allOf:
        - $ref: '#/components/schemas/output_attribute_base'
        - properties:
            face_descriptor:
              allOf:
              - $ref: '#/components/schemas/sdk_descriptor_binary'
              - description: '`null` if descriptor of the corresponding version was not extracted'
              - nullable: true

    face_descriptors:
      description: |
        list of descriptors with different versions. Each descriptor was aggregated descriptor from the samples
      type: array
      maxItems: 1000
      items:
        $ref: '#/components/schemas/descriptor_base64'
      minItems: 1
      example:
        - descriptor: 2xQ2gprbMUePw1s9gw9fvA==
          version: 46
        - descriptor: 1xWqdsdwew32fsdsdw1s9gw9fvA==
          version: 56

    attribute_with_descriptors_no_account:
      type: object
      properties:
        face_descriptors:
          $ref: '#/components/schemas/face_descriptors'
        face_descriptor_samples:
          $ref: '#/components/schemas/attributes_samples'
      required: [face_descriptors]

    attribute_with_descriptors:
      allOf:
        - $ref: '#/components/schemas/attribute_with_descriptors_no_account'
        - properties:
            account_id:
              $ref: '#/components/schemas/account_id'
          required: [account_id]

    attribute_with_basic_attributes_no_account:
      type: object
      properties:
        basic_attributes:
          $ref: '#/components/schemas/basic_attributes'
        basic_attributes_samples:
          $ref: '#/components/schemas/attributes_samples'
      required: [basic_attributes]

    attribute_with_basic_attributes:
      allOf:
        - $ref: '#/components/schemas/attribute_with_basic_attributes_no_account'
        - properties:
            account_id:
              $ref: '#/components/schemas/account_id'
          required: [account_id]

    attribute_with_descriptors_and_basic_attributes_no_account:
      allOf:
        - $ref: '#/components/schemas/attribute_with_basic_attributes_no_account'
        - $ref: '#/components/schemas/attribute_with_descriptors_no_account'

    attribute_with_descriptors_and_basic_attributes_no_account_binary:
      allOf:
        - $ref: '#/components/schemas/attribute_with_basic_attributes_no_account'
        - $ref: '#/components/schemas/face_descriptors_binary'

    attribute_with_descriptors_and_basic_attributes:
      allOf:
        - $ref: '#/components/schemas/attribute_with_descriptors'
        - $ref: '#/components/schemas/attribute_with_basic_attributes'

    attribute_no_account:
      oneOf:
        - $ref: '#/components/schemas/attribute_with_descriptors_and_basic_attributes_no_account'
        - $ref: '#/components/schemas/attribute_with_basic_attributes_no_account'
        - $ref: '#/components/schemas/attribute_with_descriptors_no_account'

    attribute_no_account_binary:
      oneOf:
        - $ref: '#/components/schemas/attribute_with_descriptors_and_basic_attributes_no_account_binary'
        - $ref: '#/components/schemas/attribute_with_basic_attributes_no_account'
        - $ref: '#/components/schemas/face_descriptors_binary'

    created_attribute:
      oneOf:
        - $ref: '#/components/schemas/attribute_with_descriptors_and_basic_attributes'
        - $ref: '#/components/schemas/attribute_with_descriptors'
        - $ref: '#/components/schemas/attribute_with_basic_attributes'

    descriptor_binary:
      type: object
      description: descriptor and descriptor version
      properties:
        descriptor:
          type: string
          format: binary
          description: raw descriptor
        descriptor_version:
          $ref: '#/components/schemas/descriptor_version'
      required: [descriptor, descriptor_version]

    descriptor_binary_version:
      type: object
      description: descriptor and descriptor version
      properties:
        descriptor:
          type: string
          format: binary
          description: raw descriptor
        version:
          $ref: '#/components/schemas/descriptor_version'
      required: [descriptor, version]

    sdk_descriptor_binary:
      type: string
      format: binary
      description: luna sdk descriptor. The descriptor version, a signature and descriptor.

    payload_basic_attributes:
      allOf:
        - $ref: '#/components/schemas/attribute_with_basic_attributes_no_account'
      required: [basic_attributes]

    face_descriptors_binary:
      type: object
      properties:
        face_descriptors:
          description: |
            list of descriptors with different versions. Each descriptor was aggregated descriptor from the samples
          type: array
          maxItems: 1000
          items:
            $ref: '#/components/schemas/descriptor_binary_version'
          minItems: 1
        face_descriptor_samples:
          $ref: '#/components/schemas/attributes_samples'
      required: [face_descriptors]

    payload_binary_descriptors_and_basic_attributes:
      allOf:
        - $ref: '#/components/schemas/payload_basic_attributes'
        - $ref: '#/components/schemas/face_descriptors_binary'

    created_attribute_msgpack:
      oneOf:
        - $ref: '#/components/schemas/payload_binary_descriptors_and_basic_attributes'
        - $ref: '#/components/schemas/face_descriptors_binary'
        - $ref: '#/components/schemas/payload_basic_attributes'
      properties:
        account_id:
          $ref: '#/components/schemas/account_id'
      required: [account_id]

    created_attribute_xpk:
      type: object
      properties:
        xpk_file:
          allOf:
          - description: |
              xpk file with descriptors. This part must have valid Content-Type
              header `application/x-vl-xpk`

              > **WARNING**: basic attributes will be inored
          - $ref: '#/components/schemas/xpk_file'

        meta:
          type: object
          properties:
            face_descriptor_samples:
              $ref: '#/components/schemas/attributes_samples'
            basic_attributes_samples:
              $ref: '#/components/schemas/attributes_samples'
            account_id:
              $ref: '#/components/schemas/account_id'
          description: This part must have valid Content-Type header `application/json`
          required: [account_id]
      required: [xpk_file, meta]

    attributes_count:
      type: object
      properties:
        attributes_count:
          allOf:
          - $ref: '#/components/schemas/count'
          description: temporary attribute count
      description: temporary attribute count
      required: [attributes_count]

    attribute_samples:
      type: object
      properties:
        samples:
          type: array
          maxItems: 1000
          items:
            $ref: '#/components/schemas/sample_id'
          minItems: 0
          uniqueItems: True
      description: list of all uniqie samples
      required: [samples]
      example:
        samples:
          - 0d1cc36e-d719-4f54-8abe-4e5e0cb1f43c
          - 2f1cbb34-12e5-486c-8f7f-57273053c32d

    created_list:
      type: object
      properties:
        account_id:
          $ref: '#/components/schemas/account_id'
        user_data:
          $ref: '#/components/schemas/user_data'
      required: [account_id]

    list:
      type: object
      properties:
        account_id:
          $ref: '#/components/schemas/account_id'
        list_id:
          $ref: '#/components/schemas/list_id'
        user_data:
          allOf:
            - $ref: '#/components/schemas/user_data'
            - description: user-defined list description
        create_time:
          allOf:
            - $ref: '#/components/schemas/time'
            - description: the list create time
        last_update_time:
          allOf:
            - $ref: '#/components/schemas/time'
            - description: date and time with timezone of last action with list (attach or detach face from list)
      required: [list_id, user_data, account_id, create_time, last_update_time]

    updated_list:
      type: object
      properties:
        user_data:
          allOf:
          - $ref: '#/components/schemas/user_data'
          - description: new description
      required: [user_data]

    deleted_lists:
      type: object
      properties:
        list_ids:
          type: array
          maxItems: 1000
          items:
            $ref: '#/components/schemas/list_id'
          minItems: 1
          description: ids of list for removal
      required: [list_ids]

    lists_count:
      type: object
      properties:
        lists_count:
          allOf:
          - $ref: '#/components/schemas/count'
          description: list count
      description: list count
      required: [lists_count]

    attribute_set_by_attribute_id:
      type: object
      properties:
        attribute_id:
          $ref: '#/components/schemas/attribute_id'
      required: [attribute_id]

    face_attribute:
      oneOf:
        - $ref: '#/components/schemas/attribute_no_account'
        - $ref: '#/components/schemas/attribute_set_by_attribute_id'
      description: |
         face attribute. The attribute can be specified by temporary attribute ID or explicitly by attribute data.

    face_attribute_binary:
      # face_attribute with binary descriptor
      oneOf:
        - $ref: '#/components/schemas/attribute_no_account_binary'
        - $ref: '#/components/schemas/attribute_set_by_attribute_id'
      description: |
         face attribute. The attribute can be specified by temporary attribute ID or explicitly by attribute data.

    face_to_be_updated:
      type: object
      properties:
        event_id:
          allOf:
            - nullable: True
            - $ref: '#/components/schemas/event_id'
        external_id:
          $ref: '#/components/schemas/external_id'
        user_data:
          $ref: '#/components/schemas/user_data'
        avatar:
          $ref: '#/components/schemas/avatar'

    base_face_to_be_created:
      type: object
      properties:
        account_id:
          $ref: '#/components/schemas/account_id'
        event_id:
          $ref: '#/components/schemas/event_id'
        external_id:
          $ref: '#/components/schemas/external_id'
        user_data:
          $ref: '#/components/schemas/user_data'
        avatar:
          $ref: '#/components/schemas/avatar'
        lists:
          type: array
          maxItems: 1000
          items:
            $ref: '#/components/schemas/list_id'
          minItems: 1
          description: luna lists for linking face with them.
      required: [account_id]

    face_to_be_created:
      allOf:
        - $ref: '#/components/schemas/base_face_to_be_created'
        - properties:
            attribute:
              $ref: '#/components/schemas/face_attribute'

    face_to_be_created_binary:
      allOf:
        - $ref: '#/components/schemas/base_face_to_be_created'
        - properties:
            attribute:
              $ref: '#/components/schemas/face_attribute_binary'

    create_face_response:
      type: object
      properties:
        face_id:
          allOf:
            - $ref: '#/components/schemas/face_id'
          description: |
            ID of the created face.
            The ID can be used as the `face_id` parameter in [GET](#operation/getFace) `/faces/{face_id}`.
        url:
          type: string
          format: uri-reference
          description: relative URL of the created face.
      required: [url, face_id]
      example:
        face_id: b5d6fd45-fcca-453d-ac05-3e594054b813
        url: /2/faces/b5d6fd45-fcca-453d-ac05-3e594054b813

    face:
      type: object
      properties:
        face_id:
          $ref: '#/components/schemas/face_id'
        account_id:
          $ref: '#/components/schemas/account_id'
        event_id:
          allOf:
            - $ref: '#/components/schemas/event_id'
          nullable: True
        external_id:
          $ref: '#/components/schemas/external_id'
        user_data:
          $ref: '#/components/schemas/user_data'
        create_time:
          allOf:
            - $ref: "#/components/schemas/time"
            - format: date-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.

    faces_to_be_deleted:
      type: object
      properties:
        face_ids:
          type: array
          maxItems: 1000
          items:
            $ref: '#/components/schemas/face_id'
          minItems: 1
          description: ids of faces for removal
      required: [face_ids]

    faces_count:
      type: object
      properties:
        faces_count:
          allOf:
          - $ref: '#/components/schemas/count'
          description: face count
      description: face count
      required: [faces_count]

    output_face_attribute:
      type: object
      properties:
        attributes:
          type: object
          properties:
            create_time:
              allOf:
                - $ref: '#/components/schemas/time'
              description: face attribute create time
            basic_attributes:
              allOf:
                - $ref: '#/components/schemas/basic_attributes'
              nullable: true
            face_descriptor:
              allOf:
                - $ref: '#/components/schemas/descriptor_base64_with_version'
              nullable: true
            basic_attributes_samples:
              $ref: '#/components/schemas/attributes_samples'
            face_descriptor_samples:
              $ref: '#/components/schemas/attributes_samples'

    output_face_attribute_msgpack:
      # same as output_face_attribute, but descriptor is binary
      type: object
      properties:
        attributes:
          type: object
          properties:
            create_time:
              allOf:
                - $ref: '#/components/schemas/time'
                - nullable: true
              description: face attribute create time
            basic_attributes:
              allOf:
                - $ref: '#/components/schemas/basic_attributes'
              nullable: true
            face_descriptor:
              allOf:
                - $ref: '#/components/schemas/descriptor_binary'
              nullable: true
            basic_attributes_samples:
              $ref: '#/components/schemas/attributes_samples'
            face_descriptor_samples:
              $ref: '#/components/schemas/attributes_samples'

    limit:
      type: integer
      minimum: 1
      description: the maximum count of results in the reply

    missing_limit:
      type: integer
      minimum: 1
      maximum: 1000
      description: the maximum count of faces in the reply

    link_key:
      type: integer
      minimum: 0
      description: a list-face link unique number

    unlink_key:
      type: integer
      minimum: 0
      description: a list-face link deletion unique number

    list_attributes_reply:
      type: array
      items:
        type: object
        properties:
          attribute_id:
            $ref: '#/components/schemas/attribute_id'
          link_key:
            $ref: '#/components/schemas/link_key'
        required: [attribute_id, link_key]

    list_deletions_reply:
      type: array
      items:
        type: object
        properties:
          attributes_id:
            $ref: '#/components/schemas/attribute_id'
          link_key:
            $ref: '#/components/schemas/link_key'
          unlink_key:
            $ref: '#/components/schemas/unlink_key'
        required: [attributes_id, link_key, unlink_key]

    post_linkkeys:
      properties:
        list_ids:
          type: array
          maxItems: 1000
          items:
            $ref: '#/components/schemas/list_id'
          description: target list ids to get max link/unlink keys info
      required: [list_ids]

    post_linkkeys_reply_no_parity:
      description: |
        Parameter 'use_parity' was not used or was set to `0`

        *Resource returns only info about only existent lists in response.*
      type: object
      properties:
        lists:
          type: array
          items:
            type: object
            properties:
              list_id:
                $ref: '#/components/schemas/list_id'
              link_key:
                allOf:
                  - $ref: '#/components/schemas/link_key'
                  - nullable: true
              unlink_key:
                allOf:
                  - $ref: '#/components/schemas/unlink_key'
                  - nullable: true
            required: [list_id, link_key, unlink_key]
      required: [lists]


    post_linkkeys_reply_parity:
      description: |
        Parameter was set to `1`.

        *Resource returns only info about only existent lists in response.*
      type: object
      properties:
        lists:
          type: array
          items:
            type: object
            properties:
              list_id:
                $ref: '#/components/schemas/list_id'
              link_key_odd:
                allOf:
                  - $ref: '#/components/schemas/link_key'
                  - nullable: true
              link_key_even:
                allOf:
                  - $ref: '#/components/schemas/link_key'
                  - nullable: true
              unlink_key_odd:
                allOf:
                  - $ref: '#/components/schemas/unlink_key'
                  - nullable: true
              unlink_key_even:
                allOf:
                  - $ref: '#/components/schemas/unlink_key'
                  - nullable: true
            required: [list_id, link_key_odd, link_key_even, unlink_key_odd, unlink_key_even]
      required: [lists]

    post_linkkeys_reply:
      anyOf:
        - $ref: '#/components/schemas/post_linkkeys_reply_no_parity'
        - $ref: '#/components/schemas/post_linkkeys_reply_parity'

    post_attributes_batches_faces:
      type: object
      description: Face id list to obtain descriptors from. One of "face_ids" or "list" should be specified.
      properties:
        face_ids:
          type: array
          maxItems: 1000
          items:
            $ref: '#/components/schemas/face_id'
          description: face ids of faces whose descriptors should be obtained
      required: [face_ids]

    post_attributes_batches_list:
      type: object
      description: List to obtain descriptors from. One of "face_ids" or "list" should be specified.
      properties:
        list:
          type: object
          properties:
            list_id:
              $ref: '#/components/schemas/list_id'
            link_key__gte:
              $ref: '#/components/schemas/link_key'
            limit:
              allOf:
              - $ref: '#/components/schemas/limit'
              - minimum: 1
                maximum: 10000
          required: [list_id, link_key__gte, limit]
      required: [list]

    post_attributes_batches:
      oneOf:
        - $ref: '#/components/schemas/post_attributes_batches_faces'
        - $ref: '#/components/schemas/post_attributes_batches_list'

    linker:
      type: object
      properties:
        action:
          description: "action to perform: attach faces to list or detach"
          type: string
          enum: [attach, detach]
        face_ids:
          description: face ids
          type: array
          maxItems: 1000
          items:
            $ref: '#/components/schemas/uuid'
        list_id:
          allOf:
            - $ref: '#/components/schemas/uuid'
            -  description: list id
      required:
        - action
        - face_ids
        - list_id

    missing_faces:
      type: object
      properties:
        faces:
          type: array
          items:
            type: object
            properties:
              face_id:
                $ref: '#/components/schemas/face_id'
              samples:
                $ref: '#/components/schemas/attributes_samples'
            required: [face_id, samples]
      required: [faces]

    removed_face_descriptors:
      type: object
      properties:
        face_ids:
          type: array
          items:
            $ref: '#/components/schemas/face_id'
          description: |
            list face ids whose descriptors was removed
      required: [face_ids]

    face_descriptor_count_info:
      type: object
      properties:
        descriptor_count_info:
          type: array
          items:
            type: object
            properties:
              descriptor_version:
                $ref: '#/components/schemas/descriptor_version'
              descriptor_count:
                allOf:
                  - $ref: '#/components/schemas/count'
                  - description: number of descriptors
            required: [descriptor_version, descriptor_count]
          description: |
            list of descriptor count information
      required: [descriptor_count_info]

    face_basic_attributes_count:
      description: basic attributes count in db
      type: object
      properties:
        basic_attributes_count:
          allOf:
            - $ref: '#/components/schemas/count'
            - description: basic attributes count
      required: [basic_attributes_count]

    1000_face_ids:
      type: object
      properties:
        face_ids:
          type: array
          maxItems: 1000
          items:
            $ref: '#/components/schemas/face_id'
          minItems: 1
          description: ids of faces for search
      required: [face_ids]

    attribute_id_and_url:
      type: object
      properties:
        attribute_id:
          $ref: '#/components/schemas/attribute_id'
        url:
          type: string
          format: uri-reference
      required: [url, attribute_id]
      example:
        attribute_id: b5d6fd45-fcca-453d-ac05-3e594054b813
        url: /3/attributes/b5d6fd45-fcca-453d-ac05-3e594054b813

    lists_post_response:
      type: object
      properties:
        list_id:
          $ref: '#/components/schemas/list_id'
        url:
          type: string
          format: uri-reference
      required: [url, list_id]

    list_deletion:
      type: object
      descriptrion: information about a removed list
      properties:
        deletion_id:
          type: integer
          description: ID of the list deletion
          example: 146
        list_id:
          $ref: '#/components/schemas/list_id'
        account_id:
          $ref: '#/components/schemas/account_id'
        create_time:
          allOf:
            - $ref: '#/components/schemas/time'
            - description: the list create time
        deletion_time:
          allOf:
            - $ref: '#/components/schemas/time'
            - description: the list removal time
      required: [deletion_id, list_id, account_id, create_time, deletion_time]
      example:
        list_id: '4230d3d3-173a-47b6-a4e3-28e0620bf323'
        deletion_id: 146
        account_id: '95660f66-cf18-4518-be21-09214756a6f9'
        create_time: '2021-02-15T15:01:52.348098+03:00'
        deletion_time: '2021-03-15T15:01:53.169921+03:00'

    removed_lists:
      type: object
      description: deletion list log
      properties:
        removed_lists:
          type: array
          items:
            $ref: '#/components/schemas/list_deletion'
      required: [removed_lists]

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

    health_errors:
      type: object
      properties:
        errors:
          description: failed healthcheck execution info
          type: array
          items:
            type: object
            properties:
              component:
                description: component name
                type: string
              error:
                allOf:
                  - description: healthcheck error
                  - $ref: '#/components/schemas/error'
              status:
                description: component health status
                type: integer
                enum: [ 0, 1 ]
            required: [ component, error, status ]
      required: [ errors ]
      example:
        errors:
          - component: attributes_db
            error:
              error_code: 10017
              desc: Database error
              detail: Database connection timeout error
              link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-10017"
            status: 0
          - component: faces_db
            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'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'

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

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

      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/version'
            application/msgpack:
              schema:
                $ref: '#/components/schemas/version'
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/faces:
    parameters:
      - $ref: '#/components/parameters/Accept'
    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/application_json_or_msgpack_content'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/face_to_be_created'
            examples:
              create_face_with_attribute_by_attribute_data:
                value:
                  account_id: 0468ca85-f6ca-4841-b30c-5ccc26b6f397
                  event_id: 557d54ec-29ad-4f3c-93b4-c9092ef12515
                  external_id: 2xQ2gprbMUePw1s9gw9fvA==
                  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']
                  attribute:
                    basic_attributes:
                      age: 18
                      gender: 0
                      ethnicity: 4
                    basic_attributes_samples:
                      - 0d1cc36e-d719-4f54-8abe-4e5e0cb1f43c
                      - 2f1cbb34-12e5-486c-8f7f-57273053c32d
                    face_descriptors:
                      - descriptor: 2xQ2gprbMUePw1s9gw9fvA==
                        version: 46
                      - descriptor: 1xWqdsdwew32fsdsdw1s9gw9fvA==
                        version: 56
                    face_descriptor_samples:
                      - ee4c42b6-23ae-410e-a2aa-a4220e64ba4b
                      - e909cfbe-29d3-44ed-a949-6cb700b89eba
                summary: create face with attribute specified by attribute data
              create_face_with_attribute_by_attribute_id:
                value:
                  account_id: 0468ca85-f6ca-4841-b30c-5ccc26b6f397
                  event_id: 557d54ec-29ad-4f3c-93b4-c9092ef12515
                  external_id: 2xQ2gprbMUePw1s9gw9fvA==
                  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']
                  attribute:
                    attribute_id: 'b668c4a5-2191-476e-a261-3b4f9ce2e25e'
                summary: create face with attribute specified by attribute id
          application/msgpack:
            schema:
              $ref: '#/components/schemas/face_to_be_created_binary'
        required: true
      responses:
        201:
          description: Create success.
          headers:
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/create_face_response'
            application/msgpack:
              schema:
                $ref: '#/components/schemas/create_face_response'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_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)'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022"
                attribute_not_found:
                  value:
                    error_code: 22011
                    desc: Object not found
                    detail: Attribute with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22011"
        403:
          $ref: '#/components/responses/license_problem'
        500:
          $ref: '#/components/responses/internal_server_error'

    get:
      tags:
      - faces
      summary: get faces
      description: Get faces according to filters.
      operationId: getFaces
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_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/event_id'
      - $ref: '#/components/parameters/face_ids'
      - $ref: '#/components/parameters/face_id__lt'
      - $ref: '#/components/parameters/face_id__gte'
      - $ref: '#/components/parameters/external_ids'
      - $ref: '#/components/parameters/user_data'
      - $ref: '#/components/parameters/list_id'
      - $ref: '#/components/parameters/get_face_target'
      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                type: object
                properties:
                  faces:
                    type: array
                    items:
                      $ref: '#/components/schemas/face'
                    minItems: 0
            application/msgpack:
              schema:
                type: object
                properties:
                  faces:
                    type: array
                    items:
                      $ref: '#/components/schemas/face'
                    minItems: 0
        400:
          description: Bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
                bad_target:
                  value:
                    error_code: 22016
                    desc: Bad/incomplete input data
                    detail: '''not_a_target'' is not valid target to get faces. Valid target should be one of
                            [''face_id'', ''account_id'', ''event_id'', ''user_data'',
                            ''create_time'', ''external_id'', ''avatar'', ''lists''].'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22016"
        500:
          $ref: '#/components/responses/internal_server_error'

    delete:
      tags:
        - faces
      summary: delete faces
      description: Delete several faces.
      operationId: deleteFaces
      parameters:
        - $ref: '#/components/parameters/application_json_or_msgpack_content'
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/account_id'
        - $ref: '#/components/parameters/ignore'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/faces_to_be_deleted'
          application/msgpack:
            schema:
              $ref: '#/components/schemas/faces_to_be_deleted'
      responses:
        204:
          description: Delete success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        400:
          description: Bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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 (''faces'' was unexpected)'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022"
        404:
          description: Face not found.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22002"
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/faces/count:
    parameters:
      - $ref: '#/components/parameters/Accept'
    get:
      tags:
        - faces
      summary: get face count
      description: |
        get face count

      operationId: getFaceCount
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/account_id'
        - $ref: '#/components/parameters/create_time__lt'
        - $ref: '#/components/parameters/create_time__gte'
        - $ref: '#/components/parameters/event_id'
        - $ref: '#/components/parameters/face_ids'
        - $ref: '#/components/parameters/face_id__lt'
        - $ref: '#/components/parameters/face_id__gte'
        - $ref: '#/components/parameters/external_ids'
        - $ref: '#/components/parameters/user_data'
        - $ref: '#/components/parameters/list_id'
      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/faces_count'
            application/msgpack:
              schema:
                $ref: '#/components/schemas/faces_count'
        400:
          description: Bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/faces/attributes/count:
    parameters:
      - $ref: '#/components/parameters/Accept'
    get:
      tags:
        - faces
      summary: get count of faces with attributes
      description: |
        count faces with attributes

      operationId: getFaceAttributeCount
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/faces_count'
            application/msgpack:
              schema:
                $ref: '#/components/schemas/faces_count'
        400:
          description: Bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/faces/{face_id}:
    parameters:
    - in: path
      name: face_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the face (`face_id` received in the "create face" request).
    - $ref: '#/components/parameters/Accept'

    put:
      tags:
        - faces
      summary: put face
      description: |
        Put face.

        The face can be attached to one or several lists.

      operationId: putFace
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/application_json_or_msgpack_content'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/face_to_be_created'
            examples:
              put_face_with_attribute_by_attribute_data:
                value:
                  account_id: 0468ca85-f6ca-4841-b30c-5ccc26b6f397
                  event_id: 557d54ec-29ad-4f3c-93b4-c9092ef12515
                  external_id: 2xQ2gprbMUePw1s9gw9fvA==
                  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']
                  attribute:
                    basic_attributes:
                      age: 18
                      gender: 0
                      ethnicity: 4
                    basic_attributes_samples:
                      - 0d1cc36e-d719-4f54-8abe-4e5e0cb1f43c
                      - 2f1cbb34-12e5-486c-8f7f-57273053c32d
                    face_descriptors:
                      - descriptor: 2xQ2gprbMUePw1s9gw9fvA==
                        version: 46
                      - descriptor: 1xWqdsdwew32fsdsdw1s9gw9fvA==
                        version: 56
                    face_descriptor_samples:
                      - ee4c42b6-23ae-410e-a2aa-a4220e64ba4b
                      - e909cfbe-29d3-44ed-a949-6cb700b89eba
                summary: put face with attribute specified by attribute data
              put_face_with_attribute_by_attribute_id:
                value:
                  account_id: 0468ca85-f6ca-4841-b30c-5ccc26b6f397
                  event_id: 557d54ec-29ad-4f3c-93b4-c9092ef12515
                  external_id: 2xQ2gprbMUePw1s9gw9fvA==
                  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']
                  attribute:
                    attribute_id: 'b668c4a5-2191-476e-a261-3b4f9ce2e25e'
                summary: put face with attribute specified by attribute id
          application/msgpack:
            schema:
              $ref: '#/components/schemas/face_to_be_created_binary'
        required: true
      responses:
        200:
          description: Put success.
          headers:
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/create_face_response'
            application/msgpack:
              schema:
                $ref: '#/components/schemas/create_face_response'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_json:
                  value:
                    error_code: 12022
                    desc: Bad/incomplete input data
                    detail: "Failed to validate input json. Path: '',  message: 'data must contain ['account_id'] properties'"
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
                attribute_not_found:
                  value:
                    error_code: 22011
                    desc: Object not found
                    detail: Attribute with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22011"
        403:
          $ref: '#/components/responses/license_problem'
        404:
          description: Face not found.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22002"
        500:
          $ref: '#/components/responses/internal_server_error'

    get:
      tags:
      - faces
      summary: get face
      description: |
        Get face by ID.

        > **NOTE**: To get the face *attribute* data use method [GET](#operation/getFaceAttributes)
          on `/faces/{face_id}/attributes`.

      operationId: getFace
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      - $ref: '#/components/parameters/get_face_target'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/face'
            application/msgpack:
              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'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12017"
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
                bad_target:
                  value:
                    error_code: 22016
                    desc: Bad/incomplete input data
                    detail: '''not_a_target'' is not valid target to get faces. Valid target should be one of
                            [''face_id'', ''account_id'', ''event_id'', ''user_data'',
                            ''create_time'', ''external_id'', ''avatar'', ''lists''].'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22016"
        404:
          description: Face not found.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22002"
        500:
          $ref: '#/components/responses/internal_server_error'

    head:
      tags:
      - faces
      summary: check face existence
      description:  Check existence of the face by ID.
      operationId: checkFace
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          description: Face not found.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22002"
        500:
          $ref: '#/components/responses/internal_server_error'

    patch:
      tags:
      - faces
      summary: update face
      description: |
        Update face fields: *user_data*, *avatar*, *external_id*, *event_id*.

        > **NOTE**: To update the face *attribute* data use method [PATCH](#operation/patchFaceAttributes)
          on `/faces/{face_id}/attributes`.

      operationId: patchFace
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      - $ref: '#/components/parameters/application_json_or_msgpack_content'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/face_to_be_updated'
          application/msgpack:
            schema:
              $ref: '#/components/schemas/face_to_be_updated'
        required: true
      responses:
        204:
          description: Update success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12017"
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
                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)'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022"
        404:
          description: Face not found.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              example:
                error_code: 22002
                desc: Object not found
                detail: Face with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22002"
        500:
          $ref: '#/components/responses/internal_server_error'

    delete:
      tags:
      - faces
      summary: delete face
      description: Remove face by ID.
      operationId: deleteFace
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        204:
          description: Delete success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          description: Face not found.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22002"
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/faces/{face_id}/attributes:
    parameters:
    - in: path
      name: face_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the face (`face_id` received in the "create face" request).
    - $ref: '#/components/parameters/Accept'

    put:
      tags:
        - face attributes
      summary: put face attribute
      description: |
        Put face attribute.

        The attribute can be specified by temporary attribute ID or explicitly by attribute data.

      operationId: putFaceAttributes
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/application_json_or_msgpack_content'
        - $ref: '#/components/parameters/account_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/face_attribute'
            examples:
              put_face_attribute_by_attribute_data:
                value:
                  basic_attributes:
                    age: 18
                    gender: 0
                    ethnicity: 4
                  basic_attributes_samples:
                    - 0d1cc36e-d719-4f54-8abe-4e5e0cb1f43c
                    - 2f1cbb34-12e5-486c-8f7f-57273053c32d
                  face_descriptors:
                    - descriptor: 2xQ2gprbMUePw1s9gw9fvA==
                      version: 46
                    - descriptor: 1xWqdsdwew32fsdsdw1s9gw9fvA==
                      version: 56
                  face_descriptor_samples:
                    - ee4c42b6-23ae-410e-a2aa-a4220e64ba4b
                    - e909cfbe-29d3-44ed-a949-6cb700b89eba
                summary: put face attribute specified by attribute data
              put_face_attribute_by_attribute_id:
                value:
                  attribute_id: 'b668c4a5-2191-476e-a261-3b4f9ce2e25e'
                summary: put face attribute specified by attribute id
          application/msgpack:
            schema:
              $ref: '#/components/schemas/face_attribute_binary'
        required: true
      responses:
        204:
          description: Put success.
          headers:
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_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)'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022"
                attribute_not_found:
                  value:
                    error_code: 22011
                    desc: Object not found
                    detail: Attribute with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22011"
        403:
          $ref: '#/components/responses/license_problem'
        404:
          description: Face not found.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22002"
        500:
          $ref: '#/components/responses/internal_server_error'

    get:
      tags:
      - face attributes
      summary: get face attribute
      description: Get face attribute by ID.
      operationId: getFaceAttributes
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/account_id'
        - $ref: '#/components/parameters/face_attributes_targets'
        - $ref: '#/components/parameters/descriptor_version'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/output_face_attribute'
            application/msgpack:
              schema:
                $ref: '#/components/schemas/output_face_attribute_msgpack'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12017"
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
                bad_target:
                  value:
                    error_code: 22016
                    desc: Bad/incomplete input data
                    detail: '''not_a_target'' is not valid target to get faces. Valid target should be one of
                            [''basic_attributes'', ''face_descriptor_samples'', ''face_descriptor'',
                            ''create_time'', ''basic_attributes_samples''].'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22016"
        404:
          description: Face not found.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22002"
        500:
          $ref: '#/components/responses/internal_server_error'

    patch:
      tags:
      - face attributes
      summary: update face attribute
      description: |
        Update face attribute data: *basic_attributes*, *basic_attributes_samples*, *face_descriptor*,
        *face_descriptor_samples*.

      operationId: patchFaceAttributes
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/attribute_no_account'
        required: true
      responses:
        204:
          description: Update success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12017"
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
                bad_json:
                  value:
                    error_code: 12022
                    desc: Bad/incomplete input data
                    detail: "Failed to validate input json. Path: '',  message: 'basic_attributes must not contain {'unexpected'} properties'"
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022"
                non_unique_basic_attributes_samples:
                  value:
                    error_code: 12022
                    desc: Bad/incomplete input data
                    detail: 'Failed to validate input json. Path: ''basic_attributes_samples'',  message:
                            ''basic_attributes_samples must contain unique items'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022"
                non_unique_face_descriptor_samples:
                  value:
                    error_code: 12022
                    desc: Bad/incomplete input data
                    detail: 'Failed to validate input json. Path: ''face_descriptor_samples'',  message:
                            ''face_descriptor_samples must contain unique items'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022"
                attribute_for_update_not_found:
                  value:
                    error_code: 22010
                    desc: Object not found
                    detail: Attribute with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' for update not found
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22010"
                sample_conflict:
                  value:
                    error_code: 22019
                    desc: Conflict input data
                    detail: Existing attribute (with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37') samples do not match specified
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22019"
        404:
          description: Face not found.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              example:
                  error_code: 22002
                  desc: Object not found
                  detail: Face with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                  link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22002"
        500:
          $ref: '#/components/responses/internal_server_error'

    delete:
      tags:
      - face attributes
      summary: delete face attribute
      description: Remove face attribute by ID.
      operationId: deleteFaceAttributes
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        204:
          description: Delete success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          description: Face not found.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22002"
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/faces/{face_id}/attributes/samples:
    parameters:
    - in: path
      name: face_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the face (`face_id` received in the "create face" request).
    - $ref: '#/components/parameters/Accept'

    get:
      tags:
      - face attributes
      summary: get face attribute samples
      description: Get face attribute samples by face ID.
      operationId: getFaceAttributeSamples
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/attribute_samples'
            application/msgpack:
              schema:
                $ref: '#/components/schemas/attribute_samples'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12017"
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          description: Face not found.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22002"
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/attributes:
    parameters:
      - $ref: '#/components/parameters/Accept'
    post:
      tags:
      - temporary attributes
      summary: create a temporary attribute
      description: |
        Creating new temporary attributes. The attribute has a ttl and after an expire the time attribute will be
        removed from the service.

      operationId: createAttribute
      parameters:
      - in: header
        name: Content-Type
        schema:
          type: string
          enum:
            - application/json
            - application/msgpack
            - multipart/form-data
        description: Format of a request body data.

      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/ttl'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/created_attribute'
          application/msgpack:
            schema:
              $ref: '#/components/schemas/created_attribute_msgpack'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/created_attribute_xpk'
            encoding:
              xpk:
                contentType: application/x-vl-xpk
              meta:
                contentType: application/json
        required: true
      responses:
        201:
          description: attribute is created.
          headers:
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Location:
              schema:
                type: string
                format: url
                example: /3/attributes/b5d6fd45-fcca-453d-ac05-3e594054b813
              description:  Location of new attribute.
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/attribute_id_and_url'
            application/msgpack:
              schema:
                $ref: '#/components/schemas/attribute_id_and_url'
        400:
          description: Bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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: ''face_descriptors[0]'',  message:
                    ''face_descriptors[0] must be valid exactly by one of oneOf definition'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022"
                broken_descriptor:
                  value:
                    error_code: 12034
                    desc: Bad/incomplete input data
                    detail: 'Descriptor has incorrect length ''23'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12034"
                broken_xpk:
                  value:
                    error_code: 12035
                    desc: Bad/incomplete input data
                    detail: 'Failed to parse xpk file'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12035"
                unknown_descriptor_version:
                  value:
                    error_code: 12036
                    desc: Bad/incomplete input data
                    detail: 'Descriptor version 37 is not registered in the system'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12036"
                xpk_without_descriptor:
                  value:
                    error_code: 12037
                    desc: Bad/incomplete input data
                    detail: 'XPK file does not contain descriptor'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12037"
                not_valid_sdk_descriptor:
                  value:
                    error_code: 12038
                    desc: Bad/incomplete input data
                    detail: 'SDK descriptor is not valid'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12038"
                unknown_multipart_name:
                  value:
                    error_code: 12039
                    desc: Bad/incomplete input data
                    detail: 'Unknown multipart name ''account'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12039"
                duplicate_multipart_name:
                  value:
                    error_code: 12040
                    desc: Bad/incomplete input data
                    detail: 'Duplicate multipart name ''meta'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12040"
                bad_multipart_content_type:
                  value:
                    error_code: 12041
                    desc: Bad/incomplete input data
                    detail: 'Multipart with name ''meta'' has bad Content-Type'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12041"
        500:
          $ref: '#/components/responses/internal_server_error'

    get:
      tags:
        - temporary attributes
      summary: get temporary attributes
      description: |
        Get temporary attribute by IDs.
      operationId: getAttributes
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/required_attribute_ids'
      - $ref: '#/components/parameters/account_id'
      - $ref: '#/components/parameters/temporary_attributes_targets'
      - $ref: '#/components/parameters/descriptor_version'
      - $ref: '#/components/parameters/accept_content_type'
      responses:
        200:
          description: OK.
          headers:
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                type: object
                properties:
                  attributes:
                    type: array
                    items:
                      $ref: '#/components/schemas/output_attribute'
                required: [attributes]
              examples:
                default:
                  value:
                    attributes:
                    - basic_attributes:
                        age: 33
                        gender: 1
                        ethnicity: 3
                full:
                  value:
                    attributes:
                    - account_id: 0d1cc36e-d719-4f54-8abe-4e5e0cb1f43c
                      basic_attributes:
                        age: 33
                        gender: 1
                        ethnicity: 3
                      face_descriptor: 2xQ2gprbMUePw1s9gw9fvA==
                      face_descriptor_samples:
                      - 0d1cc36e-d719-4f54-8abe-4e5e0cb1f43c
                      - 2f1cbb34-12e5-486c-8f7f-57273053c32d
                      basic_attributes_samples: [00000000-0000-4000-8000-000000000000]
                      attribute_id: 7fdf9225-3c06-4c21-b774-8bea99bcce20
                    - account_id: 0d1cc36e-d719-4f54-8abe-4e5e0cb1f43c
                      basic_attributes:
                        age: 33
                        gender: 1
                        ethnicity: 3
                      face_descriptor: null
                      face_descriptor_samples:
                        - 0d1cc36e-d719-4f54-8abe-4e5e0cb1f43c
                        - 2f1cbb34-12e5-486c-8f7f-57273053c32d
                      basic_attributes_samples: [00000000-0000-4000-8000-000000000000]
                      attribute_id: 7fdf9225-3c06-4c21-b774-8bea99bcce20
            application/msgpack:
              schema:
                type: object
                properties:
                  attributes:
                    type: array
                    items:
                      $ref: '#/components/schemas/output_attribute_binary_descriptor'
                required: [attributes]
        400:
          description: Bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/attributes/batches:
    post:
      tags:
      - descriptors_caching
      summary:  get face descriptor batches
      description: |
         Get face descriptors using face ids or list id with filters. Returns requested descriptors as SDKData object
      operationId: getFaceDescriptorsBatches
      parameters:
      - $ref: '#/components/parameters/check_existence'
      - $ref: '#/components/parameters/parity'
      - $ref: '#/components/parameters/receive_external_id'
      - $ref: '#/components/parameters/application_json_or_msgpack_content'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/post_attributes_batches'
          application/msgpack:
            schema:
              $ref: '#/components/schemas/post_attributes_batches'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/flatbuf'
          content:
            application/x-flatbuf:
              schema:
                type: string
                format: binary
                description: descriptor batches as root SDK object
        400:
          description: Bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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 'parity'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
                list_not_found:
                  value:
                    error_code: 22003
                    desc: Object not found
                    detail: List with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22003"
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/attributes/count:
    parameters:
      - $ref: '#/components/parameters/Accept'
    get:
      tags:
        - temporary attributes
      summary: get temporary attributes count
      description: |
        get temporary attributes count

        > **WARNING**:  there is no ability to get attribute count by accounts

      operationId: getTemporaryAttributesCount
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      responses:
        200:
          description: Ok
          headers:
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/attributes_count'
              example:
                attributes_count: 146
            application/msgpack:
              schema:
                $ref: '#/components/schemas/attributes_count'
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/attributes/{attribute_id}:
    parameters:
    - in: path
      name: attribute_id
      schema:
        $ref: '#/components/schemas/attribute_id'
      required: true
      description: ID of the temporary attribute.

    put:
      tags:
      - temporary attributes
      summary: put temporary attribute
      description: |
        Put temporary attribute by ID.
      operationId: putAttribute
      parameters:
        - in: header
          name: Content-Type
          schema:
            type: string
            enum:
              - application/json
              - multipart/form-data
              - application/msgpack
          description: Format of a request body data.

        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/ttl'
        - $ref: '#/components/parameters/force'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/created_attribute'
          application/msgpack:
            schema:
              $ref: '#/components/schemas/created_attribute_msgpack'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/created_attribute_xpk'
            encoding:
              xpk:
                contentType: application/x-vl-xpk
              meta:
                contentType: application/json
        required: true
      responses:
        204:
          description: Attribute is saved.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Location:
              schema:
                type: string
                format: url
                example: /3/attributes/b5d6fd45-fcca-453d-ac05-3e594054b813
              description:  location of the attribute
              required: true
        400:
          description: Bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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 'force'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
                bad_json:
                  value:
                    error_code: 12022
                    desc: Bad/incomplete input data
                    detail: 'Failed to validate input json. Path: '''',  message:
                    ''face_descriptors[0] must be valid exactly by one of oneOf definition'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022"
                broken_descriptor:
                  value:
                    error_code: 12034
                    desc: Bad/incomplete input data
                    detail: 'Descriptor has incorrect length ''23'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12034"
                broken_xpk:
                  value:
                    error_code: 12035
                    desc: Bad/incomplete input data
                    detail: 'Failed to parse xpk file'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12035"
                unknown_descriptor_version:
                  value:
                    error_code: 12036
                    desc: Bad/incomplete input data
                    detail: 'Descriptor version 37 is not registered in the system'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12036"
                xpk_without_descriptor:
                  value:
                    error_code: 12037
                    desc: Bad/incomplete input data
                    detail: 'XPK file does not contain descriptor'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12037"
                not_valid_sdk_descriptor:
                  value:
                    error_code: 12038
                    desc: Bad/incomplete input data
                    detail: 'SDK descriptor is not valid'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12038"
                unknown_multipart_name:
                  value:
                    error_code: 12039
                    desc: Bad/incomplete input data
                    detail: 'Unknown multipart name ''account'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12039"
                duplicate_multipart_name:
                  value:
                    error_code: 12040
                    desc: Bad/incomplete input data
                    detail: 'Duplicate multipart name ''meta'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12040"
                bad_multipart_content_type:
                  value:
                    error_code: 12041
                    desc: Bad/incomplete input data
                    detail: 'Multipart with name ''meta'' has bad Content-Type'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12041"
        404:
          description: Attributes not found.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              example:
                  error_code: 22011
                  desc: Object not found
                  detail: Attributes with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                  link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22011"
        409:
          description: Integrity error.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_query_param:
                  value:
                    error_code: 22021
                    desc: Integrity error
                    detail: Attribute with id 'a208e3ca-a689-432b-b4f9-96887c044551' already exist
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22021"
        500:
          $ref: '#/components/responses/internal_server_error'
    get:
      tags:
        - temporary attributes
      summary: get temporary attribute
      description: |
        Get temporary attribute by ID.
      operationId: getAttribute
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/descriptor_version'
      - $ref: '#/components/parameters/account_id'
      - $ref: '#/components/parameters/temporary_attributes_targets'
      - $ref: '#/components/parameters/accept_content_type'
      - $ref: '#/components/parameters/Accept'
      responses:
        200:
          description: OK.
          headers:
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/msgpack:
              schema:
                $ref: '#/components/schemas/output_attribute_binary_descriptor'
            application/json:
              schema:
                $ref: '#/components/schemas/output_attribute'
              examples:
                default:
                  value:
                      basic_attributes:
                        age: 33
                        gender: 1
                        ethnicity: 3
                full:
                  value:
                    account_id: 0d1cc36e-d719-4f54-8abe-4e5e0cb1f43c
                    basic_attributes:
                      age: 33
                      gender: 1
                      ethnicity: 3
                    face_descriptor: 2xQ2gprbMUePw1s9gw9fvA==
                    face_descriptor_samples:
                    - 0d1cc36e-d719-4f54-8abe-4e5e0cb1f43c
                    - 2f1cbb34-12e5-486c-8f7f-57273053c32d
                    basic_attributes_samples: [00000000-0000-4000-8000-000000000000]
                    attribute_id: 7fdf9225-3c06-4c21-b774-8bea99bcce20
                full_with_null:
                  value:
                    attribute_id: 7fdf9225-3c06-4c21-b774-8bea99bcce20
                    account_id: 0d1cc36e-d719-4f54-8abe-4e5e0cb1f43c
                    basic_attributes:
                      age: 33
                      gender: 1
                      ethnicity: 3
                    face_descriptor: null
                    face_descriptor_samples:
                      - 0d1cc36e-d719-4f54-8abe-4e5e0cb1f43c
                      - 2f1cbb34-12e5-486c-8f7f-57273053c32d
                    basic_attributes_samples: [00000000-0000-4000-8000-000000000000]
        400:
          description: Bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          description: Attributes not found.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              example:
                  error_code: 22011
                  desc: Object not found
                  detail: Attributes with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                  link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22011"
        500:
          $ref: '#/components/responses/internal_server_error'
    head:
      tags:
        - temporary attributes
      summary: check temporary attribute
      description: |
        Check temporary attribute existence.
      operationId: checkAttribute
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'

      responses:
        200:
          description: OK.
          headers:
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        400:
          description: Bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
        404:
          description: attributes not found.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        500:
          description: Internal server error.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
    delete:
      tags:
      - temporary attributes
      summary: delete attribute
      description: Delete the attribute by its ID.
      operationId: deleteAttribute
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        204:
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          description: The resource was deleted successfully.
        400:
          description: Bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          description: Attributes not found.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              example:
                  error_code: 22011
                  desc: Object not found
                  detail: Attributes with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                  link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22011"
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/attributes/{attribute_id}/samples:
    parameters:
    - $ref: '#/components/parameters/Accept'
    - in: path
      name: attribute_id
      schema:
        $ref: '#/components/schemas/attribute_id'
      required: true
      description: id of the temporary attribute.

    get:
      tags:
        - temporary attributes
      summary: get temporary attribute samples
      description: |
        get all the temporary attribute samples by the attribute ID.
      operationId: getAttributeSamples
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'

      responses:
        200:
          description: Ok
          headers:
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/attribute_samples'
            application/msgpack:
              schema:
                $ref: '#/components/schemas/attribute_samples'

        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          description: attributes not found.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              example:
                  error_code: 22011
                  desc: Object not found
                  detail: Attributes with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                  link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22011"
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/lists:
    parameters:
      - $ref: '#/components/parameters/Accept'
    post:
      tags:
      - lists
      summary: create a list
      description: |
        Creating new list.

      operationId: createList
      parameters:
      - $ref: '#/components/parameters/application_json_or_msgpack_content'
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/list_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/created_list'
          application/msgpack:
            schema:
              $ref: '#/components/schemas/created_list'
      responses:
        201:
          description: list is created.
          headers:
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Location:
              schema:
                type: string
                format: url
                example: /2/lists/b5d6fd45-fcca-453d-ac05-3e594054b813
              description:  location of new list
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/lists_post_response'
              example:
                list_id: b5d6fd45-fcca-453d-ac05-3e594054b813
                url: /2/lists/b5d6fd45-fcca-453d-ac05-3e594054b813
            application/msgpack:
              schema:
                $ref: '#/components/schemas/lists_post_response'
        400:
          description: Bad request
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12017"
                bad_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)'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022"
        409:
          description: unique constraint error
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_query_param:
                  value:
                    error_code: 22026
                    desc: Unique constraint error
                    detail: List with id 'a208e3ca-a689-432b-b4f9-96887c044551' already exist
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22026"
        500:
          $ref: '#/components/responses/internal_server_error'

    get:
      tags:
        - lists
      summary: get lists
      description: get lists by filters.
      operationId: getLists
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/page_size'
      - $ref: '#/components/parameters/user_data'
      - $ref: '#/components/parameters/user_data__eq'
      - $ref: '#/components/parameters/create_time__lt'
      - $ref: '#/components/parameters/create_time__gte'
      - $ref: '#/components/parameters/last_update_time__lt'
      - $ref: '#/components/parameters/last_update_time__gte'
      - $ref: '#/components/parameters/list_ids'
      - $ref: '#/components/parameters/list_id__lt'
      - $ref: '#/components/parameters/list_id__gte'
      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:
                type: object
                properties:
                  lists:
                    type: array
                    items:
                      $ref: '#/components/schemas/list'
                required: [lists]
                example:
                  lists:
                  - list_id: 6fe44310-f82e-4487-bd01-4cbda03a5ac1
                    account_id: f7018bef-9c89-4a30-931e-2c00cf58c42a
                    create_time: 2018-08-11T09:11:41.674Z
                    last_update_time: 2018-09-05T09:11:41.674Z
                    user_data: bad guys
            application/msgpack:
              schema:
                type: object
                properties:
                  lists:
                    type: array
                    items:
                      $ref: '#/components/schemas/list'
                required: [lists]
                example:
                  lists:
                  - list_id: 6fe44310-f82e-4487-bd01-4cbda03a5ac1
                    account_id: f7018bef-9c89-4a30-931e-2c00cf58c42a
                    create_time: 2018-08-11T09:11:41.674Z
                    last_update_time: 2018-09-05T09:11:41.674Z
                    user_data: bad guys
        400:
          description: bad request
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        500:
          $ref: '#/components/responses/internal_server_error'
    delete:
      tags:
        - lists
      summary: delete lists
      description: Delete several lists.

      operationId: deleteLists
      parameters:
        - $ref: '#/components/parameters/application_json_or_msgpack_content'
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/account_id'
        - $ref: '#/components/parameters/with_faces'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/deleted_lists'
          application/msgpack:
            schema:
              $ref: '#/components/schemas/deleted_lists'
      responses:
        202:
          description: success delete lists, removing faces in progress
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        204:
          description: success delete lists
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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 (''faces'' was unexpected)'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022"
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/lists/deletions:
    get:
      tags:
        - administration
      summary: get lists deletions
      description: |
        Get a log of deleted lists. The method is intended for auditing and tracking  deleted lists.

      operationId: getListsDeletions
      parameters:
      - $ref: '#/components/parameters/deletion_time__lt'
      - $ref: '#/components/parameters/deletion_time__gte'
      - $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'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/removed_lists'
        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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 'deletion_time__lt'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        500:
          $ref: '#/components/responses/internal_server_error'
    patch:
      tags:
        - administration
      summary: clear lists deletions log
      description: |
        Clear lists deletions log. It is not recommended to remove all the records from the log. Save last-day records for correct 
        operation of third-party caching mechanisms (matcher).

      operationId: clearListsDeletions
      parameters:
      - $ref: '#/components/parameters/required_deletion_time__lt'
      responses:
        204:
          description: Ok
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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 'deletion_time__lt'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
                without_time:
                    error_code: 12014
                    desc: Bad/incomplete input data
                    detail: Required parameters 'deletion_time__lt' not found
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12014"
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/lists/count:
    parameters:
      - $ref: '#/components/parameters/Accept'
    get:
      tags:
        - lists
      summary: get lists count
      description: |
        get lists count

      operationId: getListsCount
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      - $ref: '#/components/parameters/user_data'
      - $ref: '#/components/parameters/user_data__eq'
      - $ref: '#/components/parameters/create_time__lt'
      - $ref: '#/components/parameters/create_time__gte'
      - $ref: '#/components/parameters/last_update_time__lt'
      - $ref: '#/components/parameters/last_update_time__gte'
      - $ref: '#/components/parameters/list_ids'
      - $ref: '#/components/parameters/list_id__lt'
      - $ref: '#/components/parameters/list_id__gte'
      responses:
        200:
          description: Ok
          headers:
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/lists_count'
            application/msgpack:
              schema:
                $ref: '#/components/schemas/lists_count'

        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/lists/{list_id}:
    parameters:
    - $ref: '#/components/parameters/Accept'
    - $ref: '#/components/parameters/list_id_uri'
    get:
      tags:
      - lists
      summary: get list
      description: Get list by id
      operationId: getList
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/list'
            application/msgpack:
              schema:
                $ref: '#/components/schemas/list'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          description: list not found
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22003"
        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/account_id'
      responses:
        200:
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
          description: OK
        404:
          description: list not found
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
        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/account_id'
      - $ref: '#/components/parameters/application_json_or_msgpack_content'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/updated_list'
          application/msgpack:
            schema:
              $ref: '#/components/schemas/updated_list'
        required: true
      responses:
        204:
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          description: Updated
        400:
          description: Bad request
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12017"
                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)'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022"
        404:
          description: Bad request
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                list_not_found:
                  value:
                    error_code: 22003
                    desc: Object not found
                    detail: List with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22003"
        500:
          $ref: '#/components/responses/internal_server_error'
    delete:
      tags:
      - lists
      summary: remove list
      description: Remove list by id
      operationId: removeList
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      - $ref: '#/components/parameters/with_faces'
      responses:
        202:
          description: The resource was removed successfully, faces removal in progress.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        204:
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          description: The resource was deleted successfully.
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          description: list not found
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22003"
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/lists/{list_id}/attributes:
    parameters:
    - $ref: '#/components/parameters/Accept'
    - $ref: '#/components/parameters/list_id_uri'
    get:
      tags:
      - descriptors_caching
      summary: get list attributes
      description: Get list attributes' link keys
      operationId: getListAttributes
      parameters:
      - $ref: '#/components/parameters/link_key__lt'
      - $ref: '#/components/parameters/link_key__gte'
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/parity'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/list_attributes_reply'
            application/msgpack:
              schema:
                $ref: '#/components/schemas/list_attributes_reply'
        400:
          description: Bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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 'parity'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          description: list not found
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22003"
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/lists/{list_id}/deletions:
    parameters:
    - $ref: '#/components/parameters/Accept'
    - $ref: '#/components/parameters/list_id_uri'
    get:
      tags:
      - descriptors_caching
      summary: get unlinked attributes
      description: Get ids and link and unlink keys for each unlinked attribute.
      operationId: getListDeletions
      parameters:
        - $ref: '#/components/parameters/unlink_key__lt'
        - $ref: '#/components/parameters/unlink_key__gte'
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/parity'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/list_deletions_reply'
            application/msgpack:
              schema:
                $ref: '#/components/schemas/list_deletions_reply'
        400:
          description: Bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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 'parity'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          description: list not found
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22003"
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/lists/linkkeys:
    parameters:
      - $ref: '#/components/parameters/Accept'
    post:
      tags:
      - descriptors_caching
      summary: get lists' link and unlink keys
      description: Get lists with link and unlink keys grouped by list ids
      operationId: getListsLinkkeys
      parameters:
        - $ref: '#/components/parameters/use_parity'
        - $ref: '#/components/parameters/application_json_or_msgpack_content'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/post_linkkeys'
          application/msgpack:
            schema:
              $ref: '#/components/schemas/post_linkkeys'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/post_linkkeys_reply'
            application/msgpack:
              schema:
                $ref: '#/components/schemas/post_linkkeys_reply'
        400:
          description: Bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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 'use_parity'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          description: list not found
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22003"
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/linker:
    parameters:
      - $ref: '#/components/parameters/Accept'
    patch:
      tags:
        - linker
      summary: link (or unlink) faces to a list
      description: link (or unlink) faces to a list
      operationId: linker
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      - $ref: '#/components/parameters/application_json_or_msgpack_content'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/linker'
          application/msgpack:
            schema:
              $ref: '#/components/schemas/linker'
      responses:
        204:
          description: Operation succeeded
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/linker/unlink_history:
    parameters:
      - $ref: '#/components/parameters/Accept'
    patch:
      tags:
        - unlink_history
      summary: Clean unlink log
      description: |
        Clean history of unlink attributes from lists. This history is required for correct update cash in matchers.
      operationId: unlinkHistory
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - in: query
          name: time__lt
          schema:
            $ref: '#/components/schemas/time'
          description: |
            Upper bound of log time with timezone excluding boundary.
            This time should be less than now minus last matcher cache update period;
            otherwise one should drop matchers' caches after performing this request:
            otherwise some removed faces can be found in match candidates.
      responses:
        204:
          description: Operation succeeded
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        400:
          description: bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/faces/attributes/descriptors:
    parameters:
      - $ref: '#/components/parameters/Accept'
    post:
      tags:
      - administration
      summary:  get faces without descriptor
      description: |
         Get faces:
           1. without descriptors of the `missing_version`
           2. with descriptor of a default version
           3. with samples
      operationId: getMissingFaceDescriptors
      parameters:
      - $ref: '#/components/parameters/missing_version'
      - $ref: '#/components/parameters/account_id'
      - $ref: '#/components/parameters/face_id__lt'
      - $ref: '#/components/parameters/face_id__gte'
      - $ref: '#/components/parameters/missing_limit'
      - $ref: '#/components/parameters/application_json_or_msgpack_content'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/1000_face_ids'
          application/msgpack:
            schema:
              $ref: '#/components/schemas/1000_face_ids'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/missing_faces'
            application/msgpack:
              schema:
                $ref: '#/components/schemas/missing_faces'
        400:
          description: Bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/faces/attributes/descriptors/count:
    parameters:
      - $ref: '#/components/parameters/Accept'
    post:
      tags:
      - administration
      summary:  get face count without descriptor
      description: |
         Get face without descriptrs input version count and with descriptor of a default version
      operationId: getMissingFaceDescriptorsCount
      parameters:
      - $ref: '#/components/parameters/missing_version'
      - $ref: '#/components/parameters/account_id'
      - $ref: '#/components/parameters/face_id__lt'
      - $ref: '#/components/parameters/face_id__gte'
      - $ref: '#/components/parameters/application_json_or_msgpack_content'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/1000_face_ids'
          application/msgpack:
            schema:
              $ref: '#/components/schemas/1000_face_ids'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/faces_count'
            application/msgpack:
              schema:
                $ref: '#/components/schemas/faces_count'
        400:
          description: Bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        500:
          $ref: '#/components/responses/internal_server_error'

    get:
      tags:
      - administration
      summary:  get descriptor count info
      description: |
         Get information of the count of descriptors of available versions
      operationId: getFaceDescriptorCountInfo
      parameters:
      - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/face_descriptor_count_info'
            application/msgpack:
              schema:
                $ref: '#/components/schemas/face_descriptor_count_info'
              example:
                descriptor_count_info:
                - descriptor_version: 52
                  descriptor_count: 3812
                - descriptor_version: 46
                  descriptor_count: 212
        400:
          description: Bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/faces/attributes/basic_attributes:
    parameters:
      - $ref: '#/components/parameters/Accept'
    post:
      tags:
      - administration
      summary:  get faces without basic attributes
      description: |
         Get faces that do not have basic attributes. 
         
         The response will include face IDs and their samples. If a face has no samples, the array of samples will be empty.

      operationId: getMissingFaceBasicAttributes
      parameters:
      - $ref: '#/components/parameters/account_id'
      - $ref: '#/components/parameters/face_id__lt'
      - $ref: '#/components/parameters/face_id__gte'
      - $ref: '#/components/parameters/missing_limit'
      - $ref: '#/components/parameters/application_json_or_msgpack_content'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/1000_face_ids'
          application/msgpack:
            schema:
              $ref: '#/components/schemas/1000_face_ids'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/missing_faces'
            application/msgpack:
              schema:
                $ref: '#/components/schemas/missing_faces'
        400:
          description: Bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/faces/attributes/basic_attributes/count:
    parameters:
      - $ref: '#/components/parameters/Accept'
    post:
      tags:
      - administration
      summary:  get face count without basic attributes
      description: |
         Count faces without basic attributes.
      operationId: getMissingFaceBasicAttributesCount
      parameters:
      - $ref: '#/components/parameters/account_id'
      - $ref: '#/components/parameters/face_id__lt'
      - $ref: '#/components/parameters/face_id__gte'
      - $ref: '#/components/parameters/application_json_or_msgpack_content'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/1000_face_ids'
          application/msgpack:
            schema:
              $ref: '#/components/schemas/1000_face_ids'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/faces_count'
            application/msgpack:
              schema:
                $ref: '#/components/schemas/faces_count'
        400:
          description: Bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        500:
          $ref: '#/components/responses/internal_server_error'

    get:
      tags:
      - administration
      summary:  get basic attributes count info
      description: |
         Сount basic attributes saved to the Faces database.
      operationId: getFaceBasicAttributesCountInfo
      parameters:
      - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/face_basic_attributes_count'
            application/msgpack:
              schema:
                $ref: '#/components/schemas/face_basic_attributes_count'

        400:
          description: Bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/faces/attributes/descriptors/{version}:
    parameters:
    - $ref: '#/components/parameters/Accept'
    - in: path
      name: version
      schema:
        type: integer
      required: true
      description: descriptor version for deletion

    delete:
      tags:
      - administration
      summary:  delete face descriptors by version
      description: |
         Delete face descriptors by version
      operationId: deleteFaceDescriptors
      parameters:
      - $ref: '#/components/parameters/face_id__lt'
      - $ref: '#/components/parameters/face_id__gte'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/json_or_msgpack'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/removed_face_descriptors'
            application/msgpack:
              schema:
                $ref: '#/components/schemas/removed_face_descriptors'
        400:
          description: Bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          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 'face_id__gte'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/docs/spec:
    get:
      tags:
        - documents
      summary: get openapi documentation
      description: |
        Get service OpenApi documentation. If *Accept* request header is of type `application/x-yaml`,
        returns documentation in `yaml` format or returns `html` documentation, if *Accept-Type* is `text/html`
      operationId: getSpec

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

      parameters:
        - $ref: '#/components/parameters/luna_request_id'
      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/text_html'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            text/html:
              schema:
                type: string
                description: html format documentation
        500:
          $ref: '#/components/responses/internal_server_error'
  /3/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"
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12024"
        500:
          $ref: '#/components/responses/internal_server_error'
  /healthcheck:
    get:
      tags:
      - health
      summary: get health
      description: get health of service
      operationId: healthcheck
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
      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'