Browserless Cloud API

The Browserless Cloud API is a multi-surface browser platform combining (1) WebSocket BaaS endpoints compatible with Puppeteer, Playwright, and Selenium across Chromium, Chrome, Edge, Firefox, and WebKit; (2) a GraphQL automation layer called BrowserQL for stealth scraping with built-in CAPTCHA solving and residential proxies; and (3) a REST API family for screenshots, PDFs, content, scrape, function execution, performance audits, smart-scrape, search, map, crawl, unblock, and session management. All surfaces share a single API token and a regional production-{sfo,lon,ams} host pattern.

Browserless Cloud API is published by Browserless on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 2 JSON Schema definitions.

Tagged areas include BaaS, BrowserQL, REST, Screenshots, and PDF. The published artifact set on APIs.io includes API documentation, an API reference, a getting-started guide, SDKs, a GitHub repository, an OpenAPI specification, and 2 JSON Schemas.

Documentation

Specifications

SDKs

Schemas & Data

Other Resources

🔗
SignUp
https://account.browserless.io/signup
🔗
JSONLD
https://raw.githubusercontent.com/api-evangelist/browserless/refs/heads/main/json-ld/browserless-context.jsonld
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/browserless/refs/heads/main/examples/browserless-screenshot-example.json
🔗
Plans
https://raw.githubusercontent.com/api-evangelist/browserless/refs/heads/main/plans/browserless-plans-pricing.yml
🔗
FinOps
https://raw.githubusercontent.com/api-evangelist/browserless/refs/heads/main/finops/browserless-finops.yml
🔗
Capabilities
https://raw.githubusercontent.com/api-evangelist/browserless/refs/heads/main/capabilities/rest-apis.yaml
🔗
Capabilities
https://raw.githubusercontent.com/api-evangelist/browserless/refs/heads/main/capabilities/browserql.yaml
🔗
Capabilities
https://raw.githubusercontent.com/api-evangelist/browserless/refs/heads/main/capabilities/sessions.yaml
🔗
Capabilities
https://raw.githubusercontent.com/api-evangelist/browserless/refs/heads/main/capabilities/profiles.yaml
🔗
Vocabulary
https://raw.githubusercontent.com/api-evangelist/browserless/refs/heads/main/vocabulary/browserless-vocabulary.yml
🔗
Rules
https://raw.githubusercontent.com/api-evangelist/browserless/refs/heads/main/rules/browserless-rules.yml
🔗
ChangeLog
https://www.browserless.io/changelog
🔗
StatusPage
https://status.browserless.io
🔗
Pricing
https://www.browserless.io/pricing
🔗
Enterprise
https://www.browserless.io/enterprise
🔗
MCP
https://mcp.browserless.io/mcp

OpenAPI Specification

