swagger: '2.0'
info:
  title: Gateway API
  description: List of available API endpoint for gateway.
  version: v1
host: qiskit-serverless.quantum.ibm.com
schemes:
- http
basePath: /api/v1
consumes:
- application/json
produces:
- application/json
securityDefinitions:
  Bearer Token:
    type: apiKey
    name: Authorization
    in: header
security:
- Bearer Token: []
paths:
  /dependencies-versions/:
    get:
      operationId: dependencies-versions_list
      description: Get the list of available dependencies and its versions for creating
        functions
      parameters: []
      responses:
        '200':
          description: List of strings
          schema:
            type: array
            items:
              type: string
          examples:
            application/json:
            - qiskit-aer==0.17.1
        '401':
          description: Authentication credentials were not provided or are invalid.
      tags:
      - dependencies-versions
    parameters: []
  /files/:
    get:
      operationId: files_list
      description: List of available files in the user directory
      parameters:
      - name: provider
        in: query
        description: the provider name
        required: false
        type: string
      - name: function
        in: query
        description: the function title
        required: true
        type: string
      responses:
        '200':
          description: List of files
          schema:
            type: array
            items:
              type: string
          examples:
            application/json:
            - file
        '401':
          description: Authentication credentials were not provided or are invalid.
      tags:
      - files
    parameters: []
  /files/delete/:
    delete:
      operationId: files_delete_delete
      description: Deletes file uploaded or produced by the programs
      parameters:
      - name: file
        in: query
        description: File name
        required: true
        type: string
      - name: function
        in: query
        description: Qiskit Function title
        required: true
        type: string
      - name: provider
        in: query
        description: Provider name
        required: false
        type: string
      responses:
        '200':
          description: The ok message
          examples:
            application/json:
              message: Requested file was deleted.
        '404':
          description: File not found.
        '401':
          description: Authentication credentials were not provided or are invalid.
      tags:
      - files
    parameters: []
  /files/download/:
    get:
      operationId: files_download_list
      description: Download a specific file in the user storage
      parameters:
      - name: file
        in: query
        description: File name
        required: true
        type: string
      - name: function
        in: query
        description: Qiskit Function title
        required: true
        type: string
      - name: provider
        in: query
        description: Provider name
        required: false
        type: string
      responses:
        '200':
          description: Requested file
          schema:
            type: file
          contentType: application/octet-stream
        '404':
          description: File not found.
        '401':
          description: Authentication credentials were not provided or are invalid.
      tags:
      - files
    parameters: []
  /files/provider/:
    get:
      operationId: files_provider_list
      description: List of available files in the provider directory
      parameters:
      - name: provider
        in: query
        description: the provider name
        required: true
        type: string
      - name: function
        in: query
        description: the function title
        required: true
        type: string
      responses:
        '200':
          description: List of files
          schema:
            type: array
            items:
              type: string
          examples:
            application/json:
            - file
        '401':
          description: Authentication credentials were not provided or are invalid.
      tags:
      - files
    parameters: []
  /files/provider/delete/:
    delete:
      operationId: files_provider_delete_delete
      description: Deletes file uploaded or produced by the programs in the provider
        directory.
      parameters:
      - name: file
        in: query
        description: File name
        required: true
        type: string
      - name: function
        in: query
        description: Qiskit Function title
        required: true
        type: string
      - name: provider
        in: query
        description: Provider name
        required: true
        type: string
      responses:
        '200':
          description: The ok message
          examples:
            application/json:
              message: Requested file was deleted.
        '404':
          description: File not found.
        '401':
          description: Authentication credentials were not provided or are invalid.
      tags:
      - files
    parameters: []
  /files/provider/download/:
    get:
      operationId: files_provider_download_list
      description: Download a specific file in the provider directory
      parameters:
      - name: file
        in: query
        description: File name
        required: true
        type: string
      - name: function
        in: query
        description: Qiskit Function title
        required: true
        type: string
      - name: provider
        in: query
        description: Provider name
        required: true
        type: string
      responses:
        '200':
          description: Requested file
          schema:
            type: file
          contentType: application/octet-stream
        '404':
          description: File not found.
        '401':
          description: Authentication credentials were not provided or are invalid.
      tags:
      - files
    parameters: []
  /files/provider/upload/:
    post:
      operationId: files_provider_upload_create
      description: Upload selected file into the provider directory
      parameters:
      - name: data
        in: body
        required: true
        schema:
          required:
          - file
          type: object
          properties:
            file:
              description: File to be uploaded
              type: file
      - name: function
        in: query
        description: Qiskit Function title
        required: true
        type: string
      - name: provider
        in: query
        description: Provider name
        required: true
        type: string
      responses:
        '200':
          description: The path to file
          examples:
            application/json:
              message: path/to/file
        '404':
          description: File not found.
        '401':
          description: Authentication credentials were not provided or are invalid.
      tags:
      - files
    parameters: []
  /files/upload/:
    post:
      operationId: files_upload_create
      description: Upload selected file
      parameters:
      - name: data
        in: body
        required: true
        schema:
          required:
          - file
          type: object
          properties:
            file:
              description: File to be uploaded
              type: file
      - name: function
        in: query
        description: Qiskit Function title
        required: true
        type: string
      - name: provider
        in: query
        description: Provider name
        required: false
        type: string
      responses:
        '200':
          description: The path to file
          examples:
            application/json:
              message: path/to/file
        '404':
          description: Function or provider does not exist
        '401':
          description: Authentication credentials were not provided or are invalid.
      tags:
      - files
    parameters: []
  /jobs/:
    get:
      operationId: jobs_list
      description: List author jobs. Supports filtering via query params.
      parameters:
      - name: provider
        in: query
        description: Provider name.
        required: false
        type: string
      - name: function
        in: query
        description: Function title.
        required: false
        type: string
      - name: limit
        in: query
        description: Results per page.
        required: false
        type: integer
        default: 100
      - name: offset
        in: query
        description: Number of results to skip.
        required: false
        type: integer
        default: 0
      - name: filter
        in: query
        description: 'Job type: ''catalog'' or ''serverless''.'
        required: false
        type: string
        enum:
        - catalog
        - serverless
      - name: status
        in: query
        description: Filter by job status.
        required: false
        type: string
      - name: created_after
        in: query
        description: ISO 8601 datetime; only jobs created after this.
        required: false
        type: string
        format: date-time
      responses:
        '200':
          description: ''
          schema:
            type: array
            items:
              $ref: '#/definitions/JobsListWithoutResultInputSerializer'
        '404':
          description: Resource not found.
          schema:
            required:
            - message
            type: object
            properties:
              message:
                type: string
                example: Qiskit Function XXX doesn't exist.
      tags:
      - jobs
    parameters: []
  /jobs/provider/:
    get:
      operationId: jobs_provider_list
      description: List provider jobs. Use filters via query params.
      parameters:
      - name: provider
        in: query
        description: Provider name (required).
        required: true
        type: string
      - name: function
        in: query
        description: Function title.
        required: false
        type: string
      - name: limit
        in: query
        description: Results per page.
        required: false
        type: integer
        default: 100
      - name: offset
        in: query
        description: Number of results to skip.
        required: false
        type: integer
        default: 0
      - name: filter
        in: query
        description: 'Filter by job type: ''catalog'' or ''serverless''.'
        required: false
        type: string
        enum:
        - catalog
        - serverless
      - name: status
        in: query
        description: Filter by job status.
        required: false
        type: string
      - name: created_after
        in: query
        description: ISO 8601 datetime; only jobs created after this.
        required: false
        type: string
      responses:
        '200':
          description: ''
          schema:
            type: array
            items:
              $ref: '#/definitions/JobsProviderListWithoutResultInputSerializer'
        '404':
          description: Resource not found.
          schema:
            required:
            - message
            type: object
            properties:
              message:
                type: string
                example: Provider XXX doesn't exist.
      tags:
      - jobs
    parameters: []
  /jobs/{job_id}/:
    get:
      operationId: jobs_read
      description: |-
        Retrieve a specific job by ID.

        Use the `with_result` query parameter to include or exclude the job `result` field. Defaults to `true`.
      parameters:
      - name: with_result
        in: query
        description: Whether to include the `result` field in the response.
        required: false
        type: string
        enum:
        - 'true'
        - 'false'
        default: 'true'
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/JobsRetrieveJobSerializer'
        '404':
          description: Resource not found.
          schema:
            required:
            - message
            type: object
            properties:
              message:
                type: string
                example: Job [XXXX] not found
      tags:
      - jobs
    parameters:
    - name: job_id
      in: path
      required: true
      type: string
  /jobs/{job_id}/logs/:
    get:
      operationId: jobs_logs_list
      description: Retrieve logs for a given job.
      parameters: []
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/JobLogsOutput'
        '404':
          description: Resource not found.
          schema:
            required:
            - message
            type: object
            properties:
              message:
                type: string
                example: Job [XXXX] not found
      tags:
      - jobs
    parameters:
    - name: job_id
      in: path
      required: true
      type: string
  /jobs/{job_id}/provider-logs/:
    get:
      operationId: jobs_provider-logs_list
      description: Retrieve logs for a given job as provider.
      parameters: []
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/JobProviderLogsOutput'
        '404':
          description: Resource not found.
          schema:
            required:
            - message
            type: object
            properties:
              message:
                type: string
                example: Job [XXXX] not found
      tags:
      - jobs
    parameters:
    - name: job_id
      in: path
      required: true
      type: string
  /jobs/{job_id}/result/:
    post:
      operationId: jobs_result_create
      description: Save the result for a job.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/JobsSaveResultInputSerializer'
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/JobsSaveResultJobSerializer'
        '404':
          description: Resource not found.
          schema:
            required:
            - message
            type: object
            properties:
              message:
                type: string
                example: Job [XXXX] not found
      tags:
      - jobs
    parameters:
    - name: job_id
      in: path
      required: true
      type: string
  /jobs/{job_id}/runtime_jobs/:
    get:
      operationId: jobs_runtime_jobs_list
      description: Retrieve runtime jobs associated with a job.
      parameters: []
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/RuntimeJob'
        '401':
          description: Authentication required.
          schema:
            required:
            - message
            type: object
            properties:
              message:
                type: string
                example: Authentication credentials were not provided or are invalid.
        '404':
          description: Resource not found.
          schema:
            required:
            - message
            type: object
            properties:
              message:
                type: string
                example: Job [XXXX] not found
      tags:
      - jobs
    post:
      operationId: jobs_runtime_jobs_create
      description: Associate a runtime job with a job.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/RuntimeJobsInputSerializer'
      responses:
        '200':
          description: ''
          schema:
            type: object
            properties: {}
        '400':
          description: Invalid input.
          schema:
            required:
            - message
            type: object
            properties:
              message:
                type: string
                example: Got empty `runtime_job` field. Please, specify `runtime_job`.
        '401':
          description: Authentication required.
          schema:
            required:
            - message
            type: object
            properties:
              message:
                type: string
                example: Authentication credentials were not provided or are invalid.
        '404':
          description: Resource not found.
          schema:
            required:
            - message
            type: object
            properties:
              message:
                type: string
                example: Job [XXXX] not found
      tags:
      - jobs
    parameters:
    - name: job_id
      in: path
      required: true
      type: string
  /jobs/{job_id}/stop/:
    post:
      operationId: jobs_stop_create
      description: Stop a job.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/JobsStopInputSerializer'
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/StopJobOutput'
        '400':
          description: Invalid input.
          schema:
            required:
            - message
            type: object
            properties:
              message:
                type: string
                example: '''service'' not provided or is not valid'
        '404':
          description: Resource not found.
          schema:
            required:
            - message
            type: object
            properties:
              message:
                type: string
                example: Job [XXXX] not found
      tags:
      - jobs
    parameters:
    - name: job_id
      in: path
      required: true
      type: string
  /jobs/{job_id}/sub_status/:
    patch:
      operationId: jobs_sub_status_partial_update
      description: Update the sub status of a job
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/JobsSetSubStatusInputSerializer'
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/JobSerializerWithoutResult'
        '400':
          description: Invalid input.
          schema:
            required:
            - message
            type: object
            properties:
              message:
                type: string
                example: '''sub_status'' not provided or is not valid'
        '401':
          description: Authentication required.
          schema:
            required:
            - message
            type: object
            properties:
              message:
                type: string
                example: Authentication credentials were not provided or are invalid.
        '403':
          description: Not allowed to perform this action.
          schema:
            required:
            - message
            type: object
            properties:
              message:
                type: string
                example: Cannot update 'sub_status' when job is not RUNNING.
        '404':
          description: Resource not found.
          schema:
            required:
            - message
            type: object
            properties:
              message:
                type: string
                example: Job [XXXX] not found
      tags:
      - jobs
    parameters:
    - name: job_id
      in: path
      required: true
      type: string
  /programs/:
    get:
      operationId: programs_list
      description: List author Qiskit Functions
      parameters:
      - name: filter
        in: query
        description: 'Filters that you can apply for list: serverless, catalog or
          empty'
        required: false
        type: string
      responses:
        '200':
          description: ''
          schema:
            type: array
            items:
              $ref: '#/definitions/Program'
      tags:
      - programs
    parameters: []
  /programs/get_by_title/{title}/:
    get:
      operationId: programs_get_by_title
      description: Retrieve a Qiskit Function using the title
      parameters:
      - name: title
        in: path
        description: The title of the function
        type: string
        required: true
      - name: provider
        in: query
        description: The provider in case the function is owned by a provider
        required: false
        type: string
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/Program'
      tags:
      - programs
    parameters:
    - name: title
      in: path
      required: true
      type: string
  /programs/run/:
    post:
      operationId: programs_run
      description: Run an existing Qiskit Function
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/RunProgram'
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/RunJob'
      tags:
      - programs
    parameters: []
  /programs/upload/:
    post:
      operationId: programs_upload
      description: Upload a Qiskit Function
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/UploadProgram'
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/UploadProgram'
      tags:
      - programs
    parameters: []
  /programs/{id}/get_jobs/:
    get:
      operationId: programs_get_jobs
      description: Returns jobs of the program.
      parameters: []
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/Program'
      tags:
      - programs
    parameters:
    - name: id
      in: path
      required: true
      type: string
