Skip to documentation
Browser Fleet API

API Reference

Account

Sign up, sign in with an emailed code to get your API key, open Stripe to start or manage billing, and set the vendor keys your jobs run on.

Endpoints

Create your organization, sign in with an emailed code to get its API key, open Stripe to start or manage billing, and set the vendor keys your jobs run on. Every endpoint except sign up and sign in needs your API key.

POSThttps://api.browserfleet.dev/rest/public/sign-up

Sign Up

Creates your organization and returns its API key. This request needs no API key.

Sign Up request fields
FieldLocationTypeRequiredDescription
emailJSON BodystringYesEmail address of the organization's owner and billing contact.
organizationNameJSON BodystringYesDisplay name of the organization, up to 200 characters.

Example Request (cURL)

curl -X POST "https://api.browserfleet.dev/rest/public/sign-up" \
  -H "Content-Type: application/json" \
  -d '{ "email": "you@company.com", "organizationName": "Acme Research" }'

201 Created Response (JSON)

{
  "organizationId": "3f8a2c1e-7b4d-4e9a-8c6f-1d2b3a4c5e6f",
  "apiKey": "bf_..."
}
Sign Up response fields
FieldTypeDescription
organizationIdstringId of the new organization.
apiKeystringThe organization's API key. Store it now; the API does not return it again.
Sign Up error responses
StatusBodyMeaning
400{ "error": "Invalid request body", "issues": { ... } }The email is not a valid address, or the organization name is missing or too long.
POSThttps://api.browserfleet.dev/rest/public/sign-in

Sign In

Emails a six-digit sign-in code to a member of an organization. The code expires after 15 minutes, and only the newest code works. This request needs no API key.

Sign In request fields
FieldLocationTypeRequiredDescription
emailJSON BodystringYesEmail address of an active member of the organization.

Example Request (cURL)

curl -X POST "https://api.browserfleet.dev/rest/public/sign-in" \
  -H "Content-Type: application/json" \
  -d '{ "email": "you@company.com" }'

200 OK Response (JSON)

{
  "sent": true
}
Sign In response fields
FieldTypeDescription
sentbooleanAlways true when the code was sent.
Sign In error responses
StatusBodyMeaning
400{ "error": "Invalid request body", "issues": { ... } }The email is missing or is not a valid address.
404{ "error": "No account uses this email" }No active member of an organization uses this email.
POSThttps://api.browserfleet.dev/rest/public/sign-in/verify

Get API Key

Checks the emailed code and returns your organization's API key. Each code works once. Only an owner or admin of the organization gets the key. This request needs no API key.

Get API Key request fields
FieldLocationTypeRequiredDescription
emailJSON BodystringYesThe email the code was sent to.
codeJSON BodystringYesThe six digits from the email.

Example Request (cURL)

curl -X POST "https://api.browserfleet.dev/rest/public/sign-in/verify" \
  -H "Content-Type: application/json" \
  -d '{ "email": "you@company.com", "code": "482913" }'

200 OK Response (JSON)

{
  "organizationId": "3f8a2c1e-7b4d-4e9a-8c6f-1d2b3a4c5e6f",
  "apiKey": "bf_..."
}
Get API Key response fields
FieldTypeDescription
organizationIdstringId of your organization.
apiKeystringYour organization's API key. Send it with every other request.
Get API Key error responses
StatusBodyMeaning
400{ "error": "Invalid request body", "issues": { ... } }The email is not a valid address, or the code is not six digits.
401{ "error": "This code is invalid or expired. Request a new one." }The code is wrong, already used, or more than 15 minutes old. Request a new code with Sign In.
403{ "error": "Only an owner or admin can get the API key" }Your role in the organization cannot read the API key.
GEThttps://api.browserfleet.dev/rest/public/billing?returnUrl={returnUrl}

Billing

Returns a Stripe link for your organization. Before you have a plan, it is a Stripe Checkout link that starts the plan. After that, it is a Stripe Customer Portal link where you change your card, see invoices, or cancel. Each invoice shows Cloud jobs and BYOK jobs on separate lines. A job bills at the plan in force when it starts.

Billing request fields
FieldLocationTypeRequiredDescription
returnUrlQuery StringURLYesPage Stripe sends you back to when you finish or leave.

Example Request (cURL)

curl -G "https://api.browserfleet.dev/rest/public/billing" \
  -H "Authorization: Bearer $BROWSER_FLEET_API_KEY" \
  --data-urlencode "returnUrl=https://example.com/billing"

200 OK Response (JSON)

