Runloop Devbox API

Create, configure, and operate Devboxes — isolated Linux microVM-backed sandbox environments purpose-built for AI coding agents. The Devbox API covers the full lifecycle (create, suspend, resume, snapshot, shutdown), synchronous and asynchronous command execution, named shell sessions, file I/O, code-repo mounts, agent and storage object mounts, network tunnels with HTTPS URLs, SSH key issuance, and rich observability (executions, metrics, logs). Includes the PTY control-plane for interactive WebSocket shell sessions.

Runloop Devbox API is one of 13 APIs that Runloop publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 2 machine-runnable capabilities that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko and 6 JSON Schema definitions.

Tagged areas include AI, AI Agents, Sandboxes, Devboxes, and Coding Agents. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, a JSON-LD context, sample payloads, 2 Naftiko capability specs, and 6 JSON Schemas.

Documentation

Specifications

Examples

Schemas & Data

Other Resources

OpenAPI Specification

runloop-devbox-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Runloop Devbox API
  version: '0.1'
  description: "Create, manage, and interact with Devboxes \u2014 isolated Linux sandbox environments for AI coding agents.\
    \ Supports lifecycle (create/snapshot/suspend/resume/shutdown), shell execution, file I/O, networking (tunnels, port forwarding),\
    \ PTY sessions, and observability (logs, metrics, executions)."
  contact:
    name: Runloop AI Support
    url: https://runloop.ai
    email: [email protected]
servers:
- url: https://api.runloop.ai
  description: Runloop API
  variables: {}
