Cloudbrowser Browsers API

The Browsers API from Cloudbrowser — 9 operation(s) for browsers.

Operations 14

POST /browsers Create a browser #
GET /browsers List browsers #
GET /browsers/{browserId} Get a browser #
DELETE /browsers/{browserId} Delete a browser #
POST /browsers/{browserId}/pause Pause a browser #
POST /browsers/{browserId}/resume Resume a browser #
POST /browsers/{browserId}/fork Fork a browser #
POST /browsers/{browserId}/grants Create connection access #
GET /browsers/{browserId}/grants List access grants #
DELETE /browsers/{browserId}/grants/{grantId} Revoke access #
GET /browsers/{browserId}/grants/{grantId}/sessions List a link’s authorized viewer sessions #
DELETE /browsers/{browserId}/grants/{grantId}/sessions End all sessions for a Live View link #
GET /browsers/{browserId}/grants/{grantId}/secret Reveal a saved owner link #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/cloudbrowser-tv:cloudbrowser-tv-browsers-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

cloudbrowser-tv-browsers-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Cloudbrowser REST Browsers API
  version: 0.6.0
  description: Next.js API with Sandbox0 Chrome, PostgreSQL and Auth0. Billing endpoints require configured Stripe; check billingEnabled. API-key authentication remains supported. Go CLI x-cli entries are design examples only. Fork requires a paused source.
servers:
- url: http://localhost:3000/api/v1
  description: Local development server
- url: https://cloudbrowser.tv/api/v1
  description: Production origin (private preview)