{
  "kind": "checkout",
  "url": "https://checkout.stripe.com/c/pay/cs_..."
}
Billing response fields
FieldTypeDescription
kind"checkout" | "portal"checkout when the link starts your plan, portal when it manages an existing plan.
urlstringThe Stripe link. Open it in a browser.
Billing error responses
StatusBodyMeaning
400{ "error": "Invalid request query", "issues": { ... } }The returnUrl is missing or is not a URL.
401{ "error": "Invalid API key" }The API key is missing or invalid.
GEThttps://api.browserfleet.dev/rest/public/configuration

Retrieve Configuration

Returns your BYOK configuration and your plan. The configuration maps each part to its vendor and key: { <part>: { vendor, key } }, and cloud_infrastructure and stealth to an array of { vendor, key }. Each key shows only its last four characters.

Retrieve Configuration request fields
FieldLocationTypeRequiredDescription
None---This request needs only your API key.

Example Request (cURL)

curl "https://api.browserfleet.dev/rest/public/configuration" \
  -H "Authorization: Bearer $BROWSER_FLEET_API_KEY"

200 OK Response (JSON)

{
  "plan": "cloud",
  "configuration": {
    "browsers": { "vendor": "browseract", "key": "…4f2a" },
    "stealth": [
      { "vendor": "capsolver", "key": "…9c1e" },
      { "vendor": "nopecha", "key": "…71bd" }
    ]
  }
}
Retrieve Configuration response fields
FieldTypeDescription
plan"byok" | "cloud"BYOK when every part except storage has a vendor; otherwise Cloud.
configurationobjectEach configured part, with each vendor's key masked to its last four characters.
Retrieve Configuration error responses
StatusBodyMeaning
401{ "error": "Invalid API key" }The API key is missing or invalid.
PUThttps://api.browserfleet.dev/rest/public/configuration

Update Configuration

Replaces the entire configuration. Include every part to run on your own vendors, or send an empty object to run on Browser Fleet's; a configuration with some parts but not all runs no job. Jobs started after the update use the new configuration.

Update Configuration request fields
FieldLocationTypeRequiredDescription
browsersJSON Body{ vendor: string, key: string }Novendor: browseract.
cloud_infrastructureJSON Body{ vendor: string, key: string }[]NoOne entry for each Cursor account, at least one. vendor: cursor; each key at most once. Launches spread over the keys.
llmJSON Body{ vendor: string, key: string, baseUrl?: string, model?: string }Novendor: openai_compatible, any OpenAI-compatible API, with baseUrl (its https origin with its version path) and model (the model id it lists); or opencode (OpenCode Go, DeepSeek V4.1 Flash), with key only. Claude-compatible APIs are coming soon.
stealthJSON Body{ vendor: string, key: string }[]NoOne entry for each CAPTCHA solver. vendor: capsolver, two_captcha, or nopecha; each vendor at most once.
networkJSON Body{ vendor: string, key: string, cookie?: string }Novendor: proxiware. cookie: optional session cookie of your signed-in Proxiware dashboard (_uetsid=…), which lets Browser Fleet read your gateway's live bandwidth.

Example Request (cURL)

curl -X PUT "https://api.browserfleet.dev/rest/public/configuration" \
  -H "Authorization: Bearer $BROWSER_FLEET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "browsers": { "vendor": "browseract", "key": "ba_live_..." },
    "cloud_infrastructure": [
      { "vendor": "cursor", "key": "crsr_account_a..." },
      { "vendor": "cursor", "key": "crsr_account_b..." }
    ],
    "llm": { "vendor": "openai_compatible", "baseUrl": "https://api.example.com/v1", "key": "sk-...", "model": "deepseek-v4.1-flash" },
    "stealth": [{ "vendor": "capsolver", "key": "CAP-..." }],
    "network": { "vendor": "proxiware", "key": "pw_...", "cookie": "_uetsid=..." }
  }'

200 OK Response (JSON)

{
  "plan": "byok",
  "configuration": {
    "browsers": { "vendor": "browseract", "key": "…4f2a" },
    "cloud_infrastructure": [
      { "vendor": "cursor", "key": "…e81c" },
      { "vendor": "cursor", "key": "…7a20" }
    ],
    "llm": { "vendor": "openai_compatible", "key": "…0d3f", "baseUrl": "https://api.example.com/v1", "model": "deepseek-v4.1-flash" },
    "stealth": [{ "vendor": "capsolver", "key": "…9c1e" }],
    "network": { "vendor": "proxiware", "key": "…5b7a", "cookie": "…Eg==" }
  }
}
Update Configuration response fields
FieldTypeDescription
plan"byok" | "cloud"The plan your next jobs bill on.
configurationobjectThe stored configuration, with each key and cookie masked to its last four characters.
Update Configuration error responses
StatusBodyMeaning
400{ "error": "Unknown vendor for part" }A part or vendor is not supported, the vendor does not serve that part, a key is empty, cloud_infrastructure is empty or repeats a key, or a stealth vendor appears twice.
401{ "error": "Invalid API key" }The API key is missing or invalid.