browserbase

Browserbase API for headless browser automation. Use when user mentions "headless browser", "browser automation", or "Browserbase".

50 stars

Best use case

browserbase is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Browserbase API for headless browser automation. Use when user mentions "headless browser", "browser automation", or "Browserbase".

Teams using browserbase should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/browserbase/SKILL.md --create-dirs "https://raw.githubusercontent.com/vm0-ai/vm0-skills/main/browserbase/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/browserbase/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How browserbase Compares

Feature / AgentbrowserbaseStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Browserbase API for headless browser automation. Use when user mentions "headless browser", "browser automation", or "Browserbase".

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

## Troubleshooting

If requests fail, run `zero doctor check-connector --env-name BROWSERBASE_TOKEN` or `zero doctor check-connector --url https://api.browserbase.com/v1/sessions --method POST`

## How to Use

### 1. Create a Session

Create a new browser session:

Write `/tmp/request.json`:
```json
{
  "projectId": "<your-project-id>"
}
```

```bash
curl -s -X POST "https://api.browserbase.com/v1/sessions" --header "Content-Type: application/json" --header "X-BB-API-Key: $BROWSERBASE_TOKEN" -d @/tmp/request.json
```

**With timeout and keepAlive:**

Write `/tmp/request.json`:
```json
{
  "projectId": "<your-project-id>",
  "timeout": 300,
  "keepAlive": true
}
```

```bash
curl -s -X POST "https://api.browserbase.com/v1/sessions" --header "Content-Type: application/json" --header "X-BB-API-Key: $BROWSERBASE_TOKEN" -d @/tmp/request.json
```

**With proxy enabled (requires paid plan):**

Write `/tmp/request.json`:
```json
{
  "projectId": "<your-project-id>",
  "proxies": true
}
```

```bash
curl -s -X POST "https://api.browserbase.com/v1/sessions" --header "Content-Type: application/json" --header "X-BB-API-Key: $BROWSERBASE_TOKEN" -d @/tmp/request.json
```

> **Note:** Proxies are not available on the free plan. You'll receive a 402 error if you try to use this feature without upgrading.

**With specific region (us-west-2, us-east-1, eu-central-1, ap-southeast-1):**

Write `/tmp/request.json`:
```json
{
  "projectId": "<your-project-id>",
  "region": "us-west-2"
}
```

```bash
curl -s -X POST "https://api.browserbase.com/v1/sessions" --header "Content-Type: application/json" --header "X-BB-API-Key: $BROWSERBASE_TOKEN" -d @/tmp/request.json
```

**Response includes:**
- `id` - Session ID to use for connections
- `connectUrl` - WebSocket URL for Playwright/Puppeteer
- `seleniumRemoteUrl` - URL for Selenium connections
- `signingKey` - Key for HTTP connections

### 2. List Sessions

List all sessions with optional filters:

```bash
curl -s -X GET "https://api.browserbase.com/v1/sessions" --header "X-BB-API-Key: $BROWSERBASE_TOKEN"
```

**Filter by status (RUNNING, ERROR, TIMED_OUT, COMPLETED):**

```bash
curl -s -X GET "https://api.browserbase.com/v1/sessions?status=RUNNING" --header "X-BB-API-Key: $BROWSERBASE_TOKEN"
```

**Query by user metadata:**

> **Note:** The query syntax for user metadata filtering uses single quotes: `user_metadata['key']:'value'`. To avoid complex shell escaping, write the query to a file and use `--data-urlencode "q@filename"`.

Write `/tmp/query.txt` with content:
```
user_metadata['test']:'true'
```

Then query sessions:
```bash
curl -s -X GET -G "https://api.browserbase.com/v1/sessions" --data-urlencode "q@/tmp/query.txt" --header "X-BB-API-Key: $BROWSERBASE_TOKEN"
```

**More examples:**

Query by stagehand metadata - write `/tmp/query.txt`:
```
user_metadata['stagehand']:'true'
```

Query by environment - write `/tmp/query.txt`:
```
user_metadata['env']:'production'
```

Then run:
```bash
curl -s -X GET -G "https://api.browserbase.com/v1/sessions" --data-urlencode "q@/tmp/query.txt" --header "X-BB-API-Key: $BROWSERBASE_TOKEN"
```

### 3. Get Session Details

Get details of a specific session. Replace `<your-session-id>` with the actual session ID:

```bash
curl -s -X GET "https://api.browserbase.com/v1/sessions/<your-session-id>" --header "X-BB-API-Key: $BROWSERBASE_TOKEN"
```

### 4. Update Session (Release)

