Introduction
Get Started
Use the public API to define reusable browser extracts with flat text steps and a storage contract, then poll each run's data and resolved storage result.
Base URL
Set the deployment origin once and append the documented paths exactly as shown.
https://api.browserfleet.dev
Authentication
Create and copy your organization's API key on the Browser Fleet dashboard Settings page. Use one API key per request. Bearer auth is preferred; x-api-key is accepted for clients that cannot set bearer headers.
Authorization: Bearer <api_key> x-api-key: <api_key>
Quick Start
Store your OpenCode Go and Cursor agent keys and activate billing in the Browser Fleet dashboard, then create an automation, start a new job with its id, and poll the job until its status is Done or Error.
1. Create Automation — Request
curl -X POST "https://api.browserfleet.dev/api/automations" \
-H "Authorization: Bearer $BROWSER_FLEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Portal dataset export",
"task": "Use the visible portal UI at %portalUrl to download the complete dataset.",
"output": {},
"storage": [
{
"name": "dataset.csv",
"description": "Complete unchanged CSV dataset downloaded through the portal UI"
}
],
"steps": [
"Open %portalUrl in the browser.",
"Use the visible bulk-download or export-all control exactly once as the final browser action."
],
"stealthConfiguration": "DEFAULT",
"webhookUrl": "https://example.com/webhooks/browser-fleet"
}'1. Create Automation — Response
{
"automationId": "jh7d9...",
"createdAt": "2026-06-17T10:00:00.000Z",
"name": "Portal dataset export",
"task": "Use the visible portal UI at %portalUrl to download the complete dataset.",
"output": {},
"storage": [
{
"name": "dataset.csv",
"description": "Complete unchanged CSV dataset downloaded through the portal UI"
}
],
"steps": [
"Open %portalUrl in the browser.",
"Use the visible bulk-download or export-all control exactly once as the final browser action."
],
"stealthConfiguration": "DEFAULT",
"webhookUrl": "https://example.com/webhooks/browser-fleet"
}2. Start Job — Request
curl -X POST "https://api.browserfleet.dev/api/jobs" \
-H "Authorization: Bearer $BROWSER_FLEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"automationId": "jh7d9...",
"priority": 10,
"variables": {
"%portalUrl": "https://example.com/registry"
}
}'2. Start Job — Response
{
"automationId": "jh7d9...",
"jobId": "km2q8...",
"priority": 10,
"status": "Pending"
}3. Poll Job — Request
curl "https://api.browserfleet.dev/api/jobs?jobId=km2q8..." \ -H "Authorization: Bearer $BROWSER_FLEET_API_KEY"
3. Poll Job — Done Response
{
"automationId": "jh7d9...",
"createdAt": "2026-06-17T10:01:00.000Z",
"error": null,
"jobId": "km2q8...",
"priority": 10,
"result": {
"data": {},
"storage": [
{
"name": "dataset.csv",
"id": "st7p9..."
}
]
},
"status": "Done",
"updatedAt": "2026-06-17T10:04:00.000Z"
}Errors
Request errors use HTTP error statuses and JSON. Execution failures remain retrievable jobs with status Error, a null result, and an error object containing a stable code and any available browser trace.
| Status | Body | Meaning |
|---|---|---|
| 400 | { "error": "Invalid request body", "issues": { ... } } or { "error": "Missing ...Id" } | The request body, query string, or required fields are invalid. Validation errors include an issues object. |
| 401 | { "error": "Unauthorized" } or { "error": "Invalid API key" } | The request did not include a valid API key. |
| 404 | { "error": "Automation not found" }, { "error": "Job not found" }, or { "error": "File not found or deleted after the 7-day retention period" } | The requested resource could not be found. |