cdpfleet Docs Sign up free

Errors & limits

Errors are JSON: {"error": "…"}, sometimes with extra fields. On the free Community plan, errors caused by its limits (community_capacity_full, daily_quota_exhausted, hourly_quota_exhausted, threads_exceeded, profiles_disabled, keep_alive_requires_dedicated) also carry "upgrade": {"message": "…", "url": "https://cdpfleet.com/upgrade"} — what a paid plan changes, linking to the Community vs paid page; the error code and HTTP status stay the same. Launch responses:

StatuserrorMeaningWhat to do
400invalid_jsonThe body isn't a JSON object.Fix the request.
400invalid_memorymemory isn't one of the JSON numbers 1, 2, 3 or 4 (it's a multiplier, not megabytes).Send "memory": 2 (or 3, 4), or leave it out.
400invalid_channel / invalid_versionNo server in the fleet has that channel or version (pin). The message lists the channels or majors this browser has.Pick one from the message; don't retry as is.
400invalid_downloadsdownloads isn't true or false.Send a JSON boolean.
403downloads_not_available"downloads": true on a plan that doesn't keep downloads (Community).Use a paid plan (Community vs paid), or catch the download in code with Playwright's download.saveAs().
400proxy_requiredThe launch has no proxy and no Community proxy is available for your plan right now (rare).Add your proxy (formats), or your own VPN on a dedicated plan.
400invalid_proxyA cdpfleet-resi token that doesn't match the grammar, or one used inside a list of proxies. The message names the wrong part.Fix the token (residential proxy).
400tunnel_not_availablevpn_tunnel with a default proxy that isn't a cdpfleet-resi Tier 1/2 token — or your own proxy, on dedicated plans (or a live swap away from one). reason says why.Use a Tier 1/2 cdpfleet-resi token, or launch without vpn_tunnel (VPN Tunnel).
403vpn_requires_dedicatedvpn (your own VPN) on a plan without dedicated threads.Use a proxy, or move to a dedicated plan (Own network).
400vpn_not_availablevpn combined with proxy/proxy_rules, on an unsupported plan, or a live proxy swap on a VPN session. reason says which.Send either vpn or a proxy, not both.
400invalid_vpn_configThe VPN config can't be used: no saved VPN with that name, combined with vpn_tunnel, a missing or unsupported field or directive (named in reason), a private endpoint, or over 64 KB.Fix the config, or check the name on Proxies → My VPNs.
400vpn_connect_failedYour VPN server didn't answer or refused the credentials, so no request got through it.Check the server and credentials, then retry.
402proxy_balance_exhaustedThe launch (or a live swap) uses the cdpfleet residential proxy and your balance is used up.Top up in the dashboard → Proxies.
400The browser rejected a launch option — an unparseable proxy, an unknown Camoufox config property or an unsupported os. The message says which.Fix the option; don't retry as is.
401missing_api_key / invalid_api_keyNo key, or an unknown or revoked key.Check x-api-key.
402subscription_inactiveYour account has no active plan.Check your plan in the dashboard.
400cdp is not supported on this engine"cdp": true on a browser without a CDP endpoint. The message lists the supported ones.Use one of them, or connect to wsUrl (CDP & Puppeteer).
403keep_alive_requires_dedicated"keep_alive": true on a shared plan.Use dedicated threads, or reconnect-free code.
503keep_alive_unavailablekeep_alive isn't switched on for the fleet yet.Launch without it for now.
400invalid_keep_alive / invalid_recordkeep_alive or record isn't true or false.Send a boolean.
400invalid_profile / profile_unsupported_engineprofile isn't a valid name or {id, mode}, or the browser doesn't support profiles yet.See Persistent profiles.
403profile_frozenThe profile is frozen: the account has been over its plan's profile limit for 30 days.Upgrade to unfreeze it, or delete other profiles (profiles).
403profile_limitThe account already has as many profiles as its plan allows (20 per shared thread, 30 per dedicated thread, at least 100).Delete one with DELETE /v1/me/profiles/{name}, or add threads.
404no_such_profileA read-only launch of a profile that doesn't exist yet.Launch it once in normal mode first.
409profile_in_useAnother session is writing this profile.Retry when it ends, or launch with "mode": "readonly".
409profile_engine_mismatch / profile_version_downgradeThe profile belongs to another browser, or to a newer version of this one.Use the browser (and channel) it was created with.
503profile_restore_failed / profile_service_unavailableThe profile couldn't be loaded right now.Retry.
400invalid_cdpcdp isn't true or false.Send a boolean.
400unsupported_optionA browser-process field the fleet doesn't take: args, extensions, executablePath, ignoreDefaultArgs, env, userDataDir, chromiumSandbox, devtools, downloadsPath or tracesDir. Browsers run with the fleet's own flags.Remove the field; use the launch options and Playwright (init scripts, routing, headers) instead.
400invalid_start_urlstart_url isn't an http(s) URL of at most 2,048 characters.Fix the URL (Launch interactive).
400start_url_not_viewable / start_url_unsupportedstart_url on a session nobody could watch (headless without live_view, or headless Firefox, Camoufox or WebKit).Launch headful, or headless Chromium-based with "live_view": true.
400start_url_not_supportedstart_url on Rebrowser: its Playwright 1.52 server can't hand the opened page to your code.Use another Chromium-based browser for Launch interactive.
403profiles_disabledA profile on the free Community plan.Upgrade to a paid plan.
503community_capacity_fullThe Community capacity is full right now: Community-plan sessions and launches on the free Community proxy (any plan) share one cap.Retry after Retry-After; on a paid plan, use your own proxy or the residential proxy for launches that must not wait.
403engine_not_allowedYour plan doesn't include this browser.Use another browser or upgrade.
404not_foundUnknown endpoint, e.g. a misspelled browser.Check the path.
413payload_too_largeThe launch body is over 100 KB.Send a smaller body; a long start_url or big config object is the usual cause.
429rate_limitedToo many launches per second or minute for your plan. Includes rps_limit and rpm_limit.Wait for Retry-After seconds.
429threads_exceededThis launch would exceed your threads. Includes threads, in_use and requested_weight.Close a session or wait; Retry-After: 1.
429daily_quota_exhaustedShared threads: today's pool is used up. Includes the budget and usage.Retry-After counts down to midnight UTC.
429hourly_quota_exhaustedShared threads: the last 60 minutes used 25% of your daily pool. Includes the budget and usage.Wait; the window rolls forward continuously. Retry-After: 60.
500The browser failed to start, e.g. the proxy is unreachable or Camoufox couldn't look up the proxy's location.Check the proxy, then retry.
503shared_capacity_fullShared threads: the shared fleet is full right now. Dedicated threads are never refused for this.Retry after Retry-After (5 s).
503fleet_unavailable / starting_up / route_unavailableThe fleet is momentarily full.Retry with backoff.
502route_rejectedThe session couldn't be connected through the fleet's private network, so it was refused rather than exposed. Not billed.Retry; a new launch goes to another server.
503resi_unavailableThe cdpfleet residential proxy is momentarily unavailable on the server that took the launch.Retry; it goes to another server.
503version_unavailableThe requested version exists but no server with it is free right now, or, for a profile saved with a newer browser, no server runs at least that version (min_version; usually only while a new browser version is rolling out). Includes available, the majors you can pick.Pick one from available, or retry the profile launch in a few minutes.

Connecting

A WebSocket connect can fail with 401/403 (wrong key — only the key that launched the session may connect), 404 (the session has ended, or the 60-second connect window passed), 409 (the session already has a connection) or 502 {"error":"upstream_unreachable"} (the server running the browser didn't answer — rare). After a 502, launch a new session rather than reconnecting to the same wsUrl; the failed session isn't billed.

Limits

Known issues