OpenApi

View spec in html.

openapi: 3.0.0
info:
  version: 'v.5.10.0'
  title: 'Luna-Admin API'
  description: |
          
          VisionLabs Luna Admin API.

          OpenAPI specification is the only valid document providing up-to-date information about the service API. 

          The specification can be used:

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

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

          OpenAPI specification can be received using the "/docs/spec" resource. The "Accept" header should be set to "application/x-yaml".

servers:
- description: SwaggerHub API Auto Mocking
  url: https://virtserver.swaggerhub.com/visionlabs/luna-admin/v.5.10.0

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

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

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

    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

    authenticate:
      schema:
        type: string
        enum:
        - Basic realm="login:password"
      required: true
      description: authorization format

    content_disposition:
      schema:
        type: string
        format: attachment; filename=\d{4}-\d{2}-\d{2} \d{2}:\d{2}_luna_sys_info.json
        pattern: ^attachment; filename=\d{4}-\d{2}-\d{2} \d{2}:\d{2}_luna_sys_info.json$
      required: true
      description: recommended filename to save the response body

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

    config_accept_content_type:
      schema:
        type: string
        enum:
          - application/json
          - text/plain
      required: false
      description: The content type of the response body.
  parameters:
    authorization:
      in: header
      schema:
        type: string
        example: Basic dGVzdHVzZXI6dGVzdHB3ZA==
      description: base64 user:password string
      name: Authorization

    exclude_header:
      in: header
      schema:
        type: string
        example: WWW-Authorization
        enum:
          - "WWW-Authorization"
      description: Exclude header from response
      name: Exclude-Header

    luna_request_id:
      in: header
      schema:
        type: string
        format: timestamp,uuid
        pattern: ^[0-9]{10},[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$
        example: 1536751345,8b8b5937-2e9c-4e8b-a7a7-5caf86621b5a
      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

    applicationJsonContent:
      in: header
      name: Content-Type
      schema:
        type: string
        enum:
        - application/json

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

    task_type_schedulable:
      in: query
      name: task_type
      schema:
        $ref: '#/components/schemas/task_type_schedulable_reply'

    page:
      in: query
      name: page
      schema:
        type: integer
        minimum: 1
        default: 1
        example: 146
      description: a page number.

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

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

    path_task_id:
      in: path
      name: task_id
      schema:
        $ref: '#/components/schemas/task_id'
      required: true
      description: task id

    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"
      pattern: '^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(Z|\.\d+Z|\.\d+[+-]\d{2}:\d{2}))$'

    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:10:41.674Z"
      pattern: '^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(Z|\.\d+Z|\.\d+[+-]\d{2}:\d{2}))$'

    end_time__lt:
      in: query
      name: end_time__lt
      schema:
        $ref: '#/components/schemas/time'
      description: upper bound for object end_time.
      example: "2018-08-11T10:11:41.674Z"
      pattern: '^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(Z|\.\d+Z|\.\d+[+-]\d{2}:\d{2}))$'

    end_time__gte:
      in: query
      name: end_time__gte
      schema:
        $ref: '#/components/schemas/time'
      description: lower included bound for object end_time.
      example: "2018-08-11T10:10:41.674Z"
      pattern: '^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(Z|\.\d+Z|\.\d+[+-]\d{2}:\d{2}))$'

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

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

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

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

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

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

    search_parameter:
      in: query
      name: q
      schema:
        oneOf:
          - $ref: '#/components/schemas/id'
          - $ref: '#/components/schemas/email'
      description: specify the id of an element or the e-mail of an account.
      example: 557d54ec-29ad-4f3c-93b4-c9092ef12515

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

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

    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

    schedule_patch:
      in: query
      name: action
      required: true
      schema:
        type: string
        enum: [pause, start]
      description: pause/start tasks schedule

    schedule_id_path:
      in: path
      name: schedule_id
      required: true
      schema:
        $ref: '#/components/schemas/schedule_id'
      description: Schedule according to which the task was created

    schedule_id:
      in: query
      name: schedule_id
      schema:
        $ref: '#/components/schemas/schedule_id'
      description: Schedule according to which the task was created
  schemas:
    AnyStandaloneType:
      description: any standalone type
      anyOf:
        - type: object
          additionalProperties: true
        - type: number
        - type: string
        - type: boolean

    Error:
      type: object
      properties:
        error_code:
          $ref: '#/components/schemas/error_code'
        desc:
          $ref: '#/components/schemas/error_description'
        detail:
          $ref: '#/components/schemas/error_detail'
        link:
          $ref: '#/components/schemas/error_link'
      required: [error_code, detail, desc, link]
      example:
        error_code: 11009
        detail: Internal server error
        desc: Internal server error
        link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11009

    error_code:
      type: integer
      description: error code.
      example: 12010

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

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

    error_link:
      type: string
      description: Link to the documentation website with the error description.
      example: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12010

    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

    account_id:
      allOf:
        - $ref: '#/components/schemas/uuid'
        - description: account id.

    id:
      allOf:
        - $ref: '#/components/schemas/uuid'
        - description: account id, list id, face id or attribute id.

    account_type:
      type: string
      enum: [ admin, advanced_user, user ]
      default: advanced_user
      description: Account type.

    account_description:
      type: string
      maxLength: 128
      description: Account description.
      default: ''
      example: Horns and Hooves

    login:
      type: string
      minLength: 3
      maxLength: 128
      pattern: ^[a-z0-9_'\+\-\.]+@[a-z0-9]+\.[a-z]{2,}$
      description: Account username.
      example: horns@hooves.com

    password:
      type: string
      minLength: 3
      maxLength: 128
      pattern: '^.{3,128}$'
      description: Account password.
      example: secret

    email:
      type: string
      format: email
      pattern: ^[a-z0-9_'\+\-\.]+@[a-z0-9]+\.[a-z]{2,}$
      maxLength: 64
      example: horns@hooves.com
      description: email address.
      deprecated: true

    organization_name:
      type: string
      maxLength: 128
      example: Horns and Hooves
      description: organization name.
      deprecated: true

    new_password:
      type: object
      properties:
        password:
          type: string
          minLength: 1
          maxLength: 128
          example: password
          pattern: '^.{1,128}$'
          description: a new password.

    user_data:
      description: user data.
      type: string
      maxLength: 128
      example: "good persons"

    list_id:
      allOf:
        - $ref: '#/components/schemas/uuid'
        - description: list id.

    list_user_data:
      allOf:
        - $ref: '#/components/schemas/user_data'
        - description: user data associated with list.

    face_id:
      allOf:
        - $ref: '#/components/schemas/uuid'
        - description: face id.

    attribute_id:
      allOf:
        - $ref: '#/components/schemas/uuid'
        - description: attribute id, null if descriptor score is lower than score treshold.

    sample_id:
      allOf:
        - $ref: '#/components/schemas/uuid'
        - description: sample id.

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

    ethnicities_enum:
      type: integer
      enum: [1, 2, 3, 4]
      description: |
        reference ethnicity.

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

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

    subtask_content:
      type: object
      description: subtask content.
      additionalProperties:
        x-additionalPropertiesName: subtask content fields
        description: See for details the Luna Tasks documentation.

    subtask_status:
      type: integer
      enum: [0, 1, 2, 3, 4]
      example: 2
      description: |
        subtask status.

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

    task_id:
      type: integer
      minimum: 1
      example: 123

    task_type:
      type: integer
      enum: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
      example: 3
      description: |
        task type

        | task type        | value |
        |----------------------|---|
        | unknown              | 0 |
        | linker               | 1 |
        | clusterization       | 2 |
        | report               | 3 |
        | garbage collect      | 4 |
        | additional extract   | 5 |
        | cross match          | 6 |
        | roc-curve calculation| 7 |
        | export objects       | 8 |
        | estimate data        | 9 |

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

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

    count_task_parts_done:
      type: integer
      minimum: 0
      description: completed task part count.
      example: 10

    count_task_parts_all:
      type: integer
      minimum: 1
      description: task part count.
      example: 100

    error_id:
      type: integer
      description: error id.

    error_ids:
      type: string
      format: comma-separate error ids
      minItems: 1
      example: 4,5,6

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

    time:
      type: string
      format: date-time
      example: "2018-07-11T09:11:41.674Z"

    time_end:
      type: string
      format: date-time
      example: "2018-07-11T10:11:41.674Z"

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

    int0100:
      type: integer
      minimum: 0
      maximum: 100
      example: 29

    count:
      type: integer
      minimum: 0
      example: 1

    int_version:
      type: integer
      minimum: 0

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

    version_handler_response:
      type: object
      properties:
        Version:
          $ref: "#/components/schemas/version"
      required: [Version]

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

    account:
      type: object
      properties:
        account_id:
          $ref: '#/components/schemas/account_id'
        account_type:
          $ref: '#/components/schemas/account_type'
        description:
          $ref: '#/components/schemas/account_description'
        login:
          $ref: '#/components/schemas/login'
        create_time:
          allOf:
            - $ref: '#/components/schemas/time'
          description: token create time
        last_update_time:
          allOf:
            - $ref: '#/components/schemas/time'
          description: token last update time
        email:
          $ref: '#/components/schemas/email'
        organization_name:
          $ref: '#/components/schemas/organization_name'
      required: [ account_id, account_type, description, login, email, organization_name, create_time, last_update_time ]

    registered_account_outdated:
      type: object
      properties:
        email:
          $ref: '#/components/schemas/email'
        organization_name:
          $ref: '#/components/schemas/organization_name'
      required: [ email, organization_name ]

    account_recent_base:
      type: object
      properties:
        account_type:
          $ref: '#/components/schemas/account_type'
        login:
          $ref: '#/components/schemas/login'
        password:
          $ref: '#/components/schemas/password'
        description:
          $ref: '#/components/schemas/account_description'

    registered_account_recent:
      allOf:
        - $ref: '#/components/schemas/account_recent_base'
      required: [login, password]

    registered_account:
      oneOf:
        - $ref: '#/components/schemas/registered_account_recent'
        - $ref: '#/components/schemas/registered_account_outdated'

    account_for_patch:
      allOf:
        - $ref: '#/components/schemas/account_recent_base'
        - minProperties: 1

    account_response:
      type: object
      properties:
        accounts:
          type: array
          items:
            $ref: '#/components/schemas/account'
          description: list of accounts.
        account_count:
          allOf:
          - $ref: '#/components/schemas/count'
          - description: registered account count.
      required: [accounts, account_count]

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

    account_stats:
      type: object
      description: basic account stats.
      properties:
        list_count:
          allOf:
          - $ref: '#/components/schemas/count'
          - description: account list count.
        face_count:
          allOf:
          - $ref: '#/components/schemas/count'
          - description: account face count.
        face_attribute_count:
          allOf:
            - $ref: '#/components/schemas/count'
            - description: account face attribute count.
      required: [face_attribute_count, list_count, face_count]

    account_info:
      type: object
      properties:
        info:
          $ref: '#/components/schemas/account'
        stats:
          $ref: '#/components/schemas/account_stats'
      required: [info, stats]

    list:
      type: object
      properties:
        list_id:
          $ref: '#/components/schemas/list_id'
        account_id:
          $ref: '#/components/schemas/account_id'
        last_update_time:
          allOf:
            - $ref: '#/components/schemas/time'
            - description: list update time (face was attached or detached, user_data was changed).
        face_count:
          allOf:
            - $ref: '#/components/schemas/count'
            - description: face count.
        user_data:
          $ref: '#/components/schemas/list_user_data'
      required: [list_id, account_id, last_update_time, face_count, user_data]

    list_info:
      allOf:
        - $ref: '#/components/schemas/list'
        - description: list info.

    face:
      type: object
      properties:
        face_id:
          $ref: '#/components/schemas/face_id'
        account_id:
          $ref: '#/components/schemas/account_id'
        create_time:
          allOf:
            - $ref: '#/components/schemas/time'
            - description: face create time.
      required: [face_id, account_id, create_time]

    face_info:
      allOf:
        - $ref: '#/components/schemas/face'
        - description: face info.

    attribute:
      type: object
      properties:
        attribute_id:
          $ref: '#/components/schemas/attribute_id'
        account_id:
          $ref: '#/components/schemas/account_id'
        basic_attributes:
          type: object
          properties:
            gender:
              allOf:
                - $ref: '#/components/schemas/gender'
                - nullable: true
            age:
              allOf:
                - $ref: '#/components/schemas/int0100'
                - description: age.
                - nullable: true
            ethnicity:
              allOf:
                - $ref: '#/components/schemas/ethnicities_enum'
                - nullable: true
          required: [gender, age, ethnicity]
          description: basic attributes
        basic_attributes_samples:
          type: array
          items:
            $ref: '#/components/schemas/sample_id'
          description: basic attribute samples
        face_descriptor:
          type: string
          nullable: true
        face_descriptor_samples:
          type: array
          items:
            $ref: '#/components/schemas/sample_id'
          description: face descriptor samples
        create_time:
          $ref: '#/components/schemas/time'
      required: [account_id, attribute_id, basic_attributes, basic_attributes_samples,
                 face_descriptor, face_descriptor_samples, create_time]

    attribute_info:
      allOf:
        - $ref: '#/components/schemas/attribute'
        - description: temporary attribute info.

    search_response:
      type: object
      description: basic element info.
      properties:
        data:
          oneOf:
            - $ref: '#/components/schemas/account_info'
            - $ref: '#/components/schemas/list_info'
            - $ref: '#/components/schemas/face_info'
            - $ref: '#/components/schemas/attribute_info'
          nullable: true
        type:
          type: string
          enum: [account, list, face, attribute]
          nullable: true

    list_response:
      type: object
      description: list info.
      properties:
        lists:
          type: array
          items:
            $ref: '#/components/schemas/list'
        list_count:
          allOf:
            - $ref: '#/components/schemas/count'
            - description: list count.

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

    result_id:
      allOf:
      - $ref: '#/components/schemas/uuid'
      description: task result id in a storage.
      nullable: true

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

    subtasks_reply:
      type: object
      properties:
        subtasks:
          type: array
          items:
            $ref: '#/components/schemas/subtask_in_reply'
          minItems: 1
      required: [subtasks]

    task_error:
      type: object
      properties:
        error_id:
          $ref: '#/components/schemas/error_id'
        task_id:
          $ref: '#/components/schemas/task_id'
        subtask_id:
          allOf:
            - $ref: '#/components/schemas/task_id'
            - nullable: true
            - description: subtask id.
            - example: 5
        error_code:
          $ref: '#/components/schemas/error_code'
        description:
          allOf:
            - $ref: '#/components/schemas/error_description'
            - example: Faces not found
        detail:
          allOf:
            - $ref: '#/components/schemas/error_detail'
            - example: One or more faces not found, including face with id '8f4f0070-c464-460b-bf78-fac225df72e9'
        link:
          $ref: '#/components/schemas/error_link'
        error_time:
          allOf:
            - $ref: '#/components/schemas/time'
            - description: error time.
        additional_info:
          allOf:
            - $ref: '#/components/schemas/errors_additional_info'
            - nullable: true
            - description: error additional info.
      required: [error_id, task_id, subtask_id, error_code, description, detail, link, error_time, additional_info]

    task_errors:
      description: task errors.
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/task_error'
          minItems: 0
          maxItems: 100000
          description: list of errors occurred while task processing.
      required: [errors]

    linker_task_content:
      type: object
      description: linker task content
      additionalProperties:
        x-additionalPropertiesName: linker task content fields
        description: See for details the Luna Tasks documentation.

    estimator_task_content:
      type: object
      description: estimator task content
      additionalProperties:
        x-additionalPropertiesName: estimator task content fields
        description: See for details the Luna Tasks documentation.

    store_results:
      type: boolean
      description: Whether to store task results. The task errors are stored in any case.
      default: true

    gc_events_task_content_no_filters:
      description: Garbage collecting task content to remove events
      type: object
      properties:
        target:
          type: string
          enum: ['events']
        store_results:
          $ref: '#/components/schemas/store_results'
        remove_samples:
          type: boolean
          description: |
            Whether to remove face and body samples along with the event.

            > **WARNING**: After removing samples, it will become impossible to re-extract the attribute or descriptor for the created face.
          default: false
        remove_image_origins:
          type: boolean
          description: |
            Whether to remove image origins along with the event.
          default: false
        filters:
          type: object
          properties:
            account_id:
              allOf:
                - $ref: '#/components/schemas/uuid'
                - description: account id to execute task within the specified account
            handler_id:
              allOf:
                - $ref: '#/components/schemas/uuid'
                - description: handler id to execute task within the specified handler
      required: [target, filters]

    gc_events_task_content:
      allOf:
        - $ref: '#/components/schemas/gc_events_task_content_no_filters'
      type: object
      properties:
        filters:
          type: object
          properties:
            create_time__lt:
              oneOf:
                - $ref: '#/components/schemas/create_time__lt'
                - $ref: '#/components/schemas/create_time_now__lt'
              description: Create time upper excluded boundary.
            insert_time__lt:
              oneOf:
                - $ref: '#/components/schemas/insert_time__lt'
                - $ref: '#/components/schemas/insert_time_now__lt'
              description: Insert time upper excluding boundary.

    gc_events_task_content_reply:
      allOf:
        - $ref: '#/components/schemas/gc_events_task_content_no_filters'
      type: object
      properties:
        filters:
          type: object
          properties:
            create_time__lt:
              $ref: '#/components/schemas/create_time__lt'
              description: Create time upper excluded boundary.
            insert_time__lt:
              $ref: '#/components/schemas/insert_time__lt'
              description: Insert time upper excluding boundary.

    gc_faces_task_content_no_filters:
      description: Garbage collecting task content to delete faces by extended filters.
      type: object
      properties:
        target:
          type: string
          enum: ['faces']
        store_results:
          $ref: '#/components/schemas/store_results'
        remove_samples:
          type: boolean
          description: |
            Whether to remove face descriptor and basic attributes samples along with the face.
          default: false
      required: [target, filters]

    gc_faces_task_content:
      allOf:
        - $ref: '#/components/schemas/gc_faces_task_content_no_filters'
      type: object
      properties:
        filters:
          type: object
          properties:
            account_id:
              allOf:
                - $ref: '#/components/schemas/uuid'
                - description: account id to execute task within the specified account
            create_time__lt:
              oneOf:
                - $ref: '#/components/schemas/create_time__lt'
                - $ref: '#/components/schemas/create_time_now__lt'
              description: create time upper excluding boundary in format RFC 3339
            create_time__gte:
              oneOf:
                - $ref: '#/components/schemas/create_time__gte'
                - $ref: '#/components/schemas/create_time_now__gte'
              description: create time lower including boundary in format RFC 3339
            user_data:
              $ref: '#/components/schemas/user_data'
            list_id:
              allOf:
                - $ref: '#/components/schemas/uuid'
                - description: list id.

    gc_faces_task_content_reply:
      allOf:
        - $ref: '#/components/schemas/gc_faces_task_content_no_filters'
      type: object
      properties:
        filters:
          type: object
          properties:
            account_id:
              allOf:
                - $ref: '#/components/schemas/uuid'
                - description: account id to execute task within the specified account
            create_time__lt:
              $ref: '#/components/schemas/create_time__lt'
              description: create time upper excluding boundary in format RFC 3339
            create_time__gte:
              $ref: '#/components/schemas/create_time__gte'
              description: create time lower including boundary in format RFC 3339
            user_data:
              $ref: '#/components/schemas/user_data'
            list_id:
              allOf:
                - $ref: '#/components/schemas/uuid'
                - description: list id.

    gc_face_descriptors_task_content:
      description: Garbage collecting task content to delete face descriptors by version.
      type: object
      properties:
        target:
          type: string
          enum: ['face_descriptors']
        filters:
          type: object
          properties:
            descriptor_version:
              type: integer
              description: version of face descriptors to delete
          required: [descriptor_version]
        store_results:
          $ref: '#/components/schemas/store_results'
      required: [target, filters]

    gc_face_filters:
      type: object
      description: face descriptor filters
      properties:
        descriptor_version:
          type: integer
          description: version of face descriptors to delete
        descriptor_type:
          description: Descriptors type.
          type: string
          enum: ['face']
      required: [descriptor_version, descriptor_type]

    gc_body_filters:
      type: object
      description: body descriptor filters
      properties:
        descriptor_version:
          type: integer
          description: version of body descriptors to delete
        descriptor_type:
          description: Descriptors type.
          type: string
          enum: ['body']
        store_results:
          $ref: '#/components/schemas/store_results'
      required: [descriptor_version, descriptor_type]

    gc_event_descriptors_task_content:
      description: Garbage collecting task content to delete event descriptors by version and type.
      type: object
      properties:
        target:
          type: string
          enum: ['event_descriptors']
        filters:
          oneOf:
            - $ref: '#/components/schemas/gc_face_filters'
            - $ref: '#/components/schemas/gc_body_filters'
          discriminator:
            propertyName: descriptor_type
            mapping:
              face: '#/components/schemas/gc_face_filters'
              body: '#/components/schemas/gc_body_filters'
        store_results:
          $ref: '#/components/schemas/store_results'
      required: [target, filters]

    gc_general_events_task_content_no_filters:
      description: garbage collecting task content to remove general events
      type: object
      properties:
        target:
          type: string
          enum: ['general_events']
        filters:
          type: object
          properties:
            account_id:
              allOf:
                - $ref: '#/components/schemas/uuid'
              description: Account id to execute task within the specified account.
            event_type:
              type: array
              description: List of general event types.
              minItems: 1
              maxItems: 1000
              items:
                type: string
                minLength: 1
                maxLength: 36
        store_results:
          type: boolean
          description: Whether to store task results. Whatever, task errors are stored.
          default: true
      required: [target, filters]

    gc_general_events_task_content:
      allOf:
        - $ref: '#/components/schemas/gc_general_events_task_content_no_filters'
      properties:
        filters:
          type: object
          properties:
            event_create_time__lt:
              description: General event create time upper excluded boundary.
              oneOf:
                - $ref: '#/components/schemas/general_event_create_time__lt'
                - $ref: '#/components/schemas/general_event_create_time_now__lt'
            insert_time__lt:
              description: Insert time upper excluding boundary.
              oneOf:
                - $ref: '#/components/schemas/insert_time__lt'
                - $ref: '#/components/schemas/insert_time_now__lt'

    gc_general_events_task_content_reply:
      allOf:
        - $ref: '#/components/schemas/gc_general_events_task_content_no_filters'
      properties:
        filters:
          type: object
          properties:
            event_create_time__lt:
              description: General event create time upper excluded boundary.
              $ref: '#/components/schemas/general_event_create_time__lt'
            insert_time__lt:
              description: Insert time upper excluding boundary.
              $ref: '#/components/schemas/insert_time__lt'

    gc_task_content:
      description: gc task content
      oneOf:
        - $ref: '#/components/schemas/gc_face_descriptors_task_content'
        - $ref: '#/components/schemas/gc_event_descriptors_task_content'
        - $ref: '#/components/schemas/gc_events_task_content'
        - $ref: '#/components/schemas/gc_faces_task_content'
        - $ref: '#/components/schemas/gc_general_events_task_content'
      discriminator:
        propertyName: "target"
        mapping:
          face_descriptors: '#/components/schemas/gc_face_descriptors_task_content'
          event_descriptors: '#/components/schemas/gc_event_descriptors_task_content'
          events: '#/components/schemas/gc_events_task_content'
          faces: '#/components/schemas/gc_faces_task_content'
          general_events: '#/components/schemas/gc_general_events_task_content'

    gc_task:
      allOf:
        - $ref: '#/components/schemas/task_base'
      properties:
        content:
          $ref: '#/components/schemas/gc_task_content'

    cross_match_task_content:
      type: object
      description: cross match task content.
      additionalProperties:
        x-additionalPropertiesName: cross match task content fields
        description: See for details the Luna Tasks documentation.

    roc_task_content:
      type: object
      description: ROC-curve calculating task content.
      additionalProperties:
        x-additionalPropertiesName: ROC-curve task content fields
        description: See for details the Luna Tasks documentation.

    clustering_task_content:
      type: object
      description: clustering task content.
      additionalProperties:
        x-additionalPropertiesName: clustering task content fields
        description: See for details the Luna Tasks documentation.

    exporter_task_content:
      type: object
      description: exporter task content.
      additionalProperties:
        x-additionalPropertiesName: exporter task content fields
        description: See for details the Luna Tasks documentation.

    reporter_task_content:
      type: object
      description: reporter task content.
      additionalProperties:
        x-additionalPropertiesName: reporter task content fields
        description: See for details the Luna Tasks documentation.

    reporter_task_content_without_filters:
      type: object
      description: reporter task content without filters.
      additionalProperties:
        x-additionalPropertiesName: reporter task content fields without filters
        description: See for details the Luna Tasks documentation.

    ae_face_filters:
      description: face filters.
      type: object
      properties:
        objects_type:
          description: object type.
          type: string
          enum: [ "faces" ]
        account_id:
          allOf:
            - $ref: '#/components/schemas/uuid'
            - description: account id.
        face_id__lt:
          allOf:
            - $ref: '#/components/schemas/uuid'
            - description: upper face id excluding boundary.
        face_id__gte:
          allOf:
            - $ref: '#/components/schemas/uuid'
            - description: lower face id including boundary.
      required: [ objects_type ]

    ae_event_filters_no_inspect_time:
      description: event filters.
      type: object
      properties:
        objects_type:
          description: object type.
          type: string
          enum: [ "events" ]
        account_id:
          allOf:
            - $ref: '#/components/schemas/uuid'
            - description: account id.
        handler_id:
          allOf:
            - $ref: '#/components/schemas/uuid'
            - description: handler id.
        event_id__gte:
          allOf:
            - $ref: '#/components/schemas/uuid'
            - description: lower event id including boundary.
        event_id__lt:
          allOf:
            - $ref: '#/components/schemas/uuid'
            - description: upper event id excluding boundary.

    ae_event_filters:
      allOf:
        - $ref: "#/components/schemas/ae_event_filters_no_inspect_time"
      properties:
        insert_time__gte:
          oneOf:
            - $ref: '#/components/schemas/insert_time__gte'
            - $ref: '#/components/schemas/insert_time_now__gte'
          description: event insert time lower including boundary.
        insert_time__lt:
          oneOf:
            - $ref: '#/components/schemas/insert_time__lt'
            - $ref: '#/components/schemas/insert_time_now__lt'
          description: event insert time upper excluding boundary.
      required: [ objects_type ]

    ae_event_filters_reply:
      allOf:
        - $ref: "#/components/schemas/ae_event_filters_no_inspect_time"
      properties:
        insert_time__gte:
          $ref: '#/components/schemas/insert_time__gte'
          description: event insert time lower including boundary.
        insert_time__lt:
          $ref: '#/components/schemas/insert_time__lt'
          description: event insert time upper excluding boundary.
      required: [ objects_type ]

    additional_extract_task_content_body_descriptor_no_filters:
      description: additional extract human descriptors task
      type: object
      properties:
        extraction_target:
          description: extraction target
          type: string
          enum: [ "body_descriptor" ]
        options:
          description: extract task options
          type: object
          properties:
            descriptor_version:
              description: version of descriptors to extract
              type: integer
            missing:
              type: boolean
              description: whether to extract only missing descriptors (`false` is not implemented)
              default: true
          required: [ descriptor_version ]

    additional_extract_task_content_body_descriptor:
      allOf:
        - $ref: '#/components/schemas/additional_extract_task_content_body_descriptor_no_filters'
      type: object
      properties:
        filters:
          allOf:
            - description: |
                object filters.
                Body descriptor re-extraction can be performed on events only (see `objects_type` in filters).
            - $ref: '#/components/schemas/ae_event_filters'
      required: [ extraction_target, options, filters ]

    additional_extract_task_content_body_descriptor_reply:
      allOf:
        - $ref: '#/components/schemas/additional_extract_task_content_body_descriptor_no_filters'
      type: object
      properties:
        filters:
          allOf:
            - description: |
                object filters.
                Body descriptor re-extraction can be performed on events only (see `objects_type` in filters).
            - $ref: '#/components/schemas/ae_event_filters_reply'
      required: [ extraction_target, options, filters ]

    additional_extract_task_content_face_descriptor_no_filters:
      description: additional extract face descriptors task
      type: object
      properties:
        extraction_target:
          description: extraction target
          type: string
          enum: [ "face_descriptor" ]
        options:
          description: extract task options
          type: object
          properties:
            descriptor_version:
              description: version of descriptors to extract
              type: integer
            missing:
              type: boolean
              description: whether to extract only missing descriptors (`false` is not implemented)
              default: true
          required: [ descriptor_version ]

    additional_extract_task_content_face_descriptor:
      allOf:
        - $ref: '#/components/schemas/additional_extract_task_content_face_descriptor_no_filters'
      type: object
      properties:
        filters:
          description: |
            object filters.
            Face descriptor re-extraction can be performed on either faces or events (see `objects_type` in filters).
          oneOf:
            - $ref: '#/components/schemas/ae_face_filters'
            - $ref: '#/components/schemas/ae_event_filters'
          discriminator:
            propertyName: objects_type
            mapping:
              faces: '#/components/schemas/ae_face_filters'
              events: '#/components/schemas/ae_event_filters'
      required: [ extraction_target, options, filters ]

    additional_extract_task_content_face_descriptor_reply:
      allOf:
        - $ref: '#/components/schemas/additional_extract_task_content_face_descriptor_no_filters'
      type: object
      properties:
        filters:
          description: |
            object filters.
            Face descriptor re-extraction can be performed on either faces or events (see `objects_type` in filters).
          oneOf:
            - $ref: '#/components/schemas/ae_face_filters'
            - $ref: '#/components/schemas/ae_event_filters_reply'
          discriminator:
            propertyName: objects_type
            mapping:
              faces: '#/components/schemas/ae_face_filters'
              events: '#/components/schemas/ae_event_filters_reply'
      required: [ extraction_target, options, filters ]

    additional_extract_task_content_basic_attributes_no_filters:
      description: additional extract basic attributes task
      type: object
      properties:
        extraction_target:
          description: extraction target
          type: string
          enum: [ "basic_attributes" ]
        options:
          type: object
          description: extract task options
          properties:
            missing:
              type: boolean
              description: whether to extract only missing basic attributes (`false` is not implemented)
              default: true

    additional_extract_task_content_basic_attributes:
      allOf:
        - $ref: '#/components/schemas/additional_extract_task_content_basic_attributes_no_filters'
      type: object
      properties:
        filters:
          description: |
            object filters.
            Basic attributes re-extraction can be performed on either faces or events (see `objects_type` in filters).
          oneOf:
            - $ref: '#/components/schemas/ae_face_filters'
            - $ref: '#/components/schemas/ae_event_filters'
          discriminator:
            propertyName: objects_type
            mapping:
              faces: '#/components/schemas/ae_face_filters'
              events: '#/components/schemas/ae_event_filters'
      required: [ extraction_target, filters ]

    additional_extract_task_content_basic_attributes_reply:
      allOf:
        - $ref: '#/components/schemas/additional_extract_task_content_basic_attributes_no_filters'
      type: object
      properties:
        filters:
          description: |
            object filters.
            Basic attributes re-extraction can be performed on either faces or events (see `objects_type` in filters).
          oneOf:
            - $ref: '#/components/schemas/ae_face_filters'
            - $ref: '#/components/schemas/ae_event_filters_reply'
          discriminator:
            propertyName: objects_type
            mapping:
              faces: '#/components/schemas/ae_face_filters'
              events: '#/components/schemas/ae_event_filters_reply'
      required: [ extraction_target, options, filters ]

    additional_extract_task_content:
      description: additional extract task.
      oneOf:
          - $ref: '#/components/schemas/additional_extract_task_content_basic_attributes'
          - $ref: '#/components/schemas/additional_extract_task_content_face_descriptor'
          - $ref: '#/components/schemas/additional_extract_task_content_body_descriptor'
      discriminator:
        propertyName: extraction_target
        mapping:
          basic_attributes: '#/components/schemas/additional_extract_task_content_basic_attributes'
          face_descriptor: '#/components/schemas/additional_extract_task_content_face_descriptor'
          body_descriptor: '#/components/schemas/additional_extract_task_content_body_descriptor'

    task_base:
      type: object
      properties:
        description:
          type: string
          description: task description
        notification_policy:
          $ref: '#/components/schemas/notification_policy'
        result_storage_policy:
          $ref: '#/components/schemas/result_storage_policy'
      required: [content]

    additional_extract_task:
      allOf:
        - $ref: '#/components/schemas/task_base'
      properties:
        content:
          $ref: '#/components/schemas/additional_extract_task_content'

    time_nullable:
      type: string
      nullable: true
      format: date-time
      example: "2018-08-11T10:11:41.674Z"

    task_template_reply:
      type: object
      properties:
        task_id:
          $ref: '#/components/schemas/task_id'
        create_time:
          allOf:
            - $ref: '#/components/schemas/time'
          description: task create time
        end_time:
          allOf:
            - $ref: '#/components/schemas/time_nullable'
          description: task end time
        last_update_time:
          allOf:
            - description: task last update time
          $ref: '#/components/schemas/time_nullable'
        task_status:
          $ref: '#/components/schemas/task_status'
        result_id:
          $ref: '#/components/schemas/result_id'
        account_id:
          $ref: '#/components/schemas/account_id'
        count_task_parts_done:
          $ref: '#/components/schemas/count_task_parts_done'
        count_task_parts_all:
          $ref: '#/components/schemas/count_task_parts_all'
        description:
          $ref: '#/components/schemas/task_description'
        notification_policy:
          $ref: '#/components/schemas/task_notification_policy_response'
        result_storage_policy:
          $ref: '#/components/schemas/result_storage_policy_response'
      required: [ task_id, create_time, last_update_time, task_type, task_status, count_task_parts_done,
                  count_task_parts_all, content, notification_policy, result_storage_policy ]

    schedulable_task_template_reply:
      allOf:
        - $ref: '#/components/schemas/task_template_reply'
        - properties:
            schedule_id:
              $ref: '#/components/schemas/schedule_id'

    task_linker_reply:
      allOf:
        - $ref: "#/components/schemas/schedulable_task_template_reply"
      properties:
        task_type:
          allOf:
            - $ref: "#/components/schemas/task_type"
          enum: [ 1 ]
        content:
          $ref: "#/components/schemas/linker_task_content"

    task_clustering_reply:
      allOf:
        - $ref: "#/components/schemas/schedulable_task_template_reply"
      properties:
        task_type:
          allOf:
            - $ref: "#/components/schemas/task_type"
          enum: [ 2 ]
        content:
          $ref: "#/components/schemas/clustering_task_content"

    task_report_reply:
      allOf:
        - $ref: "#/components/schemas/schedulable_task_template_reply"
      properties:
        task_type:
          allOf:
            - $ref: "#/components/schemas/task_type"
          enum: [ 3 ]
        content:
          $ref: "#/components/schemas/reporter_task_content"

    task_gc_reply:
      allOf:
        - $ref: "#/components/schemas/schedulable_task_template_reply"
      properties:
        task_type:
          allOf:
            - $ref: "#/components/schemas/task_type"
          enum: [ 4 ]
        content:
          description: Garbage collecting task content
          oneOf:
            - $ref: '#/components/schemas/gc_face_descriptors_task_content'
            - $ref: '#/components/schemas/gc_faces_task_content_reply'
            - $ref: '#/components/schemas/gc_event_descriptors_task_content'
            - $ref: '#/components/schemas/gc_events_task_content_reply'
            - $ref: '#/components/schemas/gc_general_events_task_content_reply'
          discriminator:
            propertyName: target
            mapping:
              face_descriptors: '#/components/schemas/gc_face_descriptors_task_content'
              faces: '#/components/schemas/gc_faces_task_content_reply'
              event_descriptors: '#/components/schemas/gc_event_descriptors_task_content'
              events: '#/components/schemas/gc_events_task_content_reply'
              general_events: '#/components/schemas/gc_general_events_task_content_reply'

    task_additional_extract_reply:
      allOf:
        - $ref: "#/components/schemas/schedulable_task_template_reply"
      properties:
        task_type:
          allOf:
            - $ref: "#/components/schemas/task_type"
          enum: [ 5 ]
        content:
          description: additional extractor task content.
          oneOf:
            - $ref: '#/components/schemas/additional_extract_task_content_basic_attributes_reply'
            - $ref: '#/components/schemas/additional_extract_task_content_face_descriptor_reply'
            - $ref: '#/components/schemas/additional_extract_task_content_body_descriptor_reply'
          discriminator:
            propertyName: extraction_target
            mapping:
              basic_attributes: '#/components/schemas/additional_extract_task_content_basic_attributes_reply'
              face_descriptor: '#/components/schemas/additional_extract_task_content_face_descriptor_reply'
              body_descriptor: '#/components/schemas/additional_extract_task_content_body_descriptor_reply'

    task_cross_match_reply:
      allOf:
        - $ref: "#/components/schemas/schedulable_task_template_reply"
      properties:
        task_type:
          allOf:
            - $ref: "#/components/schemas/task_type"
          enum: [ 6 ]
        content:
          $ref: "#/components/schemas/cross_match_task_content"

    task_roc_reply:
      allOf:
        - $ref: "#/components/schemas/schedulable_task_template_reply"
      properties:
        task_type:
          allOf:
            - $ref: "#/components/schemas/task_type"
          enum: [ 7 ]
        content:
          $ref: "#/components/schemas/roc_task_content"

    task_exporter_reply:
      allOf:
        - $ref: "#/components/schemas/schedulable_task_template_reply"
      properties:
        task_type:
          allOf:
            - $ref: "#/components/schemas/task_type"
          enum: [ 8 ]
        content:
          $ref: "#/components/schemas/exporter_task_content"

    task_estimator_reply:
      allOf:
        - $ref: "#/components/schemas/schedulable_task_template_reply"
      properties:
        task_type:
          allOf:
            - $ref: "#/components/schemas/task_type"
          enum: [9]
        content:
          $ref: "#/components/schemas/estimator_task_content"

    task_reply:
      oneOf:
        - $ref: "#/components/schemas/task_linker_reply"
        - $ref: "#/components/schemas/task_clustering_reply"
        - $ref: "#/components/schemas/task_report_reply"
        - $ref: "#/components/schemas/task_gc_reply"
        - $ref: "#/components/schemas/task_additional_extract_reply"
        - $ref: "#/components/schemas/task_cross_match_reply"
        - $ref: "#/components/schemas/task_roc_reply"
        - $ref: "#/components/schemas/task_exporter_reply"
        - $ref: "#/components/schemas/task_estimator_reply"
      discriminator:
        propertyName: task_type
        mapping:
          1: '#/components/schemas/task_linker_reply'
          2: '#/components/schemas/task_clustering_reply'
          3: '#/components/schemas/task_report_reply'
          4: '#/components/schemas/task_gc_reply'
          5: '#/components/schemas/task_additional_extract_reply'
          6: '#/components/schemas/task_cross_match_reply'
          7: '#/components/schemas/task_roc_reply'
          8: '#/components/schemas/task_exporter_reply'
          9: '#/components/schemas/task_estimator_reply'

    task_response:
      type: object
      description: task info.
      properties:
        tasks:
          type: array
          items:
            $ref: '#/components/schemas/task_reply'

    task_count:
      type: object
      description: task count.
      properties:
        count:
          allOf:
            - $ref: '#/components/schemas/count'
            - example: 40

    task_result:
      type: object
      description: task result.
      additionalProperties:
        x-additionalPropertiesName: task result fields
        description: See for details the Luna Tasks documentation.

    error_count:
      type: object
      description: error count.
      properties:
        count:
          allOf:
            - $ref: '#/components/schemas/count'
            - example: 5

    services_versions:
      type: object
      description: versions of luna services.
      properties:
        luna-admin:
          $ref: '#/components/schemas/version'
        luna-accounts:
          $ref: '#/components/schemas/version'
        luna-sender:
          $ref: '#/components/schemas/version'
        luna-image-store-task-results:
          $ref: '#/components/schemas/version'
        luna-events:
          $ref: '#/components/schemas/version'
        luna-tasks:
          $ref: '#/components/schemas/version'
        luna-faces:
          $ref: '#/components/schemas/version'
        luna-image-store-faces-samples:
          $ref: '#/components/schemas/version'
        luna-image-store-bodies-samples:
          $ref: '#/components/schemas/version'
        luna-image-store-images:
          $ref: '#/components/schemas/version'
        luna-api:
          $ref: '#/components/schemas/version'
        luna-configurator:
          $ref: '#/components/schemas/version'
        luna-handlers:
          $ref: '#/components/schemas/version'
        luna-python-matcher:
          $ref: '#/components/schemas/version'
        luna-matcher-proxy:
          $ref: '#/components/schemas/version'
        luna-licenses:
          $ref: '#/components/schemas/version'
        luna-remote-sdk:
          $ref: '#/components/schemas/version'
        luna-lambda:
          $ref: '#/components/schemas/version'
        luna-video-manager:
          $ref: '#/components/schemas/version'
        luna-video-agent:
          $ref: '#/components/schemas/version'
        LUNA PLATFORM:
          type: object
          description: versions of luna services.
          properties:
            major:
              allOf:
                - $ref: '#/components/schemas/int_version'
                - description: a major version of service.
                - example: 2
            minor:
              allOf:
                - $ref: '#/components/schemas/int_version'
                - description: a minor version of service.
                - example: 3
            patch:
              allOf:
                - $ref: '#/components/schemas/int_version'
                - description: a patch version of service.
                - example: 4
          required: [major, minor, patch]

    face_descriptor_version:
      type: integer
      description: the face descriptor version
      enum: [46, 52, 54, 56, 57, 58, 59, 60, 62, 64, 65]
      example: 56

    descriptor_info:
      type: array
      items:
        type: object
        properties:
          descriptor_version:
            $ref: '#/components/schemas/face_descriptor_version'
          descriptor_count:
            $ref: '#/components/schemas/count'
        required: [descriptor_version, descriptor_count]

    setting:
      type: object
      description: single setting.
      properties:
        id:
          type: integer
          example: 34
        tags:
          type: array
          items:
            type: string
          example: ['tag1', 'tag2']
        name:
          type: string
          example: SAVE_EVENTS_TIMEOUT
        value:
          anyOf:
            - $ref: "#/components/schemas/AnyStandaloneType"
            - type: array
              items:
                - $ref: "#/components/schemas/AnyStandaloneType"
          example: 2
        description:
          type: string
          example: save events timeout. 0 or negative means no timeout
        create_time:
          $ref: '#/components/schemas/time'
        last_update_time:
          $ref: '#/components/schemas/time'
        is_default:
          type: boolean
      required: [id, tags, name, value, description, create_time, last_update_time, is_default]

    configs:
      description: all platform settings.
      type: array
      items:
        $ref: '#/components/schemas/setting'

    license_period:
      type: object
      properties:
        is_available:
          type: boolean
          description: whether the license is valid
          example: True
        value:
          oneOf:
            - type: string
              format: date-time
              example: "2021-08-11T09:11:41.674Z"
            - type: string
              enum: [ PERPETUAL ]

    license_feature:
      type: object
      properties:
        is_available:
          type: boolean
          description: whether the license feature is available
          example: True
        value:
          type: integer
          nullable: True
          description: license feature current value

    license_info:
      type: object
      description: current license data
      properties:
        expiration_time:
          allOf:
            - $ref: '#/components/schemas/license_period'
            - description: expiration time of your license
        faces_limit:
          allOf:
            - $ref: '#/components/schemas/license_feature'
            - description: |
                information about allowed faces database size:

                - feature availability. When the limit is exceeded, the 'False' value is returned.

                - maximum number of faces with attached attributes
          example:
            is_available: True
            value: 1000
        liveness:
          allOf:
            - $ref: '#/components/schemas/license_feature'
            - description: information about liveness feature availability
          example:
            is_available: True
            value: 1
        liveness_balance:
          allOf:
            - $ref: '#/components/schemas/license_feature'
            - description: remaining liveness executions
          example:
            is_available: True
            value: 100000
        streams_limit:
          allOf:
            - $ref: '#/components/schemas/license_feature'
            - description: maximum number of streams
          example:
            is_available: True
            value: 1000
        analytics_streams_limit:
          allOf:
            - $ref: '#/components/schemas/license_feature'
            - description: maximum number of streams for analytics.
          example:
            is_available: True
            value: 1000
        iso:
          allOf:
            - $ref: '#/components/schemas/license_feature'
            - description: information about ISO feature availability.
          example:
            is_available: True
            value: 1
        body_attributes:
          allOf:
            - $ref: '#/components/schemas/license_feature'
            - description: information about body attributes estimation feature availability.
          example:
            is_available: True
            value: 1
        index:
          allOf:
            - $ref: '#/components/schemas/license_feature'
            - description: information about matching index feature availability.
          example:
            is_available: True
            value: 1
        people_counter:
          allOf:
            - $ref: '#/components/schemas/license_feature'
            - description: information about people counter feature availability.
          example:
            is_available: True
            value: 1
        lambdas:
          allOf:
            - $ref: '#/components/schemas/license_feature'
            - description: information about lambdas feature availability.
          example:
            is_available: True
            value: 1
        deepfake:
          allOf:
            - $ref: '#/components/schemas/license_feature'
            - description: information about deepfake feature availability.
          example:
            is_available: True
            value: 1
      required: [expiration_time, faces_limit, liveness]

    system_info:
      type: object
      description: all system info.
      properties:
        services_versions:
          $ref: '#/components/schemas/services_versions'
        descriptor_info:
          $ref: '#/components/schemas/descriptor_info'
        configs:
          $ref: '#/components/schemas/configs'
        current_faces_attributes_count:
          type: integer
          minimum: 0
          description: current faces attributes count
          example: 10
        license_info:
          $ref: '#/components/schemas/license_info'
        signature:
          type: string
        stats:
          type: object
          nullable: true
          properties:
            estimators_stats:
              type: array
              items:
                type: object
                properties:
                  count:
                    type: integer
                    description: amount of the estimations.
                    minimum: 1
                  month:
                    type: string
                    description: month of the interest (events occurred during this month).
                    example: '2021-09'
                  name:
                    type: string
                    description: name of the estimator.
                    example: body_descriptor_extractor_usages
                required: [count, month, name]
            estimators_performance_stats:
              type: array
              items:
                type: object
                properties:
                  month:
                    type: string
                    description: month of the interest (events occurred during this month).
                    example: '2021-09'
                  name:
                    type: string
                    description: name of the estimator.
                    example: body_descriptor
                  execution_time:
                    type: number
                    description: estimation time (mean value).
                    minimum: 0
                    example: 0.029135203011156546
                  batch_size:
                    type: number
                    description: estimation batch size (mean value).
                    minimum: 0
                    example: 1.0952380952380951
                required: [ month, name, execution_time, batch_size ]
            image_processing_stats:
              type: array
              items:
                type: object
                properties:
                  month:
                    type: string
                    description: month of the interest (events occurred during this month).
                    example: '2021-09'
                  image_load_time:
                    type: number
                    description: image load time (mean value).
                    minimum: 0
                    example: 0.006479793069339647
                  image_size:
                    type: object
                    additionalProperties: true
                    description: image size histogram-like counts.
                    example:
                      w_1000_h_1050: 4
                      w_1000_h_800: 212
                      w_250_h_250: 358
                  face_detection_size:
                    type: object
                    additionalProperties: true
                    description: face detection size histogram-like counts.
                    example:
                      h_100: 2
                      h_180: 197
                      h_1730: 4
                required: [ month, image_load_time, image_size, face_detection_size ]
            routes_stats:
              type: array
              items:
                type: object
                properties:
                  service:
                    type: string
                    description: name of the service.
                    example: luna-api
                  route:
                    type: string
                    description: code in format 'HTTP_METHOD:URI'
                    example: 'GET:/version'
                  month:
                    type: string
                    description: month of the interest (events occurred during this month).
                    example: '2021-09'
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        count:
                          type: integer
                          minimum: 1
                        error_code:
                          type: string
                          example: '12012'
                      required: [count, error_code]
                  request_stats:
                    type: array
                    items:
                      type: object
                      properties:
                        count:
                          type: integer
                          minimum: 1
                        status_code:
                          type: string
                          example: '200'
                      required: [count, status_code]
                required: [service, route, month, errors, request_stats]

      required: [services_versions, descriptor_info, configs, license_info, current_faces_attributes_count,
                 signature]

    accept_docs_handler:
      type: string
      enum: [application/x-yaml, text/html]

    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: accounts
            error:
              error_code: 38001
              desc: Health check error
              detail: GET:http:\/\/accounts:5170\/version:Cannot connect to host accounts:5170 ssl:default [Name or service not known]
              link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-38001

            status: 0

    insert_time_now__gte:
      allOf:
        - $ref: '#/components/schemas/now_delta_time_filter'
      description: |
        End time lower included boundary in format `now-time`, where time must be present as follows:

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

    insert_time_now__lt:
      allOf:
        - $ref: '#/components/schemas/now_delta_time_filter'
      description: |
        End time upper excluded boundary in format `now-time`, where time must be present as follows:

        | Parameter value | Description  |
        |---------------------|--------------|
        | `1m`                | one minute   |
        | `2h`                | two hours    |
        | `7d`                | seven days   |
        | `5w`                | five weeks   |
        | `3M`                | three months |
        | `10y`               | ten years    |
        
    insert_time__gte:
      allOf:
        - $ref: '#/components/schemas/time'
        - $ref: '#/components/schemas/time_pattern'
      description: Event insert time lower excluding boundary.

    insert_time__lt:
      allOf:
        - $ref: '#/components/schemas/time'
        - $ref: '#/components/schemas/time_pattern'
      description: Event insert time upper excluding boundary.

    now_delta_time_filter:
      type: string
      pattern: '^now-(\d+)[smhdwMy]$'
      example: "now-2d"

    create_time_now__gte:
      allOf:
        - $ref: '#/components/schemas/now_delta_time_filter'
      description: |
            Create time lower included boundary in format `now-time`, where time must be present as follows:

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

    create_time_now__lt:
      allOf:
        - $ref: '#/components/schemas/now_delta_time_filter'
      description: |
            Create time upper excluded boundary in format `now-time`, where time must be present as follows:

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

    time_pattern:
      pattern: '^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(Z|\.\d+Z|\.\d+[+-]\d{2}:\d{2}|[+-]\d{2}:\d{2}))$'
      example: "2018-08-11T09:11:41.674Z"

    create_time__gte:
      allOf:
        - $ref: '#/components/schemas/time'
        - $ref: '#/components/schemas/time_pattern'
      description: Create time lower included boundary.

    create_time__lt:
      allOf:
        - $ref: '#/components/schemas/time'
        - $ref: '#/components/schemas/time_pattern'
      description: Create time upper excluded boundary.

    general_event_create_time__lt:
      allOf:
        - $ref: '#/components/schemas/time'
        - $ref: '#/components/schemas/time_pattern'
      description: General event create time upper excluded boundary.

    general_event_create_time_now__lt:
      allOf:
        - $ref: '#/components/schemas/now_delta_time_filter'
      description: |
            General event create time upper excluded boundary in format `now-time`, where time must be present as follows:

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

    schedule_id:
      allOf:
      - $ref: '#/components/schemas/task_id'
      description: schedule id

    schedule_trigger:
      type: object
      description: task schedule trigger
      properties:
        cron:
          type: string
          maxLength: 128
          example: 5 4 * * *
          description: |
            The cron syntax consists of five fields:

            | Field           | Allowed Values        |
            |-----------------|-----------------------|
            | Minute          | 0-59                  |
            | Hour            | 0-23                  |
            | Day of month    | 1-31                  |
            | Month           | 1-12                  |
            | Day of week     | 0-6 (Sunday-Saturday) |

            There are special characters such as `*` (any value), `-` (range), `,` (list), and `/` (step) that can be used before each field.
            
            Expression examples:            
            
            `0 0 * * *` - runs a scheduled task at midnight (00:00) every day.
            
            `*/15 * * * *` - runs a scheduled task every 15 minutes.
            
            `30 8 * * 1-5` - runs a scheduled task at 8:30 AM every weekday (Monday to Friday).
            
            `0 0 1 * *` - runs a scheduled task at midnight (00:00) on the first day of every month.
            
            `0 3 * * 1,3,5` - runs a scheduled task at 3:00 AM every Monday, Wednesday, and Friday.
            
            For more detail about cron syntax see https://en.wikipedia.org/wiki/Cron.

        cron_timezone:
          type: string
          enum: [utc, local]
          description: cron timezone - utc or local
          default: local
      required: [cron]

    schedule_behaviour:
      type: object
      description: schedule behaviour parameters
      properties:
        start_immediately:
          type: bool
          default: false
          description: whether to create first task immediately regardless to schedule
        create_stopped:
          type: bool
          default: false
          description: |
            whether to create schedule and not execute any tasks

            expected that schedule will execute by user manually in future

    task_schedule_template_base:
      type: object
      description: tasks schedule
      properties:
        notification_policy:
          $ref: '#/components/schemas/notification_policy'

    task_schedule_template_base_request:
      allOf:
        - $ref: '#/components/schemas/task_schedule_template_base'
        - type: object
          properties:
            result_storage_policy:
              $ref: '#/components/schemas/result_storage_policy'

    task_schedule_template_base_response:
      allOf:
        - $ref: '#/components/schemas/task_schedule_template_base'
        - type: object
          properties:
            result_storage_policy:
              $ref: '#/components/schemas/result_storage_policy_response'

    task_schedule_template:
      allOf:
        - $ref: '#/components/schemas/task_schedule_template_base_request'
      required: [task_type, content]

    task_schedule_template_reply:
      allOf:
        - $ref: '#/components/schemas/task_schedule_template_base_response'
      required: [task_type, content, notification_policy, result_storage_policy]

    task_type_schedulable:
      type: integer
      enum: [4, 5]
      example: 4
      description: |
        task type

        | task type            | value |
        |----------------------|-------|
        | garbage collect      | 4     |
        | additional extract   | 5     |

    task_type_schedulable_reply:
      type: integer
      enum: [1, 2, 3, 4, 5, 6, 7, 8]
      example: 1
      description: |
        task type

        | task type            | value |
        |----------------------|-------|
        | linker               | 1     |
        | clusterization       | 2     |
        | report               | 3     |
        | garbage collect      | 4     |
        | additional extract   | 5     |
        | cross match          | 6     |
        | roc-curve calculation| 7     |
        | export objects       | 8     |
        | estimator            | 9     |

    schedule_status:
      type: string
      enum: [running, stopped]
      description: |
        schedule status

        | status  | description                                  |
        |---------|----------------------------------------------|
        | running | schedule is running                          |
        | stopped | schedule is stopped by user                  |

    schedule_gc_task_content:
      allOf:
        - $ref: "#/components/schemas/task_schedule_template"
      properties:
        task_type:
          $ref: "#/components/schemas/task_type_schedulable"
        content:
          $ref: "#/components/schemas/gc_task_content"

    schedule_gc_task_content_reply:
      allOf:
        - $ref: "#/components/schemas/task_schedule_template_reply"
      properties:
        task_type:
          $ref: "#/components/schemas/task_type_schedulable_reply"
        content:
          $ref: "#/components/schemas/gc_task_content"

    schedule_ae_task_content:
      allOf:
        - $ref: "#/components/schemas/task_schedule_template"
      properties:
        task_type:
          $ref: "#/components/schemas/task_type_schedulable"
        content:
          $ref: "#/components/schemas/additional_extract_task_content"

    schedule_ae_task_content_reply:
      allOf:
        - $ref: "#/components/schemas/task_schedule_template_reply"
      properties:
        task_type:
          $ref: "#/components/schemas/task_type_schedulable_reply"
        content:
          $ref: "#/components/schemas/additional_extract_task_content"

    schedule_cross_match_task_content:
      allOf:
        - $ref: "#/components/schemas/task_schedule_template"
      properties:
        task_type:
          $ref: "#/components/schemas/task_type_schedulable"
        content:
          $ref: "#/components/schemas/cross_match_task_content"

    schedule_cross_match_task_content_reply:
      allOf:
        - $ref: "#/components/schemas/task_schedule_template_reply"
      properties:
        task_type:
          $ref: "#/components/schemas/task_type_schedulable_reply"
        content:
          $ref: "#/components/schemas/cross_match_task_content"

    schedule_roc_task_content:
      allOf:
        - $ref: "#/components/schemas/task_schedule_template"
      properties:
        task_type:
          $ref: "#/components/schemas/task_type_schedulable"
        content:
          $ref: "#/components/schemas/roc_task_content"

    schedule_roc_task_content_reply:
      allOf:
        - $ref: "#/components/schemas/task_schedule_template_reply"
      properties:
        task_type:
          $ref: "#/components/schemas/task_type_schedulable_reply"
        content:
          $ref: "#/components/schemas/roc_task_content"

    schedule_clustering_task_content_reply:
      allOf:
        - $ref: "#/components/schemas/task_schedule_template_reply"
      properties:
        task_type:
          $ref: "#/components/schemas/task_type_schedulable_reply"
        content:
          $ref: "#/components/schemas/clustering_task_content"

    schedule_reporter_task_content_reply:
      allOf:
        - $ref: "#/components/schemas/task_schedule_template_reply"
      properties:
        task_type:
          $ref: "#/components/schemas/task_type_schedulable_reply"
        content:
          type: object
          properties:
            clusterization:
              $ref: "#/components/schemas/clustering_task_content"
            reporter:
              $ref: "#/components/schemas/reporter_task_content_without_filters"
          required: [clusterization, reporter]

    schedule_exporter_task_content_reply:
      allOf:
        - $ref: "#/components/schemas/task_schedule_template_reply"
      properties:
        task_type:
          $ref: "#/components/schemas/task_type_schedulable_reply"
        content:
          $ref: "#/components/schemas/exporter_task_content"

    schedule_estimator_task_content_reply:
      allOf:
        - $ref: "#/components/schemas/task_schedule_template_reply"
      properties:
        task_type:
          $ref: "#/components/schemas/task_type_schedulable_reply"
        content:
          $ref: "#/components/schemas/estimator_task_content"

    task_schedulable:
      description: task schedule
      oneOf:
        - $ref: '#/components/schemas/schedule_gc_task_content'
        - $ref: '#/components/schemas/schedule_ae_task_content'
      discriminator:
        propertyName: task_type
        mapping:
          4: '#/components/schemas/schedule_gc_task_content'
          5: '#/components/schemas/schedule_ae_task_content'

    schedule_linker_task_content_reply:
      allOf:
        - $ref: "#/components/schemas/task_schedule_template_reply"
      properties:
        task_type:
          $ref: "#/components/schemas/task_type_schedulable_reply"
        content:
          $ref: "#/components/schemas/linker_task_content"

    task_schedulable_reply:
      description: task schedule
      anyOf:
        - $ref: '#/components/schemas/schedule_linker_task_content_reply'
        - $ref: '#/components/schemas/schedule_clustering_task_content_reply'
        - $ref: '#/components/schemas/schedule_reporter_task_content_reply'
        - $ref: '#/components/schemas/schedule_gc_task_content_reply'
        - $ref: '#/components/schemas/schedule_ae_task_content_reply'
        - $ref: '#/components/schemas/schedule_cross_match_task_content_reply'
        - $ref: '#/components/schemas/schedule_roc_task_content_reply'
        - $ref: '#/components/schemas/schedule_exporter_task_content_reply'
        - $ref: '#/components/schemas/schedule_estimator_task_content_reply'
      discriminator:
        propertyName: task_type
        mapping:
          1: '#/components/schemas/schedule_linker_task_content_reply'
          2: '#/components/schemas/schedule_clustering_task_content_reply'
          3: '#/components/schemas/schedule_reporter_task_content_reply'
          4: '#/components/schemas/schedule_gc_task_content_reply'
          5: '#/components/schemas/schedule_ae_task_content_reply'
          6: '#/components/schemas/schedule_cross_match_task_content_reply'
          7: '#/components/schemas/schedule_roc_task_content_reply'
          8: '#/components/schemas/schedule_exporter_task_content_reply'
          9: '#/components/schemas/schedule_estimator_task_content_reply'

    schedule:
      type: object
      description: tasks schedule
      properties:
        task:
          $ref: '#/components/schemas/task_schedulable'
        trigger:
          $ref: '#/components/schemas/schedule_trigger'
        behaviour:
          $ref: '#/components/schemas/schedule_behaviour'
      required: [trigger, task]

    schedule_reply:
      type: object
      properties:
        schedule_id:
          $ref: '#/components/schemas/schedule_id'
        task_ids:
          type: array
          items:
            $ref: '#/components/schemas/task_id'
          example: [1,2,3]
          description: list of executed task ids in descending order
        task:
          $ref: '#/components/schemas/task_schedulable_reply'
        trigger:
          $ref: '#/components/schemas/schedule_trigger'
        status:
          $ref: '#/components/schemas/schedule_status'
        next_run_time:
          allOf:
            - $ref: '#/components/schemas/time'
          nullable: True
          description: estimated time for next task
        create_time:
          allOf:
            - $ref: '#/components/schemas/time'
          description: schedule create time
        last_update_time:
          allOf:
            - $ref: '#/components/schemas/time'
          description: schedule last update time
      required:
        - schedule_id
        - task_ids
        - task
        - trigger
        - status
        - next_run_time
        - create_time
        - last_update_time

    schedules_reply:
      type: array
      items:
        $ref: '#/components/schemas/schedule_reply'

    plugin_status:
      type: object
      properties:
        name:
          type: string
          description: Plugin name
        running:
          type: integer
          enum: [ 0,1 ]
          description: Whether plugin is running or not.
      required: [name, running]

    plugins:
      type: object
      properties:
        plugins:
          description: list of imported plugins
          type: array
          items:
            $ref: '#/components/schemas/plugin_status'
      required: [plugins]
      example:
        plugins:
          - name: foo
            running: 1

    notification_policy:
      type: object
      description: tasks processing notification policy
      properties:
        enable:
          allOf:
            - $ref: '#/components/schemas/int01'
            - description: Whether callbacks enabled or not
            - default: 1
        task_callbacks:
          $ref: '#/components/schemas/task_callbacks'
        subtask_callbacks:
          $ref: '#/components/schemas/subtask_callbacks'

    result_storage_policy_response:
      type: object
      description: tasks processing result storage policy
      properties:
        ttl:
          type: integer
          enum: [ 1, 2, 3, 4, 5, 6, 7, 14, 30, 60, 90, 180, 365, -1 ]
          description: Lifetime for task result object, in days. By default, parent bucket lifetime configuration applied. For object to be retained indefinitely, setup `ttl=-1`.

    result_storage_policy:
      allOf:
        - $ref: '#/components/schemas/result_storage_policy_response'
        - type: object
          properties:
            ttl:
              nullable: true

    callback_basic_authorization:
      type: object
      properties:
        type:
          type: string
          description: Authorization type.
          enum: [basic]
        login:
          type: string
          description: Login
        password:
          type: string
          description: Password
      required: [ type, login, password]
      description: Callback basic authorization parameters

    task_http_callback:
      type: object
      properties:
        type:
          type: string
          enum: [http]
        authorization:
          $ref: '#/components/schemas/callback_basic_authorization'
        url:
          type: string
          description: Request url.
          format: uri-reference
        params:
          type: object
          properties:
            timeout:
              type: integer
              default: 60
              description: Callback request timeout.
            content_type:
              type: string
              default: application/json
              enum: [application/json, application/msgpack]
              description: Callback request content type.
            headers:
              type: object
              description: Callback request headers.
          description: Callback request parameters
        enable:
          allOf:
            - $ref: '#/components/schemas/int01'
            - description: Whether callback enabled or not
            - default: 1
      required: [ type, url ]
    
    telegram_callback:
      type: object
      properties:
        type:
          type: string
          enum: [ telegram ]
        chat_id:
          type: integer
          description: |
            Telegram chat id where callbacks will be sent.

            Messages can be delivered to users or channels using their ids. 
            For detailed information on where to find these ids, please refer to https://core.telegram.org/bots/api.
        token:
          type: string
          description: |
            Telegram authorization token. 
            For details information see <a href="https://core.telegram.org/bots/features#botfather">botfather</a>.
        params:
          type: object
          description: Callback request parameters
          properties:
            timeout:
              type: integer
              default: 60
              description: Callback request timeout.
        enable:
          allOf:
            - $ref: '#/components/schemas/int01'
            - description: Whether callback enabled or not
            - default: 1
      required: [ type, chat_id, token ]

    task_callback:
      oneOf:
        - $ref: '#/components/schemas/task_http_callback'
        - $ref: '#/components/schemas/telegram_callback'
      discriminator:
        propertyName: "type"
        mapping:
          http: '#/components/schemas/task_http_callback'
          telegram: '#/components/schemas/telegram_callback'
    
    task_callbacks_example:
      - type: http
        enable: 1
        authorization:
          type: basic
          login: login
          password: password
        url: http://callback.url
        params:
          timeout: 60
          content_type: "application/json"
          headers: { }
      - type: telegram
        enable: 1
        token: 1111111111:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
        chat_id: 111111111
        params:
          timeout: 60
    
    task_callbacks:
      type: array
      items:
        $ref: '#/components/schemas/task_callback'
      description: |
        Callbacks for sending tasks id and status to third party system. Callbacks are executed after task status changed.
        
        ** Sample Output for successful task **
        ```
        {"task_id": 123, "task_status": "done", "result_id": "00000000-0000-4000-a000-000000658854"}
        ```
        
        ** Sample Output for failed task **
        ```
        {"task_id": 123, "task_status": "failed"}
        ```
                
        ** Sample Output for cancalled task **
        ```
        {"task_id": 123, "task_status": "cancelled"}
        ```
      example:
        $ref: "#/components/schemas/task_callbacks_example"

    subtask_callbacks:
      type: array
      items:
        $ref: '#/components/schemas/task_callback'
      description: |
        Callbacks for sending subtasks id, status and number of completed subtasks to third party system. 
        Callbacks are executed after subtask status changed.
        
        ** Sample Output for start subtask **
        ```
        {"subtask_id": 123, "subtask_status": "in_progress", "completed_subtasks": 0}
        ```
        
        ** Sample Output for successful subtask **
        ```
        {"subtask_id": 123, "subtask_status": "done", "completed_subtasks": 0}
        ```
        
        ** Sample Output for failed subtask **
        ```
        {"subtask_id": 123, "subtask_status": "failed", "completed_subtasks": 0}
        ```
                
        ** Sample Output for cancelled subtask **
        ```
        {"subtask_id": 123, "subtask_status": "cancelled", "completed_subtasks": 0}

      example:
        $ref: "#/components/schemas/task_callbacks_example"


    task_notification_policy_response:
      allOf:
        - $ref: "#/components/schemas/notification_policy"
      required: [enable, task_callbacks, subtask_callbacks]
  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'

    authorization_error:
      description: Unautorized
      headers:
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
        WWW-Authenticate:
          $ref: '#/components/headers/authenticate'
        Content-Type:
          $ref: '#/components/headers/application_json'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            bad_auth_data:
              value:
                error_code: 12010
                desc: Bad/incomplete input data
                detail: This resource needs 'Authorization' authorization headers
                link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12010
            wrong_login_password:
              value:
                error_code: 15014
                desc: Bad/incomplete input data
                detail: Login or password is incorrect
                link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-15014

    login_error:
      description: Unautorized
      headers:
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
        WWW-Authenticate:
          $ref: '#/components/headers/authenticate'
        Content-Type:
          $ref: '#/components/headers/application_json'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error_code: 15014
            desc: Bad/incomplete input data
            detail: Login or password is incorrect
            link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-15014

    cookies_not_found:
      description: 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: 12013
            desc: Resource not found
            detail: Cookies for current session not found
            link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12013/

    forbidden_tasks_error:
      description: Forbidden, luna-tasks support is disabled on server
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            tasks_disabled:
              value:
                error_code: 11039
                desc: Forbidden
                detail: Luna Tasks service is disabled
                link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11039
            lis_is_disabled:
              value:
                error_code: 11070
                desc: Forbidden
                detail: Luna Image Store service is disabled
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11070"

    task_not_found_error:
      description: 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: 28001
            desc: Object not found
            detail: Task with id '55023' not found
            link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-28001

    server_timeout_error:
      description: server timeout error.
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            allOf:
              - $ref: '#/components/schemas/Error'
            example:
              error_code: 9
              detail: Request timeout
              desc: Request timeout on http://127.0.0.1:5010/{...}, method {...}
              link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-9

    tasks_403_errors:
      description: Access to this resource on the server is denied
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            events_is_disabled:
              value:
                error_code: 11040
                desc: Forbidden
                detail: Luna Events service is disabled
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11040"
            lis_is_disabled:
              value:
                error_code: 11070
                desc: Forbidden
                detail: Luna Image Store service is disabled
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11070"
            tasks_is_disabled:
              value:
                error_code: 11039
                desc: Forbidden
                detail: Luna Tasks service is disabled
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11039"

    tasks_disabled:
      description: Access to this resource on the server is denied
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            tasks_is_disabled:
              value:
                error_code: 11039
                desc: Forbidden
                detail: Luna Tasks service is disabled
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11039"

    ae_not_implemented:
      description: not implemented.
      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:
            not_implemented:
              value:
                error_code: 12029
                desc: Functionality is not implemented
                detail: Required server functionality is not implemented
                link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12029

    forbidden_resource_error:
      description: Forbidden.
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            resource_is_disabled:
              value:
                error_code: 12049
                desc: Forbidden
                detail: Resource is disabled.
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12049"
  securitySchemes:
    BasicAuth:
      type: http
      scheme: basic
paths:
  /:
    get:
      security:
        - BasicAuth: []
      tags:
        - views

      summary: get account info tables
      description: account info form. if authorization is not passed redirection to */login* page occurs
      operationId: homeForm

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $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:
                title: Visionlabs
                type: string
                description: all accounts info page.
              example: <html><body>some content</body></html>
        401:
          $ref: '#/components/responses/authorization_error'
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'
  /version/view:
    get:
      security:
        - BasicAuth: []
      tags:
        - views

      summary: view version
      description: version form.
      operationId: versionForm

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $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:
                title: Visionlabs
                type: string
                description: version info page.
              example: <html><body>some content</body></html>
        401:
          $ref: '#/components/responses/authorization_error'
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'
  /version:
    get:
      tags:
        - version

      summary: get version
      description: get versions of luna service
      operationId: getVersion

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

      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/version_handler_response'
        500:
          $ref: '#/components/responses/internal_server_error'
  /4/luna_sys_info:
    get:
      security:
        - BasicAuth: []
      tags:
        - help

      summary: get system info
      description: get luna system info
      operationId: getSystemInfo

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $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-Disposition:
              $ref: '#/components/headers/content_disposition'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/system_info'
        401:
          $ref: '#/components/responses/authorization_error'
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'
  /login:
    get:
      tags:
        - views

      summary: log in
      description: authorization form. if authorization is passed redirection to home page occurs
      operationId: loginForm

      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:
                title: Visionlabs
                type: string
                description: login page.
              example: <html><body>some content</body></html>
        401:
          $ref: '#/components/responses/login_error'
        500:
          $ref: '#/components/responses/internal_server_error'
  /4/login:
    get:
      security:
        - BasicAuth: []
      tags:
        - login

      summary: check authorization
      description: check authorization cookie
      operationId: checkLogin

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $ref: '#/components/parameters/luna_request_id'

      responses:
        201:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/text_plain'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            text/plain:
              schema:
                type: string
              example: Ok
        401:
          $ref: '#/components/responses/authorization_error'
        500:
          $ref: '#/components/responses/internal_server_error'

    post:
      security:
        - BasicAuth: []
      tags:
        - login

      summary: set authorization
      description: set authorization cookie
      operationId: setLogin

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $ref: '#/components/parameters/luna_request_id'

      responses:
        201:
          description: Created
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        401:
          $ref: '#/components/responses/authorization_error'
        500:
          $ref: '#/components/responses/internal_server_error'

    patch:
      security:
        - BasicAuth: []
      tags:
        - login

      summary: change authorization
      description: change authorization cookie
      operationId: changePassword

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/applicationJsonContent'

      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/new_password'

      responses:
        204:
          description: No Content
          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'
              example:
                error_code: 12002
                desc: Bad/incomplete input data
                detail: Request does not contain json
                link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12002
        401:
          $ref: '#/components/responses/authorization_error'
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'

    delete:
      security:
        - BasicAuth: []
      tags:
        - login

      summary: clear authorization
      description: clear authorization cookie
      operationId: clearLogin

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $ref: '#/components/parameters/luna_request_id'

      responses:
        204:
          description: No Content
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        401:
          $ref: '#/components/responses/authorization_error'
        404:
          $ref: '#/components/responses/cookies_not_found'
        500:
          $ref: '#/components/responses/internal_server_error'
  /4/search:
    get:
      security:
        - BasicAuth: []
      tags:
        - search

      summary: search element by id or email
      description: search element by id or email
      operationId: search

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/search_parameter'

      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/search_response'
              examples:
                account_search:
                  value:
                    data:
                      info:
                        account_id: 557d54ec-29ad-4f3c-93b4-c9092ef12515
                        email: horns@hooves.com
                        organization_name: Horns and Hooves
                      stats:
                        list_count: 1
                        face_count: 1
                        face_attribute_count: 1
                    type: account
                  summary: found account info.
                list_search:
                  value:
                    data:
                      list_id: a16c8b6c-2818-4bae-9fd5-65acc8d4bb5c
                      account_id: 557d54ec-29ad-4f3c-93b4-c9092ef12515
                      last_update_time: "2018-07-11T09:11:41.674Z"
                      face_count: 1
                      user_data: good persons
                    type: list
                  summary: found list info.
                face_search:
                  value:
                    data:
                      face_id: a16c8b6c-2818-4bae-9fd5-65acc8d4bb5c
                      account_id: 557d54ec-29ad-4f3c-93b4-c9092ef12515
                      create_time: "2018-07-11T09:11:41.674Z"
                    type: face
                  summary: found face info.
                attribute_search:
                  value:
                    data:
                      attribute_id: a16c8b6c-2818-4bae-9fd5-65acc8d4bb5c
                      account_id: 557d54ec-29ad-4f3c-93b4-c9092ef12515
                      gender: 1
                      age: 23
                      ethnicity: 1
                      descriptor:
                      create_time: "2018-07-11T09:11:41.674Z"
                    type: atttribute
                  summary: found attribute info.
                not_found:
                  value:
                    data: null
                    type: null
                  summary: element not found.
        401:
          $ref: '#/components/responses/authorization_error'
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'
  /accounts:
    get:
      security:
        - BasicAuth: []
      tags:
        - views

      summary: get account info tables
      description: account info form
      operationId: accountsForm

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $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:
                title: Visionlabs
                type: string
                description: all accounts info page.
              example: <html><body>some content</body></html>
        401:
          $ref: '#/components/responses/authorization_error'
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'
  /accounts/{account_id}:
    parameters:
    - in: path
      name: account_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: account id

    get:
      security:
        - BasicAuth: []
      tags:
        - views

      summary: get account info by id
      description: specified account info form
      operationId: accountForm

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $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:
                title: Visionlabs
                type: string
                description: account page.
              example: <html><body>some content</body></html>
        401:
          $ref: '#/components/responses/authorization_error'
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'
  /accounts/{account_id}/lists:
    parameters:
    - in: path
      name: account_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: account id

    get:
      security:
        - BasicAuth: []
      tags:
        - views

      summary: get account lists
      description: specified account lists form
      operationId: accountListsForm

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $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:
                title: Visionlabs
                type: string
                description: account list page.
              example: <html><body>some content</body></html>
        401:
          $ref: '#/components/responses/authorization_error'
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'
  /4/accounts:
    get:
      security:
        - BasicAuth: []
      tags:
        - accounts

      summary: get accounts
      description: get accounts with filters
      operationId: getAccounts

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/page_size'
        - $ref: '#/components/parameters/create_time__lt'
        - $ref: '#/components/parameters/create_time__gte'

      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/account_response'
        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'
              example:
                error_code: 12012
                desc: Bad/incomplete input data
                detail: Bad query parameters 'page'
                link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
        401:
          $ref: '#/components/responses/authorization_error'
        500:
          $ref: '#/components/responses/internal_server_error'

    post:
      security:
        - BasicAuth: []
      tags:
        - accounts

      summary: register account
      description: |
        register a new account in the system.
        
        > **WARNING**: Account registering with `email` is deprecated. Create accounts with `login` & `password` instead.
        When creating an account using legacy scheme, the `email` field will be used as `login` & `password`, and the `organization_name` field will be used as account `description`.
        Mind the validation errors.

      operationId: registerAccount

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/applicationJsonContent'

      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/registered_account'
        required: true
      responses:
        201:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Location:
              schema:
                type: string
                example: /3/accounts/00000000-0000-4000-a000-000000027552
              required: true
              description: location of a new account
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/new_account_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'
              example:
                error_code: 12022
                desc: Bad/incomplete input data
                detail: |
                      Failed to validate input json. Path: 'email', message: 'email must match pattern ^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$'
                link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022
        401:
          $ref: '#/components/responses/authorization_error'
        409:
          description: Conflict
          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: 41002
                desc: Unique constraint error
                detail: Account with account_id '00000000-0000-4000-a000-000000027552' already exists
                link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-41002
        500:
          $ref: '#/components/responses/internal_server_error'
  /4/accounts/{account_id}:
    parameters:
    - in: path
      name: account_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: account id

    get:
      security:
        - BasicAuth: []
      tags:
        - accounts

      summary: get account by id
      description: get account info by account id
      operationId: getAccount

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $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/account_info'
        401:
          $ref: '#/components/responses/authorization_error'
        404:
          description: 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: 15012
                desc: Object not found
                detail: An account with id '00000000-0000-4000-a000-000000025516' not found
                link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-15012
        500:
          $ref: '#/components/responses/internal_server_error'

    put:
      security:
        - BasicAuth: []
      tags:
        - accounts

      summary: put account by id
      description: |
        register a new account with specified id in the system.
        
        > **WARNING**: Account registering with `email` is deprecated. Create accounts with `login` & `password` instead.
        When creating an account using legacy scheme, the `email` field will be used as `login` & `password`, and the `organization_name` field will be used as account `description`.
        Mind the validation errors.

      operationId: putAccount

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/applicationJsonContent'

      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/registered_account'
        required: true
      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Location:
              schema:
                type: string
                example: /3/accounts/00000000-0000-4000-a000-000000027552
              required: true
              description: location of a new account

          content:
            application/json:
              schema:
                $ref: '#/components/schemas/new_account_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'
              example:
                error_code: 12022
                desc: Bad/incomplete input data
                detail: |
                  Failed to validate input json. Path: 'email', message: 'email must match pattern ^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$'
                link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022
        401:
          $ref: '#/components/responses/authorization_error'
        409:
          description: Conflict
          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: 41002
                desc: Unique constraint error
                detail: Account with account_id '00000000-0000-4000-a000-000000027552' already exists
                link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-41002
        500:
          $ref: '#/components/responses/internal_server_error'

    patch:
      security:
        - BasicAuth: [ ]
      tags:
      - accounts

      summary: patch account
      description: patch account by id. At least one field must be specified
      operationId: patchAccount
      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/applicationJsonContent'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/account_for_patch'
      responses:
        204:
          description: Update success.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Location:
              schema:
                type: string
                example: /3/accounts/00000000-0000-4000-a000-000000027552
              required: true
              description: location of the changed account
        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:
                extra_fields:
                  value:
                    error_code: 12022
                    desc: Bad/incomplete input data
                    detail: 'Failed to validate input json. Path: ''extra_field'',  message: ''extra fields not permitted'''
                no_fields:
                  value:
                    error_code: 12022
                    desc: Bad/incomplete input data
                    detail: 'Failed to validate input json. Path: '''',  message: ''at least 1 field must be specified'''
        401:
          $ref: '#/components/responses/authorization_error'
        403:
          description: Permission denied
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_query_param:
                  value:
                    error_code: 41004
                    desc: Forbidden
                    detail: Account with account_id '8950722f-3fd4-4223-b48f-03f95f0e8dfb' has admin type and its type can't be changed
                    link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-41004
        404:
          description: 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: 15012
                desc: Object not found
                detail: An account with id '00000000-0000-4000-a000-000000025516' not found
                link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-15012
        409:
          description: Conflict
          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: 41002
                desc: Unique constraint error
                detail: Account with account_id '00000000-0000-4000-a000-000000027552' already exists
                link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-41002
        500:
          $ref: '#/components/responses/internal_server_error'

    delete:
      security:
        - BasicAuth: []
      tags:
        - accounts

      summary: remove account by id
      description: remove the account with specified id from the system
      operationId: removeAccount

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $ref: '#/components/parameters/luna_request_id'

      responses:
        204:
          description: No Content
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        401:
          $ref: '#/components/responses/authorization_error'
        500:
          $ref: '#/components/responses/internal_server_error'
  /4/lists:
    get:
      security:
        - BasicAuth: []
      tags:
        - lists

      summary: get lists
      description: get lists with filters
      operationId: getLists

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/page_size'
        - $ref: '#/components/parameters/account_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/list_response'
        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'
              example:
                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
        401:
          $ref: '#/components/responses/authorization_error'
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'
  /4/lists/{list_id}:
    parameters:
    - in: path
      name: list_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: list id

    get:
      security:
        - BasicAuth: []
      tags:
        - lists

      summary: get list
      description: get list info by id
      operationId: getListById

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $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/list_info'
        401:
          $ref: '#/components/responses/authorization_error'
        404:
          description: 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 '00000000-0000-4000-a000-000000025516' not found
                link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-22003
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'
  /tasks:
    get:
      security:
        - BasicAuth: []
      tags:
        - views

      summary: get task info tables
      description: task info form
      operationId: tasksForm

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $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:
                title: Visionlabs
                type: string
                description: all tasks info page.
              example: <html><body>some content</body></html>
        401:
          $ref: '#/components/responses/authorization_error'
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'
  /4/tasks:
    get:
      security:
        - BasicAuth: []
      tags:
        - tasks

      summary: get tasks
      description: get tasks with filters
      operationId: getTasks

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/page_size'
        - $ref: '#/components/parameters/task_ids'
        - $ref: '#/components/parameters/create_time__lt'
        - $ref: '#/components/parameters/create_time__gte'
        - $ref: '#/components/parameters/end_time__lt'
        - $ref: '#/components/parameters/end_time__gte'
        - $ref: '#/components/parameters/task_type'
        - $ref: '#/components/parameters/task_status'
        - $ref: '#/components/parameters/schedule_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/task_response'
        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'
              example:
                error_code: 12012
                desc: Bad/incomplete input data
                detail: Bad query parameters 'task_ids'
                link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
        401:
          $ref: '#/components/responses/authorization_error'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'
  /4/tasks/count:
    get:
      security:
        - BasicAuth: []
      tags:
        - tasks

      summary: get task count
      description: get task count
      operationId: getTaskCount

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/task_ids'
        - $ref: '#/components/parameters/create_time__lt'
        - $ref: '#/components/parameters/create_time__gte'
        - $ref: '#/components/parameters/end_time__lt'
        - $ref: '#/components/parameters/end_time__gte'
        - $ref: '#/components/parameters/task_type'
        - $ref: '#/components/parameters/task_status'
        - $ref: '#/components/parameters/schedule_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/task_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'
              example:
                error_code: 12012
                desc: Bad/incomplete input data
                detail: Bad query parameters 'task_ids'
                link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
        401:
          $ref: '#/components/responses/authorization_error'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'
  /4/tasks/{task_id}:
    parameters:
    - $ref: '#/components/parameters/path_task_id'

    get:
      security:
        - BasicAuth: []
      tags:
        - tasks

      summary: get task by id
      description: get task by id with filters
      operationId: getTask

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $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/task_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'
              example:
                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
        401:
          $ref: '#/components/responses/authorization_error'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        404:
          $ref: '#/components/responses/task_not_found_error'
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'

    patch:
      security:
        - BasicAuth: []
      tags:
        - tasks

      summary: cancel task by id
      description: cancel task by id with filters
      operationId: cancelTask

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $ref: '#/components/parameters/luna_request_id'

      responses:
        204:
          description: No Content
          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'
              example:
                error_code: 28019
                desc: Bad/incomplete input data
                detail: Task '55023' with status 5 cannot be canceled
                link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-28019
        401:
          $ref: '#/components/responses/authorization_error'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        404:
          $ref: '#/components/responses/task_not_found_error'
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'

    delete:
      security:
        - BasicAuth: []
      tags:
        - tasks

      summary: delete task by id
      description: delete task by id
      operationId: deleteTask

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $ref: '#/components/parameters/luna_request_id'

      responses:
        204:
          description: No Content
          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'
              example:
                error_code: 28019
                desc: Bad/incomplete input data
                detail: Task '55023' with status 5 cannot be canceled
                link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-28019
        401:
          $ref: '#/components/responses/authorization_error'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        404:
          $ref: '#/components/responses/task_not_found_error'
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'
  /4/tasks/{task_id}/notification_policy:
    parameters:
    - $ref: '#/components/parameters/path_task_id'

    get:
      tags:
      - tasks

      summary: get task notification policy
      description: get task notification policy by task id
      operationId: getTaskNotificationPolicy

      security:
        - BasicAuth: []

      parameters:
      - $ref: '#/components/parameters/authorization'
      - $ref: '#/components/parameters/exclude_header'
      - $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/task_notification_policy_response'
        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
        401:
          $ref: '#/components/responses/authorization_error'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        404:
          $ref: '#/components/responses/task_not_found_error'
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'

    put:
      tags:
      - tasks

      summary: replace task notification policy
      description: replace task notification policy by task id
      operationId: putTaskNotificationPolicy

      security:
        - BasicAuth: []

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/applicationJsonContent'

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

      responses:
        204:
          description: Done
          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
                task_can_not_canceled:
                  value:
                    error_code: 28019
                    desc: Bad/incomplete input data
                    detail: Task '146' with status 5 can not canceled
                    link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-28019
        401:
          $ref: '#/components/responses/authorization_error'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        404:
          $ref: '#/components/responses/task_not_found_error'
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'
  /4/tasks/{task_id}/result:
    parameters:
    - $ref: '#/components/parameters/path_task_id'

    get:
      security:
        - BasicAuth: []
      tags:
        - tasks

      summary: get task result by id
      description: get task result by id
      operationId: getTaskResult

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $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/task_result'
        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'
              example:
                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
        401:
          $ref: '#/components/responses/authorization_error'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        404:
          description: 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: 28020
                desc: Object not found
                detail: Impossible get a result of task 33804 with status 2
                link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-28020
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'
  /4/tasks/{task_id}/errors:
    parameters:
    - $ref: '#/components/parameters/path_task_id'

    get:
      security:
        - BasicAuth: []
      tags:
        - tasks

      summary: get task errors by task id
      description: get task errors by task id
      operationId: getTaskErrors

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

      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/task_errors'
        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'
              example:
                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
        401:
          $ref: '#/components/responses/authorization_error'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        404:
          description: 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: 28003
                desc: Object not found
                detail: Task error with id '33804' not found
                link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-28003
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'
  /4/tasks/{task_id}/errors/count:
    parameters:
    - $ref: '#/components/parameters/path_task_id'

    get:
      security:
        - BasicAuth: []
      tags:
        - tasks

      summary: get task error count by task id
      description: get task error count by task id
      operationId: getTaskErrorsCount

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/error_time__lt'
        - $ref: '#/components/parameters/error_time__gte'
        - $ref: '#/components/parameters/error_code'

      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/error_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'
              example:
                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
        401:
          $ref: '#/components/responses/authorization_error'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        404:
          description: 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: 28003
                desc: Object not found
                detail: Task error with id '33804' not found
                link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-28003
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'
  /4/tasks/{task_id}/subtasks:
    parameters:
    - $ref: '#/components/parameters/path_task_id'

    get:
      security:
        - BasicAuth: []
      tags:
        - tasks

      summary: get subtasks by task id
      description: get subtasks by task id
      operationId: getTaskSubTasks

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $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/subtasks_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'
              example:
                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
        401:
          $ref: '#/components/responses/authorization_error'
        404:
          $ref: '#/components/responses/task_not_found_error'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'
  /4/tasks/errors:
    get:
      security:
        - BasicAuth: []
      tags:
        - tasks

      summary: get errors
      description: get errors
      operationId: getErrors

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

      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/task_errors'
        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'
              example:
                error_code: 12012
                desc: Bad/incomplete input data
                detail: Bad query parameters 'task_ids'
                link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
        401:
          $ref: '#/components/responses/authorization_error'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'
  /4/tasks/errors/count:
    get:
      security:
        - BasicAuth: []
      tags:
        - tasks

      summary: get error count
      description: get error count
      operationId: getErrorCount

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/task_ids'
        - $ref: '#/components/parameters/error_ids'
        - $ref: '#/components/parameters/error_time__lt'
        - $ref: '#/components/parameters/error_time__gte'
        - $ref: '#/components/parameters/task_type'
        - $ref: '#/components/parameters/error_code'

      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/error_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'
              example:
                error_code: 12012
                desc: Bad/incomplete input data
                detail: Bad query parameters 'task_ids'
                link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
        401:
          $ref: '#/components/responses/authorization_error'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'
  /4/tasks/errors/{error_id}:
    parameters:
    - in: path
      name: error_id
      schema:
        $ref: '#/components/schemas/error_id'
      required: true
      description: error id

    get:
      security:
        - BasicAuth: []
      tags:
        - tasks

      summary: get error by id
      description: get error by id
      operationId: getError

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $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/task_error'
        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'
              example:
                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
        401:
          $ref: '#/components/responses/authorization_error'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        404:
          description: 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: 28003
                desc: Object not found
                detail: Task error with id '1042177' not found
                link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-28003
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'
  /4/tasks/gc:
    post:
      security:
        - BasicAuth: []
      tags:
        - tasks

      summary: create gc task
      description: create and start gc task
      operationId: createTaskGC

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/applicationJsonContent'

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

      responses:
        202:
          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
                description: task id.
                properties:
                  task_id:
                    $ref: '#/components/schemas/task_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'
              example:
                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
        401:
          $ref: '#/components/responses/authorization_error'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'
  /4/tasks/additional_extract:
    post:
      security:
        - BasicAuth: []
      tags:
        - tasks

      summary: create additional extract task
      description: create and start additional extract task
      operationId: createTaskAdditionalExtract

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/applicationJsonContent'

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

      responses:
        202:
          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
                description: task id.
                properties:
                  task_id:
                    $ref: '#/components/schemas/task_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'
              example:
                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
        401:
          $ref: '#/components/responses/authorization_error'
        403:
          $ref: '#/components/responses/forbidden_tasks_error'
        500:
          $ref: '#/components/responses/internal_server_error'
        504:
          $ref: '#/components/responses/server_timeout_error'
  /4/tasks/schedules:
    post:
      tags:
      - schedules

      summary: create tasks schedule
      description: |
        Create a new task schedule.

        Execution of scheduled tasks will be regulated according to the trigger and optionally starts one task 
        immediately (see *start_immediately* parameter in *behavior* section)

        No task from the schedule will be executed if the previous task has not yet been completed

      operationId: createSchedule

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/applicationJsonContent'

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

      responses:
        201:
          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:
                  schedule_id:
                    $ref: '#/components/schemas/schedule_id'
                required:
                - schedule_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:
                account_id_not_found:
                  value:
                    error_code: 11066
                    desc: Bad/incomplete input data
                    detail: Luna-Account-Id header not found
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11066"
                bad_account_id:
                  value:
                    error_code: 11037
                    desc: Bad/incomplete input data
                    detail: "Luna-Account-Id header is not UUID, format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11037"
        401:
          $ref: '#/components/responses/authorization_error'
        403:
          $ref: '#/components/responses/tasks_403_errors'
        500:
          $ref: '#/components/responses/internal_server_error'
        501:
          $ref: '#/components/responses/ae_not_implemented'
        504:
          $ref: '#/components/responses/server_timeout_error'

    get:
      tags:
      - schedules

      summary: get tasks schedules
      description: get tasks schedules with filters
      operationId: getTasksSchedules

      parameters:
      - $ref: '#/components/parameters/authorization'
      - $ref: '#/components/parameters/exclude_header'
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/page_size'
      - $ref: '#/components/parameters/task_type_schedulable'
      - $ref: '#/components/parameters/create_time__lt'
      - $ref: '#/components/parameters/create_time__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:
                $ref: '#/components/schemas/schedules_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 'account_id'
                    link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
        401:
          $ref: '#/components/responses/authorization_error'
        403:
          $ref: '#/components/responses/tasks_disabled'
        500:
          $ref: '#/components/responses/internal_server_error'
  /4/tasks/schedules/{schedule_id}:
    parameters:
      - $ref: '#/components/parameters/schedule_id_path'

    get:
      tags:
      - schedules

      summary: get tasks schedule
      description: get tasks schedule
      operationId: getTasksSchedule

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $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/schedule_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 'account_id'
                    link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
        401:
          $ref: '#/components/responses/authorization_error'
        403:
          $ref: '#/components/responses/tasks_disabled'
        404:
          description: object 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'
              examples:
                object_not_found:
                  value:
                    error_code: 28040
                    desc: Object not found
                    detail: Schedule with id '12345' not found'
                    link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-28040
        500:
          $ref: '#/components/responses/internal_server_error'

    put:
      tags:
      - schedules

      summary: replace tasks schedule
      description: |
        Replace tasks schedule:
        
        - if any task created by old schedule is running, it will be cancelled
        
        - schedule parameters will be replaced with the new ones
        
        - tasks will be executed according to the new schedule
      operationId: putTasksSchedule

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/applicationJsonContent'

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

      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                type: object
                properties:
                  schedule_id:
                    $ref: '#/components/schemas/schedule_id'
                required:
                  - schedule_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
        401:
          $ref: '#/components/responses/authorization_error'
        403:
          $ref: '#/components/responses/tasks_403_errors'
        404:
          description: object 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'
              examples:
                object_not_found:
                  value:
                    error_code: 28040
                    desc: Object not found
                    detail: Schedule with id '12345' not found'
                    link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-28040
        500:
          $ref: '#/components/responses/internal_server_error'
        501:
          $ref: '#/components/responses/ae_not_implemented'

    patch:
      tags:
      - schedules

      summary: patch tasks schedule
      description: pause/start tasks schedule
      operationId: patchTasksSchedule

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/schedule_patch'

      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 'account_id'
                    link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
        401:
          $ref: '#/components/responses/authorization_error'
        403:
          $ref: '#/components/responses/tasks_403_errors'
        404:
          description: object 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'
              examples:
                object_not_found:
                  value:
                    error_code: 28040
                    desc: Object not found
                    detail: Schedule with id '12345' not found'
                    link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-28040
        500:
          $ref: '#/components/responses/internal_server_error'

    delete:
      tags:
      - schedules

      summary: delete tasks schedule
      description: delete tasks schedule
      operationId: deleteTasksSchedule

      parameters:
        - $ref: '#/components/parameters/authorization'
        - $ref: '#/components/parameters/exclude_header'
        - $ref: '#/components/parameters/luna_request_id'

      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 'account_id'
                    link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
        401:
          $ref: '#/components/responses/authorization_error'
        403:
          $ref: '#/components/responses/tasks_disabled'
        404:
          description: object 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'
              examples:
                object_not_found:
                  value:
                    error_code: 28040
                    desc: Object not found
                    detail: Schedule with id '12345' not found'
                    link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-28040
        500:
          $ref: '#/components/responses/internal_server_error'
  /4/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'
  /4/docs/dev:
    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'
  /4/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'
  /4/healthcheck:
    get:
      tags:
        - health
      summary: get health
      description: get health of service
      operationId: healthcheck
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/include_luna_services'
      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/health_ok'
        500:
          $ref: '#/components/responses/internal_server_error'
        502:
          description: Unhealthy
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/health_errors'
        504:
          $ref: '#/components/responses/server_timeout_error'
  /4/plugins:
    get:
      tags:
        - plugins
      summary: get list of plugins
      description: |
        Get list of service plugins
      operationId: getPlugins
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
      responses:
        200:
          description: OK.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/plugins'
        500:
          $ref: '#/components/responses/internal_server_error'
  /metrics:

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

        502:
          description: Unhealthy (redirected)
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/health_errors'
        504:
          $ref: '#/components/responses/server_timeout_error'
security:
  - BasicAuth: []