Appearance
Limits and errors Beta
Concurrency, timeouts, API errors and connection close codes.
Limits
| Limit | Value |
|---|---|
| Browsers at once | 5 per account. A session counts from its creation, including the 45 seconds before you connect. |
connect_url | One connection, within 45 seconds of creating the browser. |
| Session length | 1 hour at most. Set a shorter one with timeout_sec (10 to 3600 seconds). |
| Idle time | 5 minutes without a CDP message from your client by default. Change it with idle_timeout_sec (10 to 3600 seconds). |
| Traffic | No cap by default. Set one with max_mb. |
| Balance | Starting a session needs a minimum balance. |
How a session ends
A session ends, and is billed, when the first of these happens:
- your client closes the browser (
browser.close()) or disconnects, - it reaches its session length, idle time or traffic cap,
- the browser stops on its own.
Ending the connection ends the session: there is no session to stop afterwards. To cancel a browser you created but haven't connected to, call DELETE /v1/browsers/{id}. A running session can't be stopped through the API (the call answers 409); close it from your client.
API errors
POST /v1/browsers and the other endpoints answer with these errors:
| Status | When | What to do |
|---|---|---|
400 | An invalid parameter. The message names it. | Fix the parameter. See Parameters and API. |
401 | A missing or wrong API key. | Check api_key. |
403 | Your email address isn't verified yet. | Follow the link in the verification email. |
402 | Your balance is too low to start a session. | Top up on the dashboard. |
404 | The browser doesn't exist, or the Hosted Browser isn't enabled on your account. | During the beta, write to [email protected]. |
409 | DELETE on a running session. | Close the browser from your client. |
429 | 5 browsers already running (code brw01). | Close one, or wait for an unused connect_url to expire (45 s). |
Connection close codes
When a session can't start, or ends because of a limit, the WebSocket closes with one of these codes. Puppeteer and Playwright report it as a disconnect.
| Code | Meaning | Charged |
|---|---|---|
1000 | Your client disconnected. | Yes |
4000 | The session's settings were refused. | No |
4001 | The proxy's exit IP couldn't be located, so the time zone and geolocation couldn't match it. | No |
4002 | The proxy didn't work: unreachable, wrong credentials, or no IP available. | No |
4003 | A limit was reached: session length, idle time or traffic. The reason says which. | Yes |
4004 | The browser closed: after browser.close() (reason browser closed), or because it failed. | Yes, for the traffic it used |
4005 | No browser free on our side. | No |
For 4001, 4002 and 4005, create a new browser and try again.
GET /v1/browsers/{id} gives the code and reason of a session that ended (end_code, end_reason).

