openapi: 3.1.0
info:
  version: v.0.4.0
  title: Luna Index Manager API
  description: Service is intended for managing the process of creating indexes.
paths:
  /version:
    get:
      tags:
        - version
      summary: get version
      description: get service version
      operationId: getVersion
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
      responses:
        '200':
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/version'
        '500':
          $ref: '#/components/responses/internal_server_error'
  /1/queue:
    get:
      tags:
        - queue
      summary: get queue
      description: Get indexing tasks from the pending queue.
      operationId: getQueue
      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:
                type: object
                properties:
                  task_ids:
                    type: array
                    items:
                      allOf:
                        - $ref: '#/components/schemas/uuid'
                      description: Task ID.
                    description: Task queue; the first element will be processed first.
                  count:
                    type: integer
                    minimum: 0
                    example: 1
                    description: Total number of tasks in the pending queue.
                required:
                  - task_ids
                  - count
        '500':
          $ref: '#/components/responses/internal_server_error'
  /1/tasks:
    get:
      tags:
        - tasks
      summary: get tasks
      description: Get indexing tasks info.
      operationId: getTasks
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/search_task_ids'
        - $ref: '#/components/parameters/search_task_statuses'
        - $ref: '#/components/parameters/search_task_start_time__gte'
        - $ref: '#/components/parameters/search_task_indexer'
      responses:
        '200':
          description: Ok.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                type: object
                properties:
                  tasks:
                    type: array
                    items:
                      $ref: '#/components/schemas/task'
                required:
                  - tasks
        '400':
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_json:
                  value:
                    error_code: 12022
                    desc: Bad/incomplete input data
                    detail: >-
                      Failed to validate query parameters. Path: 'handler_id', 
                      message: 'Extra inputs are not permitted'
                    link: >-
                      https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022
        '500':
          $ref: '#/components/responses/internal_server_error'
    post:
      tags:
        - tasks
      summary: create task
      description: Create new indexing task.
      operationId: createTask
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/input_task'
        required: true
      responses:
        '201':
          description: Create success.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                type: object
                properties:
                  task_id:
                    allOf:
                      - $ref: '#/components/schemas/uuid'
                    description: The new task ID.
                required:
                  - task_id
        '400':
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_json:
                  value:
                    error_code: 12022
                    desc: Bad/incomplete input data
                    detail: >-
                      Failed to validate input json. Path: 'handler_id', 
                      message: 'Extra inputs are not permitted'
                    link: >-
                      https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022
        '409':
          description: Conflict.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                list_indexing_already_in_progress:
                  value:
                    error_code: 26201
                    desc: Bad/incomplete input data
                    detail: List indexing already in progress
                    link: >-
                      https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-26201
        '500':
          $ref: '#/components/responses/internal_server_error'
    delete:
      tags:
        - tasks
      summary: remove tasks
      description: Remove indexing tasks.
      operationId: removeTasks
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/search_task_ids'
        - $ref: '#/components/parameters/search_task_statuses'
        - $ref: '#/components/parameters/search_task_start_time__gte'
        - $ref: '#/components/parameters/search_task_indexer'
      responses:
        '204':
          description: Ok.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        '400':
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_json:
                  value:
                    error_code: 12022
                    desc: Bad/incomplete input data
                    detail: >-
                      Failed to validate query parameters. Path: 'handler_id', 
                      message: 'Extra inputs are not permitted
                    link: >-
                      https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022
        '500':
          $ref: '#/components/responses/internal_server_error'
  /1/indexes:
    get:
      tags:
        - indexes
      summary: get indexes
      description: Get info about stored indexes.
      operationId: getIndexes
      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:
              type: object
              schema:
                type: object
                properties:
                  indexes:
                    type: array
                    items:
                      $ref: '#/components/schemas/index_info'
                  count:
                    type: integer
                    minimum: 0
                    example: 1
                    description: Total number of indexes in the index storage.
                required:
                  - indexes
                  - count
        '500':
          $ref: '#/components/responses/internal_server_error'
  /1/indexes/{index_id}:
    parameters:
      - $ref: '#/components/parameters/index_id_uri'
    delete:
      tags:
        - indexes
      summary: remove index
      description: Remove index by ID.
      operationId: removeIndex
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
      responses:
        '204':
          description: Ok.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        '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'
              example:
                error_code: 26204
                desc: Object not found
                detail: >-
                  Index with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                  in the storage
                link: >-
                  https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-26204
        '500':
          $ref: '#/components/responses/internal_server_error'
  /1/indexes/labels:
    get:
      tags:
        - indexes
      summary: get most relevant indexes
      description: Get most relevant indexes for all the labels.
      operationId: getMostReleventIndexes
      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:
              type: object
              schema:
                type: object
                properties:
                  label_indexes:
                    type: array
                    items:
                      type: object
                      properties:
                        label:
                          allOf:
                            - $ref: '#/components/schemas/uuid'
                          description: Index label (some unique index content id).
                        index:
                          $ref: '#/components/schemas/index'
                      required:
                        - label
                        - index
                required:
                  - label_indexes
        '500':
          $ref: '#/components/responses/internal_server_error'
  /1/docs/spec:
    get:
      tags:
        - documents
      summary: get openapi documentation
      description: >
        Get service OpenApi documentation. If *Accept* request header is of type
        `application/x-yaml`,

        returns documentation in `yaml` format or returns `html` documentation,
        if *Accept-Type* is `text/html`
      operationId: getSpec
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - name: Accept
          in: header
          schema:
            type: string
            enum:
              - application/x-yaml
              - text/html
            description: One of application/x-yaml, text/html
          required: true
          description: acceptable type of receiving data
      responses:
        '200':
          description: OK
          headers:
            Content-Type:
              schema:
                type: string
                enum:
                  - application/x-yaml
                  - text/html
              required: true
              description: The content type of the response body.
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/x-yaml:
              schema:
                type: string
                description: yaml format documentation
            text/html:
              schema:
                type: string
                description: html format documentation
        '415':
          description: Unsupported Media Type
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                unsupported_media_type:
                  value:
                    error_code: 12024
                    detail: Bad/incomplete input data
                    desc: Unsupported media type
                    link: >-
                      https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12024
        '500':
          $ref: '#/components/responses/internal_server_error'
  /1/docs/dev:
    get:
      tags:
        - documents
      summary: get development manual
      description: >
        Get sphinx documentation - *Development Manual*. After the request you
        will be redirected to the page `/docs/dev/index.html`
      operationId: getDevManual
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
      responses:
        '200':
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/text_html'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            text/html:
              schema:
                type: string
                description: html format documentation
        '500':
          $ref: '#/components/responses/internal_server_error'
  /1/config:
    get:
      tags:
        - config
      summary: get service configuration
      description: >-
        Get service configuration. Passwords and tokens will be hidden in the
        response.
      operationId: getConfig
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - name: Accept
          in: header
          schema:
            type: string
            enum:
              - application/json
              - text/plain
            description: One of application/json, text/plain
          required: false
          description: acceptable type of receiving data
      responses:
        '200':
          description: OK
          headers:
            Content-Type:
              description: The content type of the response body.
              schema:
                type: string
                enum:
                  - application/json
                  - text/plain
              required: true
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                type: object
                description: json format configuration
                additionalProperties: true
              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
            text/plain:
              schema:
                type: string
                description: text format configuration
              example: |
                [INFLUX_MONITORING]
                SEND_DATA_FOR_MONITORING = 0
                VERSION = 2
                ORGANIZATION = ORGANIZATION_NAME
                TOKEN = ********
                BUCKET = luna_monitoring
                HOST = 127.0.0.1
                PORT = 8086
                USE_SSL = 0
                FLUSHING_PERIOD = 1.0
        '415':
          description: Unsupported Media Type
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                unsupported_media_type:
                  value:
                    error_code: 12024
                    detail: Bad/incomplete input data
                    desc: Unsupported media type
                    link: >-
                      https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12024
        '500':
          $ref: '#/components/responses/internal_server_error'
  /healthcheck:
    get:
      tags:
        - health
      summary: get health
      description: Get health of service.
      operationId: healthcheck
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $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:
                description: Successful healthcheck execution info.
                type: object
                properties:
                  execution_time:
                    type: number
                    example: 0.123
                    description: Request execution time in seconds.
                required:
                  - execution_time
        '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:
                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: redis
                      error:
                        error_code: 0
                        desc: Success
                        detail: Success
                        link: >-
                          https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-0
                      status: 0
                    - component: faces
                      error:
                        error_code: 38001
                        desc: Health check error
                        detail: Timed out
                        link: >-
                          https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-38001
                      status: 1
                    - component: indexer0
                      error:
                        error_code: 0
                        desc: Success
                        detail: Success
                        link: >-
                          https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-0
                      status: 1
  /1/plugins:
    get:
      tags:
        - plugins
      summary: get list of plugins
      description: |
        Get list of service plugins:
      operationId: getPlugins
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
      responses:
        '200':
          description: OK.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/plugins'
        '500':
          $ref: '#/components/responses/internal_server_error'
  /metrics:
    get:
      tags:
        - metrics
      summary: get service requests statistics
      description: >-
        Get statistics of success and failed requests to the service in
        prometheus format.
      operationId: metrics
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
      responses:
        '200':
          description: OK.
          headers:
            Content-Type:
              schema:
                type: string
                enum:
                  - text/plain; charset=UTF-8
              required: true
              description: Content type is `text/plain`.
            Luna-Request-Id:
              $ref: '#/components/headers/parameters_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'
