Opentrons Run Management API

Create and control protocol runs

OpenAPI Specification

opentrons-run-management-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Opentrons HTTP Attached Instruments Run Management API
  description: The Opentrons HTTP API is a RESTful JSON-based interface exposed by Opentrons robots (Flex and OT-2) on the local network at port 31950. It enables developers to upload and manage protocols, create and control runs, issue atomic liquid handling commands, and query robot health and hardware state. The API is defined by an OpenAPI specification available directly from the robot at /openapi.json.
  version: '4'
  contact:
    name: Opentrons Support
    url: https://support.opentrons.com/
    email: support@opentrons.com
  license:
    name: Apache 2.0
    url: https://github.com/Opentrons/opentrons/blob/edge/LICENSE
  x-api-version-header: Opentrons-Version
  x-min-api-version: 2
servers:
- url: http://{robotIP}:31950
  description: Opentrons robot local network server
  variables:
    robotIP:
      default: 192.168.1.100
      description: The IP address of the Opentrons robot on the local network
tags:
- name: Run Management
  description: Create and control protocol runs
paths:
  /runs:
    post:
      tags:
      - Run Management
      summary: Create a run
      description: Create a new protocol run. A run can be created from an existing protocol or as an empty run for ad-hoc commands.
      operationId: createRun
      parameters:
      - $ref: '#/components/parameters/OTVersionHeader'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateRunRequest'
      responses:
        '201':
          description: Run created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RunResponse'
    get:
      tags:
      - Run Management
      summary: Get all runs
      description: Get a list of all runs on the robot.
      operationId: getRuns
      parameters:
      - $ref: '#/components/parameters/OTVersionHeader'
      - name: pageLength
        in: query
        schema:
          type: integer
          default: 20
        description: Maximum number of runs to return
      responses:
        '200':
          description: List of runs
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RunListResponse'
  /runs/{runId}:
    get:
      tags:
      - Run Management
      summary: Get a run
      description: Get the current state of a specific run by its ID.
      operationId: getRun
      parameters:
      - $ref: '#/components/parameters/OTVersionHeader'
      - name: runId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Run details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RunResponse'
        '404':
          description: Run not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    delete:
      tags:
      - Run Management
      summary: Delete a run
      description: Delete a specific run from the robot.
      operationId: deleteRun
      parameters:
      - $ref: '#/components/parameters/OTVersionHeader'
      - name: runId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Run deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RunResponse'
    patch:
      tags:
      - Run Management
      summary: Update a run
      description: Update properties of an existing run, such as setting it as the current run.
      operationId: updateRun
      parameters:
      - $ref: '#/components/parameters/OTVersionHeader'
      - name: runId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateRunRequest'
      responses:
        '200':
          description: Run updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RunResponse'
  /runs/{runId}/actions:
    post:
      tags:
      - Run Management
      summary: Issue a control action to the run
      description: Issue a control action such as play, pause, stop, or resume-from-recovery to a run.
      operationId: createRunAction
      parameters:
      - $ref: '#/components/parameters/OTVersionHeader'
      - name: runId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RunActionRequest'
      responses:
        '201':
          description: Action issued
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RunActionResponse'
  /runs/{runId}/commands:
    post:
      tags:
      - Run Management
      summary: Enqueue a command
      description: Add a command to a run. Commands can be setup, protocol, or fixit commands.
      operationId: createRunCommand
      parameters:
      - $ref: '#/components/parameters/OTVersionHeader'
      - name: runId
        in: path
        required: true
        schema:
          type: string
      - name: waitUntilComplete
        in: query
        schema:
          type: boolean
          default: false
        description: If true, wait for the command to complete before returning
      - name: timeout
        in: query
        schema:
          type: integer
        description: Timeout in milliseconds when waitUntilComplete is true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommandRequest'
      responses:
        '201':
          description: Command enqueued
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommandResponse'
    get:
      tags:
      - Run Management
      summary: Get a list of all protocol commands in the run
      description: Get a paginated list of all commands in the run, including their current status.
      operationId: getRunCommands
      parameters:
      - $ref: '#/components/parameters/OTVersionHeader'
      - name: runId
        in: path
        required: true
        schema:
          type: string
      - name: cursor
        in: query
        schema:
          type: integer
        description: Index to start returning results from
      - name: pageLength
        in: query
        schema:
          type: integer
          default: 20
        description: Number of commands to return
      responses:
        '200':
          description: List of commands
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommandListResponse'
  /runs/{runId}/commands/{commandId}:
    get:
      tags:
      - Run Management
      summary: Get full details about a specific command in the run
      description: Get the complete details of a single command in a run by its ID.
      operationId: getRunCommand
      parameters:
      - $ref: '#/components/parameters/OTVersionHeader'
      - name: runId
        in: path
        required: true
        schema:
          type: string
      - name: commandId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Command details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommandResponse'