security:
- ApiKey: []
tags:
- name: Browsers
paths:
  /browsers:
    post:
      operationId: createBrowser
      summary: Create a browser
      description: Reserves a concurrent slot atomically. Returns an operation. Links can be created before the browser is running; connecting requires a running browser.
      x-cli: cloudbrowser create --name research --wait
      parameters:
      - name: Idempotency-Key
        in: header
        required: true
        schema:
          type: string
        description: Replays with the same payload return the same operation. Different payload returns 409.
      responses:
        '202':
          description: Accepted asynchronous operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Operation'
        default:
          description: Structured error; HTTP 400/401/403/404/409/429/503 as applicable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateBrowser'
      x-implementation: local
      tags:
      - Browsers
    get:
      operationId: listBrowsers
      summary: List browsers
      description: ''
      x-cli: cloudbrowser list --output json
      parameters:
      - name: cursor
        in: query
        schema:
          type: string
      - name: limit
        in: query
        schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 20
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Browser'
                  nextCursor:
                    type:
                    - string
                    - 'null'
        default:
          description: Structured error; HTTP 400/401/403/404/409/429/503 as applicable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-implementation: local
      tags:
      - Browsers
  /browsers/{browserId}:
    get:
      operationId: getBrowser
      summary: Get a browser
      description: ''
      x-cli: cloudbrowser get br_123
      parameters:
      - name: browserId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Browser'
        default:
          description: Structured error; HTTP 400/401/403/404/409/429/503 as applicable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-implementation: local
      tags:
      - Browsers
    delete:
      operationId: deleteBrowser
      summary: Delete a browser
      description: Revoke all grants and stop connections. Deletion is terminal.
      x-cli: cloudbrowser delete br_123 --yes
      parameters:
      - name: browserId
        in: path
        required: true
        schema:
          type: string
      responses:
        '202':
          description: Accepted asynchronous operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Operation'
        default:
          description: Structured error; HTTP 400/401/403/404/409/429/503 as applicable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-implementation: local
      tags:
      - Browsers
  /browsers/{browserId}/pause:
    post:
      operationId: pauseBrowser
      summary: Pause a browser
      description: Pause disconnects active transports and invalidates runtime viewer sessions/tickets. CDP and reusable Live View links remain valid. After resume reconnect with the same URL. Chrome profiles persist; live page memory is not guaranteed. No implicit resume on access. Pause flushes Chrome profile writes before requesting provider pause.
      x-cli: cloudbrowser pause br_123 --wait
      parameters:
      - name: browserId
        in: path
        required: true
        schema:
          type: string
      responses:
        '202':
          description: Accepted asynchronous operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Operation'
        default:
          description: Structured error; HTTP 400/401/403/404/409/429/503 as applicable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-implementation: local
      tags:
      - Browsers
  /browsers/{browserId}/resume:
    post:
      operationId: resumeBrowser
      summary: Resume a browser
      description: Pause disconnects active transports and invalidates runtime viewer sessions/tickets. CDP and reusable Live View links remain valid. After resume reconnect with the same URL. Chrome profiles persist; live page memory is not guaranteed. No implicit resume on access. Pause flushes Chrome profile writes before requesting provider pause.
      x-cli: cloudbrowser resume br_123 --wait
      parameters:
      - name: browserId
        in: path
        required: true
        schema:
          type: string
      responses:
        '202':
          description: Accepted asynchronous operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Operation'
        default:
          description: Structured error; HTTP 400/401/403/404/409/429/503 as applicable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-implementation: local
      tags:
      - Browsers
  /browsers/{browserId}/fork:
    post:
      operationId: forkBrowser
      summary: Fork a browser
      description: Create independent browser ID and profile from a consistent snapshot. No access grants are inherited. Snapshot consistency must be qualified before implementation ships. The source must be paused; a running source returns 409 pause_required. Paused-source inheritance and independent writes passed the live test. Never treat a failed operation as a successful child snapshot.
      x-cli: cloudbrowser fork br_123 --name research-copy --wait
      parameters:
      - name: browserId
        in: path
        required: true
        schema:
          type: string
      - name: Idempotency-Key
        in: header
        required: true
        schema:
          type: string
        description: Replays with the same payload return the same operation. Different payload returns 409.
      responses:
        '202':
          description: Accepted asynchronous operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Operation'
        default:
          description: Structured error; HTTP 400/401/403/404/409/429/503 as applicable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ForkBrowser'
      x-implementation: local
      tags:
      - Browsers
  /browsers/{browserId}/grants:
    post:
      operationId: createGrant
      summary: Create connection access
      description: Create a permanent browser-scoped link, valid until revoked. CDP provides full control. Live View requires sign-in and defaults to read-only. URLs survive pause/resume; runtime connections must reconnect. The secret URL is returned once.
      x-cli: cloudbrowser connect br_123 --name research --output json
      parameters:
      - name: browserId
        in: path
        required: true
        schema:
          type: string
      responses:
        '201':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GrantIssue'
        default:
          description: Structured error; HTTP 400/401/403/404/409/429/503 as applicable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateGrant'
            examples:
              cdp:
                value:
                  audience: cdp
                  permission: control
              liveView:
                value:
                  audience: live-view
                  mode: share
                  permission: view
      x-implementation: local
      tags:
      - Browsers
    get:
      operationId: listGrants
      summary: List access grants
      description: List metadata only, never bearer URLs, share secrets, refresh cookies or entry tickets. Live View metadata includes permission, expiresAt (null for never), lastOpenedAt, activeSessions and revision. Filter by audience/status; paginate with cursor/limit. Local implementation returns all matching entries with nextCursor=null; pagination is pending.
      x-cli: cloudbrowser tokens list br_123
      parameters:
      - name: browserId
        in: path
        required: true
        schema:
          type: string
      - name: audience
        in: query
        schema:
          type: string
          enum:
          - cdp
          - live-view
      - name: status
        in: query
        schema:
          type: string
          enum:
          - active
          - expired
          - revoked
          - used
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Grant'
                  nextCursor:
                    type:
                    - string
                    - 'null'
        default:
          description: Structured error; HTTP 400/401/403/404/409/429/503 as applicable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-implementation: local
      tags:
      - Browsers
  /browsers/{browserId}/grants/{grantId}:
    delete:
      operationId: revokeGrant
      summary: Revoke access
      description: Permanently revoke this grant, close its streams, and invalidate all tickets and refresh families. Reusable URL can no longer create sessions. Idempotent; revoked grants cannot be revived. Does not delete the browser.
      x-cli: cloudbrowser tokens revoke br_123 grant_123 --yes
      parameters:
      - name: browserId
        in: path
        required: true
        schema:
          type: string
      - name: grantId
        in: path
        required: true
        schema:
          type: string
      responses:
        default:
          description: Structured error; HTTP 400/401/403/404/409/429/503 as applicable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Grant'
      x-implementation: local
      tags:
      - Browsers
    patch:
      operationId: updateLiveViewLink
      summary: Change a Live View share link policy
      description: Change link name or Live View permission. Policy updates invalidate existing viewer sessions. Only the owner can manage links.
      x-cli: cloudbrowser links update br_123 grant_123 --permission view
      parameters:
      - name: browserId
        in: path
        required: true
        schema:
          type: string
      - name: grantId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateLiveViewGrant'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LiveViewGrant'
        default:
          description: Structured error; HTTP 400/401/403/404/409/429/503 as applicable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-implementation: local
      tags:
      - Browsers
  /browsers/{browserId}/grants/{grantId}/sessions:
    get:
      operationId: listLiveViewSessions
      summary: List a link’s authorized viewer sessions
      description: Workspace authorization required. Return metadata only; no cookies, tokens or private page content. Expired/ended sessions are excluded. Local implementation returns all matching entries with nextCursor=null; pagination is pending.
      x-cli: cloudbrowser links sessions br_123 grant_123
      parameters:
      - name: browserId
        in: path
        required: true
        schema:
          type: string
      - name: grantId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ViewerSession'
                  nextCursor:
                    type:
                    - string
                    - 'null'
                required:
                - items
                - nextCursor
        default:
          description: Structured error; HTTP 400/401/403/404/409/429/503 as applicable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-implementation: local
      tags:
      - Browsers
    delete:
      operationId: endLiveViewSessions
      summary: End all sessions for a Live View link
      description: Workspace authorization required. Invalidate all current sessions, refresh families and outstanding entry tickets; close streams. The reusable share URL stays valid for future visits. Use revokeGrant to prevent future visits too. Does not operate on CDP.
      x-cli: cloudbrowser links end-sessions br_123 grant_123 --yes
      parameters:
      - name: browserId
        in: path
        required: true
        schema:
          type: string
      - name: grantId
        in: path
        required: true
        schema:
          type: string
      responses:
        default:
          description: Structured error; HTTP 400/401/403/404/409/429/503 as applicable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Grant'
      x-implementation: local
      tags:
      - Browsers
  /browsers/{browserId}/grants/{grantId}/secret:
    get:
      operationId: revealGrantSecret
      summary: Reveal a saved owner link
      description: Owner-only action. Returns the decrypted URL and, for CDP grants, the short prompt for an agent. List endpoints never return the bearer secret. Grants created before encrypted secret storage may return 409 secret_unavailable.
      parameters:
      - name: browserId
        in: path
        required: true
        schema:
          type: string
      - name: grantId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Owner link URL and optional agent prompt
          content:
            application/json:
              schema:
                type: object
                required:
                - url
                properties:
                  url:
                    type: string
                  prompt:
                    type:
                    - string
                    - 'null'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '409':
          description: Secret unavailable or revoked
      tags:
      - Browsers
