Solari Browserdocs

Sessions endpoints

Allocate a browser, look up its status, release it, fetch the replay.

POST /sessions

Allocate a session and return its WebSocket endpoints. For most callers cdpEndpoint is the field you want — it works with any CDP-compatible client (Puppeteer, browser-use, playwright-core's connectOverCDP, etc.).

POST /sessions HTTP/1.1
Host: api.solaribrowser.com
Authorization: Bearer sb_live_…
Content-Type: application/json

{
  "stealth":   true,
  "recording": true,
  "captcha":   true,
  "profileId": "prof_abc123",
  "proxy":     { "country": "us", "session": "warmup-1", "sessionDuration": 10 }
}

Body

FieldTypeDefaultNotes
stealthbooleanfalseFull Chromium with the fingerprint shim.
recordingbooleanfalseCapture rrweb events.
captchabooleanfalseAuto-solve captcha widgets. Requires stealth.
profileIdstringHydrate cookies + localStorage from a saved profile.
proxystring | object | "off"Managed proxy egress. Requires stealth.

Response — 200 OK

{
  "sessionId":   "abc-1234-…",
  "wsEndpoint":  "wss://api.solaribrowser.com/ws/abc-1234-…",
  "cdpEndpoint": "wss://api.solaribrowser.com/cdp/abc-1234-…",
  "expiresAt":   "2026-05-12T18:00:00Z",
  "storageState": {
    "cookies": [ /* ... */ ],
    "origins": [ /* ... */ ]
  },
  "proxy": {
    "server":     "http://…",
    "username":   "…",
    "password":   "***",
    "country":    "us",
    "tier":       "residential",
    "timezoneId": "America/Los_Angeles"
  }
}

wsEndpoint takes a version-matched Playwright wire client; cdpEndpoint takes any CDP-compatible client. Both point at the same browser.

expiresAt is the plan-tier max-session deadline (ISO 8601 UTC) — the server auto-releases at that point regardless of client state. storageState is included only when profileId was passed. proxy is included only when a proxy was requested; tier on it reports which tier actually served the request (useful for confirming a tier: "mobile" ask wasn't downgraded).

GET /sessions/:id

Look up the current status of a session.

GET /sessions/abc-1234-… HTTP/1.1
Host: api.solaribrowser.com
Authorization: Bearer sb_live_…

DELETE /sessions/:id

Release the session. Idempotent.

DELETE /sessions/abc-1234-… HTTP/1.1
Host: api.solaribrowser.com
Authorization: Bearer sb_live_…

Response — 200 OK

{ "released": true }

GET /sessions/:id/replay-url

Presigned URL for the gzipped NDJSON rrweb stream. Available a few seconds after release.

GET /sessions/abc-1234-…/replay-url HTTP/1.1
Host: api.solaribrowser.com
Authorization: Bearer sb_live_…

Response — 200 OK

{
  "url":              "https://…?X-Amz-Signature=…",
  "expiresInSeconds": 900,
  "contentEncoding":  "gzip"
}

The URL is valid for 15 minutes. The body is line-delimited JSON — one rrweb event per line.