components:
  schemas:
    UpdateRunRequest:
      type: object
      properties:
        data:
          type: object
          properties:
            current:
              type: boolean
              description: Set this run as the current active run
    CommandResponse:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/Command'
    RunResponse:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/Run'
        links:
          type: object
    ErrorDetail:
      type: object
      properties:
        id:
          type: string
          description: Machine-readable error type identifier
        title:
          type: string
          description: Human-readable error title
        detail:
          type: string
          description: Human-readable error detail
        errorCode:
          type: string
          description: Opentrons error code
    RunActionRequest:
      type: object
      properties:
        data:
          type: object
          properties:
            actionType:
              type: string
              enum:
              - play
              - pause
              - stop
              - resume-from-recovery
              - resume-from-recovery-assuming-false-positive
              description: The type of control action to issue
          required:
          - actionType
      required:
      - data
    RunAction:
      type: object
      properties:
        id:
          type: string
        createdAt:
          type: string
          format: date-time
        actionType:
          type: string
          enum:
          - play
          - pause
          - stop
          - resume-from-recovery
          - resume-from-recovery-assuming-false-positive
    CreateRunRequest:
      type: object
      properties:
        data:
          type: object
          properties:
            protocolId:
              type: string
              description: The ID of the protocol to run
            labwareOffsets:
              type: array
              items:
                type: object
              description: Labware offsets to apply to this run
            runTimeParameterValues:
              type: object
              additionalProperties: true
              description: Runtime parameter values keyed by variable name
            runTimeParameterFiles:
              type: object
              additionalProperties:
                type: string
              description: CSV file IDs keyed by parameter variable name
    Command:
      type: object
      description: A command that was executed or is queued
      properties:
        id:
          type: string
        createdAt:
          type: string
          format: date-time
        startedAt:
          type: string
          format: date-time
          nullable: true
        completedAt:
          type: string
          format: date-time
          nullable: true
        commandType:
          type: string
        params:
          type: object
          additionalProperties: true
        result:
          type: object
          nullable: true
          additionalProperties: true
        status:
          type: string
          enum:
          - queued
          - running
          - succeeded
          - failed
        error:
          type: object
          nullable: true
        intent:
          type: string
          enum:
          - setup
          - protocol
          - fixit
        key:
          type: string
          nullable: true
    RunListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Run'
        meta:
          $ref: '#/components/schemas/MultiBodyMeta'
        links:
          type: object
    CommandRequest:
      type: object
      description: A command to execute on the robot
      properties:
        data:
          type: object
          properties:
            commandType:
              type: string
              description: The type of command to execute (e.g., 'aspirate', 'dispense', 'pickUpTip')
            params:
              type: object
              description: Command-specific parameters
              additionalProperties: true
            intent:
              type: string
              enum:
              - setup
              - protocol
              - fixit
              description: The intent of the command
            key:
              type: string
              description: Optional key to identify this command for error recovery
          required:
          - commandType
          - params
      required:
      - data
    Run:
      type: object
      description: A protocol run on the robot
      properties:
        id:
          type: string
          description: Unique identifier for the run
        createdAt:
          type: string
          format: date-time
        status:
          type: string
          enum:
          - idle
          - running
          - paused
          - stop-requested
          - stopped
          - failed
          - succeeded
          - finishing
          description: The current status of the run
        current:
          type: boolean
          description: Whether this is the current active run
        actions:
          type: array
          items:
            $ref: '#/components/schemas/RunAction'
        errors:
          type: array
          items:
            type: object
        pipettes:
          type: array
          items:
            type: object
        labware:
          type: array
          items:
            type: object
        modules:
          type: array
          items:
            type: object
        protocolId:
          type: string
          nullable: true
          description: The ID of the protocol associated with this run
        runTimeParameters:
          type: array
          items:
            type: object
      required:
      - id
      - createdAt
      - status
      - current
      - actions
      - errors
      - pipettes
      - labware
      - modules
    ErrorResponse:
      type: object
      description: Error response from the API
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorDetail'
    RunActionResponse:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/RunAction'
    CommandListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Command'
        meta:
          $ref: '#/components/schemas/MultiBodyMeta'
        links:
          type: object
    MultiBodyMeta:
      type: object
      description: Pagination metadata for multi-item responses
      properties:
        cursor:
          type: integer
          description: The index of the first item in this page
        totalLength:
          type: integer
          description: The total number of items available
  parameters:
    OTVersionHeader:
      name: Opentrons-Version
      in: header
      required: true
      description: The HTTP API version to use for this request. Must be 2 or higher. Use '*' to get the latest version.
      schema:
        oneOf:
        - type: string
          enum:
          - '*'
        - type: integer
          minimum: 2
          maximum: 4
      example: '*'