components:
  parameters:
    luna_request_id:
      in: header
      schema:
        type: string
        format: timestamp,uuid
        example: 1536751345,8b8b5937-2e9c-4e8b-a7a7-5caf86621b5a
        pattern: >-
          ^[0-9]{10},[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$
      description: request identifier.
      name: Luna-Request-Id
    search_task_ids:
      in: query
      name: task_ids
      schema:
        type: array
        items:
          $ref: '#/components/schemas/uuid'
      style: form
      explode: false
      description: Task IDs to search for.
    search_task_statuses:
      in: query
      name: statuses
      schema:
        type: array
        items:
          $ref: '#/components/schemas/task_status'
        example:
          - pending
          - indexing
      style: form
      explode: false
      description: Task statuses to search for.
    search_task_start_time__gte:
      in: query
      name: start_time__gte
      schema:
        $ref: '#/components/schemas/time'
      description: Index building start time lower including bound in RFC 3339 format.
      example: '2018-08-11T09:11:41.674Z'
    search_task_indexer:
      in: query
      name: indexer
      schema:
        type: string
        example: http://127.0.0.1:5180
      description: Origin of the indexer that build the index for task.
    index_id_uri:
      in: path
      name: index_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: Index ID.
    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.
  headers:
    application_json:
      schema:
        type: string
        enum:
          - application/json
      required: true
      description: The content type of the response body.
    luna_request_id:
      schema:
        type: string
        format: timestamp,uuid
        example: 1536751345,8b8b5937-2e9c-4e8b-a7a7-5caf86621b5a
        pattern: >-
          ^[0-9]{10},[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$
      description: >-
        request id. Helps to uniquely identify messages that correspond to
        particular requests, in system logs.
      required: true
    text_html:
      schema:
        type: string
        enum:
          - text/html
      required: true
      description: The content type of the response body.
    parameters_luna_request_id:
      in: header
      schema:
        type: string
        format: timestamp,uuid
        example: 1536751345,8b8b5937-2e9c-4e8b-a7a7-5caf86621b5a
        pattern: >-
          ^[0-9]{10},[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$
      description: request identifier.
      name: Luna-Request-Id
  schemas:
    int_version:
      type: integer
      minimum: 0
    version:
      type: object
      properties:
        Version:
          type: object
          properties:
            api:
              allOf:
                - $ref: '#/components/schemas/int_version'
              description: an api version of service.
            major:
              allOf:
                - $ref: '#/components/schemas/int_version'
              description: a major version of service.
            minor:
              allOf:
                - $ref: '#/components/schemas/int_version'
              description: a minor version of service.
            patch:
              allOf:
                - $ref: '#/components/schemas/int_version'
              description: a patch version of service.
          required:
            - api
            - major
            - minor
            - patch
      required:
        - Version
    error:
      type: object
      properties:
        error_code:
          type: integer
          description: Error code.
        desc:
          type: string
          description: Short error description.
        detail:
          type: string
          description: Error details.
        link:
          type: string
          description: Link to the documentation website with the error description.
      required:
        - error_code
        - detail
        - desc
        - link
      example:
        error_code: 1
        detail: Internal server error
        desc: Internal server error
        link: >-
          https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-1
    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
    task_status:
      type: string
      enum:
        - pending
        - indexing
        - success
        - error
      example: indexing
      description: Task current status.
    time:
      type: string
      format: date-time
      example: '2018-08-11T09:11:41.674+03:00'
      description: Time in RFC 3339 format.
    list_task_content:
      type: object
      properties:
        list_id:
          allOf:
            - $ref: '#/components/schemas/uuid'
          description: List ID to build the index for.
      required:
        - list_id
    task_content:
      oneOf:
        - $ref: '#/components/schemas/list_task_content'
    task:
      type: object
      properties:
        task_id:
          allOf:
            - $ref: '#/components/schemas/uuid'
          description: Task ID.
        status:
          $ref: '#/components/schemas/task_status'
        create_time:
          allOf:
            - $ref: '#/components/schemas/time'
          description: Task creation time in RFC 3339 format.
        start_time:
          allOf:
            - $ref: '#/components/schemas/time'
          nullable: true
          description: Index building start time in RFC 3339 format.
        end_time:
          allOf:
            - $ref: '#/components/schemas/time'
          nullable: true
          description: Task end time in RFC 3339 format.
        indexer:
          type: string
          nullable: true
          description: Origin of the indexer that build the index for task.
        error:
          allOf:
            - $ref: '#/components/schemas/error'
          nullable: true
        content:
          $ref: '#/components/schemas/task_content'
      required:
        - task_id
        - status
        - create_time
        - start_time
        - end_time
        - indexer
        - error
        - content
      description: Indexing task info.
    list_input_task:
      type: object
      properties:
        task_type:
          type: string
          enum:
            - list
        content:
          $ref: '#/components/schemas/list_task_content'
      required:
        - task_type
        - content
    input_task:
      oneOf:
        - $ref: '#/components/schemas/list_input_task'
      discriminator:
        propertyName: task_type
        mapping:
          list: '#/components/schemas/list_input_task'
      description: Indexing task to be created.
    descriptor_version:
      type: integer
      description: Version of descriptors which used for index building.
      example: 59
    index_info:
      type: object
      properties:
        index_id:
          allOf:
            - $ref: '#/components/schemas/uuid'
          description: Index ID; corresponds to the indexing task ID if specified.
        index_type:
          type: string
          enum:
            - list
        label:
          allOf:
            - $ref: '#/components/schemas/uuid'
          description: List ID.
        descriptor_version:
          $ref: '#/components/schemas/descriptor_version'
      required:
        - index_id
        - index_type
        - label
        - descriptor_version
    index:
      type: object
      properties:
        index_id:
          allOf:
            - $ref: '#/components/schemas/uuid'
          description: Index ID; corresponds to the indexing task ID if specified.
        index_type:
          type: string
          enum:
            - list
        descriptor_version:
          $ref: '#/components/schemas/descriptor_version'
      required:
        - index_id
        - index_type
        - descriptor_version
    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:
          type: array
          items:
            $ref: '#/components/schemas/plugin_status'
      description: List of imported plugins
  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'
    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
