Opentrons Simple Commands API

Stateless atomic liquid handling commands

OpenAPI Specification

opentrons-simple-commands-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Opentrons HTTP Attached Instruments Simple Commands 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: Simple Commands
  description: Stateless atomic liquid handling commands
paths:
  /commands:
    post:
      tags:
      - Simple Commands
      summary: Add a command to be executed
      description: Execute an atomic liquid handling command directly on the robot without needing a run. These stateless commands are executed immediately.
      operationId: createCommand
      parameters:
      - $ref: '#/components/parameters/OTVersionHeader'
      - name: waitUntilComplete
        in: query
        schema:
          type: boolean
          default: false
      - name: timeout
        in: query
        schema:
          type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommandRequest'
      responses:
        '201':
          description: Command created and queued
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommandResponse'
    get:
      tags:
      - Simple Commands
      summary: Get a list of queued and executed commands
      description: Get a list of stateless commands that have been issued to the robot.
      operationId: getCommands
      parameters:
      - $ref: '#/components/parameters/OTVersionHeader'
      - name: cursor
        in: query
        schema:
          type: integer
      - name: pageLength
        in: query
        schema:
          type: integer
          default: 20
      responses:
        '200':
          description: List of commands
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommandListResponse'
  /commands/{commandId}:
    get:
      tags:
      - Simple Commands
      summary: Get a single stateless command
      description: Get the details of a specific stateless command by its ID.
      operationId: getCommand
      parameters:
      - $ref: '#/components/parameters/OTVersionHeader'
      - name: commandId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Command details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommandResponse'
components:
  schemas:
    CommandResponse:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/Command'
    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
    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
    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: '*'