Scrapybara Code Execution API

Run bash commands and execute arbitrary code against a named kernel on an instance, capturing stdout, stderr, and results for agent workflows and data processing.

OpenAPI Specification

scrapybara-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Scrapybara API
  description: >-
    Scrapybara provides virtual desktops for AI agents. This representative
    OpenAPI describes the public REST surface for starting and managing
    cloud instances (ubuntu / browser / windows), running computer actions,
    driving a Chromium browser over Playwright CDP, executing bash and code,
    managing the filesystem and Jupyter notebooks, saving browser auth
    states, and setting instance environment variables. All requests
    authenticate with the `x-api-key` header.
  termsOfService: https://scrapybara.com/terms
  contact:
    name: Scrapybara Support
    url: https://scrapybara.com
    email: hello@scrapybara.com
  version: '1.0'
servers:
  - url: https://api.scrapybara.com/v1
    description: Scrapybara production API
security:
  - ApiKeyAuth: []
tags:
  - name: Instances
  - name: Computer Actions
  - name: Browser
  - name: Code Execution
  - name: Filesystem
  - name: Notebook
  - name: Auth States
  - name: Environment
paths:
  /start:
    post:
      operationId: startInstance
      tags:
        - Instances
      summary: Start instance
      description: Start a new cloud instance of type ubuntu, browser, or windows.
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StartInstanceRequest'
      responses:
        '200':
          description: Instance started
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstanceResponse'
  /instances:
    get:
      operationId: getInstances
      tags:
        - Instances
      summary: List all instances
      responses:
        '200':
          description: List of instances
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/InstanceResponse'
  /instances/{instance_id}:
    get:
      operationId: getInstance
      tags:
        - Instances
      summary: Get instance by ID
      parameters:
        - $ref: '#/components/parameters/InstanceId'
      responses:
        '200':
          description: Instance details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstanceResponse'
  /instances/{instance_id}/stop:
    post:
      operationId: stopInstance
      tags:
        - Instances
      summary: Stop instance
      description: Terminate the instance and release its resources.
      parameters:
        - $ref: '#/components/parameters/InstanceId'
      responses:
        '200':
          description: Instance stopped
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
  /instances/{instance_id}/pause:
    post:
      operationId: pauseInstance
      tags:
        - Instances
      summary: Pause instance
      description: Pause the instance, preserving its state for a later resume.
      parameters:
        - $ref: '#/components/parameters/InstanceId'
      responses:
        '200':
          description: Instance paused
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
  /instances/{instance_id}/resume:
    post:
      operationId: resumeInstance
      tags:
        - Instances
      summary: Resume instance
      description: Resume a previously paused instance.
      parameters:
        - $ref: '#/components/parameters/InstanceId'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                timeout_hours:
                  type: number
                  minimum: 0.01
                  maximum: 24
      responses:
        '200':
          description: Instance resumed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstanceResponse'
  /instances/{instance_id}/screenshot:
    get:
      operationId: takeScreenshot
      tags:
        - Computer Actions
      summary: Take screenshot
      description: Capture a base64-encoded screenshot of the instance desktop.
      parameters:
        - $ref: '#/components/parameters/InstanceId'
      responses:
        '200':
          description: Screenshot captured
          content:
            application/json:
              schema:
                type: object
                properties:
                  base_64_image:
                    type: string
  /instances/{instance_id}/stream-url:
    get:
      operationId: getStreamUrl
      tags:
        - Computer Actions
      summary: Get stream URL
      description: Get the interactive streaming URL for the instance desktop.
      parameters:
        - $ref: '#/components/parameters/InstanceId'
      responses:
        '200':
          description: Stream URL
          content:
            application/json:
              schema:
                type: object
                properties:
                  stream_url:
                    type: string
                    format: uri
  /instances/{instance_id}/computer:
    post:
      operationId: runComputerAction
      tags:
        - Computer Actions
      summary: Run computer actions
      description: >-
        Run a computer action such as move_mouse, click_mouse, drag_mouse,
        scroll, press_key, type_text, wait, take_screenshot, get_cursor_position.
      parameters:
        - $ref: '#/components/parameters/InstanceId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ComputerActionRequest'
      responses:
        '200':
          description: Action result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ComputerActionResponse'
  /instances/{instance_id}/bash:
    post:
      operationId: runBash
      tags:
        - Code Execution
      summary: Run bash actions
      description: Execute a bash command on the instance.
      parameters:
        - $ref: '#/components/parameters/InstanceId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                command:
                  type: string
                restart:
                  type: boolean
      responses:
        '200':
          description: Command output
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommandResponse'
  /instances/{instance_id}/edit:
    post:
      operationId: runEdit
      tags:
        - Filesystem
      summary: Run edit actions
      description: >-
        Run a text-editor file action (view, create, str_replace, insert,
        undo_edit) against a path on the instance.
      parameters:
        - $ref: '#/components/parameters/InstanceId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                command:
                  type: string
                path:
                  type: string
                file_text:
                  type: string
                old_str:
                  type: string
                new_str:
                  type: string
      responses:
        '200':
          description: Edit result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommandResponse'
  /instances/{instance_id}/file:
    post:
      operationId: runFile
      tags:
        - Filesystem
      summary: Run file actions
      description: >-
        Run a filesystem action (read, write, list, exists, delete) against a
        path on the instance.
      parameters:
        - $ref: '#/components/parameters/InstanceId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                command:
                  type: string
                path:
                  type: string
                content:
                  type: string
      responses:
        '200':
          description: File action result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommandResponse'
  /instances/{instance_id}/upload:
    post:
      operationId: uploadFile
      tags:
        - Filesystem
      summary: Upload file
      description: Upload a binary file to a path on the instance filesystem.
      parameters:
        - $ref: '#/components/parameters/InstanceId'
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                path:
                  type: string
      responses:
        '200':
          description: Upload result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
  /instances/{instance_id}/browser/start:
    post:
      operationId: startBrowser
      tags:
        - Browser
      summary: Start browser
      description: Start a Chromium browser on the instance.
      parameters:
        - $ref: '#/components/parameters/InstanceId'
      responses:
        '200':
          description: Browser started
          content:
            application/json:
              schema:
                type: object
                properties:
                  cdp_url:
                    type: string
                    format: uri
  /instances/{instance_id}/browser/stop:
    post:
      operationId: stopBrowser
      tags:
        - Browser
      summary: Stop browser
      parameters:
        - $ref: '#/components/parameters/InstanceId'
      responses:
        '200':
          description: Browser stopped
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
  /instances/{instance_id}/browser/cdp-url:
    get:
      operationId: getCdpUrl
      tags:
        - Browser
      summary: Get CDP URL
      description: Get the Playwright Chrome DevTools Protocol URL for the browser.
      parameters:
        - $ref: '#/components/parameters/InstanceId'
      responses:
        '200':
          description: CDP URL
          content:
            application/json:
              schema:
                type: object
                properties:
                  cdp_url:
                    type: string
                    format: uri
  /instances/{instance_id}/browser/current-url:
    get:
      operationId: getCurrentUrl
      tags:
        - Browser
      summary: Get current URL
      parameters:
        - $ref: '#/components/parameters/InstanceId'
      responses:
        '200':
          description: Current URL
          content:
            application/json:
              schema:
                type: object
                properties:
                  current_url:
                    type: string
                    format: uri
  /instances/{instance_id}/browser/save-auth:
    post:
      operationId: saveAuth
      tags:
        - Auth States
      summary: Save auth state
      description: Save the current browser session as a reusable auth state.
      parameters:
        - $ref: '#/components/parameters/InstanceId'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
      responses:
        '200':
          description: Auth state saved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthStateResponse'
  /instances/{instance_id}/browser/authenticate:
    post:
      operationId: authenticateBrowser
      tags:
        - Auth States
      summary: Authenticate with saved state
      description: Load a previously saved auth state into the browser session.
      parameters:
        - $ref: '#/components/parameters/InstanceId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                auth_state_id:
                  type: string
      responses:
        '200':
          description: Authenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
  /instances/{instance_id}/auth-states/{auth_state_id}:
    post:
      operationId: modifyAuth
      tags:
        - Auth States
      summary: Modify auth state
      parameters:
        - $ref: '#/components/parameters/InstanceId'
        - name: auth_state_id
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
      responses:
        '200':
          description: Auth state modified
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthStateResponse'
  /auth-states:
    get:
      operationId: getAuthStates
      tags:
        - Auth States
      summary: List auth states
      responses:
        '200':
          description: List of auth states
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AuthStateResponse'
  /instances/{instance_id}/code/execute:
    post:
      operationId: executeCode
      tags:
        - Code Execution
      summary: Execute code
      description: Execute code against a named kernel on the instance.
      parameters:
        - $ref: '#/components/parameters/InstanceId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                code:
                  type: string
                kernel_name:
                  type: string
                timeout:
                  type: integer
      responses:
        '200':
          description: Execution result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommandResponse'
  /instances/{instance_id}/notebooks/kernels:
    get:
      operationId: listKernels
      tags:
        - Notebook
      summary: List kernels
      parameters:
        - $ref: '#/components/parameters/InstanceId'
      responses:
        '200':
          description: List of kernels
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
  /instances/{instance_id}/notebooks:
    post:
      operationId: createNotebook
      tags:
        - Notebook
      summary: Create notebook
      parameters:
        - $ref: '#/components/parameters/InstanceId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                kernel_name:
                  type: string
      responses:
        '200':
          description: Notebook created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotebookResponse'
  /instances/{instance_id}/notebooks/{notebook_id}:
    get:
      operationId: getNotebook
      tags:
        - Notebook
      summary: Get notebook
      parameters:
        - $ref: '#/components/parameters/InstanceId'
        - $ref: '#/components/parameters/NotebookId'
      responses:
        '200':
          description: Notebook details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotebookResponse'
    delete:
      operationId: deleteNotebook
      tags:
        - Notebook
      summary: Delete notebook
      parameters:
        - $ref: '#/components/parameters/InstanceId'
        - $ref: '#/components/parameters/NotebookId'
      responses:
        '200':
          description: Notebook deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
  /instances/{instance_id}/notebooks/{notebook_id}/cells:
    post:
      operationId: addCell
      tags:
        - Notebook
      summary: Add cell
      parameters:
        - $ref: '#/components/parameters/InstanceId'
        - $ref: '#/components/parameters/NotebookId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                type:
                  type: string
                  enum: [code, markdown]
                content:
                  type: string
      responses:
        '200':
          description: Cell added
          content:
            application/json:
              schema:
                type: object
  /instances/{instance_id}/notebooks/{notebook_id}/cells/{cell_id}/execute:
    post:
      operationId: executeCell
      tags:
        - Notebook
      summary: Execute cell
      parameters:
        - $ref: '#/components/parameters/InstanceId'
        - $ref: '#/components/parameters/NotebookId'
        - name: cell_id
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Cell execution result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommandResponse'
  /instances/{instance_id}/notebooks/{notebook_id}/execute:
    post:
      operationId: executeNotebook
      tags:
        - Notebook
      summary: Execute all cells
      parameters:
        - $ref: '#/components/parameters/InstanceId'
        - $ref: '#/components/parameters/NotebookId'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                timeout:
                  type: integer
      responses:
        '200':
          description: Notebook execution result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotebookResponse'
  /instances/{instance_id}/env:
    get:
      operationId: getEnv
      tags:
        - Environment
      summary: Get environment variables
      parameters:
        - $ref: '#/components/parameters/InstanceId'
      responses:
        '200':
          description: Environment variables
          content:
            application/json:
              schema:
                type: object
                properties:
                  variables:
                    type: object
                    additionalProperties:
                      type: string
    post:
      operationId: setEnv
      tags:
        - Environment
      summary: Set environment variables
      parameters:
        - $ref: '#/components/parameters/InstanceId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                variables:
                  type: object
                  additionalProperties:
                    type: string
      responses:
        '200':
          description: Variables set
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
    delete:
      operationId: deleteEnv
      tags:
        - Environment
      summary: Delete environment variables
      parameters:
        - $ref: '#/components/parameters/InstanceId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                keys:
                  type: array
                  items:
                    type: string
      responses:
        '200':
          description: Variables deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
  parameters:
    InstanceId:
      name: instance_id
      in: path
      required: true
      schema:
        type: string
    NotebookId:
      name: notebook_id
      in: path
      required: true
      schema:
        type: string
  schemas:
    StartInstanceRequest:
      type: object
      properties:
        instance_type:
          type: string
          enum: [ubuntu, browser, windows]
          default: ubuntu
        timeout_hours:
          type: number
          minimum: 0.01
          maximum: 24
        blocked_domains:
          type: array
          items:
            type: string
        resolution:
          type: array
          items:
            type: integer
          minItems: 2
          maxItems: 2
    InstanceResponse:
      type: object
      properties:
        id:
          type: string
        launch_time:
          type: string
          format: date-time
        instance_type:
          type: string
          enum: [ubuntu, browser, windows]
        status:
          type: string
          enum: [pending, running, paused, resuming, terminated, error]
        resolution:
          type: array
          nullable: true
          items:
            type: integer
    StatusResponse:
      type: object
      properties:
        status:
          type: string
    ComputerActionRequest:
      type: object
      properties:
        action:
          type: string
          enum:
            - move_mouse
            - click_mouse
            - drag_mouse
            - scroll
            - press_key
            - type_text
            - wait
            - take_screenshot
            - get_cursor_position
        coordinates:
          type: array
          items:
            type: integer
        button:
          type: string
          enum: [left, right, middle]
        text:
          type: string
        keys:
          type: array
          items:
            type: string
        duration:
          type: number
    ComputerActionResponse:
      type: object
      properties:
        output:
          type: string
        base_64_image:
          type: string
        cursor_position:
          type: array
          items:
            type: integer
    CommandResponse:
      type: object
      properties:
        output:
          type: string
        error:
          type: string
        exit_code:
          type: integer
    AuthStateResponse:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
    NotebookResponse:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        kernel_name:
          type: string
        cells:
          type: array
          items:
            type: object