tags:
- name: Devbox
- name: Devbox-FileTools
- name: Devbox-Lifecycle
- name: Devbox-NetworkTools
- name: Devbox-ObservabilityTools
- name: Devbox-PersistenceTools
- name: Devbox-ShellTools
paths:
  /pty/{session_name}:
    get:
      tags:
      - Devbox
      - Devbox-ShellTools
      summary: Create or reconnect to a PTY session.
      description: 'Looks up the PTY session identified by the path session_name and either reconnects to the existing session
        or creates it if it does not yet exist. The session_name is a client-chosen session identifier, not an opaque server-issued
        ID. It must be non-empty (1..=256 chars) and use only ASCII letters, digits, ''-'' and ''_''. A newly created PTY
        session starts an interactive bash shell on the Devbox. Optional cols and rows query parameters apply an initial terminal
        size before any I/O; they must both be present and in the range 1..=1000 to take effect. The response returns a PtyConnectView
        containing connect_url (a server-relative path to the WebSocket data plane), idle_ttl_seconds (how long this session
        is retained after the last client disconnects), and the resulting cols/rows. The interactive byte stream itself is
        intentionally not modeled in OpenAPI; see the controller-level documentation for the WebSocket close-code conventions.
        The single-attach contract is enforced when a client opens the WebSocket data plane, not on this bootstrap call: bootstrap
        always succeeds for a valid session_name, even if another client is currently attached. Rejection of a second concurrent
        attach happens at WebSocket upgrade time. If the active client disconnects, the session is preserved for the idle
        TTL so a later connect using the same session_name resumes the same shell. After the TTL expires, after an explicit
        close control action, or after the underlying Devbox lifecycle replaces the PTY process (such as through suspend/resume),
        a later request with the same session_name creates a fresh PTY session without the previous shell state.


        Documentation note: this operation is published from mux strictly as an OpenAPI contract stub for the PTY service
        control plane. It is not evidence that mux itself serves the interactive PTY transport.'
      operationId: connectDevboxPtySession
      parameters:
      - name: session_name
        in: path
        description: The client-chosen PTY session name. Must be 1..=256 ASCII letters, digits, '-' and '_'. Reusing the same
          name reconnects to the same logical PTY session when it is still available.
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
      - name: cols
        in: query
        description: Optional initial terminal width in character cells (1..=1000). Defaults to 80 when omitted. Applied only
          if both cols and rows are provided; otherwise ignored.
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: integer
          format: int32
      - name: rows
        in: query
        description: Optional initial terminal height in character cells (1..=1000). Defaults to 24 when omitted. Applied
          only if both cols and rows are provided; otherwise ignored.
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PtyConnectView'
        '400':
          description: Malformed session_name (alphabet or length out of range).
        '503':
          description: PTY session could not be spawned (host resource exhaustion).
      deprecated: false
  /pty/{session_name}/control:
    post:
      tags:
      - Devbox
      - Devbox-ShellTools
      summary: Send a control command to a PTY session.
      description: 'Applies a PTY control operation to an existing session. The action field selects the operation; the other
        fields in PtyControlParameters are interpreted only when they are relevant to the chosen action.


        resize: cols and rows are required and must each be in 1..=1000. A 0 or out-of-range value returns 400. The new winsize
        is applied to the PTY master and the kernel delivers SIGWINCH to the foreground process group.


        signal: signal is the POSIX signal name (for example ''SIGTERM'', ''SIGHUP'', ''SIGINT'', ''SIGUSR1''). Unknown signal
        names return 400. The signal is delivered to the slave''s foreground process group via killpg(2). If the shell has
        already exited and there is no foreground process group, returns 400.


        close: terminates the session. Sends SIGHUP to the foreground process group (best-effort; ignored if the shell has
        already exited) and drops the session from the server''s session cache. A subsequent connect with the same session_name
        will create a fresh PTY session.


        Documentation note: this operation is published from mux strictly as an OpenAPI contract stub for the PTY service
        control plane. It is not evidence that mux itself serves the interactive PTY transport.'
      operationId: controlDevboxPtySession
      parameters:
      - name: session_name
        in: path
        description: The client-chosen PTY session name. Must be 1..=256 ASCII letters, digits, '-' and '_'.
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PtyControlParameters'
        required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PtyControlResultView'
        '400':
          description: 'Invalid action parameters: out-of-range cols/rows on resize, unknown signal name on signal, or no
            foreground process group on signal.'
        '404':
          description: PTY session not found.
      deprecated: false
  /v1/devboxes:
    post:
      tags:
      - Devbox
      - Devbox-Lifecycle
      summary: Create a Devbox.
      description: Create a Devbox and begin the boot process. The Devbox will initially launch in the 'provisioning' state
        while Runloop allocates the necessary infrastructure. It will transition to the 'initializing' state while the booted
        Devbox runs any Runloop or user defined set up scripts. Finally, the Devbox will transition to the 'running' state
        when it is ready for use.
      operationId: createDevbox
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DevboxCreateParameters'
        required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DevboxView'
      deprecated: false
    get:
      tags:
      - Devbox
      summary: List Devboxes.
      description: List all Devboxes while optionally filtering by status.
      operationId: listDevboxes
      parameters:
      - name: status
        in: query
        description: Filter by status
        required: false
        deprecated: false
        allowEmptyValue: true
        schema:
          $ref: '#/components/schemas/DevboxViewStatus'
      - name: limit
        in: query
        description: The limit of items to return. Default is 20. Max is 5000.
        required: false
        deprecated: false
        allowEmptyValue: true
        schema:
          type: integer
          format: int32
      - name: starting_after
        in: query
        description: Load the next page of data starting after the item with the given ID.
        required: false
        deprecated: false
        allowEmptyValue: true
        schema:
          type: string
      - name: include_total_count
        in: query
        description: If true (default), includes total_count in the response. Set to false to skip the count query for better
          performance on large datasets.
        required: false
        deprecated: false
        allowEmptyValue: true
        schema:
          type: boolean
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DevboxListView'
      deprecated: false
  /v1/devboxes/disk_snapshots:
    get:
      tags:
      - Devbox
      - Devbox-PersistenceTools
      summary: List disk snapshots of a Devbox.
      description: List all snapshots of a Devbox while optionally filtering by Devbox ID, source Blueprint ID, and metadata.
      operationId: getDevboxDiskSnapshotList
      parameters:
      - name: devbox_id
        in: query
        description: Devbox ID to filter by.
        required: false
        deprecated: false
        allowEmptyValue: true
        schema:
          type: string
      - name: source_blueprint_id
        in: query
        description: Source Blueprint ID to filter snapshots by.
        required: false
        deprecated: false
        allowEmptyValue: true
        schema:
          type: string
      - name: metadata[key]
        in: query
        description: Filter snapshots by metadata key-value pair. Can be used multiple times for different keys.
        required: false
        deprecated: false
        allowEmptyValue: true
        schema:
          type: string
      - name: metadata[key][in]
        in: query
        description: Filter snapshots by metadata key with multiple possible values (OR condition).
        required: false
        deprecated: false
        allowEmptyValue: true
        schema:
          type: string
      - name: limit
        in: query
        description: The limit of items to return. Default is 20. Max is 5000.
        required: false
        deprecated: false
        allowEmptyValue: true
        schema:
          type: integer
          format: int32
      - name: starting_after
        in: query
        description: Load the next page of data starting after the item with the given ID.
        required: false
        deprecated: false
        allowEmptyValue: true
        schema:
          type: string
      - name: include_total_count
        in: query
        description: If true (default), includes total_count in the response. Set to false to skip the count query for better
          performance on large datasets.
        required: false
        deprecated: false
        allowEmptyValue: true
        schema:
          type: boolean
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DevboxDiskSnapshotListView'
        '404':
          description: Devbox not found.
      deprecated: false
  /v1/devboxes/disk_snapshots/list_public:
    get:
      tags:
      - Devbox
      - Devbox-PersistenceTools
      summary: List public disk snapshots.
      description: List all public disk snapshots that are available to all users.
      operationId: listPublicSnapshots
      parameters:
      - name: devbox_id
        in: query
        description: Devbox ID to filter by.
        required: false
        deprecated: false
        allowEmptyValue: true
        schema:
          type: string
      - name: source_blueprint_id
        in: query
        description: Source Blueprint ID to filter snapshots by.
        required: false
        deprecated: false
        allowEmptyValue: true
        schema:
          type: string
      - name: metadata[key]
        in: query
        description: Filter snapshots by metadata key-value pair. Can be used multiple times for different keys.
        required: false
        deprecated: false
        allowEmptyValue: true
        schema:
          type: string
      - name: metadata[key][in]
        in: query
        description: Filter snapshots by metadata key with multiple possible values (OR condition).
        required: false
        deprecated: false
        allowEmptyValue: true
        schema:
          type: string
      - name: limit
        in: query
        description: The limit of items to return. Default is 20. Max is 5000.
        required: false
        deprecated: false
        allowEmptyValue: true
        schema:
          type: integer
          format: int32
      - name: starting_after
        in: query
        description: Load the next page of data starting after the item with the given ID.
        required: false
        deprecated: false
        allowEmptyValue: true
        schema:
          type: string
      - name: include_total_count
        in: query
        description: If true (default), includes total_count in the response. Set to false to skip the count query for better
          performance on large datasets.
        required: false
        deprecated: false
        allowEmptyValue: true
        schema:
          type: boolean
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DevboxDiskSnapshotListView'
      deprecated: false
  /v1/devboxes/disk_snapshots/metadata/keys:
    get:
      tags:
      - Devbox
      - Devbox-PersistenceTools
      summary: List available snapshot metadata keys.
      description: Returns a list of all available metadata keys that can be used for filtering snapshots.
      operationId: getSnapshotMetadataKeys
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MetadataKeysView'
      deprecated: false
  /v1/devboxes/disk_snapshots/metadata/keys/{key}/values:
    get:
      tags:
      - Devbox
      - Devbox-PersistenceTools
      summary: List values for a specific snapshot metadata key.
      description: Returns a list of all values that exist for a specific metadata key across all snapshots.
      operationId: getSnapshotMetadataValues
      parameters:
      - name: key
        in: path
        description: The metadata key to get values for.
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MetadataValuesView'
        '400':
          description: Invalid metadata key provided.
      deprecated: false
  /v1/devboxes/disk_snapshots/public/metadata/keys:
    get:
      tags:
      - Devbox
      - Devbox-PersistenceTools
      summary: List available public snapshot metadata keys.
      description: Returns a list of all available metadata keys from public snapshots only that can be used for filtering.
      operationId: getPublicSnapshotMetadataKeys
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MetadataKeysView'
      deprecated: false
  /v1/devboxes/disk_snapshots/public/metadata/keys/{key}/values:
    get:
      tags:
      - Devbox
      - Devbox-PersistenceTools
      summary: List values for a specific public snapshot metadata key.
      description: Returns a list of all values that exist for a specific metadata key across all public snapshots only.
      operationId: getPublicSnapshotMetadataValues
      parameters:
      - name: key
        in: path
        description: The metadata key to get values for from public snapshots.
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MetadataValuesView'
        '400':
          description: Invalid metadata key provided.
      deprecated: false
  /v1/devboxes/disk_snapshots/{id}:
    post:
      tags:
      - Devbox
      - Devbox-PersistenceTools
      summary: Update metadata of Disk Snapshot.
      description: Updates disk snapshot metadata via update vs patch. The entire metadata will be replaced.
      operationId: updateDiskSnapshot
      parameters:
      - name: id
        in: path
        description: The Snapshot ID.
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DevboxSnapshotRequest'
        required: false
      responses:
        '200':
          description: Snapshot created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DevboxDiskSnapshotView'
        '404':
          description: Devbox not found.
      deprecated: false
  /v1/devboxes/disk_snapshots/{id}/delete:
    post:
      tags:
      - Devbox
      - Devbox-PersistenceTools
      summary: Delete a disk snapshot of a Devbox.
      description: Delete a previously taken disk snapshot of a Devbox.
      operationId: deleteSnapshot
      parameters:
      - name: id
        in: path
        description: The ID of the snapshot.
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
      responses:
        '200':
          description: Snapshot deleted successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmptyRecord'
        '404':
          description: Snapshot not found.
        '409':
          description: Only successfully created snapshots can be deleted.
      deprecated: false
  /v1/devboxes/disk_snapshots/{id}/status:
    get:
      tags:
      - Devbox
      - Devbox-PersistenceTools
      summary: Query the status of an asynchronous disk snapshot.
      description: Get the current status of an asynchronous disk snapshot operation, including whether it is still in progress
        and any error messages if it failed.
      operationId: queryDiskSnapshotAsync
      parameters:
      - name: id
        in: path
        description: The Snapshot ID.
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
      responses:
        '200':
          description: Snapshot status retrieved successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DevboxSnapshotAsyncStatusView'
        '404':
          description: Snapshot not found.
      deprecated: false
  /v1/devboxes/metadata/keys:
    get:
      tags:
      - Devbox
      summary: List available devbox metadata keys.
      description: Returns a list of all available metadata keys that can be used for filtering devboxes.
      operationId: getDevboxMetadataKeys
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MetadataKeysView'
      deprecated: false
  /v1/devboxes/metadata/keys/{key}/values:
    get:
      tags:
      - Devbox
      summary: List values for a specific devbox metadata key.
      description: Returns a list of all values that exist for a specific metadata key across all devboxes.
      operationId: getDevboxMetadataValues
      parameters:
      - name: key
        in: path
        description: The metadata key to get values for.
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MetadataValuesView'
        '400':
          description: Invalid metadata key provided.
      deprecated: false
  /v1/devboxes/{devbox_id}/executions/{execution_id}:
    get:
      tags:
      - Devbox
      - Devbox-ShellTools
      summary: Get status of an asynchronous execution on a Devbox.
      description: Get the latest status of a previously launched asynchronous execuction including stdout/error and the exit
        code if complete.
      operationId: queryAsyncCommand
      parameters:
      - name: devbox_id
        in: path
        description: The Devbox ID
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
      - name: execution_id
        in: path
        description: The Execution ID
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
      - name: last_n
        in: query
        description: 'Last n lines of standard error / standard out to return (default: 100)'
        required: false
        deprecated: false
        allowEmptyValue: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DevboxAsyncExecutionDetailView'
        '404':
          description: Devbox not found.
      deprecated: false
  /v1/devboxes/{devbox_id}/executions/{execution_id}/kill:
    post:
      tags:
      - Devbox
      - Devbox-ShellTools
      summary: Kill an asynchronous execution currently running on a devbox
      description: Kill a previously launched asynchronous execution if it is still running by killing the launched process.
        Optionally kill the entire process group.
      operationId: killAsyncExecution
      parameters:
      - name: devbox_id
        in: path
        description: The Devbox ID.
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
      - name: execution_id
        in: path
        description: The Async Execution ID.
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DevboxKillExecutionRequest'
        required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DevboxAsyncExecutionDetailView'
        '404':
          description: Devbox or Execution not found.
      deprecated: false
  /v1/devboxes/{devbox_id}/executions/{execution_id}/send_std_in:
    post:
      tags:
      - Devbox
      - Devbox-ShellTools
      summary: Send Content to Std In for a running execution.
      description: Send content to the Std In of a running execution.
      operationId: sendStdIn
      parameters:
      - name: devbox_id
        in: path
        description: The Devbox ID.
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
      - name: execution_id
        in: path
        description: The Async Execution ID.
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DevboxSendStdInRequest'
        required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DevboxSendStdInResult'
        '404':
          description: Devbox or Execution not found.
      deprecated: false
  /v1/devboxes/{devbox_id}/executions/{execution_id}/wait_for_status:
    post:
      tags:
      - Devbox
      - Devbox-ShellTools
      summary: Wait for an asynchronous execution to reach a specific status.
      description: Polls the asynchronous execution's status until it reaches one of the desired statuses or times out. Max
        is 25 seconds.
      operationId: waitForCommandCompletion
      parameters:
      - name: devbox_id
        in: path
        description: The Devbox ID.
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
      - name: execution_id
        in: path
        description: The Async Execution ID.
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
      - name: last_n
        in: query
        description: 'Last n lines of standard error / standard out to return (default: 100)'
        required: false
        deprecated: false
        allowEmptyValue: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DevboxWaitForCommandRequest'
        required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DevboxAsyncExecutionDetailView'
        '400':
          description: Invalid status provided or Devbox not in proper state.
        '404':
          description: Devbox or Execution not found.
        '408':
          description: Timeout waiting for command completion.
      deprecated: false
  /v1/devboxes/{id}:
    post:
      tags:
      - Devbox
      - Devbox-Lifecycle
      summary: Update a Devbox.
      description: Updates a devbox by doing a complete update the existing name,metadata fields. It does not patch partial
        values.
      operationId: updateDevbox
      parameters:
      - name: id
        in: path
        description: The Devbox ID.
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DevboxUpdateParameters'
        required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DevboxView'
      deprecated: false
    get:
      tags:
      - Devbox
      - Devbox-Lifecycle
      summary: Get Devbox details.
      description: Get the latest details and status of a Devbox.
      operationId: getDevbox
      parameters:
      - name: id
        in: path
        description: The Devbox ID.
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DevboxView'
      deprecated: false
  /v1/devboxes/{id}/create_pty_tunnel:
    post:
      tags:
      - Devbox
      - Devbox-NetworkTools
      summary: Create an ephemeral PTY tunnel for a running Devbox.
      description: Create an ephemeral authenticated tunnel for terminal access to a running Devbox. This tunnel is not persisted
        on the Devbox and is generated fresh on each request. The returned auth_token must be passed as a Bearer token in
        the Authorization header.
      operationId: createDevboxPtyTunnel
      parameters:
      - name: id
        in: path
        description: The Devbox ID.
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PtyTunnelView'
        '400':
          description: Devbox is not currently running.
        '404':
          description: Devbox not found.
      deprecated: false
  /v1/devboxes/{id}/create_ssh_key:
    post:
      tags:
      - Devbox
      - Devbox-NetworkTools
      summary: Create an SSH key for a Devbox
      description: Create an SSH key for a Devbox to enable remote access.
      operationId: createDevboxSshKey
      parameters:
      - name: id
        in: path
        description: The Devbox ID.
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DevboxCreateSshKeyView'
        '404':
          description: Devbox not found.
      deprecated: false
  /v1/devboxes/{id}/download_file:
    post:
      tags:
      - Devbox
      - Devbox-FileTools
      summary: Download binary file contents from Devbox filesystem.
      description: Download file contents of any type (binary, text, etc) from a specified path on the Devbox.
      operationId: devboxDownloadFile
      parameters:
      - name: id
        in: path
        description: The Devbox ID.
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DevboxDownloadFileParameters'
        required: false
      responses:
        '200':
          description: OK
          content:
            application/octet-stream:
              schema:
                format: binary
          headers:
            Content-Type:
              description: application/octet-stream
              required: true
              schema:
                type: string
            Content-Disposition:
              description: attachment
              required: true
              schema:
                type: string
        '404':
          description: Devbox not found.
      deprecated: false
  /v1/devboxes/{id}/enable_tunnel:
    post:
      tags:
      - Devbox
      - Devbox-NetworkTools
      summary: Enable a tunnel for a running Devbox.
      description: 'Enable a V2 tunnel for an existing running Devbox. Tunnels provide encrypted URL-based access to the Devbox
        without exposing internal IDs. The tunnel URL format is: https://{port}-{tunnel_key}.tunnel.runloop.ai


        Each Devbox can have one tunnel.'
      operationId: enableDevboxTunnel
      parameters:
      - name: id
        in: path
        description: The Devbox ID.
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TunnelConfig'
        required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TunnelView'
        '400':
          description: Devbox is not running or already has a tunnel configured.
        '404':
          description: Devbox not found.
      deprecated: false
  /v1/devboxes/{id}/execute:
    post:
      tags:
      - Devbox
      - Devbox-ShellTools
      summary: Execute a command with a known ID, optimistically waiting for completion
      description: 'Execute a command with a known command ID on a devbox, o

# --- truncated at 32 KB (99 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/runloop-ai/refs/heads/main/openapi/runloop-devbox-api-openapi.yml