browserless-openapi.yml Raw ↑
customSiteTitle: Browserless Documentation
definitions:
  FrameAddScriptTagOptions:
    type: object
    properties:
      url:
        description: URL of the script to be added.
        type: string
      path:
        description: Path to a JavaScript file to be injected into the frame.
        type: string
      content:
        description: JavaScript to be injected into the frame.
        type: string
      type:
        description: >-
          Sets the `type` of the script. Use `module` in order to load an ES2015
          module.
        type: string
      id:
        description: Sets the `id` of the script.
        type: string
    additionalProperties: false
  FrameAddStyleTagOptions:
    type: object
    properties:
      url:
        description: the URL of the CSS file to be added.
        type: string
      path:
        description: The path to a CSS file to be injected into the frame.
        type: string
      content:
        description: Raw CSS content to be injected into the frame.
        type: string
    additionalProperties: false
  Credentials:
    type: object
    properties:
      username:
        type: string
      password:
        type: string
    additionalProperties: false
    required:
      - password
      - username
  CookieParam:
    description: |-
      Cookie parameter object used to set cookies in the page-level cookies
      API.
    type: object
    properties:
      name:
        description: Cookie name.
        type: string
      value:
        description: Cookie value.
        type: string
      url:
        description: >-
          The request-URI to associate with the setting of the cookie. This
          value can affect

          the default domain, path, and source scheme values of the created
          cookie.
        type: string
      domain:
        description: Cookie domain.
        type: string
      path:
        description: Cookie path.
        type: string
      secure:
        description: True if cookie is secure.
        type: boolean
      httpOnly:
        description: True if cookie is http-only.
        type: boolean
      sameSite:
        description: Cookie SameSite type.
        enum:
          - Default
          - Lax
          - None
          - Strict
        type: string
      expires:
        description: Cookie expiration date, session cookie if not set
        type: number
      priority:
        description: Cookie Priority. Supported only in Chrome.
        enum:
          - High
          - Low
          - Medium
        type: string
      sameParty:
        type: boolean
      sourceScheme:
        description: Cookie source scheme type. Supported only in Chrome.
        enum:
          - NonSecure
          - Secure
          - Unset
        type: string
      partitionKey:
        description: >-
          Cookie partition key. In Chrome, it matches the top-level site the

          partitioned cookie is available in. In Firefox, it matches the

          source origin in the

          {@link https://w3c.github.io/webdriver-bidi/#type-storage-PartitionKey
          PartitionKey}.
        anyOf:
          - $ref: '#/definitions/CookiePartitionKey'
          - type: string
    additionalProperties: false
    required:
      - name
      - value
  CookiePartitionKey:
    description: Represents a cookie partition key in Chrome.
    type: object
    properties:
      sourceOrigin:
        description: >-
          The site of the top-level URL the browser was visiting at the start of
          the request

          to the endpoint that set the cookie.


          In Chrome, maps to the CDP's `topLevelSite` partition key.
        type: string
      hasCrossSiteAncestor:
        description: |-
          Indicates if the cookie has any ancestors that are cross-site to
          the topLevelSite.

          Supported only in Chrome.
        type: boolean
    additionalProperties: false
    required:
      - sourceOrigin
  GoToOptions:
    type: object
    properties:
      referer:
        description: >-
          If provided, it will take preference over the referer header value set
          by

          {@link Page.setExtraHTTPHeaderspage.setExtraHTTPHeaders()}.
        type: string
      referrerPolicy:
        description: >-
          If provided, it will take preference over the referer-policy header
          value

          set by {@link Page.setExtraHTTPHeaderspage.setExtraHTTPHeaders()}.
        type: string
      timeout:
        description: >-
          Maximum wait time in milliseconds. Pass 0 to disable the timeout.


          The default value can be changed by using the

          {@link Page.setDefaultTimeout} or {@link
          Page.setDefaultNavigationTimeout}

          methods.
        type: number
      waitUntil:
        description: >-
          When to consider waiting succeeds. Given an array of event strings,
          waiting

          is considered to be successful after all events have been fired.
        anyOf:
          - type: array
            items:
              $ref: '#/definitions/PuppeteerLifeCycleEvent'
          - enum:
              - domcontentloaded
              - load
              - networkidle0
              - networkidle2
            type: string
      signal:
        description: A signal object that allows you to cancel the call.
        $ref: '#/definitions/AbortSignal'
    additionalProperties: false
  PuppeteerLifeCycleEvent:
    enum:
      - domcontentloaded
      - load
      - networkidle0
      - networkidle2
    type: string
  AbortSignal:
    type: object
    properties:
      aborted:
        type: boolean
      onabort:
        anyOf:
          - type: object
            additionalProperties: false
          - type: 'null'
      reason: {}
    additionalProperties: false
    required:
      - aborted
      - onabort
      - reason
  Record<string,unknown>:
    type: object
    additionalProperties: false
  Protocol.Emulation.UserAgentMetadata:
    description: >-
      Used to specify User Agent Client Hints to emulate. See
      https://wicg.github.io/ua-client-hints

      Missing optional values will be filled in by the target with what it would
      normally use.
    type: object
    properties:
      brands:
        description: Brands appearing in Sec-CH-UA.
        type: array
        items:
          $ref: '#/definitions/Protocol.Emulation.UserAgentBrandVersion'
      fullVersionList:
        description: Brands appearing in Sec-CH-UA-Full-Version-List.
        type: array
        items:
          $ref: '#/definitions/Protocol.Emulation.UserAgentBrandVersion'
      fullVersion:
        type: string
      platform:
        type: string
      platformVersion:
        type: string
      architecture:
        type: string
      model:
        type: string
      mobile:
        type: boolean
      bitness:
        type: string
      wow64:
        type: boolean
      formFactors:
        description: |-
          Used to specify User Agent form-factor values.
          See https://wicg.github.io/ua-client-hints/#sec-ch-ua-form-factors
        type: array
        items:
          type: string
    additionalProperties: false
    required:
      - architecture
      - mobile
      - model
      - platform
      - platformVersion
  Protocol.Emulation.UserAgentBrandVersion:
    description: >-
      Used to specify User Agent Client Hints to emulate. See
      https://wicg.github.io/ua-client-hints
    type: object
    properties:
      brand:
        type: string
      version:
        type: string
    additionalProperties: false
    required:
      - brand
      - version
  Viewport:
    type: object
    properties:
      width:
        description: The page width in CSS pixels.
        type: number
      height:
        description: The page height in CSS pixels.
        type: number
      deviceScaleFactor:
        description: >-
          Specify device scale factor.

          See {@link
          https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio
          devicePixelRatio} for more info.
        type: number
      isMobile:
        description: Whether the `meta viewport` tag is taken into account.
        type: boolean
      isLandscape:
        description: Specifies if the viewport is in landscape mode.
        type: boolean
      hasTouch:
        description: Specify if the viewport supports touch events.
        type: boolean
    additionalProperties: false
    required:
      - height
      - width
  CDPLaunchOptions:
    type: object
    properties:
      args:
        type: array
        items:
          type: string
      defaultViewport:
        type: object
        properties:
          deviceScaleFactor:
            type: number
          hasTouch:
            type: boolean
          height:
            type: number
          isLandscape:
            type: boolean
          isMobile:
            type: boolean
          width:
            type: number
        additionalProperties: false
        required:
          - height
          - width
      devtools:
        type: boolean
      dumpio:
        type: boolean
      headless:
        enum:
          - false
          - shell
          - true
      ignoreDefaultArgs:
        anyOf:
          - type: array
            items:
              type: string
          - type: boolean
      ignoreHTTPSErrors:
        type: boolean
      acceptInsecureCerts:
        type: boolean
      slowMo:
        type: number
      stealth:
        type: boolean
      timeout:
        type: number
      userDataDir:
        type: string
      waitForInitialPage:
        type: boolean
    additionalProperties: false
  BrowserServerOptions:
    type: object
    properties:
      args:
        type: array
        items:
          type: string
      chromiumSandbox:
        type: boolean
      devtools:
        type: boolean
      downloadsPath:
        type: string
      headless:
        type: boolean
      ignoreDefaultArgs:
        anyOf:
          - type: array
            items:
              type: string
          - type: boolean
      proxy:
        type: object
        properties:
          bypass:
            type: string
          password:
            type: string
          server:
            type: string
          username:
            type: string
        additionalProperties: false
        required:
          - server
      timeout:
        type: number
      tracesDir:
        type: string
    additionalProperties: false
  JSONSchema:
    type: object
    properties:
      code:
        type: string
      context:
        type: object
        additionalProperties:
          $ref: '#/definitions/ContextValue'
    additionalProperties: false
    required:
      - code
  ContextValue:
    anyOf:
      - type: array
        items:
          $ref: '#/definitions/ContextValue'
      - type: object
        additionalProperties:
          $ref: '#/definitions/ContextValue'
      - type:
          - 'null'
          - string
          - number
          - boolean
  PDFMargin:
    type: object
    properties:
      top:
        type:
          - string
          - number
      bottom:
        type:
          - string
          - number
      left:
        type:
          - string
          - number
      right:
        type:
          - string
          - number
    additionalProperties: false
  ScrapeDebugOptions:
    type: object
    properties:
      console:
        type: boolean
      cookies:
        type: boolean
      html:
        type: boolean
      network:
        type: boolean
      screenshot:
        type: boolean
    additionalProperties: false
  ScrapeElementSelector:
    type: object
    properties:
      selector:
        type: string
      timeout:
        type: number
    additionalProperties: false
    required:
      - selector
  Cookie:
    description: Represents a cookie object.
    type: object
    properties:
      path:
        description: Cookie path.
        type: string
      expires:
        description: >-
          Cookie expiration date as the number of seconds since the UNIX epoch.
          Set to `-1` for

          session cookies
        type: number
      size:
        description: Cookie size.
        type: number
      secure:
        description: True if cookie is secure.
        type: boolean
      session:
        description: True in case of session cookie.
        type: boolean
      partitionKeyOpaque:
        description: True if cookie partition key is opaque. Supported only in Chrome.
        type: boolean
      name:
        description: Cookie name.
        type: string
      value:
        description: Cookie value.
        type: string
      domain:
        description: Cookie domain.
        type: string
      httpOnly:
        description: True if cookie is http-only.
        type: boolean
      sameSite:
        description: Cookie SameSite type.
        enum:
          - Default
          - Lax
          - None
          - Strict
        type: string
      priority:
        description: Cookie Priority. Supported only in Chrome.
        enum:
          - High
          - Low
          - Medium
        type: string
      sameParty:
        type: boolean
      sourceScheme:
        description: Cookie source scheme type. Supported only in Chrome.
        enum:
          - NonSecure
          - Secure
          - Unset
        type: string
      partitionKey:
        description: >-
          Cookie partition key. In Chrome, it matches the top-level site the

          partitioned cookie is available in. In Firefox, it matches the

          source origin in the

          {@link https://w3c.github.io/webdriver-bidi/#type-storage-PartitionKey
          PartitionKey}.
        anyOf:
          - $ref: '#/definitions/CookiePartitionKey'
          - type: string
    additionalProperties: false
    required:
      - domain
      - expires
      - name
      - path
      - secure
      - session
      - size
      - value
  InBoundRequest:
    type: object
    properties:
      headers: {}
      status:
        type: number
      url:
        type: string
    additionalProperties: false
    required:
      - headers
      - status
      - url
  OutBoundRequest:
    type: object
    properties:
      headers: {}
      method:
        type: string
      url:
        type: string
    additionalProperties: false
    required:
      - headers
      - method
      - url
  ScreenshotOptions:
    type: object
    properties:
      optimizeForSpeed:
        type: boolean
      type:
        enum:
          - jpeg
          - png
          - webp
        type: string
      quality:
        description: Quality of the image, between 0-100. Not applicable to `png` images.
        type: number
      fromSurface:
        description: Capture the screenshot from the surface, rather than the view.
        type: boolean
      fullPage:
        description: When `true`, takes a screenshot of the full page.
        type: boolean
      omitBackground:
        description: >-
          Hides default white background and allows capturing screenshots with
          transparency.
        type: boolean
      path:
        description: >-
          The file path to save the image to. The screenshot type will be
          inferred

          from file extension. If path is a relative path, then it is resolved

          relative to current working directory. If no path is provided, the
          image

          won't be saved to the disk.
        type: string
      clip:
        description: Specifies the region of the page/element to clip.
        $ref: '#/definitions/ScreenshotClip'
      encoding:
        description: Encoding of the image.
        enum:
          - base64
          - binary
        type: string
      captureBeyondViewport:
        description: Capture the screenshot beyond the viewport.
        type: boolean
    additionalProperties: false
  ScreenshotClip:
    type: object
    properties:
      scale:
        type: number
      width:
        description: the width of the element in pixels.
        type: number
      height:
        description: the height of the element in pixels.
        type: number
      x:
        type: number
      'y':
        type: number
    additionalProperties: false
    required:
      - height
      - width
      - x
      - 'y'
  import("/home/runner/work/enterprise/enterprise/node_modules/@browserless.io/browserless/build/types",{with:{"resolution-mode":"import"}}).CDPLaunchOptions:
    type: object
    properties:
      args:
        type: array
        items:
          type: string
      defaultViewport:
        type: object
        properties:
          deviceScaleFactor:
            type: number
          hasTouch:
            type: boolean
          height:
            type: number
          isLandscape:
            type: boolean
          isMobile:
            type: boolean
          width:
            type: number
        additionalProperties: false
        required:
          - height
          - width
      devtools:
        type: boolean
      dumpio:
        type: boolean
      headless:
        enum:
          - false
          - shell
          - true
      ignoreDefaultArgs:
        anyOf:
          - type: array
            items:
              type: string
          - type: boolean
      ignoreHTTPSErrors:
        type: boolean
      acceptInsecureCerts:
        type: boolean
      slowMo:
        type: number
      stealth:
        type: boolean
      timeout:
        type: number
      userDataDir:
        type: string
      waitForInitialPage:
        type: boolean
    additionalProperties: false
  CookieSameSite:
    description: |-
      Represents the cookie's 'SameSite' status:
      https://tools.ietf.org/html/draft-west-first-party-cookies
    enum:
      - Default
      - Lax
      - None
      - Strict
    type: string
  CookiePriority:
    description: |-
      Represents the cookie's 'Priority' status:
      https://tools.ietf.org/html/draft-west-cookie-priority-00
    enum:
      - High
      - Low
      - Medium
    type: string
  CookieSourceScheme:
    description: >-
      Represents the source scheme of the origin that originally set the cookie.
      A value of

      "Unset" allows protocol clients to emulate legacy cookie scope for the
      scheme.

      This is a temporary ability and it will be removed in the future.
    enum:
      - NonSecure
      - Secure
      - Unset
    type: string
  import("/home/runner/work/enterprise/enterprise/node_modules/@browserless.io/browserless/build/types",{with:{"resolution-mode":"import"}}).BrowserServerOptions:
    type: object
    properties:
      args:
        type: array
        items:
          type: string
      chromiumSandbox:
        type: boolean
      devtools:
        type: boolean
      downloadsPath:
        type: string
      headless:
        type: boolean
      ignoreDefaultArgs:
        anyOf:
          - type: array
            items:
              type: string
          - type: boolean
      proxy:
        type: object
        properties:
          bypass:
            type: string
          password:
            type: string
          server:
            type: string
          username:
            type: string
        additionalProperties: false
        required:
          - server
      timeout:
        type: number
      tracesDir:
        type: string
    additionalProperties: false
  PaperFormat:
    description: All the valid paper format types when printing a PDF.
    enum:
      - A0
      - A1
      - A2
      - A3
      - A4
      - A5
      - A6
      - LEDGER
      - LEGAL
      - LETTER
      - Ledger
      - Legal
      - Letter
      - TABLOID
      - Tabloid
      - a0
      - a1
      - a2
      - a3
      - a4
      - a5
      - a6
      - ledger
      - legal
      - letter
      - tabloid
    type: string
  ImageFormat:
    enum:
      - jpeg
      - png
      - webp
    type: string
  TimeBasedOptions:
    type: string
    enum:
      - day
      - week
      - month
      - year
      - day
      - week
      - month
      - year
  Record<string,string>:
    type: object
    additionalProperties: false
  Record<string,any>:
    type: object
    additionalProperties: false
  CrawlStatus:
    enum:
      - cancelled
      - completed
      - failed
      - in-progress
    type: string
  CrawlPageResponse:
    type: object
    properties:
      status:
        $ref: '#/definitions/PageStatus'
      contentUrl:
        type: string
      metadata:
        type: object
        properties:
          title:
            type: string
          description:
            type: string
          language:
            type: string
          scrapedAt:
            type: string
          sourceURL:
            type: string
          statusCode:
            type: number
          error:
            type: string
        additionalProperties: false
        required:
          - description
          - error
          - language
          - scrapedAt
          - sourceURL
          - statusCode
          - title
    additionalProperties: false
    required:
      - contentUrl
      - metadata
      - status
  PageStatus:
    enum:
      - cancelled
      - completed
      - failed
      - in-progress
      - queued
    type: string
  CrawlListItem:
    type: object
    properties:
      id:
        type: string
      url:
        type: string
      status:
        $ref: '#/definitions/CrawlStatus'
      total:
        type: number
      completed:
        type: number
      createdAt:
        type: string
      completedAt:
        type: string
    additionalProperties: false
    required:
      - completed
      - completedAt
      - createdAt
      - id
      - status
      - total
      - url
  RefreshResponseDiagnostics:
    description: |-
      Per-entry counts of cookies, origins, and IndexedDB items the server
      dropped or truncated before persisting. All zero on a clean refresh.
    type: object
    properties:
      skippedMalformedCookies:
        description: Cookies dropped because required fields were missing or wrong type.
        type: number
      skippedPrivateCookies:
        description: >-
          Cookies dropped because their domain pointed at a private/internal
          host.
        type: number
      skippedMalformedOrigins:
        description: Origins dropped because they were malformed or non-http(s).
        type: number
      skippedPrivateOrigins:
        description: Origins dropped because they targeted a private/internal network.
        type: number
      truncatedOrigins:
        description: Origins dropped because the per-profile cap was exceeded.
        type: number
      skippedMalformedIdbDatabases:
        description: IndexedDB databases dropped because required fields were missing.
        type: number
      truncatedIdbDatabases:
        description: IndexedDB databases dropped because the per-origin cap was exceeded.
        type: number
      skippedMalformedIdbStores:
        description: IndexedDB object-stores dropped because required fields were missing.
        type: number
      truncatedIdbEntries:
        description: IndexedDB entries dropped because the per-store cap was exceeded.
        type: number
    additionalProperties: false
    required:
      - skippedMalformedCookies
      - skippedMalformedIdbDatabases
      - skippedMalformedIdbStores
      - skippedMalformedOrigins
      - skippedPrivateCookies
      - skippedPrivateOrigins
      - truncatedIdbDatabases
      - truncatedIdbEntries
      - truncatedOrigins
  UploadResponseDiagnostics:
    description: |-
      Per-entry counts of cookies, origins, and IndexedDB items the server
      dropped or truncated before persisting. All zero on a clean upload.
    type: object
    properties:
      skippedMalformedCookies:
        description: Cookies dropped because required fields were missing or wrong type.
        type: number
      skippedPrivateCookies:
        description: >-
          Cookies dropped because their domain pointed at a private/internal
          host.
        type: number
      skippedMalformedOrigins:
        description: Origins dropped because they were malformed or non-http(s).
        type: number
      skippedPrivateOrigins:
        description: Origins dropped because they targeted a private/internal network.
        type: number
      truncatedOrigins:
        description: Origins dropped because the per-profile cap was exceeded.
        type: number
      skippedMalformedIdbDatabases:
        description: IndexedDB databases dropped because required fields were missing.
        type: number
      truncatedIdbDatabases:
        description: IndexedDB databases dropped because the per-origin cap was exceeded.
        type: number
      skippedMalformedIdbStores:
        description: IndexedDB object-stores dropped because required fields were missing.
        type: number
      truncatedIdbEntries:
        description: IndexedDB entries dropped because the per-store cap was exceeded.
        type: number
    additionalProperties: false
    required:
      - skippedMalformedCookies
      - skippedMalformedIdbDatabases
      - skippedMalformedIdbStores
      - skippedMalformedOrigins
      - skippedPrivateCookies
      - skippedPrivateOrigins
      - truncatedIdbDatabases
      - truncatedIdbEntries
      - truncatedOrigins
