Skip to content
Start free trial

API reference

Base URL: https://browser.rayobyte.com

Every endpoint takes the x-api-key header. GET /connect also accepts the key as a token query parameter.

MethodPathReturns
GET/connectA CDP WebSocket URL as plain text
POST/api/browser/createThe session as JSON
POST/api/browser/close{ browserId, status }
GET/api/browser/:id/statusOne session
GET/api/browsersYour running sessions
GET/user/api/limits{ limit, active, remaining, unlimited } for concurrent browsers
GET/user/api/meYour profile, limits and lifetime usage
GET/user/api/sessionsYour sessions, paginated
GET/user/api/usageTotals and up to 30 daily buckets
POST/user/api/regenerate-keyA new API key
GET/healthGateway health, no key needed

/connect and /api/browser/create do the same job in different shapes. /connect is one GET that answers with a bare URL; create takes a JSON body and answers with the whole session object, including expiresAt and the vncUrl.

Success on /connect is text/plain and the body is the URL. Everything else is JSON.

Errors are flat JSON, not nested:

{
"error": "You've used your 48 free browser hours. Contact [email protected] to keep going.",
"code": "USAGE_CAP_REACHED",
"remainingSeconds": 0
}

/connect is the exception. Errors from the route itself (400, 404, 410, 422 and 5xx) come back as text/plain with the message in the body, and a 400, 422 or 503 carries its code in the X-Error-Code header. Errors answered before the route runs stay JSON on /connect too: 401, 402, both 429s and the authentication 503.

StatusMeaning
200Created, closed or read. A create is 200, not 201
400PROXY_REQUIRED, PROXY_INVALID, a malformed parameter, or a missing browserId
401Missing or invalid API key
402USAGE_CAP_REACHED, the 48 browser hours are spent
404No session with that id for you, including one that belongs to another account. On a reconnect, also the br_ id from a CDP URL
410Reconnect to a session that has ended
422PROXY_UNREACHABLE, the browser could not connect through the proxy
429CONCURRENCY_LIMIT or RATE_LIMIT, in the body’s code
500A create failed on the backend
502The backend refused a close, or failed a create without answering
503CAPACITY, or the key lookup failed

Full detail on Limits.

Was this page helpful?