Request to release a session before its timeout to avoid additional charges. Replace `<your-session-id>` with the actual session ID:

Write `/tmp/request.json`:
```json
{
  "status": "REQUEST_RELEASE"
}
```

```bash
curl -s -X POST "https://api.browserbase.com/v1/sessions/<your-session-id>" --header "Content-Type: application/json" --header "X-BB-API-Key: $BROWSERBASE_TOKEN" -d @/tmp/request.json
```

The session status will change to `COMPLETED` and `endedAt` timestamp will be set.

### 5. Get Debug/Live URLs

Get live debugging URLs for a running session. Replace `<your-session-id>` with the actual session ID:

```bash
curl -s -X GET "https://api.browserbase.com/v1/sessions/<your-session-id>/debug" --header "X-BB-API-Key: $BROWSERBASE_TOKEN"
```

> **Note:** Debug URLs may only be available after a browser client has connected to the session via WebSocket.

**Response includes:**
- `debuggerUrl` - Chrome DevTools debugger URL
- `debuggerFullscreenUrl` - Fullscreen debugger view
- `wsUrl` - WebSocket URL
- `pages` - Array of open pages with their debugger URLs

### 6. Get Session Logs

Retrieve logs from a session. Replace `<your-session-id>` with the actual session ID:

```bash
curl -s -X GET "https://api.browserbase.com/v1/sessions/<your-session-id>/logs" --header "X-BB-API-Key: $BROWSERBASE_TOKEN"
```

### 7. Get Session Recording

Get the rrweb recording of a session. Replace `<your-session-id>` with the actual session ID:

```bash
curl -s -X GET "https://api.browserbase.com/v1/sessions/<your-session-id>/recording" --header "X-BB-API-Key: $BROWSERBASE_TOKEN"
```

### 8. Get Session Downloads

Retrieve files downloaded during a session (returns ZIP file). Replace `<your-session-id>` with the actual session ID:

```bash
curl -s -X GET "https://api.browserbase.com/v1/sessions/<your-session-id>/downloads" --header "X-BB-API-Key: $BROWSERBASE_TOKEN" --output downloads.zip
```

### 9. Upload Files to Session

Upload files to use in a browser session. Replace `<your-session-id>` with the actual session ID:

```bash
curl -s -X POST "https://api.browserbase.com/v1/sessions/<your-session-id>/uploads" --header "X-BB-API-Key: $BROWSERBASE_TOKEN" -F "file=@/path/to/file.pdf"
```

## Contexts API

Contexts allow you to persist cookies, cache, and session storage across multiple browser sessions.

### Create a Context

Write `/tmp/request.json`:
```json
{
  "projectId": "<your-project-id>"
}
```

```bash
curl -s -X POST "https://api.browserbase.com/v1/contexts" --header "Content-Type: application/json" --header "X-BB-API-Key: $BROWSERBASE_TOKEN" -d @/tmp/request.json
```

Save the returned `id` to use in sessions.

### Get Context Details

Retrieve details of a specific context. Replace `<your-context-id>` with the actual context ID:

```bash
curl -s -X GET "https://api.browserbase.com/v1/contexts/<your-context-id>" --header "X-BB-API-Key: $BROWSERBASE_TOKEN"
```

**Response includes:**
- `id` - Context identifier
- `createdAt` - Creation timestamp
- `updatedAt` - Last update timestamp
- `projectId` - The Project ID linked to the context

### Create Session with Context

Use an existing context to restore cookies and login state. Replace `<your-context-id>` with the actual context ID:

Write `/tmp/request.json`:
```json
{
  "projectId": "<your-project-id>",
  "browserSettings": {
    "context": {
      "id": "<your-context-id>",
      "persist": true
    }
  }
}
```

```bash
curl -s -X POST "https://api.browserbase.com/v1/sessions" --header "Content-Type: application/json" --header "X-BB-API-Key: $BROWSERBASE_TOKEN" -d @/tmp/request.json
```

Set `persist: true` to save updates back to the context after the session ends.

### Delete Context

Delete a context when it's no longer needed. Replace `<your-context-id>` with the actual context ID:

```bash
curl -s -X DELETE "https://api.browserbase.com/v1/contexts/<your-context-id>" --header "X-BB-API-Key: $BROWSERBASE_TOKEN" -w "\nHTTP Status: %{http_code}"
```

Successful deletion returns HTTP 204 (No Content).

## Projects API

### Get Project Usage

Retrieve project-wide usage statistics (browser minutes and proxy bytes). Replace `<your-project-id>` with your actual project ID:

