Scrapybara Instances API

Start, get, list, stop, pause, and resume cloud instances of type ubuntu, browser, or windows, with configurable timeout hours, blocked domains, and screen resolution. Paused instances preserve state and can be resumed later.

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