definitions:
  JobsListProgramSummaryInputSerializer:
    required:
    - title
    type: object
    properties:
      id:
        title: Id
        type: string
        format: uuid
        readOnly: true
      title:
        title: Title
        type: string
        maxLength: 255
        minLength: 1
      provider:
        title: Provider
        type: string
        format: uuid
        x-nullable: true
  JobsListWithoutResultInputSerializer:
    required:
    - program
    type: object
    properties:
      id:
        title: Id
        type: string
        format: uuid
        readOnly: true
      status:
        title: Status
        type: string
        enum:
        - PENDING
        - RUNNING
        - STOPPED
        - SUCCEEDED
        - QUEUED
        - FAILED
      program:
        $ref: '#/definitions/JobsListProgramSummaryInputSerializer'
      created:
        title: Created
        type: string
        format: date-time
        readOnly: true
      sub_status:
        title: Sub status
        type: string
        enum:
        - MAPPING
        - OPTIMIZING_HARDWARE
        - WAITING_QPU
        - EXECUTING_QPU
        - POST_PROCESSING
        x-nullable: true
  JobsProviderListProgramSummaryInputSerializer:
    required:
    - title
    type: object
    properties:
      id:
        title: Id
        type: string
        format: uuid
        readOnly: true
      title:
        title: Title
        type: string
        maxLength: 255
        minLength: 1
      provider:
        title: Provider
        type: string
        format: uuid
        x-nullable: true
  JobsProviderListWithoutResultInputSerializer:
    required:
    - program
    type: object
    properties:
      id:
        title: Id
        type: string
        format: uuid
        readOnly: true
      status:
        title: Status
        type: string
        enum:
        - PENDING
        - RUNNING
        - STOPPED
        - SUCCEEDED
        - QUEUED
        - FAILED
      program:
        $ref: '#/definitions/JobsProviderListProgramSummaryInputSerializer'
      created:
        title: Created
        type: string
        format: date-time
        readOnly: true
      sub_status:
        title: Sub status
        type: string
        enum:
        - MAPPING
        - OPTIMIZING_HARDWARE
        - WAITING_QPU
        - EXECUTING_QPU
        - POST_PROCESSING
        x-nullable: true
  JobsRetrieveProgramSerializer:
    required:
    - title
    type: object
    properties:
      id:
        title: Id
        type: string
        format: uuid
        readOnly: true
      title:
        title: Title
        type: string
        maxLength: 255
        minLength: 1
      entrypoint:
        title: Entrypoint
        type: string
        maxLength: 255
        minLength: 1
      artifact:
        title: Artifact
        type: string
        readOnly: true
        x-nullable: true
        format: uri
      dependencies:
        title: Dependencies
        type: string
      provider:
        title: Provider
        type: string
        readOnly: true
        minLength: 1
      description:
        title: Description
        type: string
        x-nullable: true
      documentation_url:
        title: Documentation url
        type: string
        x-nullable: true
      type:
        title: Type
        type: string
        enum:
        - GENERIC
        - APPLICATION
        - CIRCUIT
  JobsRetrieveJobSerializer:
    required:
    - program
    type: object
    properties:
      id:
        title: Id
        type: string
        format: uuid
        readOnly: true
      result:
        title: Result
        type: string
        x-nullable: true
      status:
        title: Status
        type: string
        enum:
        - PENDING
        - RUNNING
        - STOPPED
        - SUCCEEDED
        - QUEUED
        - FAILED
      program:
        $ref: '#/definitions/JobsRetrieveProgramSerializer'
      created:
        title: Created
        type: string
        format: date-time
        readOnly: true
      sub_status:
        title: Sub status
        type: string
        enum:
        - MAPPING
        - OPTIMIZING_HARDWARE
        - WAITING_QPU
        - EXECUTING_QPU
        - POST_PROCESSING
        x-nullable: true
  JobLogsOutput:
    required:
    - logs
    type: object
    properties:
      logs:
        title: Logs
        type: string
        minLength: 1
  JobProviderLogsOutput:
    required:
    - logs
    type: object
    properties:
      logs:
        title: Logs
        type: string
        minLength: 1
  JobsSaveResultInputSerializer:
    required:
    - result
    type: object
    properties:
      result:
        title: Result
        type: string
        minLength: 1
  JobsSaveResultProgramSerializer:
    required:
    - title
    type: object
    properties:
      id:
        title: Id
        type: string
        format: uuid
        readOnly: true
      title:
        title: Title
        type: string
        maxLength: 255
        minLength: 1
      entrypoint:
        title: Entrypoint
        type: string
        maxLength: 255
        minLength: 1
      artifact:
        title: Artifact
        type: string
        readOnly: true
        x-nullable: true
        format: uri
      dependencies:
        title: Dependencies
        type: string
      provider:
        title: Provider
        type: string
        readOnly: true
        minLength: 1
      description:
        title: Description
        type: string
        x-nullable: true
      documentation_url:
        title: Documentation url
        type: string
        x-nullable: true
      type:
        title: Type
        type: string
        enum:
        - GENERIC
        - APPLICATION
        - CIRCUIT
  JobsSaveResultJobSerializer:
    required:
    - program
    type: object
    properties:
      id:
        title: Id
        type: string
        format: uuid
        readOnly: true
      result:
        title: Result
        type: string
        x-nullable: true
      status:
        title: Status
        type: string
        enum:
        - PENDING
        - RUNNING
        - STOPPED
        - SUCCEEDED
        - QUEUED
        - FAILED
      program:
        $ref: '#/definitions/JobsSaveResultProgramSerializer'
      created:
        title: Created
        type: string
        format: date-time
        readOnly: true
      sub_status:
        title: Sub status
        type: string
        enum:
        - MAPPING
        - OPTIMIZING_HARDWARE
        - WAITING_QPU
        - EXECUTING_QPU
        - POST_PROCESSING
        x-nullable: true
  RuntimeJob:
    required:
    - runtime_job
    type: object
    properties:
      runtime_job:
        title: Runtime job
        type: string
        maxLength: 100
        minLength: 1
      runtime_session:
        title: Runtime session
        type: string
        maxLength: 100
        x-nullable: true
  RuntimeJobsInputSerializer:
    required:
    - runtime_job
    type: object
    properties:
      runtime_job:
        title: Runtime job
        type: string
        minLength: 1
      runtime_session:
        title: Runtime session
        type: string
        x-nullable: true
  JobsStopInputSerializer:
    type: object
    properties:
      service:
        title: Service
        type: string
        minLength: 1
  StopJobOutput:
    required:
    - message
    type: object
    properties:
      message:
        title: Message
        type: string
        minLength: 1
  JobsSetSubStatusInputSerializer:
    required:
    - sub_status
    type: object
    properties:
      sub_status:
        title: Sub status
        type: string
        enum:
        - MAPPING
        - OPTIMIZING_HARDWARE
        - WAITING_QPU
        - EXECUTING_QPU
        - POST_PROCESSING
  ProgramSummary:
    required:
    - title
    type: object
    properties:
      id:
        title: Id
        type: string
        format: uuid
        readOnly: true
      title:
        title: Title
        type: string
        maxLength: 255
        minLength: 1
      provider:
        title: Provider
        type: string
        readOnly: true
        minLength: 1
  JobSerializerWithoutResult:
    required:
    - program
    type: object
    properties:
      id:
        title: Id
        type: string
        format: uuid
        readOnly: true
      status:
        title: Status
        type: string
        enum:
        - PENDING
        - RUNNING
        - STOPPED
        - SUCCEEDED
        - QUEUED
        - FAILED
      program:
        $ref: '#/definitions/ProgramSummary'
      created:
        title: Created
        type: string
        format: date-time
        readOnly: true
      sub_status:
        title: Sub status
        type: string
        enum:
        - MAPPING
        - OPTIMIZING_HARDWARE
        - WAITING_QPU
        - EXECUTING_QPU
        - POST_PROCESSING
        x-nullable: true
  Program:
    required:
    - title
    type: object
    properties:
      id:
        title: Id
        type: string
        format: uuid
        readOnly: true
      title:
        title: Title
        type: string
        maxLength: 255
        minLength: 1
      entrypoint:
        title: Entrypoint
        type: string
        maxLength: 255
        minLength: 1
      artifact:
        title: Artifact
        type: string
        readOnly: true
        x-nullable: true
        format: uri
      dependencies:
        title: Dependencies
        type: string
      provider:
        title: Provider
        type: string
        readOnly: true
        minLength: 1
      description:
        title: Description
        type: string
        x-nullable: true
      documentation_url:
        title: Documentation url
        type: string
        x-nullable: true
      type:
        title: Type
        type: string
        enum:
        - GENERIC
        - APPLICATION
        - CIRCUIT
      version:
        title: Version
        type: string
        x-nullable: true
  RunProgram:
    required:
    - title
    - arguments
    - config
    type: object
    properties:
      title:
        title: Title
        type: string
        maxLength: 255
        minLength: 1
      arguments:
        title: Arguments
        type: string
        minLength: 1
      config:
        title: Config
        type: object
      provider:
        title: Provider
        type: string
        minLength: 1
        x-nullable: true
  RunJob:
    type: object
    properties:
      id:
        title: Id
        type: string
        format: uuid
        readOnly: true
      result:
        title: Result
        type: string
        x-nullable: true
      status:
        title: Status
        type: string
        enum:
        - PENDING
        - RUNNING
        - STOPPED
        - SUCCEEDED
        - QUEUED
        - FAILED
      program:
        title: Program
        type: string
        format: uuid
        x-nullable: true
      created:
        title: Created
        type: string
        format: date-time
        readOnly: true
      arguments:
        title: Arguments
        type: string
  UploadProgram:
    required:
    - title
    type: object
    properties:
      title:
        title: Title
        type: string
        maxLength: 255
        minLength: 1
      entrypoint:
        title: Entrypoint
        type: string
        minLength: 1
      artifact:
        title: Artifact
        type: string
        readOnly: true
        x-nullable: true
        format: uri
      dependencies:
        title: Dependencies
        type: string
      env_vars:
        title: Env vars
        type: string
      image:
        title: Image
        type: string
        minLength: 1
      provider:
        title: Provider
        type: string
        minLength: 1
      description:
        title: Description
        type: string
        x-nullable: true
      type:
        title: Type
        type: string
        enum:
        - GENERIC
        - APPLICATION
        - CIRCUIT
      version:
        title: Version
        type: string
        x-nullable: true