```bash
curl -s -X GET "https://api.browserbase.com/v1/projects/<your-project-id>/usage" --header "X-BB-API-Key: $BROWSERBASE_TOKEN"
```

## API Endpoints Reference

| Endpoint | Method | Description |
|----------|--------|-------------|
| `/v1/sessions` | POST | Create a new browser session |
| `/v1/sessions` | GET | List all sessions |
| `/v1/sessions/{id}` | GET | Get session details (returns array) |
| `/v1/sessions/{id}` | POST | Update session (release) |
| `/v1/sessions/{id}/debug` | GET | Get live debug URLs |
| `/v1/sessions/{id}/logs` | GET | Get session logs |
| `/v1/sessions/{id}/recording` | GET | Get session recording (rrweb) |
| `/v1/sessions/{id}/downloads` | GET | Get downloaded files (ZIP) |
| `/v1/sessions/{id}/uploads` | POST | Upload files to session |
| `/v1/contexts` | POST | Create a new context |
| `/v1/contexts/{id}` | GET | Get context details |
| `/v1/contexts/{id}` | DELETE | Delete a context |
| `/v1/projects/{id}/usage` | GET | Get project usage stats |

## Session Status Values

| Status | Description |
|--------|-------------|
| `RUNNING` | Session is currently active |
| `COMPLETED` | Session ended successfully |
| `ERROR` | Session ended with an error |
| `TIMED_OUT` | Session exceeded timeout |
| `REQUEST_RELEASE` | Request to end session |

## Guidelines

1. **Session Lifecycle**: Sessions auto-terminate after timeout (default 5 minutes). Use `keepAlive: true` for longer sessions.
2. **Contexts**: Use contexts to persist login state and avoid repeated authentication.
3. **Proxies**: Enable proxies for geo-restricted content or to avoid rate limiting.
4. **Regions**: Choose a region close to your target websites for better performance.
5. **Debug URLs**: Use debug URLs for real-time human-in-the-loop debugging.
6. **Recordings**: Session replays use rrweb DOM reconstruction, not video files.
7. **Rate Limits**: Check your plan limits in the Browserbase dashboard.

Related Skills

zoom

50
from vm0-ai/vm0-skills

Zoom API for managing meetings, webinars, cloud recordings, and user data. Use when user mentions "Zoom", "Zoom meeting", "join URL", "cloud recording", or "webinar".

zeptomail

50
from vm0-ai/vm0-skills

ZeptoMail API for transactional email. Use when user mentions "ZeptoMail", "transactional email", "send email", or Zoho email.

zep

50
from vm0-ai/vm0-skills

Zep API for long-term memory and conversation history management in AI agents. Use when user mentions "Zep", "conversation memory", "session memory", "memory search", "user facts", "agent memory", or "long-term memory".

zendesk

50
from vm0-ai/vm0-skills

Zendesk API for customer support. Use when user mentions "Zendesk", "support ticket", "customer service", or help desk.

zapsign

50
from vm0-ai/vm0-skills

ZapSign API for e-signatures. Use when user mentions "ZapSign", "e-signature", "sign document", or Brazilian e-signature.

zapier

50
from vm0-ai/vm0-skills

Zapier API for workflow automation. Use when user mentions "Zapier", "zap", "automation", or asks about connecting apps.

youtube

50
from vm0-ai/vm0-skills

YouTube API for videos and channels. Use when user mentions "YouTube", "youtube.com", "youtu.be", shares a video link, "channel stats", or asks about video content.

xero

50
from vm0-ai/vm0-skills

Xero API for accounting. Use when user mentions "Xero", "accounting", "invoices", "bookkeeping", or asks about financial management.

x

50
from vm0-ai/vm0-skills

X (Twitter) API for tweets and profiles. Use when user mentions "X", "Twitter", "x.com", "twitter.com", shares a tweet link, "check X", or asks about social media posts.

wrike

50
from vm0-ai/vm0-skills

Wrike API for project management. Use when user mentions "Wrike", "wrike.com", shares a Wrike link, "Wrike task", or asks about Wrike workspace.

workos

50
from vm0-ai/vm0-skills

WorkOS API for enterprise SSO, SCIM directory sync, RBAC fine-grained authorization, and audit logs. Use when user mentions "WorkOS", "SSO", "SAML", "SCIM", "directory sync", "enterprise authentication", "audit log", or "fine-grained authorization".

workflow-migration

50
from vm0-ai/vm0-skills

VM0 migration helper for Claude Code workflows. Use when user says "migrate to VM0", "move to VM0", "convert skill to VM0", or asks about migrating local Claude Code workflows.