openapi: 3.2.0 info: title: Gtm Antidetect Browsers API version: '1.0' contact: name: GTM API url: https://gtm-api.com email: support@gtm-api.com license: name: Proprietary url: https://gtm-api.com/license description: 'Operations tagged antidetect_browsers across 2 of this provider''s published API definitions: gtm-api-openapi-openapi.yml, gtm-api-linkedin-openapi.yaml. Each path carries the servers of the definition it was published in.' servers: - url: https://app.gtm-api.com/linkedin/v4 description: Production, through the app.gtm-api.com gateway security: - BearerJwt: [] TeamSid: [] tags: - name: antidetect_browsers description: Registry package `mcp.linkedin/antidetect_browsers`, served on MCP mount `linkedin.browsers`. paths: /api/antidetect-browsers: post: operationId: create_antidetect_browser summary: Create antidetect browser description: 'Provision ONE antidetect browser for the team. The main flow mints a fresh vendor (GoLogin) profile and pushes the resolved proxy into it, so supply exactly one proxy source: proxy_country_code is the default, custom_proxy_config routes that minted profile through a proxy the caller supplies (probed first, 422 custom_proxy_unreachable_* when dead, never with proxy_5g). Pick the branch yourself, never ask an end user for a sid. Bind an existing vendor_profile_id for the BYO-PROFILE path instead, with no proxy source: that profile carries its own. If no LinkedIn account signs in on it for 30 days, it is deleted and its seat freed. DANGEROUS: creates real vendor + proxy infrastructure. For SEVERAL browsers under ONE approval, do not call this per browser: author a mass action on /mcp/orchestration/mass-actions with scope {kind:"generate", count:N} and a plan of antidetect-browsers.create (+ antidetect-browsers.generate-cloud-browser-access-key), then read the connect links off each row when it finishes. Contract: - MCP tool `create_antidetect_browser`, registry package `mcp.linkedin/antidetect_browsers`, mount `linkedin.browsers`. - Operation `create`, response envelope `create`. - Flags: dangerous: the MCP layer gates it behind a preview/commit token, and the effect cannot be undone through this API.' tags: - antidetect_browsers requestBody: required: false content: application/json: schema: $ref: '#/components/schemas/CreateAntidetectBrowserRequest' responses: '200': description: '`create` success envelope.' content: application/json: schema: $ref: '#/components/schemas/CreateAntidetectBrowserResponse' 4XX: $ref: '#/components/responses/McpClientError' 5XX: $ref: '#/components/responses/McpServerError' x-gtm-mcp-tool: create_antidetect_browser x-gtm-mcp-mount: linkedin.browsers x-gtm-entity: antidetect_browsers x-gtm-operation: create x-gtm-envelope: create x-gtm-availability: ga x-gtm-dangerous: true x-gtm-mass-action: false x-gtm-step-eligible: false x-gtm-schedule-required: false x-gtm-tool-class: typical servers: - url: https://app.gtm-api.com/linkedin/v4 description: Production, through the app.gtm-api.com gateway /api/antidetect-browsers/check-proxy: post: operationId: check_antidetect_browser_proxy summary: Check custom proxy description: 'Probe a customer-supplied proxy tuple and report the exit it reaches: country, IP and round-trip latency. Nothing is written: call it for a proxy you are about to pass as custom_proxy_config, on create or on update-proxy. A proxy that refuses is a SUCCESSFUL call with ok:false plus error_kind (timeout | tls | network | http_error); only a malformed tuple is a 422. The write paths run the same probe themselves, so this verb is for showing the operator what a tuple resolves to BEFORE committing to it. Checking an edit of a browser that already rides its own proxy? Pass its sid and leave the password out: the stored one is probed, as update-proxy keeps it, for the same ip and username only. Contract: - MCP tool `check_antidetect_browser_proxy`, registry package `mcp.linkedin/antidetect_browsers`, mount `linkedin.browsers`. - Operation `action`, response envelope `action`. - Flags: read only.' tags: - antidetect_browsers requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CheckAntidetectBrowserProxyRequest' responses: '200': description: '`action` success envelope.' content: application/json: schema: $ref: '#/components/schemas/CheckAntidetectBrowserProxyResponse' 4XX: $ref: '#/components/responses/McpClientError' 5XX: $ref: '#/components/responses/McpServerError' x-gtm-mcp-tool: check_antidetect_browser_proxy x-gtm-mcp-mount: linkedin.browsers x-gtm-entity: antidetect_browsers x-gtm-operation: action x-gtm-envelope: action x-gtm-availability: ga x-gtm-dangerous: false x-gtm-mass-action: false x-gtm-step-eligible: false x-gtm-schedule-required: false x-gtm-tool-class: trivial servers: - url: https://app.gtm-api.com/linkedin/v4 description: Production, through the app.gtm-api.com gateway /api/antidetect-browsers/generate-cloud-browser-access-key: post: operationId: generate_cloud_browser_access_key summary: Generate cloud-browser access key description: 'Mint a cloud-browser access key (smart-link) on a browser. Returns the whole minted entry in result.access_key, whose `key` field is the raw cb_ak_ token (shown once), AND result.public_connect_url, the ready-to-share link to hand to whoever opens it (no platform account needed on their side). Pass result.access_key.key, never result.access_key, to revoke_cloud_browser_access_key. `purpose` decides what the page behind the link does: `relogin` walks them through signing the LinkedIn session back in and re-binds the browser once they confirm, `share` just hands them the browser to drive. Optional ttl_hours / max_connects / allowed_ips / allowed_countries scope the key; send_to_email also mails the link to whoever holds the LinkedIn password (a fixed mail, no text to supply). DANGEROUS: both the key and the link are bearer secrets granting remote browser access. Contract: - MCP tool `generate_cloud_browser_access_key`, registry package `mcp.linkedin/antidetect_browsers`, mount `linkedin.browsers`. - Operation `action`, response envelope `action`. - Flags: dangerous: the MCP layer gates it behind a preview/commit token, and the effect cannot be undone through this API.' tags: - antidetect_browsers requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GenerateCloudBrowserAccessKeyRequest' responses: '200': description: '`action` success envelope.' content: application/json: schema: $ref: '#/components/schemas/GenerateCloudBrowserAccessKeyResponse' 4XX: $ref: '#/components/responses/McpClientError' 5XX: $ref: '#/components/responses/McpServerError' x-gtm-mcp-tool: generate_cloud_browser_access_key x-gtm-mcp-mount: linkedin.browsers x-gtm-entity: antidetect_browsers x-gtm-operation: action x-gtm-envelope: action x-gtm-availability: ga x-gtm-dangerous: true x-gtm-mass-action: false x-gtm-step-eligible: false x-gtm-schedule-required: false x-gtm-tool-class: typical servers: - url: https://app.gtm-api.com/linkedin/v4 description: Production, through the app.gtm-api.com gateway /api/antidetect-browsers/proxy-countries: post: operationId: list_antidetect_browser_proxy_countries summary: List proxy countries description: 'Proxy countries a new browser can be given right now, with how many active proxies back each. Empty list = the pool is dry; create refuses a country with no stock (422 proxy_pool_empty). Contract: - MCP tool `list_antidetect_browser_proxy_countries`, registry package `mcp.linkedin/antidetect_browsers`, mount `linkedin.browsers`. - Operation `action`, response envelope `action`. - Flags: read only.' tags: - antidetect_browsers responses: '200': description: '`action` success envelope.' content: application/json: schema: $ref: '#/components/schemas/ListAntidetectBrowserProxyCountriesResponse' 4XX: $ref: '#/components/responses/McpClientError' 5XX: $ref: '#/components/responses/McpServerError' x-gtm-mcp-tool: list_antidetect_browser_proxy_countries x-gtm-mcp-mount: linkedin.browsers x-gtm-entity: antidetect_browsers x-gtm-operation: action x-gtm-envelope: action x-gtm-availability: ga x-gtm-dangerous: false x-gtm-mass-action: false x-gtm-step-eligible: false x-gtm-schedule-required: false x-gtm-tool-class: trivial servers: - url: https://app.gtm-api.com/linkedin/v4 description: Production, through the app.gtm-api.com gateway /api/antidetect-browsers/replace-proxy: post: operationId: replace_antidetect_browser_proxy summary: Rotate antidetect browser proxy description: 'Rotate an antidetect browser onto another MANAGED proxy of the SAME country. Geo-binding is preserved, so this is the safe way to drop a flagged IP. Omit antidetect_browser_proxy_sid to take the least-loaded active proxy of that country, or pin one (a pin from another country is refused, 422 proxy_country_mismatch). Platform-owned browsers only, 422 managed_proxy_forbidden_for_owner; a platform row that never got a proxy is 422 proxy_not_managed; a country with no other active proxy is 422 proxy_replacement_unavailable. A running browser is stopped and started again so the new IP takes effect; result.restarted reports whether it came back. Contract: - MCP tool `replace_antidetect_browser_proxy`, registry package `mcp.linkedin/antidetect_browsers`, mount `linkedin.browsers`. - Operation `action`, response envelope `action`. - Flags: dangerous: the MCP layer gates it behind a preview/commit token, and the effect cannot be undone through this API.' tags: - antidetect_browsers requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ReplaceAntidetectBrowserProxyRequest' responses: '200': description: '`action` success envelope.' content: application/json: schema: $ref: '#/components/schemas/ReplaceAntidetectBrowserProxyResponse' 4XX: $ref: '#/components/responses/McpClientError' 5XX: $ref: '#/components/responses/McpServerError' x-gtm-mcp-tool: replace_antidetect_browser_proxy x-gtm-mcp-mount: linkedin.browsers x-gtm-entity: antidetect_browsers x-gtm-operation: action x-gtm-envelope: action x-gtm-availability: ga x-gtm-dangerous: true x-gtm-mass-action: false x-gtm-step-eligible: false x-gtm-schedule-required: false x-gtm-tool-class: typical servers: - url: https://app.gtm-api.com/linkedin/v4 description: Production, through the app.gtm-api.com gateway /api/antidetect-browsers/revoke-cloud-browser-access-key: post: operationId: revoke_cloud_browser_access_key summary: Revoke cloud-browser access key description: 'Revoke a cloud-browser access key on a browser. Pass the cb_ak_ key to revoke one; omit key to revoke EVERY key on the row. Only removes the key; live cloud-browser sessions are not force-disconnected. DANGEROUS: cuts off remote access. Contract: - MCP tool `revoke_cloud_browser_access_key`, registry package `mcp.linkedin/antidetect_browsers`, mount `linkedin.browsers`. - Operation `action`, response envelope `action`. - Flags: dangerous: the MCP layer gates it behind a preview/commit token, and the effect cannot be undone through this API.' tags: - antidetect_browsers requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RevokeCloudBrowserAccessKeyRequest' responses: '200': description: '`action` success envelope.' content: application/json: schema: $ref: '#/components/schemas/RevokeCloudBrowserAccessKeyResponse' 4XX: $ref: '#/components/responses/McpClientError' 5XX: $ref: '#/components/responses/McpServerError' x-gtm-mcp-tool: revoke_cloud_browser_access_key x-gtm-mcp-mount: linkedin.browsers x-gtm-entity: antidetect_browsers x-gtm-operation: action x-gtm-envelope: action x-gtm-availability: ga x-gtm-dangerous: true x-gtm-mass-action: false x-gtm-step-eligible: false x-gtm-schedule-required: false x-gtm-tool-class: typical servers: - url: https://app.gtm-api.com/linkedin/v4 description: Production, through the app.gtm-api.com gateway /api/antidetect-browsers/run: post: operationId: run_antidetect_browser summary: Run antidetect browser description: 'Start an antidetect browser session by sid. Two-phase: transitions to queued_to_start, dispatches to an automation server, then settles into initializing / running / start_issue. Identify the browser by its ab_br_ sid in the body. Contract: - MCP tool `run_antidetect_browser`, registry package `mcp.linkedin/antidetect_browsers`, mount `linkedin.browsers`. - Operation `action`, response envelope `action`. - Flags: dangerous: the MCP layer gates it behind a preview/commit token, and the effect cannot be undone through this API.' tags: - antidetect_browsers requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RunAntidetectBrowserRequest' responses: '200': description: '`action` success envelope.' content: application/json: schema: $ref: '#/components/schemas/RunAntidetectBrowserResponse' 4XX: $ref: '#/components/responses/McpClientError' 5XX: $ref: '#/components/responses/McpServerError' x-gtm-mcp-tool: run_antidetect_browser x-gtm-mcp-mount: linkedin.browsers x-gtm-entity: antidetect_browsers x-gtm-operation: action x-gtm-envelope: action x-gtm-availability: ga x-gtm-dangerous: true x-gtm-mass-action: false x-gtm-step-eligible: false x-gtm-schedule-required: false x-gtm-tool-class: typical servers: - url: https://app.gtm-api.com/linkedin/v4 description: Production, through the app.gtm-api.com gateway /api/antidetect-browsers/search: post: operationId: search_antidetect_browsers summary: Search antidetect browsers description: 'List antidetect browsers on the team with filters (name lookup via the vendor_name filter, eq/in), sorting and cursor pagination. Live browsers by default (filter {"deleted_at": {"is_null": true}}). Returns a counts block of predicate tallies; include[] can eager-load linkedin_account, antidetect_browser_proxy and antidetect_browser_logs. Use this to find a browser sid before run / stop / delete. Contract: - MCP tool `search_antidetect_browsers`, registry package `mcp.linkedin/antidetect_browsers`, mount `linkedin.browsers`. - Operation `search`, response envelope `search`. - Flags: read only.' tags: - antidetect_browsers requestBody: required: false content: application/json: schema: $ref: '#/components/schemas/SearchAntidetectBrowsersRequest' responses: '200': description: '`search` success envelope.' content: application/json: schema: $ref: '#/components/schemas/SearchAntidetectBrowsersResponse' 4XX: $ref: '#/components/responses/McpClientError' 5XX: $ref: '#/components/responses/McpServerError' x-gtm-mcp-tool: search_antidetect_browsers x-gtm-mcp-mount: linkedin.browsers x-gtm-entity: antidetect_browsers x-gtm-operation: search x-gtm-envelope: search x-gtm-availability: ga x-gtm-dangerous: false x-gtm-mass-action: false x-gtm-step-eligible: false x-gtm-schedule-required: false x-gtm-tool-class: typical servers: - url: https://app.gtm-api.com/linkedin/v4 description: Production, through the app.gtm-api.com gateway /api/antidetect-browsers/seat-usage: post: operationId: get_antidetect_browser_seat_usage summary: Get seat usage description: 'Seats and 5G proxy slots the workspace occupies: every live browser row, whatever its status and whether a LinkedIn account is bound. Team-wide; compare against limits.accounts and limits.proxy_5g. Contract: - MCP tool `get_antidetect_browser_seat_usage`, registry package `mcp.linkedin/antidetect_browsers`, mount `linkedin.browsers`. - Operation `action`, response envelope `action`. - Flags: read only.' tags: - antidetect_browsers responses: '200': description: '`action` success envelope.' content: application/json: schema: $ref: '#/components/schemas/GetAntidetectBrowserSeatUsageResponse' 4XX: $ref: '#/components/responses/McpClientError' 5XX: $ref: '#/components/responses/McpServerError' x-gtm-mcp-tool: get_antidetect_browser_seat_usage x-gtm-mcp-mount: linkedin.browsers x-gtm-entity: antidetect_browsers x-gtm-operation: action x-gtm-envelope: action x-gtm-availability: ga x-gtm-dangerous: false x-gtm-mass-action: false x-gtm-step-eligible: false x-gtm-schedule-required: false x-gtm-tool-class: trivial servers: - url: https://app.gtm-api.com/linkedin/v4 description: Production, through the app.gtm-api.com gateway /api/antidetect-browsers/stop: post: operationId: stop_antidetect_browser summary: Stop antidetect browser description: 'Stop an antidetect browser session by sid. Default is graceful (queued_to_stop → stopped on the node teardown confirmation); now:true commits stopped immediately and dispatches a best-effort teardown. Identify the browser by its ab_br_ sid in the body. Contract: - MCP tool `stop_antidetect_browser`, registry package `mcp.linkedin/antidetect_browsers`, mount `linkedin.browsers`. - Operation `action`, response envelope `action`. - Flags: dangerous: the MCP layer gates it behind a preview/commit token, and the effect cannot be undone through this API.' tags: - antidetect_browsers requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/StopAntidetectBrowserRequest' responses: '200': description: '`action` success envelope.' content: application/json: schema: $ref: '#/components/schemas/StopAntidetectBrowserResponse' 4XX: $ref: '#/components/responses/McpClientError' 5XX: $ref: '#/components/responses/McpServerError' x-gtm-mcp-tool: stop_antidetect_browser x-gtm-mcp-mount: linkedin.browsers x-gtm-entity: antidetect_browsers x-gtm-operation: action x-gtm-envelope: action x-gtm-availability: ga x-gtm-dangerous: true x-gtm-mass-action: false x-gtm-step-eligible: false x-gtm-schedule-required: false x-gtm-tool-class: typical servers: - url: https://app.gtm-api.com/linkedin/v4 description: Production, through the app.gtm-api.com gateway /api/antidetect-browsers/update-proxy: post: operationId: update_antidetect_browser_proxy summary: Change antidetect browser proxy description: 'Change the proxy of an existing antidetect browser, country included. Supply EXACTLY ONE source: antidetect_browser_proxy_sid, proxy_country_code or custom_proxy_config. EVERY arm needs browser_owner=platform: a profile bound by id keeps its proxy in the vendor (422 managed_proxy_forbidden_for_owner / 422 custom_proxy_forbidden_for_owner). custom_proxy_config is probed first (422 custom_proxy_unreachable_* changes nothing), takes the exit country measured there, and RELEASES any armed 5G slot. Zero sources 422 proxy_assignment_missing, more than one 422 proxy_assignment_conflict, empty pool 422 proxy_pool_empty, 5G on a BYO proxy 422 proxy_5g_requires_managed_proxy. proxy_5g alone is a valid body: it moves the add-on binding only. DANGEROUS twice over: a location flip mid-campaign can trip a LinkedIn risk check, and a running browser is restarted, since a live session keeps the old proxy until it respawns. Read result.restarted. To rotate the IP in place, use replace_antidetect_browser_proxy. Contract: - MCP tool `update_antidetect_browser_proxy`, registry package `mcp.linkedin/antidetect_browsers`, mount `linkedin.browsers`. - Operation `action`, response envelope `action`. - Flags: dangerous: the MCP layer gates it behind a preview/commit token, and the effect cannot be undone through this API.' tags: - antidetect_browsers requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateAntidetectBrowserProxyRequest' responses: '200': description: '`action` success envelope.' content: application/json: schema: $ref: '#/components/schemas/UpdateAntidetectBrowserProxyResponse' 4XX: $ref: '#/components/responses/McpClientError' 5XX: $ref: '#/components/responses/McpServerError' x-gtm-mcp-tool: update_antidetect_browser_proxy x-gtm-mcp-mount: linkedin.browsers x-gtm-entity: antidetect_browsers x-gtm-operation: action x-gtm-envelope: action x-gtm-availability: ga x-gtm-dangerous: true x-gtm-mass-action: false x-gtm-step-eligible: false x-gtm-schedule-required: false x-gtm-tool-class: complex servers: - url: https://app.gtm-api.com/linkedin/v4 description: Production, through the app.gtm-api.com gateway /api/antidetect-browsers/{sid}: get: operationId: get_antidetect_browser summary: Get antidetect browser description: 'Fetch a single antidetect browser by sid, with optional eager-loaded relations. Contract: - MCP tool `get_antidetect_browser`, registry package `mcp.linkedin/antidetect_browsers`, mount `linkedin.browsers`. - Operation `get`, response envelope `get`. - Flags: read only.' tags: - antidetect_browsers parameters: - name: sid in: path required: true description: Path segment `{sid}`. schema: type: string minLength: 18 maxLength: 18 pattern: ^ab_br_ - name: include[] in: query required: false description: Query parameter `include`. style: form explode: true schema: type: array items: type: string enum: - linkedin_account - antidetect_browser_proxy - antidetect_browser_logs responses: '200': description: '`get` success envelope.' content: application/json: schema: $ref: '#/components/schemas/GetAntidetectBrowserResponse' 4XX: $ref: '#/components/responses/McpClientError' 5XX: $ref: '#/components/responses/McpServerError' x-gtm-mcp-tool: get_antidetect_browser x-gtm-mcp-mount: linkedin.browsers x-gtm-entity: antidetect_browsers x-gtm-operation: get x-gtm-envelope: get x-gtm-availability: ga x-gtm-dangerous: false x-gtm-mass-action: false x-gtm-step-eligible: false x-gtm-schedule-required: false x-gtm-tool-class: trivial delete: operationId: delete_antidetect_browser summary: Delete antidetect browser description: 'Decommission (soft-delete) a single antidetect browser by sid: outward, destructive, one-way through MCP. A browser in an active-run status is stopped FIRST and the node must confirm: the call can take up to ~20s waiting for that confirm, and if it does not arrive the delete is refused with 409 conflict (context.reason=browser_stop_unconfirmed) and NOTHING is deleted - retry in a minute rather than assuming success. Variant B cascade: the bound linkedin-account is soft-deleted and pending plugin tasks transition to failed; the cascade block reports the counts. A platform-minted GoLogin profile is reclaimed (deleted) at the vendor unless another live browser row still holds it; customer BYO vendor profiles are left intact. Contract: - MCP tool `delete_antidetect_browser`, registry package `mcp.linkedin/antidetect_browsers`, mount `linkedin.browsers`. - Operation `delete`, response envelope `delete_cascade`. - Flags: dangerous: the MCP layer gates it behind a preview/commit token, and the effect cannot be undone through this API.' tags: - antidetect_browsers parameters: - name: sid in: path required: true description: Path segment `{sid}`. schema: type: string minLength: 18 maxLength: 18 pattern: ^ab_br_ - name: acknowledge[] in: query required: false description: Resolution codes for soft blockers the user confirmed. style: form explode: true schema: type: array items: type: string description: Resolution codes for soft blockers the user confirmed. responses: '200': description: '`delete_cascade` success envelope.' content: application/json: schema: $ref: '#/components/schemas/DeleteAntidetectBrowserResponse' 4XX: $ref: '#/components/responses/McpClientError' 5XX: $ref: '#/components/responses/McpServerError' x-gtm-mcp-tool: delete_antidetect_browser x-gtm-mcp-mount: linkedin.browsers x-gtm-entity: antidetect_browsers x-gtm-operation: delete x-gtm-envelope: delete_cascade x-gtm-availability: ga x-gtm-dangerous: true x-gtm-mass-action: false x-gtm-step-eligible: false x-gtm-schedule-required: false x-gtm-tool-class: typical servers: - url: https://app.gtm-api.com/linkedin/v4 description: Production, through the app.gtm-api.com gateway components: schemas: DeleteAntidetectBrowserResponse: type: object properties: success: type: boolean enum: - true operation: type: string enum: - delete item: type: object additionalProperties: {} already_deleted: type: boolean soft_deleted: type: boolean cascade: type: - object - 'null' properties: summary: type: string details: type: array items: type: object properties: entity: type: string deleted: type: integer cancelled: type: integer required: - entity - deleted recovery_available_until: type: - string - 'null' required: - summary - details - recovery_available_until meta: type: object properties: trace_id: type: string description: UUID v7; same 128-bit value as the X-Trace-Id header. span_id: type: string pattern: ^[0-9a-f]{16}$ description: 16 hex chars, root span of this request. timestamp: type: string description: ISO 8601 UTC (Y-m-dTH:i:sZ), response time. duration_ms: type: integer minimum: 0 description: Server-side wall clock. team_sid: type: - string - 'null' description: The team this call ran in (the token team, or the team_sid override). Null when unauthenticated; absent from pre-2026-08-20 backends. actor_type: type: - string - 'null' description: user | agent | api_key | system. Null when unauthenticated; absent from pre-2026-08-20 backends. required: - trace_id - span_id - timestamp - duration_ms required: - success - operation - item - already_deleted - soft_deleted - cascade - meta RunAntidetectBrowserRequest: type: object description: Request body of `run_antidetect_browser`. properties: sid: type: string minLength: 18 maxLength: 18 pattern: ^ab_br_ description: Antidetect browser sid (ab_br_…). required: - sid StopAntidetectBrowserResponse: type: object properties: success: type: boolean enum: - true operation: type: string enum: - action action: type: string description: kebab-case verb; matches the route segment. item: type: - object - 'null' properties: sid: type: string team_sid: type: string linkedin_account_sid: type: - string - 'null' automation_server_sid: type: - string - 'null' account_share_sid: type: - string - 'null' share_role: type: - string - 'null' enum: - owner - holder - giver - receiver vendor_provider: type: string enum: - gologin - multilogin - adspower - dolphin vendor_name: type: - string - 'null' vendor_profile_id: type: - string - 'null' browser_owner: type: string enum: - platform - customer status: type: string enum: - stopped - queued_to_start - initializing - running - idle - queued_to_stop - start_issue - running_issue - login_issue - restricted - client_error_investigation - support_error_investigation - maintenance - shared_out - subscription_required error_reason: type: - string - 'null' fail_count: type: number last_fail_at: type: - string - 'null' logout_count: type: number last_logout_at: type: - string - 'null' last_start_at: type: - string - 'null' last_health_check_at: type: - string - 'null' last_activity_at: type: - string - 'null' antidetect_browser_proxy_sid: type: - string - 'null' proxy_country_code: type: - string - 'null' custom_proxy: type: - object - 'null' properties: ip: type: string port: type: integer mode: type: string username: type: - string - 'null' exit_ip: type: - string - 'null' latency_ms: type: - integer - 'null' required: - ip - port - mode - username - exit_ip - latency_ms proxy_5g: type: boolean description: '5G Proxy add-on: the browser runs on the dedicated 5G mobile route (faster command execution, fewer retries). Each flagged browser occupies one add-on slot.' cloud_browser_access: type: array items: type: object properties: key: type: - string - 'null' minLength: 18 maxLength: 18 pattern: ^cb_ak_ description: 'The bearer token itself, in full, for a caller holding can_manage_cloud_browser_external_links (the permission that mints it: reading a key is the same power as minting one, since the public connect checks nothing but the key). null for every other caller; the entry stays so the link, its expiry and its use can still be listed. On cloud-browser-sessions it is masked to the last 4.' expires_at: type: - string - 'null' description: ISO 8601 expiry; null means it never expires. Checked at connect and never again, so a session can outlive its own key. max_connects: type: - number - 'null' description: Cap on CONCURRENT sessions on this key; null means unlimited. allowed_ips: type: - array - 'null' items: type: string allowed_countries: type: - array - 'null' items: type: string purpose: type: string enum: - relogin - recruiter_relogin - share description: What the public page behind the link does. Stamped at mint and never re-negotiated at connect, because the visitor is unauthenticated. Absent on keys minted before the field existed, which the backend reads as relogin. required: - key - expires_at - max_connects - allowed_ips - allowed_countries description: The smart links minted on this browser; the key itself only for a caller holding can_manage_cloud_browser_external_links, null otherwise (2026-09-16). Each console open used to leave a throwaway entry here; minting now sweeps entries that expired over 24h ago, so this is the live link list rather than a log. vendor_profile_shares: type: - array - 'null' items: type: object properties: email: type: string role: type: string shared_at: type: - string - 'null' shared_by: type: - string - 'null' vendor_share_id: type: - string - 'null' required: - email - role - shared_at - shared_by - vendor_share_id created_by: type: object properties: actor_type: type: string enum: - user - support - api_key - system - agent actor_sid: type: - string - 'null' team_sid: type: string actor_name: type: - string - 'null' description: The OAuth client that acted ("Claude", "n8n"); null for a user, an API key or a system job. oauth_client_sid: type: - string - 'null' description: The acting OAuth client (id_oc_*); null off the OAuth path. reason: type: - string - 'null' description: Why a system actor wrote the row (snapshot_capture_job, ...); null otherwise. permissions: type: object additionalProperties: {} description: 'Internal audit context: the grant set the actor held at write time. Not a contract.' cluster_id: type: - integer - 'null' description: 'Internal audit context: the cluster that served the write.' trace_id: type: - string - 'null' description: 'Internal audit context: the trace id of the request that wrote the row.' required: - actor_type - actor_sid - team_sid - permissions deleted_by: type: - object - 'null' properties: actor_type: type: string enum: - user - support - api_key - system - agent actor_sid: type: - string - 'null' team_sid: type: string actor_name: type: - string - 'null' description: The OAuth client that acted ("Claude", "n8n"); null for a user, an API key or a system job. oauth_client_sid: type: - string - 'null' description: The acting OAuth client (id_oc_*); null off the OAuth path. reason: type: - string - 'null' description: Why a system actor wrote the row (snapshot_capture_job, ...); null otherwise. permissions: type: object additionalProperties: {} description: 'Internal audit context: the grant set the actor held at write time. Not a contract.' cluster_id: type: - integer - 'null' description: 'Internal audit context: the cluster that served the write.' trace_id: type: - string - 'null' description: 'Internal audit context: the trace id of the request that wrote the row.' required: - actor_type - actor_sid - team_sid - permissions created_at: type: string updated_at: type: string deleted_at: type: - string - 'null' required: - sid - team_sid - linkedin_account_sid - automation_server_sid - account_share_sid - share_role - vendor_provider - vendor_name - vendor_profile_id - browser_owner - status - error_reason - fail_count - last_fail_at - logout_count - last_logout_at - last_start_at - last_health_check_at - last_activity_at - antidetect_browser_proxy_sid - proxy_country_code - custom_proxy - proxy_5g - cloud_browser_access - vendor_profile_shares - created_by - deleted_by - created_at - updated_at - deleted_at result: type: object additionalProperties: {} meta: type: object properties: trace_id: type: string description: UUID v7; same 128-bit value as the X-Trace-Id header. span_id: type: string pattern: ^[0-9a-f]{16}$ description: 16 hex chars, root span of this request. timestamp: type: string description: ISO 8601 UTC (Y-m-dTH:i:sZ), response time. duration_ms: type: integer minimum: 0 description: Server-side wall clock. team_sid: type: - string - 'null' description: The team this call ran in (the token team, or the team_sid override). Null when unauthenticated; absent from pre-2026-08-20 backends. actor_type: type: - string - 'null' description: user | agent | api_key | system. Null when unauthenticated; absent from pre-2026-08-20 backends. required: - trace_id - span_id - timestamp - duration_ms required: - success - operation - action - item - result - meta ReplaceAntidetectBrowserProxyRequest: type: object description: Request body of `replace_antidetect_browser_proxy`. properties: sid: type: string minLength: 18 maxLength: 18 pattern: ^ab_br_ description: Antidetect browser sid (ab_br_…). antidetect_browser_proxy_sid: type: - string - 'null' minLength: 18 maxLength: 18 pattern: ^ab_px_ description: Pin a specific same-country replacement; omit for the least-loaded one. required: - sid GenerateCloudBrowserAccessKeyResponse: type: object properties: success: type: boolean enum: - true operation: type: string enum: - action action: type: string description: kebab-case verb; matches the route segment. item: type: - object - 'null' properties: sid: type: string team_sid: type: string linkedin_account_sid: type: - string - 'null' automation_server_sid: type: - string - 'null' account_share_sid: type: - string - 'null' share_role: type: - string - 'null' enum: - owner - holder - giver - receiver vendor_provider: type: string enum: - gologin - multilogin - adspower - dolphin vendor_name: type: - string - 'null' vendor_profile_id: type: - string - 'null' browser_owner: type: string enum: - platform - customer status: type: string enum: - stopped - queued_to_start - initializing - running - idle - queued_to_stop - start_issue - running_issue - login_issue - restricted - client_error_investigation - support_error_investigation - maintenance - shared_out - subscription_required error_reason: type: - string - 'null' fail_count: type: number last_fail_at: type: - string - 'null' logout_count: type: number last_logout_at: type: - string - 'null' last_start_at: type: - string - 'null' last_health_check_at: type: - string - 'null' last_activity_at: type: - string - 'null' antidetect_browser_proxy_sid: type: - string - 'null' proxy_country_code: type: - string - 'null' custom_proxy: type: - object - 'null' properties: ip: type: string port: type: integer mode: type: string username: type: - string - 'null' exit_ip: type: - string - 'null' latency_ms: type: - integer - 'null' required: - ip - port - mode - username - exit_ip - latency_ms proxy_5g: type: boolean description: '5G Proxy add-on: the browser runs on the dedicated 5G mobile route (faster command execution, fewer retries). Each flagged browser occupies one add-on slot.' cloud_browser_access: type: array items: type: object properties: key: type: - string - 'null' minLength: 18 maxLength: 18 pattern: ^cb_ak_ description: 'The bearer token itself, in full, for a caller holding can_manage_cloud_browser_external_links (the permission that mints it: reading a key is the same power as minting one, since the public connect checks nothing but the key). null for every other caller; the entry stays so the link, its expiry and its use can still be listed. On cloud-browser-sessions it is masked to the last 4.' expires_at: type: - string - 'null' description: ISO 8601 expiry; null means it never expires. Checked at connect and never again, so a session can outlive its own key. max_connects: type: - number - 'null' description: Cap on CONCURRENT sessions on this key; null means unlimited. allowed_ips: type: - array - 'null' items: type: string allowed_countries: type: - array - 'null' items: type: string purpose: type: string enum: - relogin - recruiter_relogin - share description: What the public page behind the link does. Stamped at mint and never re-negotiated at connect, because the visitor is unauthenticated. Absent on keys minted before the field existed, which the backend reads as relogin. required: - key - expires_at - max_connects - allowed_ips - allowed_countries description: The smart links minted on this browser; the key itself only for a caller holding can_manage_cloud_browser_external_links, null otherwise (2026-09-16). Each console open used to leave a throwaway entry here; minting now sweeps entries that expired over 24h ago, so this is the live link list rather than a log. vendor_profile_shares: type: - array - 'null' items: type: object properties: email: type: string role: type: string shared_at: type: - string - 'null' shared_by: type: - string - 'null' vendor_share_id: type: - string - 'null' required: - email - role - shared_at - shared_by - vendor_share_id created_by: type: object properties: actor_type: type: string enum: - user - support - api_key - system - agent actor_sid: type: - string - 'null' team_sid: type: string actor_name: type: - string - 'null' description: The OAuth client that acted ("Claude", "n8n"); null for a user, an API key or a system job. oauth_client_sid: type: - string - 'null' description: The acting OAuth client (id_oc_*); null off the OAuth path. reason: type: - string - 'null' description: Why a system actor wrote the row (snapshot_capture_job, ...); null otherwise. permissions: type: object additionalProperties: {} description: 'Internal audit context: the grant set the actor held at write time. Not a contract.' cluster_id: type: - integer - 'null' description: 'Internal audit context: the cluster that served the write.' trace_id: type: - string - 'null' description: 'Internal audit context: the trace id of the request that wrote the row.' required: - actor_type - actor_sid - team_sid - permissions deleted_by: type: - object - 'null' properties: actor_type: type: string enum: - user - support - api_key - system - agent actor_sid: type: - string - 'null' team_sid: type: string actor_name: type: - string - 'null' description: The OAuth client that acted ("Claude", "n8n"); null for a user, an API key or a system job. oauth_client_sid: type: - string - 'null' description: The acting OAuth client (id_oc_*); null off the OAuth path. reason: type: - string - 'null' description: Why a system actor wrote the row (snapshot_capture_job, ...); null otherwise. permissions: type: object additionalProperties: {} description: 'Internal audit context: the grant set the actor held at write time. Not a contract.' cluster_id: type: - integer - 'null' description: 'Internal audit context: the cluster that served the write.' trace_id: type: - string - 'null' description: 'Internal audit context: the trace id of the request that wrote the row.' required: - actor_type - actor_sid - team_sid - permissions created_at: type: string updated_at: type: string deleted_at: type: - string - 'null' required: - sid - team_sid - linkedin_account_sid - automation_server_sid - account_share_sid - share_role - vendor_provider - vendor_name - vendor_profile_id - browser_owner - status - error_reason - fail_count - last_fail_at - logout_count - last_logout_at - last_start_at - last_health_check_at - last_activity_at - antidetect_browser_proxy_sid - proxy_country_code - custom_proxy - proxy_5g - cloud_browser_access - vendor_profile_shares - created_by - deleted_by - created_at - updated_at - deleted_at result: type: object properties: access_key: type: object properties: key: type: - string - 'null' minLength: 18 maxLength: 18 pattern: ^cb_ak_ description: 'The bearer token itself, in full, for a caller holding can_manage_cloud_browser_external_links (the permission that mints it: reading a key is the same power as minting one, since the public connect checks nothing but the key). null for every other caller; the entry stays so the link, its expiry and its use can still be listed. On cloud-browser-sessions it is masked to the last 4.' expires_at: type: - string - 'null' description: ISO 8601 expiry; null means it never expires. Checked at connect and never again, so a session can outlive its own key. max_connects: type: - number - 'null' description: Cap on CONCURRENT sessions on this key; null means unlimited. allowed_ips: type: - array - 'null' items: type: string allowed_countries: type: - array - 'null' items: type: string purpose: type: string enum: - relogin - recruiter_relogin - share description: What the public page behind the link does. Stamped at mint and never re-negotiated at connect, because the visitor is unauthenticated. Absent on keys minted before the field existed, which the backend reads as relogin. required: - key - expires_at - max_connects - allowed_ips - allowed_countries description: 'The minted entry, key included. Shown once: the key is a bearer secret and is never read back in full from any other surface.' public_connect_url: type: string description: Shareable smart link carrying the key. Give this to the person who will open it. sent_to_email: type: string description: 'Present only when the request carried send_to_email: the address the link was mailed to. A queued send, not a delivery receipt.' required: - access_key - public_connect_url meta: type: object properties: trace_id: type: string description: UUID v7; same 128-bit value as the X-Trace-Id header. span_id: type: string pattern: ^[0-9a-f]{16}$ description: 16 hex chars, root span of this request. timestamp: type: string description: ISO 8601 UTC (Y-m-dTH:i:sZ), response time. duration_ms: type: integer minimum: 0 description: Server-side wall clock. team_sid: type: - string - 'null' description: The team this call ran in (the token team, or the team_sid override). Null when unauthenticated; absent from pre-2026-08-20 backends. actor_type: type: - string - 'null' description: user | agent | api_key | system. Null when unauthenticated; absent from pre-2026-08-20 backends. required: - trace_id - span_id - timestamp - duration_ms required: - success - operation - action - item - result - meta UpdateAntidetectBrowserProxyResponse: type: object properties: success: type: boolean enum: - true operation: type: string enum: - action action: type: string description: kebab-case verb; matches the route segment. item: type: - object - 'null' properties: sid: type: string team_sid: type: string linkedin_account_sid: type: - string - 'null' automation_server_sid: type: - string - 'null' account_share_sid: type: - string - 'null' share_role: type: - string - 'null' enum: - owner - holder - giver - receiver vendor_provider: type: string enum: - gologin - multilogin - adspower - dolphin vendor_name: type: - string - 'null' vendor_profile_id: type: - string - 'null' browser_owner: type: string enum: - platform - customer status: type: string enum: - stopped - queued_to_start - initializing - running - idle - queued_to_stop - start_issue - running_issue - login_issue - restricted - client_error_investigation - support_error_investigation - maintenance - shared_out - subscription_required error_reason: type: - string - 'null' fail_count: type: number last_fail_at: type: - string - 'null' logout_count: type: number last_logout_at: type: - string - 'null' last_start_at: type: - string - 'null' last_health_check_at: type: - string - 'null' last_activity_at: type: - string - 'null' antidetect_browser_proxy_sid: type: - string - 'null' proxy_country_code: type: - string - 'null' custom_proxy: type: - object - 'null' properties: ip: type: string port: type: integer mode: type: string username: type: - string - 'null' exit_ip: type: - string - 'null' latency_ms: type: - integer - 'null' required: - ip - port - mode - username - exit_ip - latency_ms proxy_5g: type: boolean description: '5G Proxy add-on: the browser runs on the dedicated 5G mobile route (faster command execution, fewer retries). Each flagged browser occupies one add-on slot.' cloud_browser_access: type: array items: type: object properties: key: type: - string - 'null' minLength: 18 maxLength: 18 pattern: ^cb_ak_ description: 'The bearer token itself, in full, for a caller holding can_manage_cloud_browser_external_links (the permission that mints it: reading a key is the same power as minting one, since the public connect checks nothing but the key). null for every other caller; the entry stays so the link, its expiry and its use can still be listed. On cloud-browser-sessions it is masked to the last 4.' expires_at: type: - string - 'null' description: ISO 8601 expiry; null means it never expires. Checked at connect and never again, so a session can outlive its own key. max_connects: type: - number - 'null' description: Cap on CONCURRENT sessions on this key; null means unlimited. allowed_ips: type: - array - 'null' items: type: string allowed_countries: type: - array - 'null' items: type: string purpose: type: string enum: - relogin - recruiter_relogin - share description: What the public page behind the link does. Stamped at mint and never re-negotiated at connect, because the visitor is unauthenticated. Absent on keys minted before the field existed, which the backend reads as relogin. required: - key - expires_at - max_connects - allowed_ips - allowed_countries description: The smart links minted on this browser; the key itself only for a caller holding can_manage_cloud_browser_external_links, null otherwise (2026-09-16). Each console open used to leave a throwaway entry here; minting now sweeps entries that expired over 24h ago, so this is the live link list rather than a log. vendor_profile_shares: type: - array - 'null' items: type: object properties: email: type: string role: type: string shared_at: type: - string - 'null' shared_by: type: - string - 'null' vendor_share_id: type: - string - 'null' required: - email - role - shared_at - shared_by - vendor_share_id created_by: type: object properties: actor_type: type: string enum: - user - support - api_key - system - agent actor_sid: type: - string - 'null' team_sid: type: string actor_name: type: - string - 'null' description: The OAuth client that acted ("Claude", "n8n"); null for a user, an API key or a system job. oauth_client_sid: type: - string - 'null' description: The acting OAuth client (id_oc_*); null off the OAuth path. reason: type: - string - 'null' description: Why a system actor wrote the row (snapshot_capture_job, ...); null otherwise. permissions: type: object additionalProperties: {} description: 'Internal audit context: the grant set the actor held at write time. Not a contract.' cluster_id: type: - integer - 'null' description: 'Internal audit context: the cluster that served the write.' trace_id: type: - string - 'null' description: 'Internal audit context: the trace id of the request that wrote the row.' required: - actor_type - actor_sid - team_sid - permissions deleted_by: type: - object - 'null' properties: actor_type: type: string enum: - user - support - api_key - system - agent actor_sid: type: - string - 'null' team_sid: type: string actor_name: type: - string - 'null' description: The OAuth client that acted ("Claude", "n8n"); null for a user, an API key or a system job. oauth_client_sid: type: - string - 'null' description: The acting OAuth client (id_oc_*); null off the OAuth path. reason: type: - string - 'null' description: Why a system actor wrote the row (snapshot_capture_job, ...); null otherwise. permissions: type: object additionalProperties: {} description: 'Internal audit context: the grant set the actor held at write time. Not a contract.' cluster_id: type: - integer - 'null' description: 'Internal audit context: the cluster that served the write.' trace_id: type: - string - 'null' description: 'Internal audit context: the trace id of the request that wrote the row.' required: - actor_type - actor_sid - team_sid - permissions created_at: type: string updated_at: type: string deleted_at: type: - string - 'null' required: - sid - team_sid - linkedin_account_sid - automation_server_sid - account_share_sid - share_role - vendor_provider - vendor_name - vendor_profile_id - browser_owner - status - error_reason - fail_count - last_fail_at - logout_count - last_logout_at - last_start_at - last_health_check_at - last_activity_at - antidetect_browser_proxy_sid - proxy_country_code - custom_proxy - proxy_5g - cloud_browser_access - vendor_profile_shares - created_by - deleted_by - created_at - updated_at - deleted_at result: type: object properties: previous_antidetect_browser_proxy_sid: type: - string - 'null' description: The pooled proxy the browser was on before the swap, or null if it had none. restarted: type: boolean description: True when the browser was running and was started again on the new proxy. restart_error: type: - string - 'null' description: Set when the swap committed but the browser could not be restarted. required: - previous_antidetect_browser_proxy_sid - restarted - restart_error meta: type: object properties: trace_id: type: string description: UUID v7; same 128-bit value as the X-Trace-Id header. span_id: type: string pattern: ^[0-9a-f]{16}$ description: 16 hex chars, root span of this request. timestamp: type: string description: ISO 8601 UTC (Y-m-dTH:i:sZ), response time. duration_ms: type: integer minimum: 0 description: Server-side wall clock. team_sid: type: - string - 'null' description: The team this call ran in (the token team, or the team_sid override). Null when unauthenticated; absent from pre-2026-08-20 backends. actor_type: type: - string - 'null' description: user | agent | api_key | system. Null when unauthenticated; absent from pre-2026-08-20 backends. required: - trace_id - span_id - timestamp - duration_ms required: - success - operation - action - item - result - meta ListAntidetectBrowserProxyCountriesResponse: type: object properties: success: type: boolean enum: - true operation: type: string enum: - action action: type: string description: kebab-case verb; matches the route segment. item: {} result: type: object properties: countries: type: array items: type: object properties: country_code: type: string description: ISO-3166-1 alpha-2, lowercase. available: type: integer minimum: 0 description: Active proxies stocked in that country. required: - country_code - available description: Sorted by country_code; pass one of these as create's proxy_country_code. required: - countries meta: type: object properties: trace_id: type: string description: UUID v7; same 128-bit value as the X-Trace-Id header. span_id: type: string pattern: ^[0-9a-f]{16}$ description: 16 hex chars, root span of this request. timestamp: type: string description: ISO 8601 UTC (Y-m-dTH:i:sZ), response time. duration_ms: type: integer minimum: 0 description: Server-side wall clock. team_sid: type: - string - 'null' description: The team this call ran in (the token team, or the team_sid override). Null when unauthenticated; absent from pre-2026-08-20 backends. actor_type: type: - string - 'null' description: user | agent | api_key | system. Null when unauthenticated; absent from pre-2026-08-20 backends. required: - trace_id - span_id - timestamp - duration_ms required: - success - operation - action - item - result - meta CreateAntidetectBrowserRequest: type: object description: Request body of `create_antidetect_browser`. properties: vendor_provider: type: string enum: - gologin - multilogin - adspower - dolphin description: Default gologin (the only wired vendor). vendor_profile_id: type: - string - 'null' pattern: ^[0-9a-f]{24}$ description: 'Bind an EXISTING vendor profile (BYO): the GoLogin profile id, 24 hex characters. NOT a profile URL, share link or LinkedIn slug. Omit to mint a fresh one. The profile must be shared with our GoLogin account, or the create is 422 vendor_profile_not_found; if the owning GoLogin account is over its plan the create is 402 vendor_profile_plan_limit and retrying will not help.' os: type: string enum: - win - mac - lin - android description: OS for a freshly-minted profile (default win). antidetect_browser_proxy_sid: type: string minLength: 18 maxLength: 18 pattern: ^ab_px_ description: Assign an already-chosen pooled proxy. Resolve the sid yourself with search_antidetect_browser_proxies; never ask an end user for one. proxy_country_code: type: string minLength: 2 maxLength: 2 description: ISO country. Picks the least-loaded active proxy. The default way to pick a proxy. custom_proxy_config: type: object properties: ip: type: string description: Proxy host. port: type: integer minimum: 1 maximum: 65535 username: type: string password: type: string mode: type: string enum: - http - socks4 - socks5 description: Default http. required: - ip - port description: Custom proxy connection tuple (customer BYO path). Probed before it is written; 5G Proxy cannot ride it. proxy_5g: type: boolean description: 'Provision the browser on the 5G Proxy add-on: the dedicated 5G mobile route, sold for speed (faster command execution, fewer retries). Each flagged browser takes one add-on slot; with no headroom left the create is refused 402 insufficient_proxy_5g_slots.' CheckAntidetectBrowserProxyResponse: type: object properties: success: type: boolean enum: - true operation: type: string enum: - action action: type: string description: kebab-case verb; matches the route segment. item: {} result: type: object properties: ok: type: boolean description: True when the request was routed through the proxy. error_kind: type: - string - 'null' description: 'Why it failed: timeout | tls | network | http_error. Null on success.' exit_ip: type: - string - 'null' description: The address the probe target saw. Null when the target answered nothing parseable. country_code: type: - string - 'null' description: ISO-3166-1 alpha-2 exit country; this is what create / update-proxy store on the browser. latency_ms: type: - integer - 'null' description: Round-trip time of the probe. required: - ok - error_kind - exit_ip - country_code - latency_ms meta: type: object properties: trace_id: type: string description: UUID v7; same 128-bit value as the X-Trace-Id header. span_id: type: string pattern: ^[0-9a-f]{16}$ description: 16 hex chars, root span of this request. timestamp: type: string description: ISO 8601 UTC (Y-m-dTH:i:sZ), response time. duration_ms: type: integer minimum: 0 description: Server-side wall clock. team_sid: type: - string - 'null' description: The team this call ran in (the token team, or the team_sid override). Null when unauthenticated; absent from pre-2026-08-20 backends. actor_type: type: - string - 'null' description: user | agent | api_key | system. Null when unauthenticated; absent from pre-2026-08-20 backends. required: - trace_id - span_id - timestamp - duration_ms required: - success - operation - action - item - result - meta RevokeCloudBrowserAccessKeyRequest: type: object description: Request body of `revoke_cloud_browser_access_key`. properties: sid: type: string minLength: 18 maxLength: 18 pattern: ^ab_br_ description: Antidetect browser sid (ab_br_…). key: type: - string - 'null' minLength: 18 maxLength: 18 pattern: ^cb_ak_ description: Single key to revoke; omit to revoke all keys on the browser. required: - sid McpError: type: object properties: success: type: boolean enum: - false error: type: object properties: code: type: string enum: - validation_failed - nothing_to_update - not_found - relation_not_found - invalid_transition - limit_exceeded - payment_required - duplicate_rejected - conflict - delete_blocked - unauthorized - forbidden - rate_limited - internal_error - service_unavailable - not_implemented message: type: string recoverable: type: boolean suggestion: type: string field_errors: type: object additionalProperties: type: array items: type: object properties: rule: type: string message: type: string required: - rule - message blockers: type: array items: type: object properties: type: type: string description: Machine-readable blocker type (active_flow, pending_tasks, …). severity: type: string enum: - hard - soft description: hard = external action required; soft = acknowledge is enough. description: type: string entity_sid: type: - string - 'null' count: type: integer resolution: type: string description: 'Hard: tool name to call. Soft: code for acknowledge[].' resolution_hint: type: string required: - type - severity - description - entity_sid - resolution - resolution_hint context: type: object additionalProperties: {} required: - code - message - recoverable meta: type: object properties: trace_id: type: string description: UUID v7; same 128-bit value as the X-Trace-Id header. span_id: type: string pattern: ^[0-9a-f]{16}$ description: 16 hex chars, root span of this request. timestamp: type: string description: ISO 8601 UTC (Y-m-dTH:i:sZ), response time. duration_ms: type: integer minimum: 0 description: Server-side wall clock. team_sid: type: - string - 'null' description: The team this call ran in (the token team, or the team_sid override). Null when unauthenticated; absent from pre-2026-08-20 backends. actor_type: type: - string - 'null' description: user | agent | api_key | system. Null when unauthenticated; absent from pre-2026-08-20 backends. required: - trace_id - span_id - timestamp - duration_ms required: - success - error ReplaceAntidetectBrowserProxyResponse: type: object properties: success: type: boolean enum: - true operation: type: string enum: - action action: type: string description: kebab-case verb; matches the route segment. item: type: - object - 'null' properties: sid: type: string team_sid: type: string linkedin_account_sid: type: - string - 'null' automation_server_sid: type: - string - 'null' account_share_sid: type: - string - 'null' share_role: type: - string - 'null' enum: - owner - holder - giver - receiver vendor_provider: type: string enum: - gologin - multilogin - adspower - dolphin vendor_name: type: - string - 'null' vendor_profile_id: type: - string - 'null' browser_owner: type: string enum: - platform - customer status: type: string enum: - stopped - queued_to_start - initializing - running - idle - queued_to_stop - start_issue - running_issue - login_issue - restricted - client_error_investigation - support_error_investigation - maintenance - shared_out - subscription_required error_reason: type: - string - 'null' fail_count: type: number last_fail_at: type: - string - 'null' logout_count: type: number last_logout_at: type: - string - 'null' last_start_at: type: - string - 'null' last_health_check_at: type: - string - 'null' last_activity_at: type: - string - 'null' antidetect_browser_proxy_sid: type: - string - 'null' proxy_country_code: type: - string - 'null' custom_proxy: type: - object - 'null' properties: ip: type: string port: type: integer mode: type: string username: type: - string - 'null' exit_ip: type: - string - 'null' latency_ms: type: - integer - 'null' required: - ip - port - mode - username - exit_ip - latency_ms proxy_5g: type: boolean description: '5G Proxy add-on: the browser runs on the dedicated 5G mobile route (faster command execution, fewer retries). Each flagged browser occupies one add-on slot.' cloud_browser_access: type: array items: type: object properties: key: type: - string - 'null' minLength: 18 maxLength: 18 pattern: ^cb_ak_ description: 'The bearer token itself, in full, for a caller holding can_manage_cloud_browser_external_links (the permission that mints it: reading a key is the same power as minting one, since the public connect checks nothing but the key). null for every other caller; the entry stays so the link, its expiry and its use can still be listed. On cloud-browser-sessions it is masked to the last 4.' expires_at: type: - string - 'null' description: ISO 8601 expiry; null means it never expires. Checked at connect and never again, so a session can outlive its own key. max_connects: type: - number - 'null' description: Cap on CONCURRENT sessions on this key; null means unlimited. allowed_ips: type: - array - 'null' items: type: string allowed_countries: type: - array - 'null' items: type: string purpose: type: string enum: - relogin - recruiter_relogin - share description: What the public page behind the link does. Stamped at mint and never re-negotiated at connect, because the visitor is unauthenticated. Absent on keys minted before the field existed, which the backend reads as relogin. required: - key - expires_at - max_connects - allowed_ips - allowed_countries description: The smart links minted on this browser; the key itself only for a caller holding can_manage_cloud_browser_external_links, null otherwise (2026-09-16). Each console open used to leave a throwaway entry here; minting now sweeps entries that expired over 24h ago, so this is the live link list rather than a log. vendor_profile_shares: type: - array - 'null' items: type: object properties: email: type: string role: type: string shared_at: type: - string - 'null' shared_by: type: - string - 'null' vendor_share_id: type: - string - 'null' required: - email - role - shared_at - shared_by - vendor_share_id created_by: type: object properties: actor_type: type: string enum: - user - support - api_key - system - agent actor_sid: type: - string - 'null' team_sid: type: string actor_name: type: - string - 'null' description: The OAuth client that acted ("Claude", "n8n"); null for a user, an API key or a system job. oauth_client_sid: type: - string - 'null' description: The acting OAuth client (id_oc_*); null off the OAuth path. reason: type: - string - 'null' description: Why a system actor wrote the row (snapshot_capture_job, ...); null otherwise. permissions: type: object additionalProperties: {} description: 'Internal audit context: the grant set the actor held at write time. Not a contract.' cluster_id: type: - integer - 'null' description: 'Internal audit context: the cluster that served the write.' trace_id: type: - string - 'null' description: 'Internal audit context: the trace id of the request that wrote the row.' required: - actor_type - actor_sid - team_sid - permissions deleted_by: type: - object - 'null' properties: actor_type: type: string enum: - user - support - api_key - system - agent actor_sid: type: - string - 'null' team_sid: type: string actor_name: type: - string - 'null' description: The OAuth client that acted ("Claude", "n8n"); null for a user, an API key or a system job. oauth_client_sid: type: - string - 'null' description: The acting OAuth client (id_oc_*); null off the OAuth path. reason: type: - string - 'null' description: Why a system actor wrote the row (snapshot_capture_job, ...); null otherwise. permissions: type: object additionalProperties: {} description: 'Internal audit context: the grant set the actor held at write time. Not a contract.' cluster_id: type: - integer - 'null' description: 'Internal audit context: the cluster that served the write.' trace_id: type: - string - 'null' description: 'Internal audit context: the trace id of the request that wrote the row.' required: - actor_type - actor_sid - team_sid - permissions created_at: type: string updated_at: type: string deleted_at: type: - string - 'null' required: - sid - team_sid - linkedin_account_sid - automation_server_sid - account_share_sid - share_role - vendor_provider - vendor_name - vendor_profile_id - browser_owner - status - error_reason - fail_count - last_fail_at - logout_count - last_logout_at - last_start_at - last_health_check_at - last_activity_at - antidetect_browser_proxy_sid - proxy_country_code - custom_proxy - proxy_5g - cloud_browser_access - vendor_profile_shares - created_by - deleted_by - created_at - updated_at - deleted_at result: type: object properties: previous_antidetect_browser_proxy_sid: type: - string - 'null' description: The pooled proxy the browser was on before the swap, or null if it had none. restarted: type: boolean description: True when the browser was running and was started again on the new proxy. restart_error: type: - string - 'null' description: Set when the swap committed but the browser could not be restarted. required: - previous_antidetect_browser_proxy_sid - restarted - restart_error meta: type: object properties: trace_id: type: string description: UUID v7; same 128-bit value as the X-Trace-Id header. span_id: type: string pattern: ^[0-9a-f]{16}$ description: 16 hex chars, root span of this request. timestamp: type: string description: ISO 8601 UTC (Y-m-dTH:i:sZ), response time. duration_ms: type: integer minimum: 0 description: Server-side wall clock. team_sid: type: - string - 'null' description: The team this call ran in (the token team, or the team_sid override). Null when unauthenticated; absent from pre-2026-08-20 backends. actor_type: type: - string - 'null' description: user | agent | api_key | system. Null when unauthenticated; absent from pre-2026-08-20 backends. required: - trace_id - span_id - timestamp - duration_ms required: - success - operation - action - item - result - meta StopAntidetectBrowserRequest: type: object description: Request body of `stop_antidetect_browser`. properties: sid: type: string minLength: 18 maxLength: 18 pattern: ^ab_br_ description: Antidetect browser sid (ab_br_…). now: type: boolean description: 'Emergency stop: commit stopped immediately.' required: - sid RevokeCloudBrowserAccessKeyResponse: type: object properties: success: type: boolean enum: - true operation: type: string enum: - action action: type: string description: kebab-case verb; matches the route segment. item: type: - object - 'null' properties: sid: type: string team_sid: type: string linkedin_account_sid: type: - string - 'null' automation_server_sid: type: - string - 'null' account_share_sid: type: - string - 'null' share_role: type: - string - 'null' enum: - owner - holder - giver - receiver vendor_provider: type: string enum: - gologin - multilogin - adspower - dolphin vendor_name: type: - string - 'null' vendor_profile_id: type: - string - 'null' browser_owner: type: string enum: - platform - customer status: type: string enum: - stopped - queued_to_start - initializing - running - idle - queued_to_stop - start_issue - running_issue - login_issue - restricted - client_error_investigation - support_error_investigation - maintenance - shared_out - subscription_required error_reason: type: - string - 'null' fail_count: type: number last_fail_at: type: - string - 'null' logout_count: type: number last_logout_at: type: - string - 'null' last_start_at: type: - string - 'null' last_health_check_at: type: - string - 'null' last_activity_at: type: - string - 'null' antidetect_browser_proxy_sid: type: - string - 'null' proxy_country_code: type: - string - 'null' custom_proxy: type: - object - 'null' properties: ip: type: string port: type: integer mode: type: string username: type: - string - 'null' exit_ip: type: - string - 'null' latency_ms: type: - integer - 'null' required: - ip - port - mode - username - exit_ip - latency_ms proxy_5g: type: boolean description: '5G Proxy add-on: the browser runs on the dedicated 5G mobile route (faster command execution, fewer retries). Each flagged browser occupies one add-on slot.' cloud_browser_access: type: array items: type: object properties: key: type: - string - 'null' minLength: 18 maxLength: 18 pattern: ^cb_ak_ description: 'The bearer token itself, in full, for a caller holding can_manage_cloud_browser_external_links (the permission that mints it: reading a key is the same power as minting one, since the public connect checks nothing but the key). null for every other caller; the entry stays so the link, its expiry and its use can still be listed. On cloud-browser-sessions it is masked to the last 4.' expires_at: type: - string - 'null' description: ISO 8601 expiry; null means it never expires. Checked at connect and never again, so a session can outlive its own key. max_connects: type: - number - 'null' description: Cap on CONCURRENT sessions on this key; null means unlimited. allowed_ips: type: - array - 'null' items: type: string allowed_countries: type: - array - 'null' items: type: string purpose: type: string enum: - relogin - recruiter_relogin - share description: What the public page behind the link does. Stamped at mint and never re-negotiated at connect, because the visitor is unauthenticated. Absent on keys minted before the field existed, which the backend reads as relogin. required: - key - expires_at - max_connects - allowed_ips - allowed_countries description: The smart links minted on this browser; the key itself only for a caller holding can_manage_cloud_browser_external_links, null otherwise (2026-09-16). Each console open used to leave a throwaway entry here; minting now sweeps entries that expired over 24h ago, so this is the live link list rather than a log. vendor_profile_shares: type: - array - 'null' items: type: object properties: email: type: string role: type: string shared_at: type: - string - 'null' shared_by: type: - string - 'null' vendor_share_id: type: - string - 'null' required: - email - role - shared_at - shared_by - vendor_share_id created_by: type: object properties: actor_type: type: string enum: - user - support - api_key - system - agent actor_sid: type: - string - 'null' team_sid: type: string actor_name: type: - string - 'null' description: The OAuth client that acted ("Claude", "n8n"); null for a user, an API key or a system job. oauth_client_sid: type: - string - 'null' description: The acting OAuth client (id_oc_*); null off the OAuth path. reason: type: - string - 'null' description: Why a system actor wrote the row (snapshot_capture_job, ...); null otherwise. permissions: type: object additionalProperties: {} description: 'Internal audit context: the grant set the actor held at write time. Not a contract.' cluster_id: type: - integer - 'null' description: 'Internal audit context: the cluster that served the write.' trace_id: type: - string - 'null' description: 'Internal audit context: the trace id of the request that wrote the row.' required: - actor_type - actor_sid - team_sid - permissions deleted_by: type: - object - 'null' properties: actor_type: type: string enum: - user - support - api_key - system - agent actor_sid: type: - string - 'null' team_sid: type: string actor_name: type: - string - 'null' description: The OAuth client that acted ("Claude", "n8n"); null for a user, an API key or a system job. oauth_client_sid: type: - string - 'null' description: The acting OAuth client (id_oc_*); null off the OAuth path. reason: type: - string - 'null' description: Why a system actor wrote the row (snapshot_capture_job, ...); null otherwise. permissions: type: object additionalProperties: {} description: 'Internal audit context: the grant set the actor held at write time. Not a contract.' cluster_id: type: - integer - 'null' description: 'Internal audit context: the cluster that served the write.' trace_id: type: - string - 'null' description: 'Internal audit context: the trace id of the request that wrote the row.' required: - actor_type - actor_sid - team_sid - permissions created_at: type: string updated_at: type: string deleted_at: type: - string - 'null' required: - sid - team_sid - linkedin_account_sid - automation_server_sid - account_share_sid - share_role - vendor_provider - vendor_name - vendor_profile_id - browser_owner - status - error_reason - fail_count - last_fail_at - logout_count - last_logout_at - last_start_at - last_health_check_at - last_activity_at - antidetect_browser_proxy_sid - proxy_country_code - custom_proxy - proxy_5g - cloud_browser_access - vendor_profile_shares - created_by - deleted_by - created_at - updated_at - deleted_at result: type: object additionalProperties: {} meta: type: object properties: trace_id: type: string description: UUID v7; same 128-bit value as the X-Trace-Id header. span_id: type: string pattern: ^[0-9a-f]{16}$ description: 16 hex chars, root span of this request. timestamp: type: string description: ISO 8601 UTC (Y-m-dTH:i:sZ), response time. duration_ms: type: integer minimum: 0 description: Server-side wall clock. team_sid: type: - string - 'null' description: The team this call ran in (the token team, or the team_sid override). Null when unauthenticated; absent from pre-2026-08-20 backends. actor_type: type: - string - 'null' description: user | agent | api_key | system. Null when unauthenticated; absent from pre-2026-08-20 backends. required: - trace_id - span_id - timestamp - duration_ms required: - success - operation - action - item - result - meta UpdateAntidetectBrowserProxyRequest: type: object description: Request body of `update_antidetect_browser_proxy`. properties: sid: type: string minLength: 18 maxLength: 18 pattern: ^ab_br_ description: Antidetect browser sid (ab_br_…). antidetect_browser_proxy_sid: type: string minLength: 18 maxLength: 18 pattern: ^ab_px_ description: Pin a specific pooled proxy. Resolve the sid yourself with search_antidetect_browser_proxies; never ask an end user for one. proxy_country_code: type: string minLength: 2 maxLength: 2 description: ISO country. Picks the least-loaded active proxy. The default way to pick a proxy. custom_proxy_config: type: object properties: ip: type: string description: Proxy host. port: type: integer minimum: 1 maximum: 65535 username: type: string password: type: string mode: type: string enum: - http - socks4 - socks5 description: Default http. required: - ip - port description: Custom proxy connection tuple (customer BYO path). Probed before it is written; 5G Proxy cannot ride it. A password left out keeps the one this browser stores when ip and username stay the same, never for another host. proxy_5g: type: boolean description: 'Arm (true) or release (false) the 5G Proxy add-on binding on this browser. Omit to leave the binding untouched. A body carrying proxy_5g alone is a valid source-less call: it moves only the add-on binding and leaves the IP where it is.' required: - sid GetAntidetectBrowserSeatUsageResponse: type: object properties: success: type: boolean enum: - true operation: type: string enum: - action action: type: string description: kebab-case verb; matches the route segment. item: {} result: type: object properties: accounts_used: type: integer minimum: 0 description: Live browser rows the team holds. This is the count the create gate refuses on (402 insufficient_slots). proxy_5g_used: type: integer minimum: 0 description: Of those, the ones carrying the 5G Proxy add-on. required: - accounts_used - proxy_5g_used meta: type: object properties: trace_id: type: string description: UUID v7; same 128-bit value as the X-Trace-Id header. span_id: type: string pattern: ^[0-9a-f]{16}$ description: 16 hex chars, root span of this request. timestamp: type: string description: ISO 8601 UTC (Y-m-dTH:i:sZ), response time. duration_ms: type: integer minimum: 0 description: Server-side wall clock. team_sid: type: - string - 'null' description: The team this call ran in (the token team, or the team_sid override). Null when unauthenticated; absent from pre-2026-08-20 backends. actor_type: type: - string - 'null' description: user | agent | api_key | system. Null when unauthenticated; absent from pre-2026-08-20 backends. required: - trace_id - span_id - timestamp - duration_ms required: - success - operation - action - item - result - meta SearchAntidetectBrowsersRequest: type: object description: Request body of `search_antidetect_browsers`. properties: filter: type: object properties: sid: type: object properties: eq: type: string in: type: array items: type: string additionalProperties: false status: type: object properties: eq: type: string ne: type: string in: type: array items: type: string nin: type: array items: type: string additionalProperties: false browser_owner: type: object properties: eq: type: string ne: type: string in: type: array items: type: string nin: type: array items: type: string additionalProperties: false vendor_provider: type: object properties: eq: type: string ne: type: string in: type: array items: type: string nin: type: array items: type: string additionalProperties: false vendor_name: type: object properties: eq: type: string in: type: array items: type: string additionalProperties: false description: Vendor profile display name (the supported name lookup path). vendor_profile_id: type: object properties: eq: type: string in: type: array items: type: string is_null: type: boolean additionalProperties: false account_share_sid: type: object properties: eq: type: string in: type: array items: type: string is_null: type: boolean additionalProperties: false description: The share a browser came in with; is_null:false = every browser that belongs to a shared account. linkedin_account_sid: type: object properties: eq: type: string in: type: array items: type: string is_null: type: boolean additionalProperties: false automation_server_sid: type: object properties: eq: type: string in: type: array items: type: string is_null: type: boolean additionalProperties: false description: is_null:true = ops scan for browsers not assigned to a server. antidetect_browser_proxy_sid: type: object properties: eq: type: string in: type: array items: type: string is_null: type: boolean additionalProperties: false proxy_country_code: type: object properties: eq: type: string in: type: array items: type: string additionalProperties: false proxy_5g: type: object properties: eq: type: boolean additionalProperties: false description: eq:true = the browsers occupying a 5G Proxy add-on slot (that is how slot usage is counted). fail_count: type: object properties: eq: type: integer gte: type: integer lte: type: integer gt: type: integer lt: type: integer additionalProperties: false logout_count: type: object properties: eq: type: integer gte: type: integer lte: type: integer gt: type: integer lt: type: integer additionalProperties: false last_start_at: type: object properties: gte: type: string lte: type: string gt: type: string lt: type: string is_null: type: boolean additionalProperties: false last_fail_at: type: object properties: gte: type: string lte: type: string gt: type: string lt: type: string is_null: type: boolean additionalProperties: false last_logout_at: type: object properties: gte: type: string lte: type: string gt: type: string lt: type: string is_null: type: boolean additionalProperties: false created_at: type: object properties: gte: type: string lte: type: string gt: type: string lt: type: string additionalProperties: false updated_at: type: object properties: gte: type: string lte: type: string gt: type: string lt: type: string additionalProperties: false deleted_at: type: object properties: gte: type: string lte: type: string is_null: type: boolean additionalProperties: false description: 'Default scope is { is_null: true } (live browsers).' include: type: array items: type: string enum: - linkedin_account - antidetect_browser_proxy - antidetect_browser_logs description: Relations to eager-load (see entity Includes). sort: type: object properties: field: type: string enum: - created_at - updated_at - last_start_at - last_fail_at - last_logout_at - fail_count - logout_count - vendor_name direction: type: string enum: - asc - desc description: Default desc. required: - field page_size: type: integer minimum: 0 maximum: 500 description: 0..500, default 50. page_size=0 = count-only, page_size=1 = getFirst. cursor: type: - string - 'null' description: Opaque forward cursor from a previous response pagination.next_cursor. CreateAntidetectBrowserResponse: type: object properties: success: type: boolean enum: - true operation: type: string enum: - create item: type: object properties: sid: type: string team_sid: type: string linkedin_account_sid: type: - string - 'null' automation_server_sid: type: - string - 'null' account_share_sid: type: - string - 'null' share_role: type: - string - 'null' enum: - owner - holder - giver - receiver vendor_provider: type: string enum: - gologin - multilogin - adspower - dolphin vendor_name: type: - string - 'null' vendor_profile_id: type: - string - 'null' browser_owner: type: string enum: - platform - customer status: type: string enum: - stopped - queued_to_start - initializing - running - idle - queued_to_stop - start_issue - running_issue - login_issue - restricted - client_error_investigation - support_error_investigation - maintenance - shared_out - subscription_required error_reason: type: - string - 'null' fail_count: type: number last_fail_at: type: - string - 'null' logout_count: type: number last_logout_at: type: - string - 'null' last_start_at: type: - string - 'null' last_health_check_at: type: - string - 'null' last_activity_at: type: - string - 'null' antidetect_browser_proxy_sid: type: - string - 'null' proxy_country_code: type: - string - 'null' custom_proxy: type: - object - 'null' properties: ip: type: string port: type: integer mode: type: string username: type: - string - 'null' exit_ip: type: - string - 'null' latency_ms: type: - integer - 'null' required: - ip - port - mode - username - exit_ip - latency_ms proxy_5g: type: boolean description: '5G Proxy add-on: the browser runs on the dedicated 5G mobile route (faster command execution, fewer retries). Each flagged browser occupies one add-on slot.' cloud_browser_access: type: array items: type: object properties: key: type: - string - 'null' minLength: 18 maxLength: 18 pattern: ^cb_ak_ description: 'The bearer token itself, in full, for a caller holding can_manage_cloud_browser_external_links (the permission that mints it: reading a key is the same power as minting one, since the public connect checks nothing but the key). null for every other caller; the entry stays so the link, its expiry and its use can still be listed. On cloud-browser-sessions it is masked to the last 4.' expires_at: type: - string - 'null' description: ISO 8601 expiry; null means it never expires. Checked at connect and never again, so a session can outlive its own key. max_connects: type: - number - 'null' description: Cap on CONCURRENT sessions on this key; null means unlimited. allowed_ips: type: - array - 'null' items: type: string allowed_countries: type: - array - 'null' items: type: string purpose: type: string enum: - relogin - recruiter_relogin - share description: What the public page behind the link does. Stamped at mint and never re-negotiated at connect, because the visitor is unauthenticated. Absent on keys minted before the field existed, which the backend reads as relogin. required: - key - expires_at - max_connects - allowed_ips - allowed_countries description: The smart links minted on this browser; the key itself only for a caller holding can_manage_cloud_browser_external_links, null otherwise (2026-09-16). Each console open used to leave a throwaway entry here; minting now sweeps entries that expired over 24h ago, so this is the live link list rather than a log. vendor_profile_shares: type: - array - 'null' items: type: object properties: email: type: string role: type: string shared_at: type: - string - 'null' shared_by: type: - string - 'null' vendor_share_id: type: - string - 'null' required: - email - role - shared_at - shared_by - vendor_share_id created_by: type: object properties: actor_type: type: string enum: - user - support - api_key - system - agent actor_sid: type: - string - 'null' team_sid: type: string actor_name: type: - string - 'null' description: The OAuth client that acted ("Claude", "n8n"); null for a user, an API key or a system job. oauth_client_sid: type: - string - 'null' description: The acting OAuth client (id_oc_*); null off the OAuth path. reason: type: - string - 'null' description: Why a system actor wrote the row (snapshot_capture_job, ...); null otherwise. permissions: type: object additionalProperties: {} description: 'Internal audit context: the grant set the actor held at write time. Not a contract.' cluster_id: type: - integer - 'null' description: 'Internal audit context: the cluster that served the write.' trace_id: type: - string - 'null' description: 'Internal audit context: the trace id of the request that wrote the row.' required: - actor_type - actor_sid - team_sid - permissions deleted_by: type: - object - 'null' properties: actor_type: type: string enum: - user - support - api_key - system - agent actor_sid: type: - string - 'null' team_sid: type: string actor_name: type: - string - 'null' description: The OAuth client that acted ("Claude", "n8n"); null for a user, an API key or a system job. oauth_client_sid: type: - string - 'null' description: The acting OAuth client (id_oc_*); null off the OAuth path. reason: type: - string - 'null' description: Why a system actor wrote the row (snapshot_capture_job, ...); null otherwise. permissions: type: object additionalProperties: {} description: 'Internal audit context: the grant set the actor held at write time. Not a contract.' cluster_id: type: - integer - 'null' description: 'Internal audit context: the cluster that served the write.' trace_id: type: - string - 'null' description: 'Internal audit context: the trace id of the request that wrote the row.' required: - actor_type - actor_sid - team_sid - permissions created_at: type: string updated_at: type: string deleted_at: type: - string - 'null' required: - sid - team_sid - linkedin_account_sid - automation_server_sid - account_share_sid - share_role - vendor_provider - vendor_name - vendor_profile_id - browser_owner - status - error_reason - fail_count - last_fail_at - logout_count - last_logout_at - last_start_at - last_health_check_at - last_activity_at - antidetect_browser_proxy_sid - proxy_country_code - custom_proxy - proxy_5g - cloud_browser_access - vendor_profile_shares - created_by - deleted_by - created_at - updated_at - deleted_at already_exists: type: boolean meta: type: object properties: trace_id: type: string description: UUID v7; same 128-bit value as the X-Trace-Id header. span_id: type: string pattern: ^[0-9a-f]{16}$ description: 16 hex chars, root span of this request. timestamp: type: string description: ISO 8601 UTC (Y-m-dTH:i:sZ), response time. duration_ms: type: integer minimum: 0 description: Server-side wall clock. team_sid: type: - string - 'null' description: The team this call ran in (the token team, or the team_sid override). Null when unauthenticated; absent from pre-2026-08-20 backends. actor_type: type: - string - 'null' description: user | agent | api_key | system. Null when unauthenticated; absent from pre-2026-08-20 backends. required: - trace_id - span_id - timestamp - duration_ms required: - success - operation - item - already_exists - meta SearchAntidetectBrowsersResponse: type: object properties: success: type: boolean enum: - true operation: type: string enum: - search items: type: array items: type: object properties: item: type: object properties: sid: type: string team_sid: type: string linkedin_account_sid: type: - string - 'null' automation_server_sid: type: - string - 'null' account_share_sid: type: - string - 'null' share_role: type: - string - 'null' enum: - owner - holder - giver - receiver vendor_provider: type: string enum: - gologin - multilogin - adspower - dolphin vendor_name: type: - string - 'null' vendor_profile_id: type: - string - 'null' browser_owner: type: string enum: - platform - customer status: type: string enum: - stopped - queued_to_start - initializing - running - idle - queued_to_stop - start_issue - running_issue - login_issue - restricted - client_error_investigation - support_error_investigation - maintenance - shared_out - subscription_required error_reason: type: - string - 'null' fail_count: type: number last_fail_at: type: - string - 'null' logout_count: type: number last_logout_at: type: - string - 'null' last_start_at: type: - string - 'null' last_health_check_at: type: - string - 'null' last_activity_at: type: - string - 'null' antidetect_browser_proxy_sid: type: - string - 'null' proxy_country_code: type: - string - 'null' custom_proxy: type: - object - 'null' properties: ip: type: string port: type: integer mode: type: string username: type: - string - 'null' exit_ip: type: - string - 'null' latency_ms: type: - integer - 'null' required: - ip - port - mode - username - exit_ip - latency_ms proxy_5g: type: boolean description: '5G Proxy add-on: the browser runs on the dedicated 5G mobile route (faster command execution, fewer retries). Each flagged browser occupies one add-on slot.' cloud_browser_access: type: array items: type: object properties: key: type: - string - 'null' minLength: 18 maxLength: 18 pattern: ^cb_ak_ description: 'The bearer token itself, in full, for a caller holding can_manage_cloud_browser_external_links (the permission that mints it: reading a key is the same power as minting one, since the public connect checks nothing but the key). null for every other caller; the entry stays so the link, its expiry and its use can still be listed. On cloud-browser-sessions it is masked to the last 4.' expires_at: type: - string - 'null' description: ISO 8601 expiry; null means it never expires. Checked at connect and never again, so a session can outlive its own key. max_connects: type: - number - 'null' description: Cap on CONCURRENT sessions on this key; null means unlimited. allowed_ips: type: - array - 'null' items: type: string allowed_countries: type: - array - 'null' items: type: string purpose: type: string enum: - relogin - recruiter_relogin - share description: What the public page behind the link does. Stamped at mint and never re-negotiated at connect, because the visitor is unauthenticated. Absent on keys minted before the field existed, which the backend reads as relogin. required: - key - expires_at - max_connects - allowed_ips - allowed_countries description: The smart links minted on this browser; the key itself only for a caller holding can_manage_cloud_browser_external_links, null otherwise (2026-09-16). Each console open used to leave a throwaway entry here; minting now sweeps entries that expired over 24h ago, so this is the live link list rather than a log. vendor_profile_shares: type: - array - 'null' items: type: object properties: email: type: string role: type: string shared_at: type: - string - 'null' shared_by: type: - string - 'null' vendor_share_id: type: - string - 'null' required: - email - role - shared_at - shared_by - vendor_share_id created_by: type: object properties: actor_type: type: string enum: - user - support - api_key - system - agent actor_sid: type: - string - 'null' team_sid: type: string actor_name: type: - string - 'null' description: The OAuth client that acted ("Claude", "n8n"); null for a user, an API key or a system job. oauth_client_sid: type: - string - 'null' description: The acting OAuth client (id_oc_*); null off the OAuth path. reason: type: - string - 'null' description: Why a system actor wrote the row (snapshot_capture_job, ...); null otherwise. permissions: type: object additionalProperties: {} description: 'Internal audit context: the grant set the actor held at write time. Not a contract.' cluster_id: type: - integer - 'null' description: 'Internal audit context: the cluster that served the write.' trace_id: type: - string - 'null' description: 'Internal audit context: the trace id of the request that wrote the row.' required: - actor_type - actor_sid - team_sid - permissions deleted_by: type: - object - 'null' properties: actor_type: type: string enum: - user - support - api_key - system - agent actor_sid: type: - string - 'null' team_sid: type: string actor_name: type: - string - 'null' description: The OAuth client that acted ("Claude", "n8n"); null for a user, an API key or a system job. oauth_client_sid: type: - string - 'null' description: The acting OAuth client (id_oc_*); null off the OAuth path. reason: type: - string - 'null' description: Why a system actor wrote the row (snapshot_capture_job, ...); null otherwise. permissions: type: object additionalProperties: {} description: 'Internal audit context: the grant set the actor held at write time. Not a contract.' cluster_id: type: - integer - 'null' description: 'Internal audit context: the cluster that served the write.' trace_id: type: - string - 'null' description: 'Internal audit context: the trace id of the request that wrote the row.' required: - actor_type - actor_sid - team_sid - permissions created_at: type: string updated_at: type: string deleted_at: type: - string - 'null' required: - sid - team_sid - linkedin_account_sid - automation_server_sid - account_share_sid - share_role - vendor_provider - vendor_name - vendor_profile_id - browser_owner - status - error_reason - fail_count - last_fail_at - logout_count - last_logout_at - last_start_at - last_health_check_at - last_activity_at - antidetect_browser_proxy_sid - proxy_country_code - custom_proxy - proxy_5g - cloud_browser_access - vendor_profile_shares - created_by - deleted_by - created_at - updated_at - deleted_at included: type: object additionalProperties: {} required: - item - included pagination: type: object properties: next_cursor: type: - string - 'null' has_more: type: boolean total_count: type: - integer - 'null' required: - next_cursor - has_more - total_count applied_filters: type: object additionalProperties: {} includes: type: array items: type: string meta: type: object properties: trace_id: type: string description: UUID v7; same 128-bit value as the X-Trace-Id header. span_id: type: string pattern: ^[0-9a-f]{16}$ description: 16 hex chars, root span of this request. timestamp: type: string description: ISO 8601 UTC (Y-m-dTH:i:sZ), response time. duration_ms: type: integer minimum: 0 description: Server-side wall clock. team_sid: type: - string - 'null' description: The team this call ran in (the token team, or the team_sid override). Null when unauthenticated; absent from pre-2026-08-20 backends. actor_type: type: - string - 'null' description: user | agent | api_key | system. Null when unauthenticated; absent from pre-2026-08-20 backends. required: - trace_id - span_id - timestamp - duration_ms counts: type: object properties: total_count: type: number groups: type: object additionalProperties: {} required: - total_count - groups required: - success - operation - items - pagination - applied_filters - includes - meta GenerateCloudBrowserAccessKeyRequest: type: object description: Request body of `generate_cloud_browser_access_key`. properties: sid: type: string minLength: 18 maxLength: 18 pattern: ^ab_br_ description: Antidetect browser sid (ab_br_…). ttl_hours: type: integer minimum: 1 maximum: 720 description: Key lifetime in hours (default 8; the link is a bearer secret, keep it short). Sets expires_at on the entry. max_connects: type: integer minimum: 1 maximum: 1000 description: 'Cap on CONCURRENT sessions held on this key, counted live at connect. Not a lifetime quota: a key does not spend itself and never becomes exhausted. Omit for unlimited.' allowed_ips: type: array items: type: string maxLength: 45 description: IP allow-list checked at connect time. allowed_countries: type: array items: type: string minLength: 2 maxLength: 2 description: ISO country allow-list checked at connect time. purpose: type: string enum: - relogin - recruiter_relogin - share description: 'What the page behind the link does: relogin = sign the LinkedIn session back in and re-bind the browser on confirm (default); share = drive the browser, no sign-in step; recruiter_relogin = the relogin flow aimed at LinkedIn Recruiter (2026-09-15): the cloud browser opens on linkedin.com/talent so the seat holder signs the Recruiter session back in, and the confirmed restart re-checks the account''s recruiter_status.' send_to_email: type: string maxLength: 255 format: email description: Also email the link to this address, typically the person who holds the LinkedIn password and has no account on the platform. The mail is queued after the key is committed; result.sent_to_email echoes the address. A malformed address is 422 and mints nothing. required: - sid RunAntidetectBrowserResponse: type: object properties: success: type: boolean enum: - true operation: type: string enum: - action action: type: string description: kebab-case verb; matches the route segment. item: type: - object - 'null' properties: sid: type: string team_sid: type: string linkedin_account_sid: type: - string - 'null' automation_server_sid: type: - string - 'null' account_share_sid: type: - string - 'null' share_role: type: - string - 'null' enum: - owner - holder - giver - receiver vendor_provider: type: string enum: - gologin - multilogin - adspower - dolphin vendor_name: type: - string - 'null' vendor_profile_id: type: - string - 'null' browser_owner: type: string enum: - platform - customer status: type: string enum: - stopped - queued_to_start - initializing - running - idle - queued_to_stop - start_issue - running_issue - login_issue - restricted - client_error_investigation - support_error_investigation - maintenance - shared_out - subscription_required error_reason: type: - string - 'null' fail_count: type: number last_fail_at: type: - string - 'null' logout_count: type: number last_logout_at: type: - string - 'null' last_start_at: type: - string - 'null' last_health_check_at: type: - string - 'null' last_activity_at: type: - string - 'null' antidetect_browser_proxy_sid: type: - string - 'null' proxy_country_code: type: - string - 'null' custom_proxy: type: - object - 'null' properties: ip: type: string port: type: integer mode: type: string username: type: - string - 'null' exit_ip: type: - string - 'null' latency_ms: type: - integer - 'null' required: - ip - port - mode - username - exit_ip - latency_ms proxy_5g: type: boolean description: '5G Proxy add-on: the browser runs on the dedicated 5G mobile route (faster command execution, fewer retries). Each flagged browser occupies one add-on slot.' cloud_browser_access: type: array items: type: object properties: key: type: - string - 'null' minLength: 18 maxLength: 18 pattern: ^cb_ak_ description: 'The bearer token itself, in full, for a caller holding can_manage_cloud_browser_external_links (the permission that mints it: reading a key is the same power as minting one, since the public connect checks nothing but the key). null for every other caller; the entry stays so the link, its expiry and its use can still be listed. On cloud-browser-sessions it is masked to the last 4.' expires_at: type: - string - 'null' description: ISO 8601 expiry; null means it never expires. Checked at connect and never again, so a session can outlive its own key. max_connects: type: - number - 'null' description: Cap on CONCURRENT sessions on this key; null means unlimited. allowed_ips: type: - array - 'null' items: type: string allowed_countries: type: - array - 'null' items: type: string purpose: type: string enum: - relogin - recruiter_relogin - share description: What the public page behind the link does. Stamped at mint and never re-negotiated at connect, because the visitor is unauthenticated. Absent on keys minted before the field existed, which the backend reads as relogin. required: - key - expires_at - max_connects - allowed_ips - allowed_countries description: The smart links minted on this browser; the key itself only for a caller holding can_manage_cloud_browser_external_links, null otherwise (2026-09-16). Each console open used to leave a throwaway entry here; minting now sweeps entries that expired over 24h ago, so this is the live link list rather than a log. vendor_profile_shares: type: - array - 'null' items: type: object properties: email: type: string role: type: string shared_at: type: - string - 'null' shared_by: type: - string - 'null' vendor_share_id: type: - string - 'null' required: - email - role - shared_at - shared_by - vendor_share_id created_by: type: object properties: actor_type: type: string enum: - user - support - api_key - system - agent actor_sid: type: - string - 'null' team_sid: type: string actor_name: type: - string - 'null' description: The OAuth client that acted ("Claude", "n8n"); null for a user, an API key or a system job. oauth_client_sid: type: - string - 'null' description: The acting OAuth client (id_oc_*); null off the OAuth path. reason: type: - string - 'null' description: Why a system actor wrote the row (snapshot_capture_job, ...); null otherwise. permissions: type: object additionalProperties: {} description: 'Internal audit context: the grant set the actor held at write time. Not a contract.' cluster_id: type: - integer - 'null' description: 'Internal audit context: the cluster that served the write.' trace_id: type: - string - 'null' description: 'Internal audit context: the trace id of the request that wrote the row.' required: - actor_type - actor_sid - team_sid - permissions deleted_by: type: - object - 'null' properties: actor_type: type: string enum: - user - support - api_key - system - agent actor_sid: type: - string - 'null' team_sid: type: string actor_name: type: - string - 'null' description: The OAuth client that acted ("Claude", "n8n"); null for a user, an API key or a system job. oauth_client_sid: type: - string - 'null' description: The acting OAuth client (id_oc_*); null off the OAuth path. reason: type: - string - 'null' description: Why a system actor wrote the row (snapshot_capture_job, ...); null otherwise. permissions: type: object additionalProperties: {} description: 'Internal audit context: the grant set the actor held at write time. Not a contract.' cluster_id: type: - integer - 'null' description: 'Internal audit context: the cluster that served the write.' trace_id: type: - string - 'null' description: 'Internal audit context: the trace id of the request that wrote the row.' required: - actor_type - actor_sid - team_sid - permissions created_at: type: string updated_at: type: string deleted_at: type: - string - 'null' required: - sid - team_sid - linkedin_account_sid - automation_server_sid - account_share_sid - share_role - vendor_provider - vendor_name - vendor_profile_id - browser_owner - status - error_reason - fail_count - last_fail_at - logout_count - last_logout_at - last_start_at - last_health_check_at - last_activity_at - antidetect_browser_proxy_sid - proxy_country_code - custom_proxy - proxy_5g - cloud_browser_access - vendor_profile_shares - created_by - deleted_by - created_at - updated_at - deleted_at result: type: object additionalProperties: {} meta: type: object properties: trace_id: type: string description: UUID v7; same 128-bit value as the X-Trace-Id header. span_id: type: string pattern: ^[0-9a-f]{16}$ description: 16 hex chars, root span of this request. timestamp: type: string description: ISO 8601 UTC (Y-m-dTH:i:sZ), response time. duration_ms: type: integer minimum: 0 description: Server-side wall clock. team_sid: type: - string - 'null' description: The team this call ran in (the token team, or the team_sid override). Null when unauthenticated; absent from pre-2026-08-20 backends. actor_type: type: - string - 'null' description: user | agent | api_key | system. Null when unauthenticated; absent from pre-2026-08-20 backends. required: - trace_id - span_id - timestamp - duration_ms required: - success - operation - action - item - result - meta CheckAntidetectBrowserProxyRequest: type: object description: Request body of `check_antidetect_browser_proxy`. properties: ip: type: string description: Proxy host. port: type: integer minimum: 1 maximum: 65535 mode: type: string enum: - http - socks4 - socks5 description: Default http. username: type: - string - 'null' password: type: - string - 'null' sid: type: string minLength: 18 maxLength: 18 pattern: ^ab_br_ description: The browser whose own proxy is being edited. A password left out is then the one that browser stores, for the same ip and username only; another host never receives it. required: - ip - port GetAntidetectBrowserResponse: type: object properties: success: type: boolean enum: - true operation: type: string enum: - get item: type: object properties: sid: type: string team_sid: type: string linkedin_account_sid: type: - string - 'null' automation_server_sid: type: - string - 'null' account_share_sid: type: - string - 'null' share_role: type: - string - 'null' enum: - owner - holder - giver - receiver vendor_provider: type: string enum: - gologin - multilogin - adspower - dolphin vendor_name: type: - string - 'null' vendor_profile_id: type: - string - 'null' browser_owner: type: string enum: - platform - customer status: type: string enum: - stopped - queued_to_start - initializing - running - idle - queued_to_stop - start_issue - running_issue - login_issue - restricted - client_error_investigation - support_error_investigation - maintenance - shared_out - subscription_required error_reason: type: - string - 'null' fail_count: type: number last_fail_at: type: - string - 'null' logout_count: type: number last_logout_at: type: - string - 'null' last_start_at: type: - string - 'null' last_health_check_at: type: - string - 'null' last_activity_at: type: - string - 'null' antidetect_browser_proxy_sid: type: - string - 'null' proxy_country_code: type: - string - 'null' custom_proxy: type: - object - 'null' properties: ip: type: string port: type: integer mode: type: string username: type: - string - 'null' exit_ip: type: - string - 'null' latency_ms: type: - integer - 'null' required: - ip - port - mode - username - exit_ip - latency_ms proxy_5g: type: boolean description: '5G Proxy add-on: the browser runs on the dedicated 5G mobile route (faster command execution, fewer retries). Each flagged browser occupies one add-on slot.' cloud_browser_access: type: array items: type: object properties: key: type: - string - 'null' minLength: 18 maxLength: 18 pattern: ^cb_ak_ description: 'The bearer token itself, in full, for a caller holding can_manage_cloud_browser_external_links (the permission that mints it: reading a key is the same power as minting one, since the public connect checks nothing but the key). null for every other caller; the entry stays so the link, its expiry and its use can still be listed. On cloud-browser-sessions it is masked to the last 4.' expires_at: type: - string - 'null' description: ISO 8601 expiry; null means it never expires. Checked at connect and never again, so a session can outlive its own key. max_connects: type: - number - 'null' description: Cap on CONCURRENT sessions on this key; null means unlimited. allowed_ips: type: - array - 'null' items: type: string allowed_countries: type: - array - 'null' items: type: string purpose: type: string enum: - relogin - recruiter_relogin - share description: What the public page behind the link does. Stamped at mint and never re-negotiated at connect, because the visitor is unauthenticated. Absent on keys minted before the field existed, which the backend reads as relogin. required: - key - expires_at - max_connects - allowed_ips - allowed_countries description: The smart links minted on this browser; the key itself only for a caller holding can_manage_cloud_browser_external_links, null otherwise (2026-09-16). Each console open used to leave a throwaway entry here; minting now sweeps entries that expired over 24h ago, so this is the live link list rather than a log. vendor_profile_shares: type: - array - 'null' items: type: object properties: email: type: string role: type: string shared_at: type: - string - 'null' shared_by: type: - string - 'null' vendor_share_id: type: - string - 'null' required: - email - role - shared_at - shared_by - vendor_share_id created_by: type: object properties: actor_type: type: string enum: - user - support - api_key - system - agent actor_sid: type: - string - 'null' team_sid: type: string actor_name: type: - string - 'null' description: The OAuth client that acted ("Claude", "n8n"); null for a user, an API key or a system job. oauth_client_sid: type: - string - 'null' description: The acting OAuth client (id_oc_*); null off the OAuth path. reason: type: - string - 'null' description: Why a system actor wrote the row (snapshot_capture_job, ...); null otherwise. permissions: type: object additionalProperties: {} description: 'Internal audit context: the grant set the actor held at write time. Not a contract.' cluster_id: type: - integer - 'null' description: 'Internal audit context: the cluster that served the write.' trace_id: type: - string - 'null' description: 'Internal audit context: the trace id of the request that wrote the row.' required: - actor_type - actor_sid - team_sid - permissions deleted_by: type: - object - 'null' properties: actor_type: type: string enum: - user - support - api_key - system - agent actor_sid: type: - string - 'null' team_sid: type: string actor_name: type: - string - 'null' description: The OAuth client that acted ("Claude", "n8n"); null for a user, an API key or a system job. oauth_client_sid: type: - string - 'null' description: The acting OAuth client (id_oc_*); null off the OAuth path. reason: type: - string - 'null' description: Why a system actor wrote the row (snapshot_capture_job, ...); null otherwise. permissions: type: object additionalProperties: {} description: 'Internal audit context: the grant set the actor held at write time. Not a contract.' cluster_id: type: - integer - 'null' description: 'Internal audit context: the cluster that served the write.' trace_id: type: - string - 'null' description: 'Internal audit context: the trace id of the request that wrote the row.' required: - actor_type - actor_sid - team_sid - permissions created_at: type: string updated_at: type: string deleted_at: type: - string - 'null' required: - sid - team_sid - linkedin_account_sid - automation_server_sid - account_share_sid - share_role - vendor_provider - vendor_name - vendor_profile_id - browser_owner - status - error_reason - fail_count - last_fail_at - logout_count - last_logout_at - last_start_at - last_health_check_at - last_activity_at - antidetect_browser_proxy_sid - proxy_country_code - custom_proxy - proxy_5g - cloud_browser_access - vendor_profile_shares - created_by - deleted_by - created_at - updated_at - deleted_at included: type: object additionalProperties: {} includes: type: array items: type: string meta: type: object properties: trace_id: type: string description: UUID v7; same 128-bit value as the X-Trace-Id header. span_id: type: string pattern: ^[0-9a-f]{16}$ description: 16 hex chars, root span of this request. timestamp: type: string description: ISO 8601 UTC (Y-m-dTH:i:sZ), response time. duration_ms: type: integer minimum: 0 description: Server-side wall clock. team_sid: type: - string - 'null' description: The team this call ran in (the token team, or the team_sid override). Null when unauthenticated; absent from pre-2026-08-20 backends. actor_type: type: - string - 'null' description: user | agent | api_key | system. Null when unauthenticated; absent from pre-2026-08-20 backends. required: - trace_id - span_id - timestamp - duration_ms required: - success - operation - item - included - includes - meta responses: McpServerError: description: MCP error envelope with `error.code` internal_error or service_unavailable. content: application/json: schema: $ref: '#/components/schemas/McpError' McpClientError: description: MCP error envelope. `error.code` is one of validation_failed, nothing_to_update, not_found, relation_not_found, invalid_transition, limit_exceeded, payment_required, duplicate_rejected, conflict, delete_blocked, unauthorized, forbidden, rate_limited, not_implemented. content: application/json: schema: $ref: '#/components/schemas/McpError' securitySchemes: BearerJwt: type: http scheme: bearer bearerFormat: JWT description: Access token issued by gtm.service.id. Its `access_identity` claim carries `team_sid`, `actor_sid` and `actor_type`, and that team scope is authoritative. TeamSid: type: apiKey in: header name: Team-SID description: Team scope for tokens that do not carry one. Ignored when the token already names a team. x-refined-from: - gtm-api-openapi-openapi.yml - gtm-api-linkedin-openapi.yaml