components:
  schemas:
    LiveViewGrant:
      type: object
      additionalProperties: false
      properties:
        id:
          type: string
        browserId:
          type: string
        audience:
          const: live-view
        mode:
          type: string
          enum:
          - share
          - one-time
        permission:
          type: string
          enum:
          - view
          - control
          default: view
          description: 'view is read-only: stream only, no mouse, keyboard, touch, clipboard writes, uploads, navigation commands or browser control. control allows browser interaction but no workspace, lifecycle or CDP administration. Enforced by the gateway, not just UI.'
        expiresAt:
          type:
          - string
          - 'null'
          description: Null for permanent links. Legacy revoked links may retain their former deadline.
        ticketTtlSeconds:
          type: integer
        entryExpiresAt:
          type:
          - string
          - 'null'
          format: date-time
          description: Direct one-time URL only; null for reusable shares.
        autoRenew:
          type: boolean
          deprecated: true
          description: Legacy field. No link renewal is needed; viewer credentials refresh internally.
        createdAt:
          type: string
          format: date-time
        lastOpenedAt:
          type:
          - string
          - 'null'
          format: date-time
        activeSessions:
          type: integer
          minimum: 0
          description: Current authorized viewer sessions, not connected socket count.
        revision:
          type: integer
          minimum: 1
        status:
          type: string
          enum:
          - active
          - expired
          - revoked
          - used
        revoked:
          type: boolean
        name:
          type: string
        lastUsedAt:
          type:
          - string
          - 'null'
          format: date-time
        visitors:
          type: array
          items:
            type: object
            properties:
              accountId:
                type: string
              name:
                type: string
              avatarUrl:
                type:
                - string
                - 'null'
              lastUsedAt:
                type: string
                format: date-time
              online:
                type: boolean
        hasSecret:
          type: boolean
          description: 'Owner metadata: whether repeat-copy is available. The secret is never returned by list endpoints.'
      required:
      - id
      - browserId
      - audience
      - mode
      - permission
      - expiresAt
      - ticketTtlSeconds
      - entryExpiresAt
      - autoRenew
      - createdAt
      - lastOpenedAt
      - activeSessions
      - revision
      - status
      - revoked
    CdpGrant:
      type: object
      required:
      - id
      - browserId
      - audience
      - permission
      - expiresAt
      - renewUntil
      - autoRenew
      - revoked
      properties:
        id:
          type: string
        browserId:
          type: string
        audience:
          const: cdp
        permission:
          const: control
        expiresAt:
          type:
          - string
          - 'null'
          description: Null for permanent links. Legacy revoked links may retain their former deadline.
        renewUntil:
          type:
          - string
          - 'null'
          format: date-time
          description: Legacy field, always null for permanent links.
        autoRenew:
          type: boolean
          deprecated: true
          description: Legacy field. No link renewal is needed; viewer credentials refresh internally.
        revoked:
          type: boolean
        name:
          type: string
        lastUsedAt:
          type:
          - string
          - 'null'
          format: date-time
        visitors:
          type: array
          items:
            type: object
            properties:
              accountId:
                type: string
              name:
                type: string
              avatarUrl:
                type:
                - string
                - 'null'
              lastUsedAt:
                type: string
                format: date-time
              online:
                type: boolean
        hasSecret:
          type: boolean
          description: 'Owner metadata: whether repeat-copy is available. The secret is never returned by list endpoints.'
    CreateCdpGrant:
      type: object
      required:
      - audience
      additionalProperties: false
      properties:
        audience:
          const: cdp
        permission:
          const: control
        name:
          type: string
          maxLength: 80
          default: ''
    UpdateLiveViewGrant:
      type: object
      additionalProperties: false
      properties:
        permission:
          type: string
          enum:
          - view
          - control
          default: view
          description: 'view is read-only: stream only, no mouse, keyboard, touch, clipboard writes, uploads, navigation commands or browser control. control allows browser interaction but no workspace, lifecycle or CDP administration. Enforced by the gateway, not just UI.'
        name:
          type: string
          maxLength: 80
      required: []
      minProperties: 1
      description: Share-mode Live View only. At least one property required. Every effective policy change invalidates all old sessions and tickets immediately and increments revision. The same reusable URL can then open a fresh session. Revoked grants cannot be revived. An expired share may be extended by its owner, but previous sessions stay ended.
    ForkBrowser:
      type: object
      required:
      - name
      additionalProperties: false
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 50
        startPaused:
          type: boolean
          default: true
          description: Paused forks do not reserve running capacity. They retain independent profile writes.
    CreateBrowser:
      type: object
      required:
      - name
      additionalProperties: false
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 50
    ViewerSession:
      type: object
      additionalProperties: false
      required:
      - id
      - grantId
      - browserId
      - permission
      - autoRenew
      - accessExpiresAt
      - idleExpiresAt
      - ended
      - authorizationExpiresAt
      - accountId
      properties:
        id:
          type: string
        grantId:
          type: string
        browserId:
          type: string
        permission:
          type: string
          enum:
          - view
          - control
          default: view
          description: 'view is read-only: stream only, no mouse, keyboard, touch, clipboard writes, uploads, navigation commands or browser control. control allows browser interaction but no workspace, lifecycle or CDP administration. Enforced by the gateway, not just UI.'
        autoRenew:
          type: boolean
        accessExpiresAt:
          type: string
          format: date-time
        idleExpiresAt:
          type: string
          format: date-time
        ended:
          type: boolean
        authorizationExpiresAt:
          type:
          - string
          - 'null'
          format: date-time
          default: null
          description: Absolute link authorization deadline, measured from issuance/update; null means no expiration. Applies to new visits AND all existing sessions. Automatic refresh never moves this deadline.
        accountId:
          type: string
          description: Recipient account binding; never infer identity from browserId alone.
    Operation:
      type: object
      required:
      - id
      - browserId
      - status
      properties:
        id:
          type: string
        browserId:
          type: string
        status:
          type: string
          enum:
          - pending
          - running
          - succeeded
          - failed
        error:
          $ref: '#/components/schemas/Error'
    Error:
      type: object
      required:
      - code
      - message
      - requestId
      properties:
        code:
          type: string
          examples:
          - CONCURRENCY_LIMIT
          - ALLOWANCE_EXHAUSTED
          - BROWSER_NOT_RUNNING
          - GRANT_EXPIRED
          - GRANT_REVOKED
          - RENEWAL_LIMIT
          - CONFLICT
        message:
          type: string
        requestId:
          type: string
    CreateLiveViewGrant:
      type: object
      additionalProperties: false
      properties:
        audience:
          const: live-view
        mode:
          const: share
          default: share
          description: New links are reusable. Existing one-time invitations retain their original claim rules.
        permission:
          type: string
          enum:
          - view
          - control
          default: view
          description: 'view is read-only: stream only, no mouse, keyboard, touch, clipboard writes, uploads, navigation commands or browser control. control allows browser interaction but no workspace, lifecycle or CDP administration. Enforced by the gateway, not just UI.'
        name:
          type: string
          maxLength: 80
          default: ''
      required:
      - audience
    GrantIssue:
      oneOf:
      - type: object
        additionalProperties: false
        required:
        - grant
        - cdpUrl
        properties:
          grant:
            $ref: '#/components/schemas/CdpGrant'
          cdpUrl:
            type: string
            description: Secret returned only on issuance.
      - type: object
        required:
        - grant
        - liveViewUrl
        properties:
          grant:
            $ref: '#/components/schemas/LiveViewGrant'
          liveViewUrl:
            type: string
            description: 'Public account-shell entry URL, returned only at issuance: https://cloudbrowser.tv/view/{grantId}#share=... (reusable) or #ticket=... (one-time invitation). Sign in and accept into your library, then open /browsers/{browserId} fullscreen in the same workspace. Viewer transport remains isolated at view.cloudbrowser.tv. Raw secrets never appear in listings.'
    Browser:
      type: object
      required:
      - id
      - name
      - status
      properties:
        id:
          type: string
          example: br_123
        name:
          type: string
        status:
          type: string
          enum:
          - starting
          - running
          - pausing
          - paused
          - resuming
          - failed
          - deleting
        parentId:
          type:
          - string
          - 'null'
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        error:
          type:
          - string
          - 'null'
        runtimeGeneration:
          type: integer
        pauseReason:
          type:
          - string
          - 'null'
          enum:
          - user
          - free_allowance_exhausted
          - payment_required
          - concurrency_limit
          - upstream
          - created_paused
          - null
          description: Recorded reason for the most recent pause. Null for unknown historical reasons and shared viewers. Does not indicate whether resume is currently allowed.
        pausedAt:
          type:
          - string
          - 'null'
          format: date-time
          description: Time the pause completed. Null while pausing, for older records or shared viewers.
    CreateGrant:
      oneOf:
      - $ref: '#/components/schemas/CreateCdpGrant'
      - $ref: '#/components/schemas/CreateLiveViewGrant'
      discriminator:
        propertyName: audience
        mapping:
          cdp: '#/components/schemas/CreateCdpGrant'
          live-view: '#/components/schemas/CreateLiveViewGrant'
    Grant:
      oneOf:
      - $ref: '#/components/schemas/CdpGrant'
      - $ref: '#/components/schemas/LiveViewGrant'
  securitySchemes:
    ApiKey:
      type: http
      scheme: bearer
      description: Account/workspace API key. Distinct from a per-browser CDP token or viewer ticket.
    ViewerAccess:
      type: apiKey
      in: cookie
      name: __Secure-cb_viewer_access
      description: Viewer-origin HttpOnly cookie; actual name is session-suffixed (cb_access_{sessionId} or cb_refresh_{sessionId}). Exact Origin is required. Local HTTP only omits Secure.
    ViewerRefresh:
      type: apiKey
      in: cookie
      name: __Secure-cb_viewer_refresh
      description: Viewer-origin HttpOnly cookie; actual name is session-suffixed (cb_access_{sessionId} or cb_refresh_{sessionId}). Exact Origin is required. Local HTTP only omits Secure.
    AccountSession:
      type: apiKey
      in: cookie
      name: __Host-cb_account
      description: Signed-in account on cloudbrowser.tv; HttpOnly, Secure, host-only, SameSite=Lax; CSRF protection required. Not sent to viewer origin.
    AccountAccess:
      type: http
      scheme: bearer
      description: User-account access token issued by human CLI login. Not a workspace API key, CDP token or viewer refresh token.