openapi: 3.0.0
info:
  version: 'v.2.2.5'
  title: 'luna-lambda API'
  description: |
    'Luna-lambda' is service intended for manage luna user lambdas.

    Luna-user-lambda represents separate service which can process user requests using code created by user.
    
    For information about lambda representation and requirements - see development manual.


components:
  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

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

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

    config_accept_content_type:
      schema:
        type: string
        enum:
          - application/json
          - text/plain
      required: false
      description: The content type of the response body.
  parameters:
    application_json_content:
      in: header
      name: Content-Type
      schema:
        type: string
        enum:
          - application/json
      description: The request content type header.

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

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

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

    header_account_id:
      in: header
      name: Luna-Account-Id
      schema:
        $ref: '#/components/schemas/account_id'
      description: luna account id
      example: '8950722f-3fd4-4223-b48f-03f95f0e8dfb'
      required: true

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

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

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

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

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

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

    tail_lines:
      in: query
      name: tail_lines
      schema:
        type: integer
        minimum: 0
        maximum: 4294967296
      description: number of strings what will be return.

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

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

    lambda_type:
      in: query
      name: lambda_type
      schema:
        type: string
        enum: [ standalone, handlers, tasks, agent ]
      description: Lambda type.

    job_type:
      in: query
      name: job_type
      schema:
        type: string
        enum: [ standalone, agent ]
      description: Job type.

    workflow_type:
      in: query
      name: workflow_type
      schema:
        type: string
        enum: [ standalone, agent ]
      description: Workflow type.

    lambda_name:
      in: query
      name: lambda_name
      schema:
        type: string
      description: Find all objects with `job_name` similar to this parameter. You can specify only part of the `job_name` value for this filter.

    job_name:
      in: query
      name: job_name
      schema:
        type: string
      description: Find all objects with `job_name` similar to this parameter. You can specify only part of the `job_name` value for this filter.

    workflow_name:
      in: query
      name: workflow_name
      schema:
        type: string
      description: Find all objects with `workflow_name` similar to this parameter. You can specify only part of the `workflow_name` value for this filter.

    namespace:
      in: query
      name: namespace
      description: | 
        Comma-separated list of namespaces.
        Each namespace must match the pattern `^[a-z0-9][a-z0-9-]*[a-z0-9]$`
      schema:
        type: array
        items:
           $ref: "#/components/schemas/namespace"
      example: "default,no-default-namespace"

    metrics:
      in: query
      name: metrics
      description: | 
        Comma separated metrics names. 
        
        Metrics available by default:
          - `requests_bucket`
          - `requests_sum`
          - `request_count_total`
          - `request_errors_total`
      schema:
        type: string
        pattern: "[a-zA-Z_:][a-zA-Z0-9_:]*"
        minLength: 1
      required: true

    resources:
      in: query
      name: resources
      description: |
        Comma separated resources path filter.
      schema:
        type: string
        pattern: "^(GET|POST|PUT|DELETE|PATCH):\/(?:[a-zA-Z0-9_-]+|{[a-zA-Z0-9_-]+})(?:\/(?:[a-zA-Z0-9_-]+|{[a-zA-Z0-9_-]+}))*$"
      example: "GET:/additional/{parameter},POST:/main"
  schemas:
    error:
      type: object
      properties:
        error_code:
          type: integer
          description: Error code.
        desc:
          type: string
          description: Short error description.
        detail:
          type: string
          description: Error details.
        link:
          type: string
          description: Link to the documentation website with the error description.
      required: [error_code, detail, desc, link]
      example:
        error_code: 1
        desc: Internal server error
        detail: Unknown error
        link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-1"

    int_version:
      type: integer
      minimum: 0

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

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

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

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

    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'
        - example: 0468ca85-f6ca-4841-b30c-5ccc26b6f397
      description: ID of the Luna account.

    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: lambda_db
            error:
              error_code: 10017
              desc: Database error
              detail: Database connection timeout error
              link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-10017"
            status: 0

    lambda_id_response:
      type: object
      properties:
        lambda_id:
          allOf:
            - $ref: '#/components/schemas/uuid'
            - example: 0468ca85-f6ca-4841-b30c-5ccc26b6f397
            - description: Lambda ID.
      description: Response with lambda ID.
      required: [lambda_id]

    job_id:
      allOf:
        - $ref: '#/components/schemas/uuid'
        - example: 0468ca85-f6ca-4841-b30c-5ccc26b6f397
        - description: Job ID.

    workflow_id:
      allOf:
        - $ref: '#/components/schemas/uuid'
        - example: 0468ca85-f6ca-4841-b30c-5ccc26b6f397
        - description: Workflow ID.

    job_id_response:
      type: object
      properties:
        job_id:
          $ref: '#/components/schemas/job_id'
      description: Response with job ID.
      required: [job_id]

    workflow_id_response:
      type: object
      properties:
        workflow_id:
          $ref: '#/components/schemas/workflow_id'
        job_id:
          $ref: '#/components/schemas/job_id'
      description: Response with workflow ID and job ID if job creation was not disabled.
      required: [workflow_id]

    _version:
      type: integer
      minimum: 0
      example: 5

    lambda_version:
      allOf:
      - $ref: '#/components/schemas/_version'
      - description: |
          Lambda version.

          The lambda version is incremented after each lambda recreation ([PUT request](#tag/lambdas-creation/operation/putLambda)).

    workflow_version:
      allOf:
      - $ref: '#/components/schemas/_version'
      - description: |
          Workflow version.

          The workflow version is incremented after each workflow recreation ([PUT request](#tag/workflows-creation/operation/putWorkflow)).

    lambda_version_response:
      type: object
      properties:
        version:
          $ref: '#/components/schemas/lambda_version'
      description: Response with lambda version.
      required: [ version ]

    workflow_version_response:
      type: object
      properties:
        version:
          $ref: '#/components/schemas/workflow_version'
      description: Response with workflow version.
      required: [ version ]

    lambda_name:
      type: string
      description: Lambda name. Each user can create only lambdas with unique names.
      example: first-lambda

    job_name:
      type: string
      description: Job name.
      example: first-job

    workflow_name:
      type: string
      description: Workflow name. Each user can create only workflows with unique names.
      example: first-workflow

    _type_agent:
      type: string
      enum: [agent]
      example: agent

    lambda_type_agent:
      allOf:
      - $ref: '#/components/schemas/_type_agent'
      description: Lambda type.

    job_type_agent:
      allOf:
      - $ref: '#/components/schemas/_type_agent'
      - description: Job type.

    workflow_type_agent:
      allOf:
      - $ref: '#/components/schemas/_type_agent'
      - description: Workflow type.

    _type_default_params:
      type: string
      example: standalone
      default: "standalone"

    lambda_type_default_params:
      allOf:
      - enum: [standalone, handlers, tasks]
      - $ref: '#/components/schemas/_type_default_params'
      - description: Lambda type.

    job_type_default_params:
      allOf:
      - enum: [standalone]
      - $ref: '#/components/schemas/_type_default_params'
      - description: Job type.

    workflow_type_default_params:
      allOf:
      - enum: [standalone]
      - $ref: '#/components/schemas/_type_default_params'
      - description: Workflow type.

    _type:
      type: string
      example: standalone
      default: "standalone"

    lambda_type:
      allOf:
      - $ref: '#/components/schemas/_type'
      - enum: [standalone, handlers, tasks, agent]
      - description: Lambda type.

    job_type:
      allOf:
      - $ref: '#/components/schemas/_type'
      - enum: [standalone, agent]
      - description: Job type.

    workflow_type:
      allOf:
      - $ref: '#/components/schemas/_type'
      - enum: [standalone, agent]
      - description: Workflow type.

    image_builder:
      type: string
      enum: [kaniko, buildah]
      description: |
        Image builder type.
        
        When choosing the Buildah image builder, additional permissions and storage driver configurations (such as vfs) may be required for Kubernetes.
      example: kaniko
      default: "kaniko"

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

    service_launch:
      allOf:
      - $ref: '#/components/schemas/_service_launch'
      - description: |
          Whether to execute a service job that will be terminated and permanently disabled upon successful completion. 
          This job is intended to verify baseline system functionality and/or confirm the successful registration 
          of the video analytics by agent.

          **WARNING**: This parameter will be excluded from inheritance during following [job creation](#tag/jobs-creation/operation/createJob)

          **WARNING**: Will be ignored during *workflow* creation if workflow *disabled* is set for *deploy_parameters*. 

    service_launch_for_job:
      allOf:
      - $ref: '#/components/schemas/_service_launch'
      - description: |
          Whether to execute a service job that will be terminated and permanently disabled upon successful completion. 
          This job is intended to verify baseline system functionality and/or confirm the successful registration 
          of the video analytics by agent.

    _status:
      type: string
      enum: [running, waiting, terminated, not_found, pending]
      example: running

    lambda_status:
      allOf:
      - $ref: '#/components/schemas/_status'
      - description: |
          Lambda status.
  
          | Status     | Description                                             |
          |------------|---------------------------------------------------------|
          | running    | Lambda is running and ready to process requests.        |
          | waiting    | Waiting for lambda start or lambda creation in progress.|
          | terminated | Lambda stopped and will be removed in the near future.  |
          | not_found  | Lambda not found.                                       |
          | pending    | Lambda waiting for suitable conditions.                 |
  
          The `running` status is returned when at least one pod in lambda's replicas pods is running or when there is only one lambda pod and it is running.
  
          The `waiting` status is also returned when all pods in the lambda's replicas have been created but are still starting up.
  
          * If lambda status is pending, it means that there are no suitable conditions for such lambda. For example, lambda requires GPU and Kubernetes cluster cannot provide GPU for lambda.

    job_status:
      allOf:
      - $ref: '#/components/schemas/_status'
      - description: |
          Job status.
  
          | Status     | Description                                        |
          |------------|----------------------------------------------------|
          | running    | Job is running and ready to process requests.      |
          | waiting    | Waiting for job start or job creation in progress. |
          | terminated | Job stopped and will be removed in the near future.|
          | not_found  | Job not found.                                     |
          | pending    | Job waiting for suitable conditions.               |
  
          The `running` status is returned when at least one pod in job replicas pods is running or when there is only one job pod and it is running.
  
          The `waiting` status is also returned when all pods in the job replicas have been created but are still starting up.
  
          * If job status is pending, it means that there are no suitable conditions for such job. For example, job requires GPU and Kubernetes cluster cannot provide GPU for job.

    _status_response:
      type: object
      properties:
        pod_statuses:
          type: object
          additionalProperties: true
          example:
            0: running
            1: waiting
          description: |
            Map of pod numbers and their statuses.

            This object is present if at least one of pods is in `running` status.

    lambda_status_response:
      allOf:
      - $ref: '#/components/schemas/_status_response'
      - properties:
          status:
            allOf:
              - $ref: '#/components/schemas/lambda_status'
        description: |
          Response with lambda status.
      required: [status]

    _description:
      type: string
      example: very useful service
      maxLength: 256
      default: ""

    lambda_description:
      allOf:
      - $ref: '#/components/schemas/_description'
      - description: Lambda description.

    job_description:
      allOf:
      - $ref: '#/components/schemas/_description'
      - description: Job description.

    workflow_description:
      allOf:
      - $ref: '#/components/schemas/_description'
      - description: Workflow description.

    _description_no_default:
      type: string
      example: very useful service
      maxLength: 256

    lambda_description_no_default:
      allOf:
      - $ref: '#/components/schemas/_description_no_default'
      - description: Lambda description.

    workflow_description_no_default:
      allOf:
      - $ref: '#/components/schemas/_description_no_default'
      - description: Workflow description.

    lambda_patch:
      type: object
      description: Lambda patch data.
      properties:
        lambda_name:
          $ref: '#/components/schemas/lambda_name'
        description:
          type: string
          description: Lambda description.
          example: very useful lambda
          maxLength: 256
        pod_count:
          allOf:
            - $ref: '#/components/schemas/lambda_non_default_pod_count'
            - type: integer
              minimum: 0
          description: |
            Count of lambda pods.
            
            > **WARNING**: If pod_count = 0, lambda will not work.
      minProperties: 1

    workflow_patch:
      type: object
      description: Workflow patch data.
      properties:
        workflow_name:
          $ref: '#/components/schemas/workflow_name'
        description:
          $ref: '#/components/schemas/workflow_description'
      minProperties: 1

    user_docker_commands:
      type: array
      default: []
      items:
        type: string
      description: |
        List of additional user docker commands for container building (see development manual for details).
        
        For example, to use python library with libjpeg dependency, add the following list of commands to `user_docker_commands`:
        ```json
        ["RUN dnf install -y epel-release", "RUN dnf install -y libjpeg-turbo-devel"]
        ```

    archive_ttl:
      type: integer
      enum: [ 1, 2, 3, 4, 5, 6, 7, 14, 30, 60, 90, 180, 365, -1 ]
      nullable: true
      example: 7
      description: Lifetime for archive, in days. By default, parent bucket lifetime configuration is applied. For archive to be retained indefinitely, set `ttl=-1`.

    archive_ttl_reply:
      allOf:
        - $ref: '#/components/schemas/archive_ttl'
      description: Lifetime for archive, in days. By default, parent bucket lifetime configuration is applied. `ttl=-1` means infinite storage.

    external_agent:
      type: integer
      enum: [0, 1]
      default: 0
      description: Whether to run agent as external service or not.

    _base_image_name:
      type: string
      maxLength: 128

    lambda_base_image_name:
      allOf:
      - $ref: '#/components/schemas/_base_image_name'
      - description: |
          Base image name for lambda docker container building (see development manual for details).
          
          The *standalone*, *handlers* and *tasks* lambdas use `lpa-lambda-base` image by default.
          This image provides basic functionality for lambdas.
          
          The *agent* lambdas use `lpa-lambda-agent-base` image by default.
          This image provides extended functionality for video-agent and includes FSDK.
          
          The `lpa-lambda-base-fsdk` provides basic functionality and functionality for FSDK usage by lambda.
          
          Other images must be inherited from one of above and require image tag specified.

    workflow_base_image_name:
      allOf:
      - $ref: '#/components/schemas/_base_image_name'
      - description: |
          Base image name for workflow docker container building (see development manual for details).
          
          The *standalone* workflows use `lpa-lambda-base` image by default.
          This image provides basic functionality for workflows.
          
          The *agent* workflows use `lpa-lambda-agent-base` image by default.
          This image provides extended functionality for video-agent and includes FSDK.
          
          The `lpa-lambda-base-fsdk` provides basic functionality and functionality for FSDK usage by workflow.
          
          Other images must be inherited from one of above and require image tag specified.

    base_image_tag:
      type: string
      description: Base image tag. See development manual for details.
      maxLength: 128

    lambda_base_image_default:
      type: object
      properties:
        name:
          allOf:
            - $ref: '#/components/schemas/lambda_base_image_name'
          enum: [lpa-lambda-base]
          default: lpa-lambda-base
        tag:
          allOf:
            - $ref: '#/components/schemas/base_image_tag'
          description: | 
            Base lambda image tag. See development manual for details.
            The default value is the latest available tag of the base lambda image.
      required: [name]

    workflow_base_image_default:
      type: object
      properties:
        name:
          allOf:
            - $ref: '#/components/schemas/workflow_base_image_name'
          enum: [lpa-lambda-base]
          default: lpa-lambda-base
        tag:
          allOf:
            - $ref: '#/components/schemas/base_image_tag'
          description: | 
            Base workflow image tag. See development manual for details.
            The default value is the latest available tag of the base workflow image.
      required: [name]

    lambda_base_image_fsdk:
      type: object
      properties:
        name:
          allOf:
            - $ref: '#/components/schemas/lambda_base_image_name'
          enum: [lpa-lambda-base-fsdk]
          default: lpa-lambda-base-fsdk
        tag:
          allOf:
            - $ref: '#/components/schemas/lambda_base_image_name'
          description: | 
            Base lambda image tag. See development manual for details.
            The default value is the latest available tag of the base lambda image.
      required: [name]

    workflow_base_image_fsdk:
      type: object
      properties:
        name:
          allOf:
            - $ref: '#/components/schemas/workflow_base_image_name'
          enum: [lpa-lambda-base-fsdk]
          default: lpa-lambda-base-fsdk
        tag:
          allOf:
            - $ref: '#/components/schemas/workflow_base_image_name'
          description: | 
            Base workflow image tag. See development manual for details.
            The default value is the latest available tag of the base workflow image.
      required: [name]

    lambda_base_image_agent:
      type: object
      properties:
        name:
          allOf:
            - $ref: '#/components/schemas/lambda_base_image_name'
          enum: [lpa-lambda-agent-base]
          default: lpa-lambda-agent-base
        tag:
          allOf:
            - $ref: '#/components/schemas/lambda_base_image_name'
          description: | 
            Base lambda agent image tag. See development manual for details.
            The default value is the latest available tag of the base lambda agent image.
      required: [name]

    workflow_base_image_agent:
      type: object
      properties:
        name:
          allOf:
            - $ref: '#/components/schemas/workflow_base_image_name'
          enum: [lpa-lambda-agent-base]
          default: lpa-lambda-agent-base
        tag:
          allOf:
            - $ref: '#/components/schemas/workflow_base_image_name'
          description: | 
            Base workflow agent image tag. See development manual for details.
            The default value is the latest available tag of the base workflow agent image.
      required: [name]

    lambda_base_image_custom:
      type: object
      properties:
        name:
          $ref: '#/components/schemas/lambda_base_image_name'
        tag:
          $ref: '#/components/schemas/base_image_tag'
      required: [name, tag]

    workflow_base_image_custom:
      type: object
      properties:
        name:
          $ref: '#/components/schemas/workflow_base_image_name'
        tag:
          $ref: '#/components/schemas/base_image_tag'
      required: [name, tag]

    lambda_base_image_custom_nullable:
      type: object
      properties:
        name:
          allOf:
            - $ref: '#/components/schemas/lambda_base_image_name'
            - nullable: true
        tag:
          allOf:
            - $ref: '#/components/schemas/base_image_tag'
            - nullable: true
      required: [name, tag]

    workflow_base_image_custom_nullable:
      type: object
      properties:
        name:
          allOf:
            - $ref: '#/components/schemas/workflow_base_image_name'
            - nullable: true
        tag:
          allOf:
            - $ref: '#/components/schemas/base_image_tag'
            - nullable: true
      required: [name, tag]

    _non_default_pod_count:
      type: integer
      minimum: 1
      maximum: 32
      example: 2

    lambda_non_default_pod_count:
      allOf:
      - $ref: '#/components/schemas/_non_default_pod_count'
      - description: Count of lambda pods.

    lambda_pod_count:
      allOf:
        - $ref: '#/components/schemas/lambda_non_default_pod_count'
        - type: integer
          default: 1

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

    lambda_enable_gpu:
      allOf:
      - $ref: '#/components/schemas/_enable_gpu'
      - description: |
          Whether to enable GPU usage for lambda.
          See development manual for lambda GPU usage details.

    job_enable_gpu:
      allOf:
      - $ref: '#/components/schemas/_enable_gpu'
      - description: |
          Whether to enable GPU usage for job.
          See development manual for job GPU usage details.

    workflow_enable_gpu:
      allOf:
      - $ref: '#/components/schemas/_enable_gpu'
      - description: |
          Whether to enable GPU usage for workflow and jobs created within it.
          See development manual for workflow GPU usage details.

    resources:
      type: object
      properties:
        cpu_limit:
          $ref: '#/components/schemas/cpu_limit'
        gpu_limit:
          $ref: '#/components/schemas/gpu_limit_request'
        ram_limit:
          $ref: '#/components/schemas/ram_limit'
        cpu_request:
          $ref: '#/components/schemas/cpu_request'
        ram_request:
          $ref: '#/components/schemas/ram_request'
      description: Resource requests and limits.

    resources_required:
      type: object
      properties:
        cpu_limit:
          $ref: '#/components/schemas/cpu_limit'
        gpu_limit:
          $ref: '#/components/schemas/gpu_limit_response'
        ram_limit:
          $ref: '#/components/schemas/ram_limit'
        cpu_request:
          $ref: '#/components/schemas/cpu_request'
        ram_request:
          $ref: '#/components/schemas/ram_request'
      description: Resource requests and limits.
      required: [cpu_limit, gpu_limit, ram_limit, cpu_request, ram_request]

    cpu_limit:
      type: integer
      default: 1000
      description: CPU resource units limit for each pod. 1 unit means 1/1000 of a CPU core.

    gpu_limit_request:
      type: integer
      minimum: 0
      description: |
        Maximum number of GPUs used by each pod.
        If `enable_gpu=1`, the value should be >=1, default is 1.
        Otherwise the value should be 0, default is 0.

    gpu_limit_response:
      type: integer
      minimum: 0
      description: Maximum number of GPUs used by each pod.

    ram_limit:
      type: integer
      default: 1
      description: Maximum RAM usage limit in GB by each pod.

    cpu_request:
      type: integer
      default: 1000
      description: CPU resource units request for each pod. Same as limit if not specified. 1 unit means 1/1000 of a CPU core.

    ram_request:
      type: integer
      default: 1
      description: RAM usage request in GB by each pod. Same as limit if not specified.

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

    lambda_gpu_enabled:
      allOf:
      - $ref: '#/components/schemas/_gpu_enabled'
      - description: |
          Whether GPU is enabled for lambda.
          See development manual for lambda GPU usage details.

    job_gpu_enabled:
      allOf:
      - $ref: '#/components/schemas/_gpu_enabled'
      - description: |
          Whether GPU is enabled for job.
          See development manual for job GPU usage details.

    workflow_gpu_enabled:
      allOf:
      - $ref: '#/components/schemas/_gpu_enabled'
      - description: |
          Whether GPU is enabled for jobs created within the framework of workflow.
          See development manual for workflow GPU usage details.

    lambda_base_image:
      description: |
        Base image for lambda.
        
        Example:
        
        ```json
        "base_image": {"name": "my-custom-image", "tag": "my-custom-tag_latest"}
        ```

        In this case, the base image full name will be: `my-custom-image:my-custom-tag_latest`.
      oneOf:
      - $ref: '#/components/schemas/lambda_base_image_default'
      - $ref: '#/components/schemas/lambda_base_image_fsdk'
      - $ref: '#/components/schemas/lambda_base_image_agent'
      - $ref: '#/components/schemas/lambda_base_image_custom'
      discriminator:
        propertyName: name
        mapping:
          lpa-lambda-base: '#/components/schemas/lambda_base_image_default'
          lpa-lambda-base-fsdk: '#/components/schemas/lambda_base_image_fsdk'
          lpa-lambda-agent-base: '#/components/schemas/lambda_base_image_agent'
          custom: '#/components/schemas/lambda_base_image_custom'

    workflow_base_image:
      description: |
        Base image for workflow.
        
        Example:
        
        ```json
        "base_image": {"name": "my-custom-image", "tag": "my-custom-tag_latest"}
        ```

        In this case, the base image full name will be: `my-custom-image:my-custom-tag_latest`.
      oneOf:
      - $ref: '#/components/schemas/workflow_base_image_default'
      - $ref: '#/components/schemas/workflow_base_image_fsdk'
      - $ref: '#/components/schemas/workflow_base_image_agent'
      - $ref: '#/components/schemas/workflow_base_image_custom'
      discriminator:
        propertyName: name
        mapping:
          lpa-lambda-base: '#/components/schemas/workflow_base_image_default'
          lpa-lambda-base-fsdk: '#/components/schemas/workflow_base_image_fsdk'
          lpa-lambda-agent-base: '#/components/schemas/workflow_base_image_agent'
          custom: '#/components/schemas/workflow_base_image_custom'

    lambda_base_image_reply:
      allOf:
        - $ref: '#/components/schemas/lambda_base_image_custom_nullable'
      description: Base image for lambda.

    workflow_base_image_reply:
      allOf:
        - $ref: '#/components/schemas/workflow_base_image_custom_nullable'
      description: Base image for jobs within the framework of workflow.

    lambda_deploy_parameters:
      type: object
      description: Deploy parameters for lambda.
      properties:
        enable_gpu:
          $ref: '#/components/schemas/lambda_enable_gpu'
        pod_count:
          $ref: '#/components/schemas/lambda_pod_count'
        resources:
          $ref: '#/components/schemas/resources'
        namespace:
          $ref: '#/components/schemas/namespace'
        selector:
          $ref: '#/components/schemas/selector'
        disabled:
          $ref: '#/components/schemas/lambda_disabled'
        check_resources:
          $ref: '#/components/schemas/check_resources'

    job_deploy_parameters:
      type: object
      description: Deploy parameters for job.
      properties:
        enable_gpu:
          $ref: '#/components/schemas/job_enable_gpu'
        resources:
          $ref: '#/components/schemas/resources'
        namespace:
          $ref: '#/components/schemas/namespace'
        selector:
          $ref: '#/components/schemas/selector'
        allow_insufficient_resources:
          $ref: '#/components/schemas/allow_insufficient_resources'
        service_launch:
          $ref: '#/components/schemas/service_launch_for_job'

    workflow_deploy_parameters:
      type: object
      description: Deploy parameters for workflow.
      properties:
        enable_gpu:
          $ref: '#/components/schemas/workflow_enable_gpu'
        resources:
          $ref: '#/components/schemas/resources'
        namespace:
          $ref: '#/components/schemas/namespace'
        selector:
          $ref: '#/components/schemas/selector'
        disabled:
          $ref: '#/components/schemas/workflow_disabled'
        service_launch:
          $ref: '#/components/schemas/service_launch'
        allow_insufficient_resources:
          $ref: '#/components/schemas/allow_insufficient_resources'

    lambda_deploy_parameters_reply:
      type: object
      description: Deploy parameters for lambda.
      properties:
        gpu_enabled:
          $ref: '#/components/schemas/lambda_gpu_enabled'
        pod_count:
          $ref: '#/components/schemas/lambda_pod_count'
        resources:
          $ref: '#/components/schemas/resources_required'
        namespace:
          $ref: '#/components/schemas/namespace'
        selector:
          $ref: '#/components/schemas/selector'
      required: [gpu_enabled, pod_count, resources, namespace, selector]

    job_deploy_parameters_reply:
      type: object
      description: Deploy parameters for job.
      properties:
        gpu_enabled:
          $ref: '#/components/schemas/job_gpu_enabled'
        resources:
          $ref: '#/components/schemas/resources_required'
        namespace:
          $ref: '#/components/schemas/namespace'
        selector:
          $ref: '#/components/schemas/selector'
        allow_insufficient_resources:
          $ref: '#/components/schemas/allow_insufficient_resources'
      required: [gpu_enabled, resources, namespace, selector, allow_insufficient_resources]

    workflow_deploy_parameters_reply:
      type: object
      description: Deploy parameters for workflow.
      properties:
        gpu_enabled:
          $ref: '#/components/schemas/workflow_gpu_enabled'
        resources:
          $ref: '#/components/schemas/resources_required'
        namespace:
          $ref: '#/components/schemas/namespace'
        selector:
          $ref: '#/components/schemas/selector'
        allow_insufficient_resources:
          $ref: '#/components/schemas/allow_insufficient_resources'
      required: [gpu_enabled, resources, namespace, selector, allow_insufficient_resources]

    _name_credentials:
      type: string
      minLength: 3
      maxLength: 36

    lambda_name_credentials:
      allOf:
      - $ref: '#/components/schemas/_name_credentials'
      - description: Lambda name.

    lambda_credentials:
      type: object
      description: Lambda credentials.
      properties:
        lambda_name:
          $ref: '#/components/schemas/lambda_name_credentials'
        description:
          $ref: '#/components/schemas/lambda_description'
      required: [lambda_name]

    job_name_credentials:
      allOf:
      - $ref: '#/components/schemas/_name_credentials'
      - description: Job name.

    workflow_name_credentials:
      allOf:
      - $ref: '#/components/schemas/_name_credentials'
      - description: Workflow name.

    job_credentials:
      type: object
      description: Job credentials.
      properties:
        job_name:
          $ref: '#/components/schemas/job_name_credentials'
        description:
          $ref: '#/components/schemas/job_description'
      required: [job_name]

    workflow_credentials:
      type: object
      description: Workflow credentials.
      properties:
        workflow_name:
          $ref: '#/components/schemas/workflow_name_credentials'
        description:
          $ref: '#/components/schemas/workflow_description'
      required: [workflow_name]

    _common_parameters:
      type: object
      properties:
        image_builder:
          $ref: '#/components/schemas/image_builder'
        additional_user_docker_commands:
          $ref: '#/components/schemas/user_docker_commands'
        workers:
          $ref: '#/components/schemas/workers'
        archive_ttl:
          $ref: '#/components/schemas/archive_ttl'
        user_config:
          allOf:
            - $ref: '#/components/schemas/user_config'
            - default: null
            - nullable: true

    lambda_common_parameters:
      allOf:
        - $ref: '#/components/schemas/_common_parameters'
        - properties:
            base_image:
              $ref: '#/components/schemas/lambda_base_image'
            shared:
              $ref: '#/components/schemas/lambda_shared'
            eternal:
              $ref: '#/components/schemas/lambda_eternal'
        - description: | 
            Parameters for lambda.
            Content-Type must be "application/json".

    job_common_parameters:
      type: object
      properties:
        workers:
          $ref: '#/components/schemas/workers'
        user_config:
          allOf:
            - $ref: '#/components/schemas/user_config'
            - default: null
            - nullable: true
        shared:
          $ref: '#/components/schemas/job_shared'
        eternal:
          $ref: '#/components/schemas/job_eternal'
      description: | 
        Parameters for job.
        Content-Type must be "application/json".

    workflow_common_parameters:
      allOf:
      - $ref: '#/components/schemas/_common_parameters'
      - properties:
          base_image:
            $ref: '#/components/schemas/workflow_base_image'
          shared:
            $ref: '#/components/schemas/workflow_shared'
          eternal:
            $ref: '#/components/schemas/workflow_eternal'
      - description: | 
          Parameters for workflow.
          Content-Type must be "application/json".

    agent_credentials:
      type: object
      description: Agent credentials. External agent requires token or login with password to be set.
      properties:
        token:
          type: string
          description: External agent authorization token.
        login:
          type: string
          minLength: 3
          maxLength: 128
          description: External agent login.
        password:
          type: string
          minLength: 3
          maxLength: 128
          description: External agent password.

    lambda_agent_parameters:
      allOf:
        - title: lambda agent parameters
        - properties:
            lambda_type:
              $ref: '#/components/schemas/lambda_type_agent'
            external_agent:
              $ref: '#/components/schemas/external_agent'
            agent_credentials:
              $ref: '#/components/schemas/agent_credentials'
        - $ref: '#/components/schemas/lambda_common_parameters'

    job_agent_parameters:
      allOf:
        - title: job agent parameters
        - properties:
            job_type:
              $ref: '#/components/schemas/job_type_agent'
            external_agent:
              $ref: '#/components/schemas/external_agent'
            agent_credentials:
              $ref: '#/components/schemas/agent_credentials'
        - $ref: '#/components/schemas/job_common_parameters'

    workflow_agent_parameters:
      allOf:
        - title: workflow agent parameters
        - properties:
            workflow_type:
              $ref: '#/components/schemas/workflow_type_agent'
            external_agent:
              $ref: '#/components/schemas/external_agent'
            agent_credentials:
              $ref: '#/components/schemas/agent_credentials'
        - $ref: '#/components/schemas/workflow_common_parameters'

    lambda_standard_params:
      allOf:
        - title: lambda parameters
        - properties:
            lambda_type:
              $ref: '#/components/schemas/lambda_type_default_params'
        - $ref: '#/components/schemas/lambda_common_parameters'

    job_standard_params:
      allOf:
        - title: job parameters
        - properties:
            job_type:
              $ref: '#/components/schemas/job_type_default_params'
        - $ref: '#/components/schemas/job_common_parameters'

    workflow_standard_params:
      allOf:
        - title: workflow parameters
        - properties:
            workflow_type:
              $ref: '#/components/schemas/workflow_type_default_params'
        - $ref: '#/components/schemas/workflow_common_parameters'

    lambda_parameters:
      oneOf:
        - $ref: '#/components/schemas/lambda_standard_params'
        - $ref: '#/components/schemas/lambda_agent_parameters'

    job_parameters:
      oneOf:
        - $ref: '#/components/schemas/job_standard_params'
        - $ref: '#/components/schemas/job_agent_parameters'

    workflow_parameters:
      oneOf:
        - $ref: '#/components/schemas/workflow_standard_params'
        - $ref: '#/components/schemas/workflow_agent_parameters'

    lambda_import_credentials:
      type: object
      description: | 
        Lambda credentials.
        
        **Note: this field will overwrite credentials from archive.**
      properties:
        lambda_name:
          $ref: '#/components/schemas/lambda_name_credentials'
        description:
          $ref: '#/components/schemas/lambda_description_no_default'

    workflow_import_credentials:
      type: object
      description: | 
        Workflow credentials.
        
        **Note: this field will overwrite credentials from archive.**
      properties:
        workflow_name:
          $ref: '#/components/schemas/workflow_name_credentials'
        description:
          $ref: '#/components/schemas/workflow_description_no_default'

    lambda_multipart_content-archive_file:
      type: object
      properties:
        archive:
          type: string
          format: binary
          description: |
              Archive file with zip extension.
              Content-Type must be "application/zip".
        credentials:
          allOf:
            - $ref: '#/components/schemas/lambda_credentials'
            - description: |
                Lambda credentials.
                Content-Type must be "application/json".
        parameters:
          $ref: '#/components/schemas/lambda_parameters'
        deploy_parameters:
          allOf:
           - $ref: '#/components/schemas/lambda_deploy_parameters'
           - description: Deploy parameters for lambda. Content-Type must be "application/json".
      description: Lambda multipart content with archive file.
      required: [ archive, credentials ]

    job_multipart_content-archive_file:
      type: object
      properties:
        credentials:
          allOf:
            - $ref: '#/components/schemas/job_credentials'
            - description: |
                Job credentials.
                Content-Type must be "application/json".
        parameters:
          $ref: '#/components/schemas/job_parameters'
        deploy_parameters:
          allOf:
           - $ref: '#/components/schemas/job_deploy_parameters'
           - description: Deploy parameters for job. Content-Type must be "application/json".
      description: Job multipart content.
      required: [credentials]

    workflow_multipart_content-archive_file:
      type: object
      properties:
        archive:
          type: string
          format: binary
          description: |
              Archive file with zip extension.
              Content-Type must be "application/zip".
        credentials:
          allOf:
            - $ref: '#/components/schemas/workflow_credentials'
            - description: |
                Workflow credentials.
                Content-Type must be "application/json".
        parameters:
          $ref: '#/components/schemas/workflow_parameters'
        deploy_parameters:
          allOf:
           - $ref: '#/components/schemas/workflow_deploy_parameters'
           - description: Deploy parameters for workflow jobs. Content-Type must be "application/json".
      description: Workflow multipart content with archive file.
      required: [ archive, credentials ]

    _parameters:
      type: object
      properties:
        workers:
          $ref: '#/components/schemas/workers_no_default'
        archive_ttl:
          $ref: '#/components/schemas/archive_ttl'
        user_config:
          $ref: '#/components/schemas/user_config'
        shared:
          $ref: '#/components/schemas/lambda_shared'
        eternal:
          $ref: '#/components/schemas/lambda_eternal'

    lambda_multipart_import:
      type: object
      properties:
        archive:
          type: string
          format: binary
          description: |
              Archive file with zip extension.
              Content-Type must be "application/zip".
        credentials:
          $ref: '#/components/schemas/lambda_import_credentials'
        parameters:
          allOf:
          - $ref: '#/components/schemas/_parameters'
          - description: | 
              Parameters for lambda.
              Content-Type must be "application/json".
              
              **Note: this field will overwrite parameters from archive.**
        deploy_parameters:
          allOf:
            - $ref: '#/components/schemas/lambda_deploy_parameters'
          description: | 
            Deploy parameters for lambda. Content-Type must be "application/json".
            
            **Note: this field will overwrite deploy parameters from archive.**
      description: Lambda multipart content with archive file for import.
      required: [archive]

    workflow_multipart_import:
      type: object
      properties:
        archive:
          type: string
          format: binary
          description: |
              Archive file with zip extension.
              Content-Type must be "application/zip".
        credentials:
          $ref: '#/components/schemas/workflow_import_credentials'
        parameters:
          allOf:
          - $ref: '#/components/schemas/_parameters'
          - description: | 
              Parameters for workflow.
              Content-Type must be "application/json".
              
              **Note: this field will overwrite parameters from archive.**
        deploy_parameters:
          allOf:
            - $ref: '#/components/schemas/workflow_deploy_parameters'
          description: | 
            Deploy parameters for workflow. Content-Type must be "application/json".
            
            **Note: this field will overwrite deploy parameters from archive.**
      description: Workflow multipart content with archive file for import.
      required: [archive]

    lambda_import_json:
      type: object
      properties:
        import_image:
          type: object
          properties:
            name:
              type: string
              maxLength: 128
              description: Image name.
              example: lpa-lambda
            tag:
              type: string
              maxLength: 128
              default: latest
              description: Image tag.
              example: v1-lambda-c52079ba-43db-4484-90f3-d349f9518a73
          description: Lambda image.
          required: [name]
        credentials:
          type: object
          description: Lambda credentials.
          properties:
            lambda_name:
              type: string
              minLength: 3
              maxLength: 36
              description: Lambda name.
            description:
              $ref: '#/components/schemas/lambda_description'
          required: [lambda_name]
        parameters:
          type: object
          description: Parameters for lambda.
          properties:
            lambda_type:
              $ref: '#/components/schemas/lambda_type'
            workers:
              $ref: '#/components/schemas/workers'
            shared:
              $ref: '#/components/schemas/lambda_shared'
            eternal:
              $ref: '#/components/schemas/lambda_eternal'
        deploy_parameters:
          $ref: '#/components/schemas/lambda_deploy_parameters'
      required: [ import_image, credentials ]

    job_import_json:
      type: object
      properties:
        credentials:
          type: object
          description: Job credentials.
          properties:
            job_name:
              type: string
              minLength: 3
              maxLength: 36
              description: Job name.
            description:
              $ref: '#/components/schemas/job_description'
          required: [job_name]
        parameters:
          type: object
          description: Parameters for job.
          properties:
            job_type:
              $ref: '#/components/schemas/job_type'
            workers:
              $ref: '#/components/schemas/workers'
            shared:
              $ref: '#/components/schemas/job_shared'
            eternal:
              $ref: '#/components/schemas/job_eternal'
        deploy_parameters:
          $ref: '#/components/schemas/job_deploy_parameters'
      required: [credentials]

    workflow_import_json:
      type: object
      properties:
        import_image:
          type: object
          properties:
            name:
              type: string
              maxLength: 128
              description: Image name.
              example: lpa-lambda
            tag:
              type: string
              maxLength: 128
              default: latest
              description: Image tag.
              example: v1-job-c52079ba-43db-4484-90f3-d349f9518a73
          description: Workflow image.
          required: [name]
        credentials:
          type: object
          description: Workflow credentials.
          properties:
            workflow_name:
              type: string
              minLength: 3
              maxLength: 36
              description: Workflow name.
            description:
              $ref: '#/components/schemas/workflow_description'
          required: [workflow_name]
        parameters:
          type: object
          description: Parameters for workflow.
          properties:
            workflow_type:
              $ref: '#/components/schemas/workflow_type'
            workers:
              $ref: '#/components/schemas/workers'
            shared:
              $ref: '#/components/schemas/workflow_shared'
            eternal:
              $ref: '#/components/schemas/workflow_eternal'
        deploy_parameters:
          $ref: '#/components/schemas/workflow_deploy_parameters'
      required: [ import_image, credentials ]

    common_lambda:
      type: object
      properties:
        account_id:
          $ref: '#/components/schemas/account_id'
        lambda_id:
          allOf:
            - $ref: '#/components/schemas/uuid'
            - description: Lambda ID.
        lambda_name:
          $ref: '#/components/schemas/lambda_name'
        description:
          $ref: '#/components/schemas/lambda_description'
        version:
          $ref: '#/components/schemas/lambda_version'
        info:
          allOf:
            - $ref: '#/components/schemas/lambda_status_response'
          type: object
          description: Lambda info.
          required: [status]
        create_time:
          allOf:
            - $ref: "#/components/schemas/time"
            - format: date-time
          description: Time of the lambda creation.
        last_update_time:
          allOf:
            - $ref: '#/components/schemas/time'
          description: Date and time with timezone of last action with lambda.
        additional_user_docker_commands:
          $ref: '#/components/schemas/user_docker_commands'
        base_image:
          $ref: '#/components/schemas/lambda_base_image_reply'
        imported_image:
          type: object
          description: Image that lambda was created from.
          properties:
            name:
              type: string
              nullable: true
              description: Image name.
            tag:
              type: string
              nullable: true
              description: Image tag.
          required: [name, tag]
        workers:
          $ref: '#/components/schemas/workers'
        archive_ttl:
          $ref: '#/components/schemas/archive_ttl_reply'
        deploy_parameters:
          $ref: '#/components/schemas/lambda_deploy_parameters_reply'
        shared:
          $ref: '#/components/schemas/lambda_shared'
        eternal:
          $ref: '#/components/schemas/lambda_eternal'
        last_usage:
          allOf:
            - $ref: "#/components/schemas/time"
            - format: date-time
            - nullable: true
          description: |
            The time of last lambda activity.
            Non-eternal lambdas which are not used for some time (according to `LUNA_LAMBDA_INACTIVE_LAMBDA_CLEAR_INTERVAL` setting)
            will be disabled.
            For more information about inactive lambdas disabling, see developers documentation.
        alive:
          $ref: '#/components/schemas/lambda_alive'

    _job_data_current:
      type: object
      description: Current job data.

    _job_data_overall:
      type: object
      description: Overall job data from all job executions.

    standalone_data:
      type: object
      properties:
        requests_count:
          type: object
          description: Requests data
          properties:
            all:
              type: integer
              description: total number of requests made to `/main` route.
              min: 0
            success:
              type: integer
              description: number of successful requests to `/main` route.
              min: 0
            failed:
              type: integer
              description: number of failed requests to `/main` route.
              min: 0
            in_progress:
              type: integer
              description: number of in progress requests to `/main` route.
              min: 0
          required: [all, success, failed, in_progress]
      required: [requests_count]

    agent_data:
      type: object
      properties:
        stream_count:
          type: object
          description: Streams data.
          properties:
            count:
              type: integer
              description: total number of accepted streams.
              min: 0
            success:
              type: integer
              description: number of successfully processed streams.
              min: 0
            failed:
              type: integer
              description: number of failed streams.
              min: 0
            in_progress:
              type: integer
              description: number of streams currently in progress.
              min: 0
          required: [count, success, failed, in_progress]
      required: [stream_count]

    standalone_data_current:
      allOf:
        - $ref: '#/components/schemas/standalone_data'
        - $ref: '#/components/schemas/_job_data_current'

    agent_data_current:
      allOf:
        - $ref: '#/components/schemas/agent_data'
        - $ref: '#/components/schemas/_job_data_current'

    standalone_data_overall:
      allOf:
        - $ref: '#/components/schemas/standalone_data'
        - $ref: '#/components/schemas/_job_data_overall'

    agent_data_overall:
      allOf:
        - $ref: '#/components/schemas/agent_data'
        - $ref: '#/components/schemas/_job_data_overall'

    workflow_info:
      type: object
      description: Workflow information.
      properties:
        status:
          $ref: '#/components/schemas/_image_creation_status'
      required: [status]

    common_workflow:
      type: object
      properties:
        workflow_id:
          $ref: '#/components/schemas/workflow_id'
        account_id:
          $ref: '#/components/schemas/account_id'
        workflow_name:
          $ref: '#/components/schemas/workflow_name'
        description:
          $ref: '#/components/schemas/workflow_description'
        version:
          $ref: '#/components/schemas/workflow_version'
        create_time:
          allOf:
            - $ref: "#/components/schemas/time"
            - format: date-time
          description: Time of the workflow creation.
        last_update_time:
          allOf:
            - $ref: '#/components/schemas/time'
          description: Date and time with timezone of last action with workflow.
        additional_user_docker_commands:
          $ref: '#/components/schemas/user_docker_commands'
        base_image:
          $ref: '#/components/schemas/workflow_base_image_reply'
        imported_image:
          type: object
          description: |
            Image that workflow was created from.
            
            It will appears after image will be created.
          properties:
            name:
              type: string
              nullable: true
              description: Image name.
            tag:
              type: string
              nullable: true
              description: Image tag.
          required: [name, tag]
        workers:
          $ref: '#/components/schemas/workers'
        archive_ttl:
          $ref: '#/components/schemas/archive_ttl_reply'
        deploy_parameters:
          $ref: '#/components/schemas/workflow_deploy_parameters_reply'
        shared:
          $ref: '#/components/schemas/workflow_shared'
        eternal:
          $ref: '#/components/schemas/workflow_eternal'
        info:
          $ref: '#/components/schemas/workflow_info'

    execution_errors:
      type: array
      description: |
        Supplementary information about job execution errors.
      items:
        type: string

    job_last_execution_status:
      type: string
      enum: [pending, running_partial, completed, insufficient_resources, failed]
      description: |
        Last execution status of the job in the rotation queue.

        | status                 | description                                      |
        |------------------------|--------------------------------------------------|
        | pending                | job has not been executed yet                    |
        | running_partial        | job ran but did not complete; requeued           |
        | completed              | job completed successfully                       |
        | insufficient_resources | job failed due to insufficient cluster resources |
        | failed                 | job failed                                       |

    job_comprehensive_status_standalone:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/job_status'
        last_execution_status:
          $ref: '#/components/schemas/job_last_execution_status'
        current_data:
          allOf:
            - $ref: '#/components/schemas/standalone_data_current'
          description: Current job data.
        overall_data:
          allOf:
            - $ref: '#/components/schemas/standalone_data_overall'
          description: Overall job data.
        execution_errors:
          $ref: '#/components/schemas/execution_errors'
      description: Job status info.
      required: [ status, last_execution_status ]

    job_comprehensive_status_agent:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/job_status'
        last_execution_status:
          $ref: '#/components/schemas/job_last_execution_status'
        current_data:
          allOf:
            - $ref: '#/components/schemas/agent_data_current'
          description: Current job data.
        overall_data:
          allOf:
            - $ref: '#/components/schemas/agent_data_overall'
          description: Overall job data.
        execution_errors:
          $ref: '#/components/schemas/execution_errors'
      description: Job status info.
      required: [ status, last_execution_status ]

    common_job:
      type: object
      properties:
        account_id:
          $ref: '#/components/schemas/account_id'
        job_id:
          allOf:
            - $ref: '#/components/schemas/uuid'
            - description: Job ID.
        job_name:
          $ref: '#/components/schemas/job_name'
        description:
          $ref: '#/components/schemas/job_description'
        create_time:
          allOf:
            - $ref: "#/components/schemas/time"
            - format: date-time
          description: Time of the job creation.
        last_update_time:
          allOf:
            - $ref: '#/components/schemas/time'
          description: Date and time with timezone of last action with job.
        workers:
          $ref: '#/components/schemas/workers'
        deploy_parameters:
          $ref: '#/components/schemas/job_deploy_parameters_reply'
        shared:
          $ref: '#/components/schemas/job_shared'
        eternal:
          $ref: '#/components/schemas/job_eternal'
        last_usage:
          allOf:
            - $ref: "#/components/schemas/time"
            - format: date-time
            - nullable: true
          description: |
            The time of last job activity.
            Non-eternal jobs which are not used for some time (according to `LUNA_LAMBDA_INACTIVE_JOB_CLEAR_INTERVAL` setting)
            will be disabled.
            For more information about inactive jobs disabling, see developers documentation.
        alive:
          $ref: '#/components/schemas/job_alive'
        imported_image:
          $ref: '#/components/schemas/job_imported_image'

    lambda_default:
      allOf:
        - properties:
            lambda_type:
              $ref: '#/components/schemas/lambda_type_default_params'
        - $ref: '#/components/schemas/common_lambda'
      required: [lambda_id, lambda_name, imported_image, version, info, create_time, last_update_time, account_id, description, lambda_type, additional_user_docker_commands, base_image, workers, deploy_parameters, shared, alive, eternal, last_usage]

    job_default:
      allOf:
        - properties:
            job_type:
              $ref: '#/components/schemas/job_type_default_params'
            info:
              $ref: '#/components/schemas/job_comprehensive_status_standalone'
        - $ref: '#/components/schemas/common_job'
      required: [job_id, job_name, imported_image, info, create_time, last_update_time, account_id, description, job_type, workers, deploy_parameters, shared, alive, eternal, last_usage]

    workflow_default:
      allOf:
        - properties:
            workflow_type:
              $ref: '#/components/schemas/workflow_type_default_params'
        - $ref: '#/components/schemas/common_workflow'
      required: [workflow_id, workflow_name, imported_image, version, info, create_time, last_update_time, account_id, description, workflow_type, additional_user_docker_commands, base_image, workers, archive_ttl, deploy_parameters, shared, eternal]

    config_with_version:
      type: object
      properties:
        config:
          allOf:
            - $ref: '#/components/schemas/user_config'
            - nullable: true
        version:
          type: integer
          description: User config version.
          nullable: true
      required: [ config, version ]

    config_version_response:
      type: object
      properties:
        version:
          type: integer
          description: User config version.
          nullable: true
      required: [ version ]

    lambda_agent:
      allOf:
        - properties:
            lambda_type:
              $ref: '#/components/schemas/lambda_type_agent'
            external_agent:
              allOf:
                - $ref: '#/components/schemas/external_agent'
                - nullable: true
        - $ref: '#/components/schemas/common_lambda'
      required:
        - lambda_id
        - lambda_name
        - imported_image
        - version
        - info
        - create_time
        - last_update_time
        - account_id
        - description
        - lambda_type
        - workers
        - archive_ttl
        - deploy_parameters
        - external_agent
        - shared
        - alive

    job_imported_image:
      type: object
      description: Image that job was created from.
      properties:
        name:
          type: string
          nullable: true
          description: Image name.
        tag:
          type: string
          nullable: true
          description: Image tag.
      required: [ name, tag ]

    job_agent:
      allOf:
        - properties:
            job_type:
              $ref: '#/components/schemas/job_type_agent'
            external_agent:
              allOf:
                - $ref: '#/components/schemas/external_agent'
                - nullable: true
            info:
              $ref: '#/components/schemas/job_comprehensive_status_agent'
        - $ref: '#/components/schemas/common_job'
      required:
        - job_id
        - job_name
        - imported_image
        - info
        - create_time
        - last_update_time
        - account_id
        - description
        - job_type
        - workers
        - deploy_parameters
        - external_agent
        - shared
        - alive
        - eternal
        - last_usage

    workflow_agent:
      allOf:
        - properties:
            workflow_type:
              $ref: '#/components/schemas/workflow_type_agent'
            external_agent:
              allOf:
                - $ref: '#/components/schemas/external_agent'
                - nullable: true
        - $ref: '#/components/schemas/common_workflow'
      required:
        - workflow_id
        - workflow_name
        - external_agent
        - imported_image
        - version
        - info
        - create_time
        - last_update_time
        - account_id
        - description
        - workflow_type
        - additional_user_docker_commands
        - base_image
        - workers
        - archive_ttl
        - deploy_parameters
        - shared
        - eternal

    lambda:
      oneOf:
        - $ref: '#/components/schemas/lambda_default'
        - $ref: '#/components/schemas/lambda_agent'

    job:
      oneOf:
        - $ref: '#/components/schemas/job_default'
        - $ref: '#/components/schemas/job_agent'

    workflow:
      oneOf:
        - $ref: '#/components/schemas/workflow_default'
        - $ref: '#/components/schemas/workflow_agent'

    _image_creation_status:
      type: string
      enum: [ not_found, in_progress, error, pending, completed ]
      description: |
        Image creation status
        
        | Status      | Description                                                                   |
        |-------------|-------------------------------------------------------------------------------|
        | in_progress | Image creation in progress                                                    |
        | error       | An error occurred during image creation                                       |
        | completed   | Image creation completed                                                      |
        | not_found   | Image creation complete and luna-builder cleaned up or it never was           |
        | pending     | Image creation waiting for suitable conditions                                |

    image_creation_status:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/_image_creation_status'
      required: [status]

    _logs:
      type: object
      properties:
        logs:
          type: object
          additionalProperties: true
          description: Map of pod numbers and their logs in array of strings.
      required: [logs]

    lambda_logs:
      allOf:
      - $ref: '#/components/schemas/_logs'
      - description: Lambda logs.

    job_logs:
      allOf:
      - $ref: '#/components/schemas/_logs'
      - description: Job logs.

    lambda_image_logs:
      type: object
      properties:
        logs:
          type: array
          items:
            type: string
          description: Lambda log strings.
      description: Lambda logs.
      required: [logs]

    workflow_image_logs:
      type: object
      properties:
        logs:
          type: array
          items:
            type: string
          description: Workflow log strings.
      description: Workflow logs.
      required: [logs]

    lambda_validation_error_response:
      type: object
      properties:
        errors:
          type: array
          items:
            type: string
          description: Lambda validation errors.
          example: [ validation_error_one, validation_error_two ]
      description: Response of lambda validation.
      required: [ errors ]

    workflow_validation_error_response:
      type: object
      properties:
        errors:
          type: array
          items:
            type: string
          description: Workflow validation errors.
          example: [ validation_error_one, validation_error_two ]
      description: Response of workflow validation.
      required: [ errors ]

    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

    workers_no_default:
      type: integer
      minimum: 1
      maximum: 32
      description: Count of workers.

    workers:
      allOf:
        - $ref: '#/components/schemas/workers_no_default'
        - default: 1

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

    lambda_shared:
      allOf:
      - $ref: '#/components/schemas/_shared'
      - description: |
          Any user can have access to lambda.
          
          > **WARNING**: Lambda with `lambda_type = agent` and `external_agent = 1`, can't be shared.

    job_shared:
      allOf:
      - $ref: '#/components/schemas/_shared'
      - description: |
          Any user can have access to job.
          
          > **WARNING**: Job with `job_type = agent` and `external_agent = 1`, can't be shared.

    workflow_shared:
      allOf:
      - $ref: '#/components/schemas/_shared'
      - description: |
          Whether any user can have access to workflow (jobs created within this workflow will also be shared).
          
          > **WARNING**: Workflow with `workflow_type = agent` and `external_agent = 1`, can't be shared.

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

    lambda_eternal:
      allOf:
      - $ref: '#/components/schemas/_eternal'
      - description: |
          If `enabled` (`1` is specified), lambda will run until it's manually stopped.
          Otherwise lambda may be disabled after some idling time according to `LUNA_LAMBDA_INACTIVE_LAMBDA_CLEAR_INTERVAL` setting.
          For more information about inactive lambdas disabling, see developers documentation.
  
          > **WARNING**: It is also required `LUNA_LAMBDA_METRICS_SETTINGS` to enable inactive lambdas clean disabling.

    job_eternal:
      allOf:
      - $ref: '#/components/schemas/_eternal'
      - description: |
          If `enabled` (`1` is specified), job will run until it's manually stopped.
          Otherwise job may be disabled after some idling time according to `LUNA_LAMBDA_INACTIVE_JOB_CLEAR_INTERVAL` setting.
          For more information about inactive jobs disabling, see developers documentation.
  
          > **WARNING**: It is also required `LUNA_LAMBDA_METRICS_SETTINGS` to enable inactive jobs clean disabling.

    workflow_eternal:
      allOf:
      - $ref: '#/components/schemas/_eternal'
      - description: |
          If `enabled` (`1` is specified), jobs created within the framework of workflow will run until they are manually stopped.
          Otherwise jobs may be disabled after some idling time according to `LUNA_LAMBDA_INACTIVE_JOB_CLEAR_INTERVAL` setting.
          For more information about inactive jobs disabling, see developers documentation.
  
          > **WARNING**: It is also required `LUNA_LAMBDA_METRICS_SETTINGS` to enable inactive jobs clean disabling.

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

    lambda_alive:
      allOf:
      - $ref: '#/components/schemas/_alive'
      - description: Sign of enabled/disabled lambda in Kubernetes.

    job_alive:
      allOf:
      - $ref: '#/components/schemas/_alive'
      - description: Sign of enabled/disabled job in Kubernetes.

    switch:
      type: string
      enum: [ disable, enable ]
      description: Action to choose.

    lambda_disabled:
      type: boolean
      default: false
      description: |
        Whether lambda must start in disabled state or not.
        
        If started in *disabled* state (*alive* field in [get lambda](#tag/lambda-monitoring/operation/getLambda)
        response) it is allowed to enable lambda using [lambda switch request](#tag/lambda-switch).

    workflow_disabled:
      type: boolean
      default: false
      description: |
        If disabled, no jobs will be created for this workflow automatically.

        If enabled, a new job will be created for this workflow automatically after image build.

    check_resources:
      type: boolean
      default: false
      description: |
        Whether to check available resources before creation.

    allow_insufficient_resources:
      type: integer
      enum: [0, 1]
      default: 0
      description: |
        Whether to allow job creation with insufficient resources.

    _switch:
      type: object
      properties:
        switch:
          $ref: '#/components/schemas/switch'
          example: disable
      required: [switch]

    lambda_switch:
      allOf:
      - $ref: '#/components/schemas/_switch'
      - description: Lambda switch data.

    namespace:
      type: string
      pattern: ^[a-z0-9][a-z0-9-]*[a-z0-9]$
      description: |
        By default, the `luna-lambda` service namespace will be used.

        Lambda/job provides a kubernetes mechanism for isolating groups of resources within a single cluster.
        
        There are several rules for `namespace` usage:
        
          - Avoid creating namespaces with the prefix `kube-`, since it is reserved for Kubernetes system namespaces.
          - Contain between 2 and 63 characters.
          - Contain only lowercase alphanumeric characters or '-'.
          - Start and end with an alphanumeric character.

    selector:
      type: object
      description: Kubernetes pod node selector.
      additionalProperties:
        x-additionalPropertiesName: selector fields
        description: |
              Kubernetes `key=value` node labels.
          
              Label key may have two segments: an optional prefix and required name, separated by a slash `/`:

              - the name segment is required and must be 63 characters or less
              - the name segment must begin and end with an alphanumeric character `[a-z0-9A-Z]`
              - the name segment may contain dashes `-`, underscores `_`, dots `.`
              - the prefix is optional and must be a DNS subdomain: a series of DNS labels separated by dots `.`
              - the prefix can't be longer than 253 characters and ends with a slash `/`
              - the prefix can't be `kubernetes.io/` or `k8s.io/`, because these prefixes are reserved for Kubernetes core components

              Label value constraints:

              - the value must be 63 characters or less
              - the value can be empty
              - if the value isn't empty then must begin and end with an alphanumeric character `[a-z0-9A-Z]`
              - the value could contain dashes `-`, underscores `_`, dots `.`, and alphanumerics between.
      example:
        app: lambda-name

    user_config:
      type: object
      description: |
        Lambda/Job (inherited from workflow or manually specified) user config.
      additionalProperties:
        x-additionalPropertiesName: lambda/job unit service configuration
        description: |
          JSON containing service settings in format. Only string keys are allowed.
          ```json
          {
            "SETTING_1": "value",
            "SETTING_2": {"key": "value"},
          }
          ```
          
          > **WARNING**: For `agent` setting `max_stream_count` overwrites `max_active_streams` from configurator, configs or env if `max_stream_count` is positive integer.

    user_config_request:
      type: object
      properties:
        user_config:
          $ref: '#/components/schemas/user_config'
      required: [user_config]

    metrics_vector:
      type: object
      properties:
        resultType:
          type: string
          enum: [ "vector" ]
        result:
          type: array
          items:
            type: object
            properties:
              metric:
                type: object
                additionalProperties:
                  type: string
              value:
                type: array
                items:
                  - type: [ number, string ]
                  - type: string
                minItems: 2
                maxItems: 2
            description: Vector result.
            required: [ "metric", "value" ]
      required: [ "resultType", "result" ]

    metrics_matrix:
      type: object
      properties:
        resultType:
          type: string
          enum: [ "matrix" ]
        result:
          type: array
          items:
            type: object
            properties:
              metric:
                type: object
                additionalProperties:
                  type: string
              values:
                type: array
                items:
                  type: array
                  items:
                    - type: [ number, string ]
                    - type: string
                  minItems: 2
                  maxItems: 2
            description: Matrix result.
            required: [ "metric", "values" ]
      required: [ "resultType", "result" ]

    metrics_scalar:
      type: object
      properties:
        resultType:
          type: string
          enum: [ "scalar" ]
        result:
          type: array
          items:
            - type: [ number, string ]
            - type: string
          minItems: 2
          maxItems: 2
          description: Scalar result.
      required: [ "resultType", "result" ]


    metrics_string:
      type: object
      properties:
        resultType:
          type: string
          enum: [ "string" ]
        result:
          type: array
          items:
            - type: [ number, string ]
            - type: string
          minItems: 2
          maxItems: 2
          description: String result.
      required: [ "resultType", "result" ]

    metrics_success:
      type: object
      properties:
        data:
          description: Metrics from prometheus. Read more about format <a href="https://prometheus.io/docs/prometheus/latest/querying/api/#expression-query-result-formats">here</a>
          oneOf:
            - $ref: '#/components/schemas/metrics_matrix'
            - $ref: '#/components/schemas/metrics_vector'
            - $ref: '#/components/schemas/metrics_scalar'
            - $ref: '#/components/schemas/metrics_string'
          discriminator:
            propertyName: resultType
            mapping:
              matrix: '#/components/schemas/metrics_matrix'
              vector: '#/components/schemas/metrics_vector'
              scalar: '#/components/schemas/metrics_scalar'
              string: '#/components/schemas/metrics_string'
          required: [ "resultType", "result" ]
          additionalProperties: false
      required: [ "data" ]

    metrics_error:
      type: object
      description: Metrics request error.
      properties:
        error:
          type: string
          description: Metrics request error.
      required: [ "error" ]

    metrics:
      oneOf:
        - $ref: '#/components/schemas/metrics_success'
        - $ref: '#/components/schemas/metrics_error'

    default_namespace_limits:
      type: object
      description: Namespace resource limits.
      properties:
        cpu_limit:
          type: integer
          nullable: true
          description: CPU resource units limit for each pod. 1 unit means 1/1000 of CPU core.
        ram_limit:
          type: integer
          nullable: true
          description: Maximum RAM usage limit in GB by each pod.
        gpu_availability:
          type: boolean
          nullable: true
          description: Namespace GPU availability.
        labels:
          type: array
          items:
            type: string
          description: Namespace allowed labels.
      required: [ "labels", "gpu_availability", "ram_limit", "cpu_limit" ]

    namespace_limits:
      allOf:
        - $ref: '#/components/schemas/default_namespace_limits'
        - properties:
            namespace:
              type: string
              description: Namespace name.
      required: [ "namespace", "labels", "gpu_availability", "ram_limit", "cpu_limit" ]

    resources_response:
      type: object
      properties:
        default_namespace:
          $ref: '#/components/schemas/default_namespace_limits'
        allowed_namespaces:
          type: array
          description: Allowed namespace limits.
          items:
            $ref: '#/components/schemas/namespace_limits'
      required: [ "default_namespace", "allowed_namespaces" ]

    queue:
      type: object
      description: Job queue.
      properties:
        jobs:
          type: array
          items:
            type: object
            properties:
              job_id:
                $ref: '#/components/schemas/job_id'
              last_execution_status:
                $ref: '#/components/schemas/job_last_execution_status'
              queue_number:
                type: integer
                minimum: 0
                description: Number in queue.
                example: 1
            required: [job_id, last_execution_status]
      required: [jobs]
  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'

    method_not_allowed:
      description: method not allowed.
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            error_code: 12021
            desc: Method not allowed
            detail: Method not allowed
            link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12021"

    lambda_already_exists_by_name:
      description: lambda with specified name already exists.
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            error_code: 42003
            desc: Unique constraint error
            detail: 'Lambda with name good_lambda already exists'
            link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42003"

    lambda_not_found:
      description: lambda not found.
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            error_code: 42001
            desc: Object not found
            detail: Lambda with id 'e63e2a1f-f505-441c-8e11-b2dcd0385329' not found
            link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42001"

    lambda_not_running:
      description: lambda not running.
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            error_code: 42016
            desc: Lambda isn't running
            detail: Lambda with id 'e63e2a1f-f505-441c-8e11-b2dcd0385329' isn't running and cannot be exported
            link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42016"

    workflow_not_ready:
      description: workflow not ready.
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            error_code: 42041
            desc: Workflow is not ready
            detail: Workflow with id 'e63e2a1f-f505-441c-8e11-b2dcd0385329' image build didn't complete
            link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42041"

    lambda_failed_import_multipart:
      description: failed to parse multipart payload of lambda import.
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            error_code: 42017
            desc: Bad/incomplete input data
            detail: "Failed to parse multipart payload for lambda import: error"
            link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42017"

    lambda_or_page_not_found:
      description: lambda not found or page not found.
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          examples:
            lambda_not_found:
              value:
                error_code: 42001
                desc: Object not found
                detail: Lambda with id 'e63e2a1f-f505-441c-8e11-b2dcd0385329' not found
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42001"
            lambda_page_not_found:
              value:
                error_code: 12013
                desc: Resource not found
                detail: Page not found
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12013"

    lambda_no_archive:
      description: archive for lambda not found.
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          examples:
            lambda_not_found:
              value:
                error_code: 42012
                desc: Object gone
                detail: Archive for lambda with id 'e63e2a1f-f505-441c-8e11-b2dcd0385329' not found
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42012"

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

    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"

    workflow_already_exists_by_name:
      description: workflow with specified name already exists.
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            error_code: 42026
            desc: Unique constraint error
            detail: 'Workflow with name good_workflow already exists'
            link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42026"

    workflow_not_found:
      description: Workflow not found.
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            error_code: 42040
            desc: Object not found
            detail: Workflow with id 'e63e2a1f-f505-441c-8e11-b2dcd0385329' not found
            link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42040"

    job_not_found:
      description: job not found.
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            error_code: 42024
            desc: Object not found
            detail: Job with id 'e63e2a1f-f505-441c-8e11-b2dcd0385329' not found
            link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42024"

    job_not_running:
      description: job not running.
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            error_code: 42034
            desc: Job isn't running
            detail: Job with id 'e63e2a1f-f505-441c-8e11-b2dcd0385329' isn't running
            link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42034"

    workflow_failed_import_multipart:
      description: failed to parse multipart payload of workflow import.
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            error_code: 42035
            desc: Bad/incomplete input data
            detail: "Failed to parse multipart payload for workflow import: error"
            link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42035"

    job_or_page_not_found:
      description: job not found or page not found.
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          examples:
            job_not_found:
              value:
                error_code: 42024
                desc: Object not found
                detail: Job with id 'e63e2a1f-f505-441c-8e11-b2dcd0385329' not found
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42024"
            lambda_page_not_found:
              value:
                error_code: 12013
                desc: Resource not found
                detail: Page not found
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12013"

    workflow_no_archive:
      description: archive for workflow not found.
      headers:
        Content-Type:
          $ref: '#/components/headers/application_json'
        Luna-Request-Id:
          $ref: '#/components/headers/luna_request_id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          examples:
            lambda_not_found:
              value:
                error_code: 42031
                desc: Object gone
                detail: Archive for workflow with id 'e63e2a1f-f505-441c-8e11-b2dcd0385329' not found
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42031"
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'
  /2/lambdas:
    post:
      tags:
      - lambdas creation
      summary: create lambda
      description: |
        Start new lambda creation process.
        
        Lambda creation comprises in two parts:

          - docker image creation | process can be seen by [image monitoring](#tag/lambda-image-monitoring)
          
          - lambda creation and launching | process can be seen by [lambda monitoring](#tag/lambda-monitoring)
        
        Lambda can be created from imported image. In this case image creation stage will be skipped.
        See more about image import in developer manual.
        
        After lambda creation process will be completed lambda status will be changed to `running` and it will be
        ready to process requests. For more details see development manual.

      operationId: createLambda
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/application_multipart_content'
      - $ref: '#/components/parameters/header_account_id'
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/lambda_multipart_content-archive_file'
          application/json:
            schema:
              $ref: '#/components/schemas/lambda_import_json'
        required: true
      responses:
        202:
          description: Lambda creation executed successfully.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Location:
              schema:
                type: string
                format: url
                example: /1/lambdas/b5d6fd45-fcca-453d-ac05-3e594054b813
              description: location of the lambda.
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/lambda_id_response'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                unknown_multipart_name:
                  value:
                    error_code: 12039
                    desc: Bad/incomplete input data
                    detail: 'Unknown multipart name ''account'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12039"
                duplicate_multipart_name:
                  value:
                    error_code: 12040
                    desc: Bad/incomplete input data
                    detail: 'Duplicate multipart name ''lambda_name'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12040"
                bad_multipart_content_type:
                  value:
                    error_code: 12041
                    desc: Bad/incomplete input data
                    detail: 'Multipart with name ''lambda_name'' has bad Content-Type'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12041"
                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"
        403:
          $ref: '#/components/responses/license_problem'
        409:
          description: Integrity error.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                lambda_already_exists_by_name:
                  value:
                    error_code: 42003
                    desc: Unique constraint error
                    detail: 'Lambda with name good_lambda already exists'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42003"
                innuficient_resources:
                  value:
                    error_code: 42022
                    desc: Lambda resource allocation error
                    detail: 'Lambda deploy parameters in conflict with allowed resources. Low memory. Adjust configuration or deploy parameters to proceed'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42022"
        422:
          description: Unprocessable Content.
          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:
                archive_not_contains_file:
                  value:
                    error_code: 42009
                    desc: Unprocessable Content
                    detail: "Fail to access provided image: 'http://registry/image:tag'"
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42009"
        500:
          $ref: '#/components/responses/internal_server_error'

    get:
      tags:
      - lambda monitoring
      summary: get lambdas
      description: Get lambdas according to filters.
      operationId: getLambdas
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      - $ref: '#/components/parameters/create_time__lt'
      - $ref: '#/components/parameters/create_time__gte'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/page_size'
      - $ref: '#/components/parameters/lambda_type'
      - $ref: '#/components/parameters/lambda_name'
      - $ref: '#/components/parameters/namespace'
      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:
                  lambdas:
                    description: lambdas
                    type: array
                    items:
                      $ref: '#/components/schemas/lambda'
                    minItems: 0
                required: [lambdas]
        400:
          description: Bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'create_time__lt'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/lambdas/validator:
    post:
      tags:
      - lambdas validator
      summary: validation lambda
      description: |
        Lambda validation.
        
        Lambda validation not guarantees hassle-free lambda creation and execution, but is an integral part of lambda
        creation process and allows you to make sure that the archive and its contents meet the requirements.
      operationId: validationLambda
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/application_multipart_content'
      requestBody:
        content:
          application/zip:
            schema:
              type: object
              properties:
                archive:
                  type: string
                  format: binary
                  description: |
                    Archive file with zip extension.
                    Content-Type must be "application/zip".
                parameters:
                  type: object
                  description: Parameters for lambda.
                  properties:
                    lambda_type:
                      $ref: '#/components/schemas/lambda_type'
                  required: [lambda_type]
              required: [ archive, parameters ]
        required: true
      responses:
        204:
          description: Lambda validation success.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        400:
          description: Validate lambda 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/lambda_validation_error_response'
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/lambdas/{lambda_id}:
    parameters:
    - in: path
      name: lambda_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the lambda.

    put:
      tags:
      - lambdas creation
      summary: put lambda
      description: |
        Execute lambda recreation. 
        
        The lambda version will be incremented after recreation finish.
        
        Lambda recreation comprises in three parts:

          - old lambda removing

          - docker image creation | process can be seen by [image monitoring](#tag/lambda-image-monitoring)
          
          - lambda creation and launching | process can be seen by [lambda monitoring](#tag/lambda-monitoring)
        
        After lambda creation process will be completed lambda status will be changed to `running` and it will be
        ready to process requests. For more details see development manual.

      operationId: putLambda
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/application_multipart_content'
        - $ref: '#/components/parameters/header_account_id'
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/lambda_multipart_content-archive_file'
          application/json:
            schema:
              $ref: '#/components/schemas/lambda_import_json'
        required: true
      responses:
        200:
          description: Lambda recreation executed successfully.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Location:
              schema:
                type: string
                format: url
                example: /1/lambdas/b5d6fd45-fcca-453d-ac05-3e594054b813
              description: location of the lambda.
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/lambda_version_response'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                unknown_multipart_name:
                  value:
                    error_code: 12039
                    desc: Bad/incomplete input data
                    detail: 'Unknown multipart name ''account'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12039"
                duplicate_multipart_name:
                  value:
                    error_code: 12040
                    desc: Bad/incomplete input data
                    detail: 'Duplicate multipart name ''lambda_name'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12040"
                bad_multipart_content_type:
                  value:
                    error_code: 12041
                    desc: Bad/incomplete input data
                    detail: 'Multipart with name ''lambda_name'' has bad Content-Type'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12041"
                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"
        403:
          $ref: '#/components/responses/license_problem'
        404:
          description: Lambda 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: 42001
                desc: Object not found
                detail: Lambda with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42001"
        409:
          $ref: '#/components/responses/lambda_already_exists_by_name'
        500:
          $ref: '#/components/responses/internal_server_error'

    patch:
      tags:
      - lambdas creation
      summary: patch lambda
      description: patch lambda.
      operationId: patchLambda
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/application_json_content'
        - $ref: '#/components/parameters/header_account_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/lambda_patch'
        required: true
      responses:
        204:
          description: Lambda patched successfully.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            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:
                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"
        404:
          description: Lambda 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: 42001
                desc: Object not found
                detail: Lambda with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42001"
        500:
          $ref: '#/components/responses/internal_server_error'

    get:
      tags:
      - lambda monitoring
      summary: get lambda
      description: Get lambda by ID.
      operationId: getLambda
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/lambda'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12017"
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          description: Lambda 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: 42001
                desc: Object not found
                detail: Lambda with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42001"
        500:
          $ref: '#/components/responses/internal_server_error'

    head:
      tags:
      - lambda monitoring
      summary: check lambda existence
      description:  Check existence of the lambda by ID.
      operationId: checkLambda
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: lambda exists
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          description: Lambda 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: 42001
                desc: Object not found
                detail: Lambda with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42001"
        500:
          $ref: '#/components/responses/internal_server_error'

    delete:
      tags:
      - lambdas deletion
      summary: delete lambda
      description: Remove lambda by ID. 
        
        Stops and removes lambda pod, deletes lambda archive from S3. There is also will be an attempt to remove lambda image from registry in background. 
        
        Note, that image can be deleted only if this feature enabled in registry.
        
        Failed or successful deletion attempt will be logged and saved to monitoring.

      operationId: deleteLambda
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        204:
          description: Delete success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          description: Lambda 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: 42001
                desc: Object not found
                detail: Lambda with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42001"
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/lambdas/{lambda_id}/image:
    parameters:
      - in: path
        name: lambda_id
        schema:
          $ref: '#/components/schemas/uuid'
        required: true
        description: ID of the lambda.

    get:
      tags:
        - lambda image
      summary: get lambda image
      description: Get lambda image.
      operationId: getLambdaImage
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          content:
            application/json:
              schema:
                type: object
                properties:
                  exported_image:
                    type: object
                    properties:
                      image:
                        type: string
                        description: Lambda image
                    description: Image data
                    required: [ image ]
                required: [exported_image]
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12017"
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          description: Lambda 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: 42001
                desc: Object not found
                detail: Lambda with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42001"
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/lambdas/{lambda_id}/update:
    parameters:
    - in: path
      name: lambda_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the lambda.

    post:
      tags:
        - lambda update
      summary: update lambda
      description: |
        update lambda using latest base image.
        
        The product update may cause incompatibility with old lambdas. To make the old lambdas compatible with 
        actual product it needs to update lambda. For more details see development manual.
      operationId: updateLambda
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/header_account_id'
      responses:
        200:
          description: Lambda update executed successfully.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Location:
              schema:
                type: string
                format: url
                example: /1/lambdas/b5d6fd45-fcca-453d-ac05-3e594054b813
              description: location of the lambda.
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/lambda_version_response'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                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"
        403:
          $ref: '#/components/responses/license_problem'
        404:
          description: Lambda 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:
                lambda_not_found:
                  value:
                    error_code: 42001
                    desc: Object not found
                    detail: Lambda with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42001"
                archive_not_found:
                  value:
                    error_code: 42012
                    desc: Object gone
                    detail: Archive for lambda with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42012"
        409:
          description: Lambda update 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'
              examples:
                lambda_not_found:
                  value:
                    error_code: 42011
                    desc: Lambda update conflict
                    detail: Lambda '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' cannot be updated, since it uses imported image
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42011"
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/lambdas/{lambda_id}/image/status:
    parameters:
    - in: path
      name: lambda_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the lambda.

    get:
      tags:
      - lambda image monitoring
      summary: get lambda image creation status
      description: |
        Get lambda image creation status by lambda ID.

        If lambda image creation is in progress, lambda status will be `waiting`.

        After lambda image creation will end, the lambda image creation job will be removed and status will be `completed`. When the data disappears from luna-builder status will be `not_found`.

        For more information about lambda and lambda images statuses see development manual.

      operationId: getLambdaImageStatus
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/image_creation_status'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12017"
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          description: Lambda 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: 42001
                desc: Object not found
                detail: Lambda with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42001"
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/lambdas/{lambda_id}/image/logs:
    parameters:
    - in: path
      name: lambda_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the lambda.

    get:
      tags:
      - lambda image monitoring
      summary: get lambda image creation logs
      description: |
        Get lambda image creation logs by lambda ID.
        
        During the creation of the lambda image, it is possible to get logs to monitor the progress.
        
        For more information about lambda and lambda images logs see development manual.

      operationId: getLambdaImageCreationLogs
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/tail_lines'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/lambda_image_logs'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12017"
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          description: Lambda 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: 42001
                desc: Object not found
                detail: Lambda with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42001"
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/lambdas/{lambda_id}/status:
    parameters:
    - in: path
      name: lambda_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the lambda.

    get:
      tags:
      - lambda monitoring
      summary: get lambda status
      description: |
        Get lambda status by ID.

        If lambda image creation is in progress, lambda status will be `waiting`.

        For more information about lambda and lambda images statuses see development manual.

      operationId: getLambdaStatus
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/lambda_status_response'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12017"
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          description: Lambda 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: 42001
                desc: Object not found
                detail: Lambda with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42001"
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/lambdas/{lambda_id}/logs:
    parameters:
    - in: path
      name: lambda_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the lambda.

    get:
      tags:
      - lambda monitoring
      summary: get lambda logs
      description: |
        Get lambda logs by ID.
        
        After lambda creation has been executed, there is possibility to get lambda logs.
        
        For more information about lambda and lambda images logs see development manual.

      operationId: getLambdaLogs
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/account_id'
        - $ref: '#/components/parameters/tail_lines'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/lambda_logs'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12017"
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          description: Lambda 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: 42001
                desc: Object not found
                detail: Lambda with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42001"
        409:
          $ref: '#/components/responses/lambda_not_running'
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/lambdas/{lambda_id}/docs/spec:
    parameters:
    - in: path
      name: lambda_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the lambda.

    get:
      tags:
      - lambda documentation
      summary: get lambda openapi documentation
      description: |
        Get lambda 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: getLambdaSpec

      parameters:
        - $ref: '#/components/parameters/account_id'
        - $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
        404:
          $ref: '#/components/responses/lambda_not_found'
        409:
          $ref: '#/components/responses/lambda_not_running'
        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: "Unsupported media type"
                    desc: "Bad/incomplete input data"
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12024"
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/lambdas/{lambda_id}/proxy:
    parameters:
    - in: path
      name: lambda_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the lambda.
    - in: path
      name: path_parameters
      schema:
        type: string
        description: additional path parameters
        example: /main
      required: false
      description: any additional path parameter will be used as path parameter to lambda

    post:
      tags:
      - lambda proxy
      summary: proxy post request to lambda
      description: |
        Proxy POST request to lambda.

        Request and response headers, query parameters and body description 
        [must be provided](#operation/getLambdaSpec) by lambda documentation.

        Described headers will be processed and received independently of lambda behavior.

        Note: proxy request
      operationId: proxyLambdaPost
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/header_account_id'
      responses:
        200:
          description: Success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        403:
          $ref: '#/components/responses/license_problem'
        404:
          $ref: '#/components/responses/lambda_or_page_not_found'
        409:
          $ref: '#/components/responses/lambda_not_running'
        415:
          $ref: '#/components/responses/method_not_allowed'
        500:
          $ref: '#/components/responses/internal_server_error'

    get:
      tags:
      - lambda proxy
      summary: proxy get request to lambda
      description: |
        Proxy GET request to lambda.

        Request and response headers, query parameters and body description 
        [must be provided](#operation/getLambdaSpec) by lambda documentation.

        Described headers will be processed and received independently of lambda behavior.
      operationId: proxyLambdaGet
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: Success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        403:
          $ref: '#/components/responses/license_problem'
        404:
          $ref: '#/components/responses/lambda_or_page_not_found'
        409:
          $ref: '#/components/responses/lambda_not_running'
        415:
          $ref: '#/components/responses/method_not_allowed'
        500:
          $ref: '#/components/responses/internal_server_error'

    head:
      tags:
      - lambda proxy
      summary: proxy head request to lambda
      description: |
        Proxy HEAD request to lambda.

        Request and response headers, query parameters and body description 
        [must be provided](#operation/getLambdaSpec) by lambda documentation.

        Described headers will be processed and received independently of lambda behavior.
      operationId: proxyLambdaHead
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: Success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        403:
          $ref: '#/components/responses/license_problem'
        404:
          $ref: '#/components/responses/lambda_or_page_not_found'
        409:
          $ref: '#/components/responses/lambda_not_running'
        415:
          $ref: '#/components/responses/method_not_allowed'
        500:
          $ref: '#/components/responses/internal_server_error'

    put:
      tags:
      - lambda proxy
      summary: proxy put request to lambda
      description: |
        Proxy PUT request to lambda.

        Request and response headers, query parameters and body description 
        [must be provided](#operation/getLambdaSpec) by lambda documentation.

        Described headers will be processed and received independently of lambda behavior.
      operationId: proxyLambdaPut
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/header_account_id'
      responses:
        200:
          description: Success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        403:
          $ref: '#/components/responses/license_problem'
        404:
          $ref: '#/components/responses/lambda_or_page_not_found'
        409:
          $ref: '#/components/responses/lambda_not_running'
        415:
          $ref: '#/components/responses/method_not_allowed'
        500:
          $ref: '#/components/responses/internal_server_error'

    patch:
      tags:
      - lambda proxy
      summary: proxy patch request to lambda
      description: |
        Proxy PATCH request to lambda.

        Request and response headers, query parameters and body description 
        [must be provided](#operation/getLambdaSpec) by lambda documentation.

        Described headers will be processed and received independently of lambda behavior.
      operationId: proxyLambdaPatch
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: Success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        403:
          $ref: '#/components/responses/license_problem'
        404:
          $ref: '#/components/responses/lambda_or_page_not_found'
        409:
          $ref: '#/components/responses/lambda_not_running'
        415:
          $ref: '#/components/responses/method_not_allowed'
        500:
          $ref: '#/components/responses/internal_server_error'

    delete:
      tags:
      - lambda proxy
      summary: proxy delete request to lambda
      description: |
        Proxy DELETE request to lambda.

        Request and response headers, query parameters and body description 
        [must be provided](#operation/getLambdaSpec) by lambda documentation.

        Described headers will be processed and received independently of lambda behavior.
      operationId: proxyLambdaDelete
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: Success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        403:
          $ref: '#/components/responses/license_problem'
        404:
          $ref: '#/components/responses/lambda_or_page_not_found'
        409:
          $ref: '#/components/responses/lambda_not_running'
        415:
          $ref: '#/components/responses/method_not_allowed'
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - lambda proxy
      summary: proxy options request to lambda
      description: |
        Proxy OPTIONS request to lambda.

        Request and response headers, query parameters and body description 
        [must be provided](#operation/getLambdaSpec) by lambda documentation.

        Described headers will be processed and received independently of lambda behavior.
      operationId: proxyLambdaOptions
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: Success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        404:
          $ref: '#/components/responses/lambda_or_page_not_found'
        409:
          $ref: '#/components/responses/lambda_not_running'
        415:
          $ref: '#/components/responses/method_not_allowed'
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/lambdas/{lambda_id}/export:
    parameters:
    - in: path
      name: lambda_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the lambda.

    get:
      tags:
      - lambda import/export
      summary: export lambda archive
      description: Export archive with lambda and parameters.
      operationId: exportLambda
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: Export success
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/zip:
              schema:
                $ref: '#/components/schemas/exported_archive'
        410:
          $ref: '#/components/responses/lambda_no_archive'
        404:
          $ref: '#/components/responses/lambda_not_found'
        415:
          $ref: '#/components/responses/method_not_allowed'
        422:
          $ref: '#/components/responses/lambda_not_running'
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/lambdas/import:
    post:
      tags:
      - lambda import/export
      summary: import lambda archive
      description: import archive with lambda and parameters.
      operationId: importLambda
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      - $ref: '#/components/parameters/header_account_id'
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/lambda_multipart_import'
      responses:
        202:
          description: Success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Location:
              schema:
                type: string
                format: url
                example: /1/lambdas/b5d6fd45-fcca-453d-ac05-3e594054b813
              description: location of the lambda.
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/lambda_id_response'
        400:
          $ref: '#/components/responses/lambda_failed_import_multipart'
        404:
          $ref: '#/components/responses/lambda_not_found'
        409:
          $ref: '#/components/responses/lambda_already_exists_by_name'
        415:
          $ref: '#/components/responses/method_not_allowed'
        500:
          $ref: '#/components/responses/internal_server_error'  
  /2/lambdas/{lambda_id}/config:
    parameters:
      - in: path
        name: lambda_id
        schema:
          $ref: '#/components/schemas/uuid'
        required: true
        description: ID of the lambda.

    get:
      tags:
        - lambda config
      summary: get lambda config
      description: Get lambda user configuration
      operationId: getLambdaConfig
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: Export success
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/config_with_version'
        404:
          $ref: '#/components/responses/lambda_not_found'
        409:
          $ref: '#/components/responses/lambda_not_running'
        415:
          $ref: '#/components/responses/method_not_allowed'
        422:
          $ref: '#/components/responses/lambda_not_running'
        500:
          $ref: '#/components/responses/internal_server_error'

    put:
      tags:
        - lambda config
      summary: update lambda config
      description: Update lambda user configuration
      operationId: putLambdaConfig
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/header_account_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/user_config_request'
        required: true
      responses:
        200:
          description: Export success
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/config_version_response'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                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"
        404:
          $ref: '#/components/responses/lambda_not_found'
        409:
          $ref: '#/components/responses/lambda_not_running'
        415:
          $ref: '#/components/responses/method_not_allowed'
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/lambdas/{lambda_id}/metrics:
    parameters:
      - in: path
        name: lambda_id
        schema:
          $ref: '#/components/schemas/uuid'
        required: true
        description: ID of the lambda.

    get:
      tags:
        - lambda metrics
      summary: get lambda metrics
      description: Get lambda metrics
      operationId: getLambdaMetrics
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/account_id'
        - $ref: '#/components/parameters/metrics'
        - $ref: '#/components/parameters/resources'
      responses:
        200:
          description: Export success
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/metrics'
              example:
                data:
                  resultType: vector
                  result:
                    - metric:
                        __name__: requests_count
                        lambda_id: 03261244-d9cd-4c06-a9a3-2f6bf77d03be
                        path: 'POST:/main'
                        service: luna-lambda-unit
                        status_code: '201'
                      value:
                        - 1758279288.092
                        - '1'
                    - metric:
                        __name__: requests_sum
                        lambda_id: 03261244-d9cd-4c06-a9a3-2f6bf77d03be
                        path: 'POST:/main'
                        service: luna-lambda-unit
                        status_code: '201'
                      value:
                        - 1758279288.092
                        - '0.0007713570012128912'
        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:
                unknown_multipart_name:
                  value:
                    error_code: 12039
                    desc: Bad/incomplete input data
                    detail: 'Unknown multipart name ''account'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12039"
                duplicate_multipart_name:
                  value:
                    error_code: 12040
                    desc: Bad/incomplete input data
                    detail: 'Duplicate multipart name ''lambda_name'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12040"
                bad_multipart_content_type:
                  value:
                    error_code: 12041
                    desc: Bad/incomplete input data
                    detail: 'Multipart with name ''lambda_name'' has bad Content-Type'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12041"
                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"
        403:
          $ref: '#/components/responses/forbidden_resource_error'
        404:
          $ref: '#/components/responses/lambda_not_found'
        415:
          $ref: '#/components/responses/method_not_allowed'
        422:
          $ref: '#/components/responses/lambda_not_running'
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/lambdas/{lambda_id}/switch:
    parameters:
    - in: path
      name: lambda_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the lambda.

    patch:
      tags:
        - lambda switch
      summary: switch lambda
      description: |
        Enable/disable lambda.
      operationId: switchLambda
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/header_account_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/lambda_switch'
      responses:
        200:
          description: Disable lambda success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        202:
          description: Enabled lambda success.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Location:
              schema:
                type: string
                format: url
                example: /1/lambdas/b5d6fd45-fcca-453d-ac05-3e594054b813
              description: location of the lambda.
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/lambda_id_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'
        404:
          $ref: '#/components/responses/lambda_not_found'
        409:
          description: lambda is already disabled/enabled
          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:
                already_disabled:
                  value:
                    error_code: 42021
                    desc: Lambda alive error
                    detail: Lambda with id 'e63e2a1f-f505-441c-8e11-b2dcd0385329' is already disabled
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42021"
                already_enabled:
                  value:
                    error_code: 42021
                    desc: Lambda alive error
                    detail: Lambda with id 'e63e2a1f-f505-441c-8e11-b2dcd0385329' is already enabled
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42021"
        422:
          description: lambda status is incompatible
          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_running:
                  value:
                    error_code: 42009
                    desc: Unprocessable Content
                    detail: "Fail to access provided image: lambda-image-id"
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42009"
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/lambdas/resources:
    get:
      tags:
        - lambda resources
      summary: lambda resource limits
      description: Lambda resource limits.
      operationId: getLambdaResources
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      responses:
        200:
          description: Get lambda resource limits.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/resources_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'
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/workflows:
    post:
      tags:
      - workflow creation
      summary: create workflow
      description: |
        Create new workflow. 
        
        Workflow creation assumes docker image creation | process can bee seen by 
        [workflow image monitoring](#tag/workflow-image-monitoring).

        Workflow creation optionally assumes job creation with default parameters after docker image creation.
        To enable job creation set *disabled* to *false* in *deploy_parameters* section.
        Job information will be avaiable using [job monitoring](#tag/job-monitoring) requests.
        
        Workflow can be created from imported image. In this case image creation stage will be skipped and workflow
        only will be registered (see *application/json* request body schema).
        See more about workflows and image import in developer manual.
        
        After workflow creation it is possible to create new jobs within created workflow using 
        [job creation](#tag/jobs-creation) request.
      operationId: createWorkflow
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/application_multipart_content'
      - $ref: '#/components/parameters/header_account_id'
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/workflow_multipart_content-archive_file'
          application/json:
            schema:
              $ref: '#/components/schemas/workflow_import_json'
        required: true
      responses:
        202:
          description: Workflow creation executed successfully.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Location:
              schema:
                type: string
                format: url
                example: /1/workflows/b5d6fd45-fcca-453d-ac05-3e594054b813
              description: location of the workflow.
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/workflow_id_response'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                unknown_multipart_name:
                  value:
                    error_code: 12039
                    desc: Bad/incomplete input data
                    detail: 'Unknown multipart name ''account'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12039"
                duplicate_multipart_name:
                  value:
                    error_code: 12040
                    desc: Bad/incomplete input data
                    detail: 'Duplicate multipart name ''workflow_name'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12040"
                bad_multipart_content_type:
                  value:
                    error_code: 12041
                    desc: Bad/incomplete input data
                    detail: 'Multipart with name ''workflow_name'' has bad Content-Type'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12041"
                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"
        403:
          $ref: '#/components/responses/license_problem'
        409:
          $ref: '#/components/responses/workflow_already_exists_by_name'
        422:
          description: Unprocessable Content.
          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:
                archive_not_contains_file:
                  value:
                    error_code: 42009
                    desc: Unprocessable Content
                    detail: "Fail to access provided image: 'http://registry/image:tag'"
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42009"
        500:
          $ref: '#/components/responses/internal_server_error'

    get:
      tags:
      - workflow monitoring
      summary: get workflows
      description: Get workflows according to filters.
      operationId: getWorkflows
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      - $ref: '#/components/parameters/create_time__lt'
      - $ref: '#/components/parameters/create_time__gte'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/page_size'
      - $ref: '#/components/parameters/workflow_type'
      - $ref: '#/components/parameters/workflow_name'
      - $ref: '#/components/parameters/namespace'
      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:
                  workflows:
                    description: workflows
                    type: array
                    items:
                      $ref: '#/components/schemas/workflow'
                    minItems: 0
                required: [workflows]
        400:
          description: Bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'create_time__lt'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/workflows/validator:
    post:
      tags:
      - workflow validator
      summary: workflow validation
      description: |
        Workflow validation.
        
        Workflow validation not guarantees hassle-free workflow's job creation and execution, but is an integral part of workflow
        creation process and allows you to make sure that the archive and its contents meet the requirements.
      operationId: validationWorkflow
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/application_multipart_content'
      requestBody:
        content:
          application/zip:
            schema:
              type: object
              properties:
                archive:
                  type: string
                  format: binary
                  description: |
                    Archive file with zip extension.
                    Content-Type must be "application/zip".
                parameters:
                  type: object
                  description: Parameters for workflow.
                  properties:
                    workflow_type:
                      $ref: '#/components/schemas/workflow_type'
                  required: [workflow_type]
              required: [ archive, parameters ]
        required: true
      responses:
        204:
          description: Workflow validation success.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        400:
          description: Validate workflow 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/workflow_validation_error_response'
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/workflows/{workflow_id}:
    parameters:
    - in: path
      name: workflow_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the workflow.

    put:
      tags:
      - workflow creation
      summary: put workflow
      description: |
        Execute workflow recreation. 
        
        The workflow version will be incremented after recreation finish.
        
        Workflow recreation comprises in three parts:

          - old workflow removing

          - stop all running and planned jobs within the framework of old workflow.

          - new workflow creation (the same process as described in the case of 
            [workflow creation](#tag/workflow-creation) request).

      operationId: putWorkflow
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/application_multipart_content'
        - $ref: '#/components/parameters/header_account_id'
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/workflow_multipart_content-archive_file'
          application/json:
            schema:
              $ref: '#/components/schemas/workflow_import_json'
        required: true
      responses:
        200:
          description: Workflow recreation executed successfully.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Location:
              schema:
                type: string
                format: url
                example: /1/workflows/b5d6fd45-fcca-453d-ac05-3e594054b813
              description: location of the workflow.
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/workflow_version_response'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                unknown_multipart_name:
                  value:
                    error_code: 12039
                    desc: Bad/incomplete input data
                    detail: 'Unknown multipart name ''account'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12039"
                duplicate_multipart_name:
                  value:
                    error_code: 12040
                    desc: Bad/incomplete input data
                    detail: 'Duplicate multipart name ''workflow_name'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12040"
                bad_multipart_content_type:
                  value:
                    error_code: 12041
                    desc: Bad/incomplete input data
                    detail: 'Multipart with name ''workflow_name'' has bad Content-Type'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12041"
                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"
        403:
          $ref: '#/components/responses/license_problem'
        404:
          $ref: '#/components/responses/workflow_not_found'
        409:
          $ref: '#/components/responses/workflow_already_exists_by_name'
        500:
          $ref: '#/components/responses/internal_server_error'

    patch:
      tags:
      - workflow creation
      summary: patch workflow
      description: |
        Patch workflow. All existing job will not change
      operationId: patchWorkflow
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/application_json_content'
        - $ref: '#/components/parameters/header_account_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/workflow_patch'
        required: true
      responses:
        204:
          description: Workflow patched successfully.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            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:
                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"
        404:
          $ref: '#/components/responses/workflow_not_found'
        500:
          $ref: '#/components/responses/internal_server_error'

    get:
      tags:
      - workflow monitoring
      summary: get workflow
      description: Get workflow by ID.
      operationId: getWorkflow
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/workflow'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12017"
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          $ref: '#/components/responses/workflow_not_found'
        500:
          $ref: '#/components/responses/internal_server_error'

    head:
      tags:
      - workflow monitoring
      summary: check workflow existence
      description:  Check existence of the workflow by ID.
      operationId: checkWorkflow
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: Workflow exists
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          $ref: '#/components/responses/workflow_not_found'
        500:
          $ref: '#/components/responses/internal_server_error'

    delete:
      tags:
      - workflow deletion
      summary: delete workflow
      description: Remove workflow by ID. 
        
        Stops and removes workflow and all its' jobs, deletes workflow archive from S3. 
        There is also will be an attempt to remove workflow image from registry in background.
        
        Note, that image can be deleted only if this feature enabled in registry.
        
        Failed or successful deletion attempt will be logged and saved to monitoring.

      operationId: deleteWorkflow
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        204:
          description: Delete success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          $ref: '#/components/responses/workflow_not_found'
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/workflows/{workflow_id}/image:
    parameters:
      - in: path
        name: workflow_id
        schema:
          $ref: '#/components/schemas/uuid'
        required: true
        description: ID of the workflow.

    get:
      tags:
        - workflow image
      summary: get workflow image
      description: Get workflow image.
      operationId: getWorkflowImage
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          content:
            application/json:
              schema:
                type: object
                properties:
                  exported_image:
                    type: object
                    properties:
                      image:
                        type: string
                        description: Workflow image
                    description: Image data
                    required: [ image ]
                required: [exported_image]
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12017"
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          $ref: '#/components/responses/workflow_not_found'
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/workflows/{workflow_id}/image/status:
    parameters:
    - in: path
      name: workflow_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the workflow.

    get:
      tags:
      - workflow image monitoring
      summary: get workflow image creation status
      description: |
        Get workflow image creation status by workflow ID.

        For more information about workflow and workflow images statuses see development manual.

      operationId: getWorkflowImageStatus
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/image_creation_status'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12017"
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          $ref: '#/components/responses/workflow_not_found'
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/workflows/{workflow_id}/image/logs:
    parameters:
    - in: path
      name: workflow_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the workflow.

    get:
      tags:
      - workflow image monitoring
      summary: get workflow image creation logs
      description: |
        Get workflow image creation logs by workflow ID.
        
        During the creation of the workflow image, it is possible to get logs to monitor the progress.
        
        For more information about workflow and workflow images logs see development manual.

      operationId: getWorkflowImageCreationLogs
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/tail_lines'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/workflow_image_logs'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12017"
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          $ref: '#/components/responses/workflow_not_found'
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/workflows/{workflow_id}/export:
    parameters:
    - in: path
      name: workflow_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the workflow.

    get:
      tags:
      - workflow import/export
      summary: export workflow archive
      description: |
        Export archive with workflow and parameters.

        Exported archive may be used for workflow creation using 
        [workflow import](#tag/workflow-importexport/operation/importWorkflow) request.
      operationId: exportWorkflow
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: Export success
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/zip:
              schema:
                $ref: '#/components/schemas/exported_archive'
        404:
          $ref: '#/components/responses/workflow_not_found'
        410:
          $ref: '#/components/responses/workflow_no_archive'
        415:
          $ref: '#/components/responses/method_not_allowed'
        422:
          $ref: '#/components/responses/workflow_not_ready'
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/workflows/import:
    post:
      tags:
      - workflow import/export
      summary: import workflow archive
      description: |
        Workflow creation using data from imported archive (Archive may be received by making 
        [workflow export](#tag/workflow-importexport/operation/exportWorkflow) request).

        After archive import it will execute the same process of workflow creation as described in the case of 
        [workflow creation](#tag/workflow-creation) request.
      operationId: importWorkflow
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      - $ref: '#/components/parameters/header_account_id'
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/workflow_multipart_import'
      responses:
        202:
          description: Success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Location:
              schema:
                type: string
                format: url
                example: /1/workflows/b5d6fd45-fcca-453d-ac05-3e594054b813
              description: location of the workflow.
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/workflow_id_response'
        400:
          $ref: '#/components/responses/workflow_failed_import_multipart'
        404:
          $ref: '#/components/responses/workflow_not_found'
        409:
          $ref: '#/components/responses/workflow_already_exists_by_name'
        415:
          $ref: '#/components/responses/method_not_allowed'
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/workflows/{workflow_id}/jobs:
    parameters:
    - in: path
      name: workflow_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the workflow.

    post:
      tags:
      - jobs creation
      summary: create job
      description: |
        Create new job within a framework of specified workflow.
        
        It will use image created during workflow created as *imported_image*.

        All parameters (except for *service_launch* from *deploy_parameters*) which are not specified for job
        will be inherited from workflow.
        Parameters like `workflow_name`/`workflow_type` will be converted into `job_name`/`job_type` respectively.

        Workflow creation is available by using [workflow creation](#tag/workflow-creation) or 
        [workflow import](#tag/workflow-importexport/operation/importWorkflow) requests.

      operationId: createJob
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/application_multipart_content'
      - $ref: '#/components/parameters/header_account_id'
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/job_multipart_content-archive_file'
          application/json:
            schema:
              $ref: '#/components/schemas/job_import_json'
        required: false
      responses:
        202:
          description: Job creation executed successfully.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Location:
              schema:
                type: string
                format: url
                example: /1/workflow/b5d6fd45-fcca-453d-ac05-3e594054b813/jobs/b5d6fd45-fcca-453d-ac05-3e594054b813
              description: location of the job.
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/job_id_response'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                unknown_multipart_name:
                  value:
                    error_code: 12039
                    desc: Bad/incomplete input data
                    detail: 'Unknown multipart name ''account'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12039"
                duplicate_multipart_name:
                  value:
                    error_code: 12040
                    desc: Bad/incomplete input data
                    detail: 'Duplicate multipart name ''job_name'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12040"
                bad_multipart_content_type:
                  value:
                    error_code: 12041
                    desc: Bad/incomplete input data
                    detail: 'Multipart with name ''job_name'' has bad Content-Type'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12041"
                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"
        403:
          $ref: '#/components/responses/license_problem'
        404:
          $ref: '#/components/responses/workflow_not_found'
        409:
          $ref: '#/components/responses/workflow_already_exists_by_name'
        422:
          description: Unprocessable Content.
          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:
                archive_not_contains_file:
                  value:
                    error_code: 42009
                    desc: Unprocessable Content
                    detail: "Fail to access provided image: 'http://registry/image:tag'"
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42009"
        500:
          $ref: '#/components/responses/internal_server_error'

    get:
      tags:
      - job monitoring
      summary: get jobs
      description: Get jobs according to filters.
      operationId: getJobs
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      - $ref: '#/components/parameters/create_time__lt'
      - $ref: '#/components/parameters/create_time__gte'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/page_size'
      - $ref: '#/components/parameters/job_type'
      - $ref: '#/components/parameters/job_name'
      - $ref: '#/components/parameters/namespace'
      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
                description: Job list.
                properties:
                  jobs:
                    description: Job list.
                    type: array
                    items:
                      $ref: '#/components/schemas/job'
                    minItems: 0
                required: [jobs]
        400:
          description: Bad request.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'create_time__lt'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          $ref: '#/components/responses/workflow_not_found'
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/workflows/{workflow_id}/jobs/{job_id}:
    parameters:
    - in: path
      name: workflow_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the workflow.
    - in: path
      name: job_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the job.

    get:
      tags:
      - job monitoring
      summary: get job
      description: Get job by ID.
      operationId: getJob
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/job'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12017"
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          description: Job 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: 42024
                desc: Object not found
                detail: Job with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42024"
        500:
          $ref: '#/components/responses/internal_server_error'

    delete:
      tags:
      - jobs deletion
      summary: delete job
      description: Remove job by ID. 
      operationId: deleteJob
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        204:
          description: Delete success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          description: Job 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: 42024
                desc: Object not found
                detail: Job with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42024"
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/workflows/{workflow_id}/jobs/{job_id}/logs:
    parameters:
    - in: path
      name: workflow_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the workflow.
    - in: path
      name: job_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the job.

    get:
      tags:
      - job monitoring
      summary: get job logs
      description: |
        Get job logs by ID.
        
        After job creation has been executed, there is possibility to get job logs.
        
        For more information about job and job images logs see development manual.
        
        Job logs will be available only while job is running, for more information about jobs see developers documentation.
      operationId: getJobLogs
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/account_id'
        - $ref: '#/components/parameters/tail_lines'
      responses:
        200:
          description: OK
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
            Content-Type:
              $ref: '#/components/headers/application_json'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/job_logs'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                bad_content_type:
                  value:
                    error_code: 12017
                    desc: Bad/incomplete input data
                    detail: Bad content type
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12017"
                bad_query_param:
                  value:
                    error_code: 12012
                    desc: Bad/incomplete input data
                    detail: Bad query parameters 'account_id'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        404:
          description: Job 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: 42024
                desc: Object not found
                detail: Job with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
                link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-42024"
        409:
          $ref: '#/components/responses/job_not_running'
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/workflows/{workflow_id}/jobs/{job_id}/docs/spec:
    parameters:
    - in: path
      name: workflow_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the workflow.
    - in: path
      name: job_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the job.

    get:
      tags:
      - job documentation
      summary: get job openapi documentation
      description: |
        Get job 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`

        Job documentation will be available only while job is running, for more information about jobs see developers documentation.
      operationId: getJobSpec

      parameters:
        - $ref: '#/components/parameters/account_id'
        - $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
        404:
          $ref: '#/components/responses/job_not_found'
        409:
          $ref: '#/components/responses/job_not_running'
        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: "Unsupported media type"
                    desc: "Bad/incomplete input data"
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12024"
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/workflows/{workflow_id}/jobs/{job_id}/proxy:
    parameters:
    - in: path
      name: workflow_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the workflow.
    - in: path
      name: job_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the job.
    - in: path
      name: path_parameters
      schema:
        type: string
        description: additional path parameters
        example: /main
      required: false
      description: any additional path parameter will be used as path parameter to job

    post:
      tags:
      - job proxy
      summary: proxy post request to job
      description: |
        Proxy POST request to job.

        Request and response headers, query parameters and body description 
        [must be provided](#operation/getJobSpec) by job documentation.

        Described headers will be processed and received independently of job behavior.

        > **WARNING**: Job proxy requests will be avaiable only while job is running, 
        for more information about jobs see developers documentation.
      operationId: proxyJobPost
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/header_account_id'
      responses:
        200:
          description: Success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        403:
          $ref: '#/components/responses/license_problem'
        404:
          $ref: '#/components/responses/job_or_page_not_found'
        415:
          $ref: '#/components/responses/method_not_allowed'
        409:
          $ref: '#/components/responses/job_not_running'
        500:
          $ref: '#/components/responses/internal_server_error'

    get:
      tags:
      - job proxy
      summary: proxy get request to job
      description: |
        Proxy GET request to job.

        Request and response headers, query parameters and body description 
        [must be provided](#operation/getJobSpec) by job documentation.

        Described headers will be processed and received independently of job behavior.

        > **WARNING**: Job proxy requests will be avaiable only while job is running, 
        for more information about jobs see developers documentation.
      operationId: proxyJobGet
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: Success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        403:
          $ref: '#/components/responses/license_problem'
        404:
          $ref: '#/components/responses/job_or_page_not_found'
        409:
          $ref: '#/components/responses/job_not_running'
        415:
          $ref: '#/components/responses/method_not_allowed'
        500:
          $ref: '#/components/responses/internal_server_error'

    head:
      tags:
      - job proxy
      summary: proxy head request to job
      description: |
        Proxy HEAD request to job.

        Request and response headers, query parameters and body description 
        [must be provided](#operation/getJobSpec) by job documentation.

        Described headers will be processed and received independently of job behavior.

        > **WARNING**: Job proxy requests will be avaiable only while job is running, 
        for more information about jobs see developers documentation.
      operationId: proxyJobHead
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: Success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        403:
          $ref: '#/components/responses/license_problem'
        404:
          $ref: '#/components/responses/job_or_page_not_found'
        409:
          $ref: '#/components/responses/job_not_running'
        415:
          $ref: '#/components/responses/method_not_allowed'
        500:
          $ref: '#/components/responses/internal_server_error'

    put:
      tags:
      - job proxy
      summary: proxy put request to job
      description: |
        Proxy PUT request to job.

        Request and response headers, query parameters and body description 
        [must be provided](#operation/getJobSpec) by job documentation.

        Described headers will be processed and received independently of job behavior.

        > **WARNING**: Job proxy requests will be avaiable only while job is running, 
        for more information about jobs see developers documentation.
      operationId: proxyJobPut
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/header_account_id'
      responses:
        200:
          description: Success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        403:
          $ref: '#/components/responses/license_problem'
        404:
          $ref: '#/components/responses/job_or_page_not_found'
        409:
          $ref: '#/components/responses/job_not_running'
        415:
          $ref: '#/components/responses/method_not_allowed'
        500:
          $ref: '#/components/responses/internal_server_error'

    patch:
      tags:
      - job proxy
      summary: proxy patch request to job
      description: |
        Proxy PATCH request to job.

        Request and response headers, query parameters and body description 
        [must be provided](#operation/getJobSpec) by job documentation.

        Described headers will be processed and received independently of job behavior.

        > **WARNING**: Job proxy requests will be avaiable only while job is running, 
        for more information about jobs see developers documentation.
      operationId: proxyJobPatch
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: Success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        403:
          $ref: '#/components/responses/license_problem'
        404:
          $ref: '#/components/responses/job_or_page_not_found'
        409:
          $ref: '#/components/responses/job_not_running'
        415:
          $ref: '#/components/responses/method_not_allowed'
        500:
          $ref: '#/components/responses/internal_server_error'

    delete:
      tags:
      - job proxy
      summary: proxy delete request to job
      description: |
        Proxy DELETE request to job.

        Request and response headers, query parameters and body description 
        [must be provided](#operation/getJobSpec) by job documentation.

        Described headers will be processed and received independently of job behavior.

        > **WARNING**: Job proxy requests will be avaiable only while job is running, 
        for more information about jobs see developers documentation.
      operationId: proxyJobDelete
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: Success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        403:
          $ref: '#/components/responses/license_problem'
        404:
          $ref: '#/components/responses/job_or_page_not_found'
        409:
          $ref: '#/components/responses/job_not_running'
        415:
          $ref: '#/components/responses/method_not_allowed'
        500:
          $ref: '#/components/responses/internal_server_error'

    options:
      tags:
      - job proxy
      summary: proxy options request to job
      description: |
        Proxy OPTIONS request to job.

        Request and response headers, query parameters and body description 
        [must be provided](#operation/getJobSpec) by job documentation.

        Described headers will be processed and received independently of job behavior.

        > **WARNING**: Job proxy requests will be avaiable only while job is running, 
        for more information about jobs see developers documentation.
      operationId: proxyJobOptions
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: Success.
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
        404:
          $ref: '#/components/responses/job_or_page_not_found'
        409:
          $ref: '#/components/responses/job_not_running'
        415:
          $ref: '#/components/responses/method_not_allowed'
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/workflows/{workflow_id}/jobs/{job_id}/config:
    parameters:
    - in: path
      name: workflow_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the workflow.
    - in: path
      name: job_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the job.

    get:
      tags:
        - job config
      summary: get job config
      description: |
        Get job user configuration

        > **WARNING**: Job configuration will be avaiable only while job is running, 
        for more information about jobs see developers documentation.
      operationId: getJobConfig
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/account_id'
      responses:
        200:
          description: Export success
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/config_with_version'
        404:
          $ref: '#/components/responses/job_not_found'
        409:
          $ref: '#/components/responses/job_not_running'
        415:
          $ref: '#/components/responses/method_not_allowed'
        422:
          $ref: '#/components/responses/job_not_running'
        500:
          $ref: '#/components/responses/internal_server_error'

    put:
      tags:
        - job config
      summary: update job config
      description: |
        Replace job user configuration

        > **WARNING**: Job configuration interaction will be avaiable only while job is running, 
        for more information about jobs see developers documentation.
      operationId: putJobConfig
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/header_account_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/user_config_request'
        required: true
      responses:
        200:
          description: Export success
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/config_version_response'
        400:
          description: Bad request.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
              examples:
                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"
        404:
          $ref: '#/components/responses/job_not_found'
        409:
          $ref: '#/components/responses/job_not_running'
        415:
          $ref: '#/components/responses/method_not_allowed'
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/workflows/{workflow_id}/jobs/{job_id}/metrics:
    parameters:
    - in: path
      name: workflow_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the workflow.
    - in: path
      name: job_id
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: ID of the job.

    get:
      tags:
        - job metrics
      summary: get job metrics
      description: |
        Get job metrics

        > **WARNING**: Job metrics will be avaiable only while job is running, 
        for more information about jobs see developers documentation.
      operationId: getJobMetrics
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
        - $ref: '#/components/parameters/account_id'
        - $ref: '#/components/parameters/metrics'
        - $ref: '#/components/parameters/resources'
      responses:
        200:
          description: Export success
          headers:
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/metrics'
              example:
                data:
                  resultType: vector
                  result:
                    - metric:
                        __name__: requests_count
                        job_id: 03261244-d9cd-4c06-a9a3-2f6bf77d03be
                        path: 'POST:/main'
                        service: luna-job-unit
                        status_code: '201'
                      value:
                        - 1758279288.092
                        - '1'
                    - metric:
                        __name__: requests_sum
                        job_id: 03261244-d9cd-4c06-a9a3-2f6bf77d03be
                        path: 'POST:/main'
                        service: luna-job-unit
                        status_code: '201'
                      value:
                        - 1758279288.092
                        - '0.0007713570012128912'
        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:
                unknown_multipart_name:
                  value:
                    error_code: 12039
                    desc: Bad/incomplete input data
                    detail: 'Unknown multipart name ''account'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12039"
                duplicate_multipart_name:
                  value:
                    error_code: 12040
                    desc: Bad/incomplete input data
                    detail: 'Duplicate multipart name ''job_name'''
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12040"
                bad_multipart_content_type:
                  value:
                    error_code: 12041
                    desc: Bad/incomplete input data
                    detail: 'Multipart with name ''job_name'' has bad Content-Type'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12041"
                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"
        403:
          $ref: '#/components/responses/forbidden_resource_error'
        404:
          $ref: '#/components/responses/job_not_found'
        415:
          $ref: '#/components/responses/method_not_allowed'
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/workflows/queue:
    get:
      tags:
      - job queue
      summary: get job queue
      description: Get job queue according to filters.
      operationId: getJobQueue
      parameters:
      - $ref: '#/components/parameters/luna_request_id'
      - $ref: '#/components/parameters/account_id'
      - $ref: '#/components/parameters/namespace'
      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/queue'
        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 'namespace'
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012"
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/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
                    desc: 'Bad/incomplete input data'
                    detail: "Unsupported media type"
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12024"
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/docs/dev:
    parameters:
      - $ref: '#/components/parameters/Accept'
    get:
      tags:
        - documents
      summary: Get development manual
      description: |
        Get Sphinx documentation - *Development Manual*. After the request, you will be redirected to the page `/docs/dev/index.html`.
      operationId: getDevManual

      parameters:
        - $ref: '#/components/parameters/luna_request_id'
      responses:
        200:
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/text_html'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            text/html:
              schema:
                type: string
                description: HTML format documentation.
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/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: "Unsupported media type"
                    desc: "Bad/incomplete input data"
                    link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12024"
        500:
          $ref: '#/components/responses/internal_server_error'
  /2/plugins:
    get:
      tags:
        - plugins
      summary: get list of plugins
      description: |
        Get list of service plugins
      operationId: getPlugins
      parameters:
        - $ref: '#/components/parameters/luna_request_id'
      responses:
        200:
          description: OK.
          headers:
            Content-Type:
              $ref: '#/components/headers/application_json'
            Luna-Request-Id:
              $ref: '#/components/headers/luna_request_id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/plugins'
        500:
          $ref: '#/components/responses/internal_server_error'
  /metrics:

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