Local API reference
Configure the Local API, authenticate requests, inspect responses and use the verified v1, v2 and v3 routes.
On this page
Open MCP & Local API from the top navigation. Its status strip shows whether the server is running, the actual base address and whether a token is required. It serves only this computer’s local browser store.

Configure the server
In Server, set Enable Local API, Require API token, Port and API token, then Save. The default port is 50326; the setting accepts 1024–65535. A port change restarts the server. An empty token field keeps the stored token.

Use the address displayed by the app. A fallback port means scripts using the requested port may reach another process. Restart reconciles the server with saved settings after you clear the conflict.
With the desktop closed, cloutctl system serve can run the Local API. Command line covers its shared queue and sync loop.
Authentication
Token authentication is on by default. Requests can send X-API-Key or Authorization: Bearer; api_key in a query is also accepted. Prefer a header so the token does not become part of a URL.
The desktop token box does not reveal the stored value. Set a token you keep securely, or inspect local settings through cloutctl system settings when appropriate. That command can print sensitive local settings; keep its output private.
/status, /health, /api/v1/status, /docs and /openapi.json are public on this loopback server. Turning authentication off lets local applications call the remaining routes without a token.
A first request
The following examples assume the displayed base address is the default. Set CLOUT_TOKEN in your environment to your own API token; the documentation supplies no credential.
curl http://127.0.0.1:50326/status
curl -H "Authorization: Bearer $CLOUT_TOKEN" -H 'Content-Type: application/json' -d '{"page":1,"limit":10}' http://127.0.0.1:50326/api/v2/browser-profile/list/status returns {"code":0,"msg":"success"} without a data member. Most operations return code, msg and data. Check code: an operation failure normally returns HTTP 200 with code: -1. Invalid authentication returns HTTP 401 with code: -401 and “Invalid or missing API key”.
JSON body and query handling are route-specific. On v2 and v3 calls, a query value overrides a body field with the same name. v1 writes read their body directly. v2 writes use POST. v3 reads accept GET or POST; v3 writes use POST. Paths are case-insensitive and trailing-slash-insensitive for compatibility.
List and address profiles
POST /api/v2/browser-profile/list supports profile_id, profile_no, group_id, pagination and sorting. Results have data.list, page, limit and page_size; do not require a total field. A short page is the stopping condition when paginating.
Use IDs returned by the list. For one profile, supply profile_id or the register’s profile_no. Do not guess an ID from a Creator’s display name.
Create, update, start and stop
| POST route | Main inputs | Result or effect |
|---|---|---|
/api/v2/browser-profile/create | name, optional group_id, remark, user_proxy_config, fingerprint_config | New profile_id and profile_no |
/api/v2/browser-profile/update | Target plus changed fields | Applies the supplied profile changes |
/api/v2/browser-profile/start | Target, optional headless, delete_cache, launch_args | Launches or returns the existing browser endpoint |
/api/v2/browser-profile/stop | Target | Stops that profile through the normal session-capture path |
/api/v2/browser-profile/stop-all | No target | Stops running profiles and reports outcomes |
A literal proxy uses user_proxy_config with proxy_soft, proxy_type, proxy_host, proxy_port, proxy_user and proxy_password. For a custom gateway, proxy_soft is other. The example below deliberately has no username or password:
{
"name": "Creator A · X",
"user_proxy_config": {
"proxy_soft": "other",
"proxy_type": "socks5",
"proxy_host": "203.0.113.10",
"proxy_port": "1080"
}
}delete_cache on start requests cache clearing at close. It is separate from replacing session cookies. Default visible launch is headless: false.
A successful v2 start exposes data.ws.puppeteer, the CDP WebSocket, and browser connection information. Connect automation to the returned endpoint rather than starting a second browser with a new identity.
import { chromium } from 'playwright';
const response = await fetch(`${baseUrl}/api/v2/browser-profile/start`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`,
},
body: JSON.stringify({ profile_id: profileId }),
});
const reply = await response.json();
if (reply.code !== 0) throw new Error(reply.msg);
const browser = await chromium.connectOverCDP(reply.data.ws.puppeteer);baseUrl, token and profileId in this example are values obtained by your integration. Stop through the API when finished so the normal capture and cleanup path runs.
Profile creation fields
v1 and v2 use a compatibility mapper. Top-level fields include name, remark, domain_name, platform, username, password, fakey, cookie, ipchecker, ip, country, category_id, sys_app_cate_id, group_id, open_urls, tabs and launch_args. group_id must exist. user_proxy_config is a nested object; proxyid selects a saved proxy when no nested object was supplied. Keep credential-bearing bodies and responses out of logs.
fingerprint_config is an object with these verified input fields:
| Field | Mapping or values |
|---|---|
ua, user_agent | User agent; user_agent wins when both are supplied |
automatic_timezone, timezone | Automatic maps to proxy time; false chooses custom. A timezone without the switch selects custom |
webrtc | disabled / disable, proxy, local, disables udp / disable_non_proxied_udp map to disabled, replace, local and proxy-UDP modes |
location | ask requests permission; block blocks location |
location_switch | True selects IP-derived position; false selects custom |
latitude, longitude, accuracy | Custom location; mapper fallback accuracy is 100 m |
language_switch, language | IP-derived or custom language; language accepts a list or string |
page_language_switch, page_language | Language-derived or custom browser display language; native does not set an override |
screen_resolution | none uses this computer, random generates a size, another value sets custom; underscores become x |
fonts | all keeps default fonts; other entries are font families to hide |
canvas, webgl_image, audio, audio_context, media_devices, client_rects, speech_voices, speech_switch | Noise toggles; 0, real, disabled, false mean off. Later aliases win: audio_context and speech_switch |
webgl | 0 uses this computer; other values select custom |
webgl_vendor, webgl_renderer | Graphics strings |
webgl_config.unmasked_vendor, webgl_config.unmasked_renderer | Nested graphics overrides |
webgl_config.webgpu.webgpu_switch | 0 disabled, 1 based on WebGL, 2 this computer |
hardware_concurrency, device_memory | Custom CPU cores and RAM; parsed as integers |
media_devices_num.audioinput_num, videoinput_num, audiooutput_num | Microphone, camera and speaker counts in the media_devices_num object |
do_not_track | true means on, false off; other values use the default |
scan_port_type, allow_scan_ports | Port-scan setting and exception list |
device_name_switch, device_name | Switch 0 uses the real device name; otherwise custom |
mac_address_config.model, mac_address_config.address | Model 0 uses the real MAC; otherwise custom |
browser_kernel_config.version | Numeric engine-major pin |
gpu | 1 enables hardware acceleration, 2 disables it |
tls_switch, tls | TLS-feature toggle and cipher blacklist |
These names belong to the HTTP compatibility vocabulary. They differ from the flat field flags in cloutctl. Avoid sending both aliases unless you intend the documented precedence. On updates, supply only the changes you reviewed; read the resulting record and verify its next launch.
Profile and catalogue reads
| Method | Route | Use |
|---|---|---|
| GET | /api/v2/browser-profile/active | Runtime status for a target profile |
| GET | /api/v2/browser-profile/cookies | The target’s cookie jar; treat the result as a credential |
| GET | /api/v2/browser-profile/kernels | Engines installed on this host |
| GET | /api/v2/category/list | Compatibility category 0, Other; use v1 group/list for profile groups |
| POST | /api/v2/browser-tags/list | Tags |
| POST | /api/v2/proxy-list/list | Compatibility proxy book |
Tag create, update and delete use POST on the same prefix. Proxy-list create, update and delete also use POST. Deletion and cookie reads deserve the same deliberate handling as the corresponding desktop actions.
v1 compatibility
v1 supports existing AdsPower integrations: browser start, stop and active; user list, create, update and delete; and group list, create, update and delete. v2 is the clearer choice for a new profile integration. The route tables below list the installed contract without changing the envelopes existing consumers read.
v3 features
v3 adds folders, templates, extensions, saved proxies, provider templates, proxy pools, bulk actions, tasks, cookie robot, engine preparation, window arrangement, bandwidth and limits. The route index below is organised by resource.
Bulk delete, stop and clear-cache return succeeded, failed and items. Each item has id, ok and, on failure, error. Folder, tag and extension bulk calls return a touched-profile count instead; read the particular operation’s response. Proxy pools are available to scripts rather than as a desktop pool page.
Tasks and cookie robot are real operations on browsers. Create or inspect the task definition before calling run. Cookie robot defaults are readable at /api/v3/cookie-robot/defaults; its start route does not offer a headless option.
Local API documentation and OpenAPI route list use the default address. Substitute the address shown by your installation. They enumerate methods and paths; they do not constitute a full request-field schema.
v1 route index
v1 calls address one profile with user_id or id; start and stop also accept serial_number. List and group reads accept page and page_size. Several compatible v1 actions accept GET, but POST keeps action inputs out of URLs.
| Method | Route | Inputs and behavior |
|---|---|---|
| GET | /api/v1/user/list | group_id, user_id, serial_number, user_sort; list identifiers can be arrays or comma-separated strings |
| GET or POST | /api/v1/user/detail | user_id or id; full stored profile record |
| POST | /api/v1/user/create | Profile creation fields, including name, group_id, user_proxy_config, fingerprint_config; returns id, user_id, serial_number |
| POST | /api/v1/user/update | user_id or id, changed creation fields, optional regenerate_fingerprint |
| POST | /api/v1/user/delete | user_ids or one user_id / id |
| POST | /api/v1/user/regroup | user_ids or user_id, required group_id |
| POST | /api/v1/user/delete-cache | Fleet-wide; refuses if any browser is running |
| POST | /api/v1/user/clear-cache | Alias for fleet-wide delete-cache |
| GET or POST | /api/v1/browser/start | Target, wait_seconds (default 20), launch_args, headless, clear_cache_after_closing |
| GET or POST | /api/v1/browser/stop | Target; idle is already stopped |
| GET or POST | /api/v1/browser/active | user_id or id; runtime status |
| GET or POST | /api/v1/browser/local-active | Running local profiles in data.list |
| POST | /api/v1/browser/cloud-active | user_ids; running matches in a bare data array, with account: "local" |
| GET | /api/v1/group/list | Optional substring group_name |
| POST | /api/v1/group/create | group_name or name, optional remark; returns an existing case-insensitive name instead of duplicating it |
| POST | /api/v1/group/update | group_id, group_name or name, optional remark; supply the name explicitly |
| POST | /api/v1/group/delete | group_id, optional merge_into (default "0"); moves profiles before deleting the group |
| GET or POST | /api/v1/application/list | Compatibility category list |
The reserved Ungrouped group "0" cannot be renamed or deleted. A v1 group is separate from a v3 folder. Full profile records and cookie reads can contain session or connection credentials; keep their responses private.
Remaining v2 operations
The profile lifecycle and catalogue tables above cover the main routes. These additional operations are implemented:
| Method | Route | Inputs and behavior |
|---|---|---|
| POST | /api/v2/browser-profile/delete | profile_id list; deletes through the profile service |
| POST | /api/v2/browser-profile/delete-cache | profile_id list, type list; profiles must be stopped |
| POST | /api/v2/browser-profile/ua | profile_id or profile_no list; reports the resolved user agent |
| POST | /api/v2/browser-profile/new-fingerprint | profile_id or profile_no list; rebuilds identities in place, refuses running targets |
| POST | /api/v2/browser-profile/download-kernel | kernel_type, kernel_version; confirms an installed engine and refuses a missing one; it does not download |
| POST | /api/v2/browser-tags/create | tags array of records or a top-level array; name, optional color |
| POST | /api/v2/browser-tags/update | Records with id and changed name, color |
| POST | /api/v2/browser-tags/delete | ids or id |
| POST | /api/v2/proxy-list/create | Proxy object or array; at most the first 500 entries are taken |
| POST | /api/v2/proxy-list/update | One record with proxy_id and changed fields |
| POST | /api/v2/proxy-list/delete | proxy_id list |
/api/v2/browser-profile/share refuses in this local launcher. Workspace access is managed through Team. /api/v2/browser-profile/update-patch is a compatibility response, not an app updater; use Check for updates in the desktop.
v3 route and field index
Every read in these tables accepts GET or POST. Every write accepts POST. Inputs name the fields read by the handler; IDs refer to records returned by the matching list. Send arrays and objects in a JSON body. Omitted update fields generally keep their values; exceptions are noted below.
Folders
| Route | Operation | Inputs |
|---|---|---|
/api/v3/folders/list | Read | flat |
/api/v3/folders/get | Read | folder_id |
/api/v3/folders/membership | Read | None |
/api/v3/folders/create | Write | name, parent_id, color, position |
/api/v3/folders/update | Write | folder_id, name, color, position, parent_id |
/api/v3/folders/delete | Write | folder_ids |
/api/v3/folders/assign | Write | profile_id, folder_ids, mode |
Kernels
| Route | Operation | Inputs |
|---|---|---|
/api/v3/kernels/prepare | Write | profile_ids |
/api/v3/kernels/status | Read | run_id |
Templates
| Route | Operation | Inputs |
|---|---|---|
/api/v3/templates/list | Read | None |
/api/v3/templates/get | Read | template_id |
/api/v3/templates/create | Write | config, name, remark |
/api/v3/templates/update | Write | template_id, name, remark, config |
/api/v3/templates/delete | Write | template_ids |
/api/v3/templates/from-profile | Write | profile_id, name, remark |
/api/v3/templates/apply | Write | template_id, count, start_index, config, name, group_id |
Extensions
| Route | Operation | Inputs |
|---|---|---|
/api/v3/extensions/list | Read | None |
/api/v3/extensions/get | Read | extension_id |
/api/v3/extensions/for-profile | Read | profile_id |
/api/v3/extensions/defaults | Read | None |
/api/v3/extensions/create | Write | name, source, location, version, remark |
/api/v3/extensions/update | Write | extension_id, name, location, source, version, remark |
/api/v3/extensions/delete | Write | extension_ids |
/api/v3/extensions/attach | Write | profile_id, extension_ids, enabled |
/api/v3/extensions/detach | Write | profile_id, extension_ids |
/api/v3/extensions/set-enabled | Write | profile_id, extension_ids, enabled |
/api/v3/extensions/set-for-profile | Write | profile_id, extension_ids, enabled |
/api/v3/extensions/set-default | Write | extension_id, on |
Proxies
| Route | Operation | Inputs |
|---|---|---|
/api/v3/proxies/list | Read | None |
/api/v3/proxies/get | Read | proxy_id |
/api/v3/proxies/checks | Read | None |
/api/v3/proxies/usage | Read | None |
/api/v3/proxies/default | Read | None |
/api/v3/proxies/check | Write | proxy_id |
/api/v3/proxies/create | Write | proxy object, proxies array or top-level array |
/api/v3/proxies/update | Write | proxy_id, proxy |
/api/v3/proxies/delete | Write | proxy_ids |
/api/v3/proxies/set-default | Write | proxy_id |
/api/v3/proxies/rotate-sessions | Write | profile_ids |
/api/v3/proxies/save-from-profile | Write | profile_id, title |
Proxy templates
| Route | Operation | Inputs |
|---|---|---|
/api/v3/proxy-templates/list | Read | None |
/api/v3/proxy-templates/get | Read | template_id |
/api/v3/proxy-templates/preview | Read | proxy_id |
/api/v3/proxy-templates/create | Write | proxy_id, name, country, city, duration, sticky, remark |
/api/v3/proxy-templates/update | Write | template_id, name, proxy_id, country, city, duration, sticky, remark |
/api/v3/proxy-templates/delete | Write | template_id |
Proxy pools
| Route | Operation | Inputs |
|---|---|---|
/api/v3/proxy-pools/list | Read | None |
/api/v3/proxy-pools/get | Read | pool_id |
/api/v3/proxy-pools/members | Read | pool_id |
/api/v3/proxy-pools/health | Read | pool_id |
/api/v3/proxy-pools/for-profile | Read | profile_id |
/api/v3/proxy-pools/peek | Read | pool_id |
/api/v3/proxy-pools/create | Write | name, rotation, remark, proxy_ids |
/api/v3/proxy-pools/update | Write | pool_id, name, rotation, remark |
/api/v3/proxy-pools/delete | Write | pool_ids |
/api/v3/proxy-pools/assign-proxies | Write | pool_id, proxy_ids, mode (set, add, remove; default set) |
/api/v3/proxy-pools/add-member | Write | pool_id, proxy_id, position |
/api/v3/proxy-pools/set-member-enabled | Write | pool_id, proxy_id, enabled |
/api/v3/proxy-pools/assign | Write | profile_ids, pool_id |
/api/v3/proxy-pools/rotate | Write | profile_id, pool_id |
Referral
| Route | Operation | Inputs |
|---|---|---|
/api/v3/referral/summary | Read | None |
/api/v3/referral/list | Read | code |
/api/v3/referral/codes | Read | None |
/api/v3/referral/attribution | Read | None |
/api/v3/referral/capture | Write | code |
/api/v3/referral/clear | Write | None |
Bulk
| Route | Operation | Inputs |
|---|---|---|
/api/v3/bulk/move | Write | profile_ids, group_id |
/api/v3/bulk/folder | Write | profile_ids, folder_ids, mode |
/api/v3/bulk/tag | Write | profile_ids, tag_ids, mode |
/api/v3/bulk/extension | Write | profile_ids, extension_ids, mode, enabled |
/api/v3/bulk/delete | Write | profile_ids |
/api/v3/bulk/stop | Write | profile_ids |
/api/v3/bulk/clear-cache | Write | profile_ids, types |
Tasks
| Route | Operation | Inputs |
|---|---|---|
/api/v3/tasks/list | Read | None |
/api/v3/tasks/get | Read | task_id |
/api/v3/tasks/runs | Read | task_id, limit |
/api/v3/tasks/run-status | Read | run_id |
/api/v3/tasks/create | Write | name, steps |
/api/v3/tasks/update | Write | task_id, name, steps |
/api/v3/tasks/delete | Write | task_id |
/api/v3/tasks/run | Write | task_id, profile_ids, user_ids, concurrency, keep_open |
/api/v3/tasks/cancel | Write | run_id |
Cookie robot
| Route | Operation | Inputs |
|---|---|---|
/api/v3/cookie-robot/defaults | Read | None |
/api/v3/cookie-robot/start | Write | profile_ids, sites, plan, order, load_timeout_ms, settle_ms, scroll_passes, wheel_notches, scroll_pause_ms, dwell_ms, jitter, site_budget_ms |
/api/v3/cookie-robot/run | Read | run_id |
/api/v3/cookie-robot/cancel | Write | run_id |
Entitlements
| Route | Operation | Inputs |
|---|---|---|
/api/v3/entitlements/limits | Read | None |
Arrange
| Route | Operation | Inputs |
|---|---|---|
/api/v3/arrange/layout | Read | None |
/api/v3/arrange/plan | Read | profile_ids, layout, screen, width, height, x, y, page |
/api/v3/arrange/set-layout | Write | layout, screen, or flat layout and screen fields |
/api/v3/arrange/apply | Write | profile_ids, layout, screen, width, height, x, y, page |
Bandwidth
| Route | Operation | Inputs |
|---|---|---|
/api/v3/bandwidth/fleet | Read | window_seconds |
/api/v3/bandwidth/profiles | Read | window_seconds |
/api/v3/bandwidth/profile | Read | profile_id, window_seconds |
Data shapes and update rules
- Folder list returns
list; get returnsfolder,ancestors,childrenandprofile_ids.folders/listusesflatto choose a flat list. Folder assignment takesset,addorremove; its default isset. Deletingfolder_idsdeletes the subtree and unfiles profiles; it does not delete the profiles. - Templates take
config, a profile-creation object. They strip seeds and credentials.applydefaultscountto 1, acceptsname,group_idand configuration overrides, and returns the created profiles.start_indexresumes within the original count; preserve that count and read the created results before retrying. - Extension rows take
name,source,location, optionalversionandremark. These routes register library metadata and attachments; they do not upload a local extension archive for you. Attachment operations useprofile_id,extension_idsandenabled.set-for-profilereplaces the profile’s attachment set.set-defaultusesonfor future profiles. - Saved proxy create accepts one object, a
proxiesarray, or a top-level array. Useproxy_type,proxy_host,proxy_port,proxy_user,proxy_passwordandtitlefor a connection. Update replaces the saved blob fromproxyor the request fields; it does not merge individual old fields. List and get results can contain credentials. Keep responses private. proxies/set-defaultrequiresproxy_id; explicitnullclears it.save-from-profilecreates a saved entry from the target’s existing connection.rotate-sessionschanges provider sessions and reports per-profile outcomes; it refuses running profiles.- Proxy templates compose a credential from a saved
proxy_id,country,city,durationandsticky. Empty strings and omitted optional strings keep their old values on update. Send a non-empty replacement to change one. Preview returns provider capabilities and placeholders, without actual credential values. - Proxy pools hold saved proxy IDs.
rotationisround_robin(default) orrandom. Assigning a pool to profiles changes their launch egress.peekreads the next member;rotatealso advances the cursor. Delete unassigns profiles and returnsunassigned_profiles. If an account deletion fails, that pool remains and appears infailed. Publish and assignment responses can containcloud.erroreven when the local operation succeeded. Readhealthbefore rotating a pool whose members may be unavailable. - Bulk folder, tag and extension operations take
mode:set,addorremove. Folder defaults toset; tag and extension default toadd. Delete, stop and clear-cache report per-profile outcomes. An empty cachetypeslist means everything. - Kernel prepare takes non-empty
profile_idsand starts preparation; status takes its returnedrun_id. This prepares SunBrowser requirements; Kameleo’s Chroma installation is separate. - Bandwidth uses
window_seconds, not a calendar period. Read the returnedwindowandsaved.note; these fleet measurements are a lower bound and differ from the account dashboard’s all-time roll-up. - Referral routes record attribution and codes. They do not implement a paid reward or a payout.
Tasks and cookie robot
Tasks are available through HTTP and the CLI. Save a definition, run it against returned profile IDs, and poll tasks/run-status using run_id. A start response means the profiles were admitted; it does not mean the work finished. keep_open leaves task browsers open when requested. Cancellation stops further admission and signals work in flight. Deleting a task definition keeps historical run records.
Task steps is an array of these objects:
kind | Fields | Behavior |
|---|---|---|
goto | url, timeoutMs | Opens an HTTP or HTTPS URL |
waitForSelector | selector, timeoutMs | Waits for the selector |
wait | ms | Pauses |
click | selector, timeoutMs | Clicks the matching element |
type | selector, value, perKeyMs, timeoutMs, submit | Types text or a stored credential reference |
scroll | by | Scrolls by the given amount |
readText | selector, variable, timeoutMs | Records matched text under a variable |
screenshot | label | Captures the page |
stopIf | selector, when, outcome, timeoutMs, message | Stops or fails when an element is present or absent |
A literal type value is {"from":"text","text":"Example"}. A credential reference uses from: "credential", site, field (username, password or totp) and optional label. The reference resolves within each profile; the raw two-factor seed is not a task field. Use selectors you have inspected on the target page.
Definitions allow up to 200 steps. The default step timeout is 30,000 ms, with a maximum of 300,000 ms. A wait is at most 300,000 ms. Default typing delay is 30 ms per key. stopIf.when is present or absent; outcome is stop or fail. stop records success when the condition was the intended endpoint.
Cookie robot is a separate browsing run. Read cookie-robot/defaults, then send profile_ids and, optionally, sites and plan fields to start. Plan values are clamped. The response includes unknown_profile_ids and rejected_sites; inspect them before assuming the entire request ran. Poll cookie-robot/run, then cancel through cookie-robot/cancel if needed. It runs visible browsers and provides no headless field.
Write refusals
A read-only licence refuses API writes too. Profile creation and countable v3 resources consult account limits. Profile starts still pass engine, proxy, sync and queue checks.
Check the envelope and report the refusal before retrying. A changing identity, deleting data or rerunning a task is not made safe by treating every code: -1 as a network failure.
Response and failure reference
| Condition | HTTP status | Envelope or result |
|---|---|---|
| Invalid or missing authentication | 401 | code: -401, msg: "Invalid or missing API key" |
| Unknown route or wrong GET/POST variant | 200 | code: -1, msg starts with Unknown route and includes the path |
| Method other than GET or POST | 501 | code: -1, msg starts with Unsupported method and includes the verb |
| Malformed POST JSON or a handler refusal | Usually 200 | code: -1; read msg |
| v3 resource entitlement denial | 200 | code: -402; data names key, limit, used, requested |
| Partially completed creation | 200 | code: -1; progress includes created, requested, remaining, next_index; preserve the original count and resume only the remaining work |
| OPTIONS preflight | 204 | Empty body; allowed methods are GET, POST and OPTIONS |
The body reader takes at most 5,000,000 bytes. A larger JSON document can be truncated and fail parsing; split large requests instead of relying on HTTP success. Header precedence is X-API-Key, then Authorization, then the api_key query value. The Bearer prefix is case-sensitive.
Response fields to preserve
v2 active uses Active or Inactive in status. Its connection fields include ws.selenium, ws.puppeteer, debug_port and webdriver; debug_port is a string and webdriver can be empty. Start returns the connection fields without the active-status label. v2 cookie reads return cookies as a JSON-encoded string, including "[]" for an absent jar; parse that string separately from the response envelope.
List defaults are page 1 and limit 10, capped at 100. Profile sorting uses sort_type and sort_order. Bulk v2 delete, delete-cache, user-agent and fingerprint operations take at most the first 100 targets. Tag mutations and proxy creation take at most the first 500 records. Read the returned records and counts rather than assuming a longer submitted list was processed.
proxies/rotate-sessions returns rotated and failed. Proxy usage is a sanitised connection grouping, while proxy list and get can expose stored connection secrets. An empty string or the string "null", as well as explicit null, clears the default proxy.
Arrangement accepts a nested layout or flat mode, gap, minWidth, minHeight, plus a nested screen or flat x, y, width, height. Page numbering starts at 0. Omitted profile IDs select running profiles; a plan is a read, apply moves windows, and set-layout changes the remembered choice. Read arrange/layout for capabilities before choosing dimensions.
cookie-robot/defaults is a GET or POST read without inputs. run can report found: false for an unknown run. Entitlement, launch, proxy and stopped-profile checks remain in force even for locally authenticated scripts.