info:
  title: Browserless
  version: 2.49.0
  x-logo:
    altText: browserless logo
    url: ./docs/browserless-logo-inline.svg
  description: >
    # Browserless.io


    This service extends the Browserless open-source image with many features
    and enhancements for teams automating at scale. Notable features include:


    - A Chrome-devtools-protocol based API for extending and enhancing libraries
    in a cross-language way.

    - A new hybrid-automation toolkit with live session interactivity.

    - Robust session management: connect, reconnect, kill and limit what a
    browser can do.

    - Bleeding features like multiplexing numerous clients into a single Chrome
    process in an isolated way.

    - The ability to upload and run custom extensions.

    - Run multiple tokens, with access controls on each.

    - Multi-browser with all the robust capabilities already in the open-source
    images.


    There's a lot to cover here so let's get started!


    # Software Keys


    The Enterprise image supports time-limited software keys that allow usage
    for a specific period without requiring any external connections or
    callbacks. These keys are cryptographically secure and cannot be reverse
    engineered. When a key expires, the container will exit with a semantic
    error code.


    ## Using a Software Key


    To use a software key, set the `KEY` environment variable when running the
    container:


    ```bash

    docker run -e KEY=your-generated-key browserless/enterprise

    ```


    # Using the Browserless Proxy


    > The Residential proxy is only available for Enterprise and Cloud plans.


    Browserless comes with a built-in mechanism to proxy to what's called
    "residential" IPs. These are IP addresses are sourced from real-users
    running a proxy server on their home networking machines. Residential
    proxying is especially useful for things like bypassing certain bot
    blockages and more.


    Using a residential proxy is as straightforward as adding a few parameters
    to your library or API calls. Here's the required parameters and the values
    they support:


    - `?proxy=residential`: Specifies that you want to use the residential proxy
    for this request. Data-center coming soon.

    - `?proxyCountry=us`: Specifies a country you wish to use for the request. A
    two-digit ISO code.

    - `?proxySticky=true`: If you want to use the same IP address for the
    entirety of the session. Generally recommended for most cases.

    - `?proxyPreset=px_gov01`: Website-specific proxy configuration. Use
    `px_gov01` for government websites to ensure optimal proxy vendor selection.


    Simply append these to your connection call, REST API calls, or any library
    call:


    `wss://production-sfo.browserless.io/chromium?token=YOUR-API-TOKEN&proxy=residential&proxyCountry=us&proxySticky`


    `https://production-sfo.browserless.io/chromium/unblock?token=YOUR-API-TOKEN&proxy=residential&proxyCountry=us&proxySticky`


    Please do note that using a proxy will increase the amount of units
    consumed. Every megabyte of data transferred consumes 6 units.


    # The Browserless CDP API


    In order to enhance the experience with open source libraries like
    Puppeteer, we decided to take a new approach to extending these libraries in
    a language-agnostic way. We call it the Browserless CDP API. Here's a quick
    list of what it can do:


    - Generate and give back live URLs for hybrid automation.

    - Solve Captchas.

    - Return your page's unique identifier created by Chrome.

    - Way more coming!


    Since most libraries come with a way to issue "raw" CDP commands, it's an
    easy way to drop-in custom behaviors without having to write and maintain a
    library. Plus you can continue to enjoy using the same packages you've
    already come to know.


    Getting started with this API is pretty simple. For instance, if you want to
    use the live viewer for a particular page, simply do the following:


    ```js

    import puppeteer from 'puppeteer-core';


    (async () => {
      const browserWSEndpoint = 'wss://production-sfo.browserless.io/chromium';
      const browser = await puppeteer.connect({ browserWSEndpoint });
      const page = await browser.newPage();
      const cdp = await page.createCDPSession();
      await page.goto('https://example.com');
      const { liveURL } = await cdp.send('Browserless.liveURL');

      // liveURL = 'http://localhost:5555/live/?i=98e83bbfd396241a6963425b1feeba2f';
    })();

    ```


    You can then visit this URL in any browser to interact with the headless
    Chrome running someplace else.


    See more below for a full list of the available APIs and features.


    ## Browserless.liveURL


    > This API is available on all plans except the Free plan. [Contact us for
    more information here.](https://www.browserless.io/contact/)


    Returns a fully-qualified URL to load into a web-browser. This URL allows
    for clicking, typing and other interactions with the underlying page. This
    URL doesn't require an authorization token, so you're free to share it
    externally with your own users or employees. If security is a concern, you
    can set a `timeout` parameter to limit the amount of time this URL is valid
    for. By default no `timeout` is set and the URL is good as long as the
    underlying browser is open.


    Programmatic control of the session is also available, so you can close the
    live session once your code has detected a selector, network call, or
    whatever else. See the below example for programmatic control.


    **Basic example**


    ```js

    import puppeteer from 'puppeteer-core';


    (async () => {
      const browserWSEndpoint =
        'wss://production-sfo.browserless.io/chromium?token=YOUR-API-TOKEN';
      const browser = await puppeteer.connect({ browserWSEndpoint });
      const page = await browser.newPage();
      const cdp = await page.createCDPSession();
      await page.goto('https://example.com');
      const { liveURL } = await cdp.send('Browserless.liveURL');

      // liveURL = 'https://production-sfo.browserless.io/live/?i=98e83bbfd396241a6963425b1feeba2f';
    })();

    ```


    **Timeout example**


    ```js

    import puppeteer from 'puppeteer-core';


    (async () => {
      const browserWSEndpoint =
        'wss://production-sfo.browserless.io/chromium?token=YOUR-API-TOKEN';
      const browser = await puppeteer.connect({ browserWSEndpoint });
      const page = await browser.newPage();
      const cdp = await page.createCDPSession();
      await page.goto('https://example.com');
      const { liveURL } = await cdp.send('Browserless.liveURL', {
        timeout: 10000, // 10 seconds to connect!
      });

      // liveURL = 'https://production-sfo.browserless.io/live/?i=98e83bbfd396241a6963425b1feeba2f';
    })();

    ```


    **Maintaining the width and height**


    By default, Browserless will dynamically change the width and height of the
    browser to match an end-users screen. This isn't always ideal and can be
    disabled by setting a `resizable` v

# --- truncated at 32 KB (596 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/browserless/refs/heads/main/openapi/browserless-openapi.yml