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.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/kernel-so-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
openapi: 3.2.0
info:
title: Kernel API Keys Browsers API
description: Developer tools and cloud infrastructure for AI agents to use web browsers
version: 0.1.0
servers:
- url: https://api.onkernel.com
description: API Server
security:
- bearerAuth: []
tags:
- name: Browsers
description: Create and manage browser sessions.
paths:
/browsers:
post:
operationId: postBrowsers
tags:
- Browsers
summary: Create a browser session
description: Create a new browser session from within an action.
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/BrowserRequest'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/Browser'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalError'
'529':
$ref: '#/components/responses/CapacityExhausted'
x-codeSamples:
- lang: JavaScript
source: "import Kernel from '@onkernel/sdk';\n\nconst client = new Kernel({\n apiKey: process.env['KERNEL_API_KEY'], // This is the default and can be omitted\n});\n\nconst browser = await client.browsers.create();\n\nconsole.log(browser.session_id);"
- lang: Python
source: "import os\nfrom kernel import Kernel\n\nclient = Kernel(\n api_key=os.environ.get(\"KERNEL_API_KEY\"), # This is the default and can be omitted\n)\nbrowser = client.browsers.create()\nprint(browser.session_id)"
- lang: Go
source: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/kernel/kernel-go-sdk\"\n\t\"github.com/kernel/kernel-go-sdk/option\"\n)\n\nfunc main() {\n\tclient := kernel.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tbrowser, err := client.Browsers.New(context.TODO(), kernel.BrowserNewParams{})\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", browser.SessionID)\n}\n"
get:
operationId: getBrowsers
tags:
- Browsers
summary: List browser sessions
description: List all browser sessions with pagination support. Use status parameter to filter by session state.
security:
- bearerAuth: []
parameters:
- name: status
in: query
required: false
description: Filter sessions by status. "active" returns only active sessions (default), "deleted" returns only soft-deleted sessions, "all" returns both.
schema:
type: string
enum:
- active
- deleted
- all
default: active
- name: include_deleted
in: query
required: false
deprecated: true
description: 'Deprecated: Use status=all instead. When true, includes soft-deleted browser sessions in the results alongside active sessions.'
schema:
type: boolean
default: false
- name: limit
in: query
required: false
description: Maximum number of results to return. Defaults to 20, maximum 100.
schema:
type: integer
minimum: 1
maximum: 100
default: 20
- name: offset
in: query
required: false
description: Number of results to skip. Defaults to 0.
schema:
type: integer
minimum: 0
default: 0
- name: query
in: query
required: false
description: Search browsers by session ID, profile ID, proxy ID, or pool name.
schema:
type: string
responses:
'200':
description: List of browsers
headers:
X-Limit:
description: The limit used for pagination
schema:
type: integer
X-Offset:
description: The offset used for pagination
schema:
type: integer
X-Has-More:
description: Whether more results are available
schema:
type: boolean
X-Next-Offset:
description: The offset to use for the next page (only present when has_more is true)
schema:
type: integer
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Browser'
'401':
$ref: '#/components/responses/Unauthorized'
'500':
$ref: '#/components/responses/InternalError'
x-codeSamples:
- lang: JavaScript
source: "import Kernel from '@onkernel/sdk';\n\nconst client = new Kernel({\n apiKey: process.env['KERNEL_API_KEY'], // This is the default and can be omitted\n});\n\n// Automatically fetches more pages as needed.\nfor await (const browserListResponse of client.browsers.list()) {\n console.log(browserListResponse.session_id);\n}"
- lang: Python
source: "import os\nfrom kernel import Kernel\n\nclient = Kernel(\n api_key=os.environ.get(\"KERNEL_API_KEY\"), # This is the default and can be omitted\n)\npage = client.browsers.list()\npage = page.items[0]\nprint(page.session_id)"
- lang: Go
source: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/kernel/kernel-go-sdk\"\n\t\"github.com/kernel/kernel-go-sdk/option\"\n)\n\nfunc main() {\n\tclient := kernel.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tpage, err := client.Browsers.List(context.TODO(), kernel.BrowserListParams{})\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", page)\n}\n"
/browsers/{id}:
get:
operationId: getBrowsersById
tags:
- Browsers
summary: Get browser session details
description: Get information about a browser session.
security:
- bearerAuth: []
parameters:
- name: id
in: path
required: true
schema:
type: string
description: Browser session ID
example: htzv5orfit78e1m2biiifpbv
- name: include_deleted
in: query
required: false
description: When true, includes soft-deleted browser sessions in the lookup.
schema:
type: boolean
default: false
responses:
'200':
description: Browser session retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Browser'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
x-codeSamples:
- lang: JavaScript
source: "import Kernel from '@onkernel/sdk';\n\nconst client = new Kernel({\n apiKey: process.env['KERNEL_API_KEY'], // This is the default and can be omitted\n});\n\nconst browser = await client.browsers.retrieve('htzv5orfit78e1m2biiifpbv');\n\nconsole.log(browser.session_id);"
- lang: Python
source: "import os\nfrom kernel import Kernel\n\nclient = Kernel(\n api_key=os.environ.get(\"KERNEL_API_KEY\"), # This is the default and can be omitted\n)\nbrowser = client.browsers.retrieve(\n id=\"htzv5orfit78e1m2biiifpbv\",\n)\nprint(browser.session_id)"
- lang: Go
source: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/kernel/kernel-go-sdk\"\n\t\"github.com/kernel/kernel-go-sdk/option\"\n)\n\nfunc main() {\n\tclient := kernel.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tbrowser, err := client.Browsers.Get(\n\t\tcontext.TODO(),\n\t\t\"htzv5orfit78e1m2biiifpbv\",\n\t\tkernel.BrowserGetParams{},\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", browser.SessionID)\n}\n"
delete:
operationId: deleteBrowsersById
tags:
- Browsers
summary: Delete a browser session by ID.
description: Delete a browser session by ID
security:
- bearerAuth: []
parameters:
- name: id
in: path
required: true
schema:
type: string
description: Browser session ID
example: htzv5orfit78e1m2biiifpbv
responses:
'204':
description: Browser session deleted successfully
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
x-codeSamples:
- lang: JavaScript
source: "import Kernel from '@onkernel/sdk';\n\nconst client = new Kernel({\n apiKey: process.env['KERNEL_API_KEY'], // This is the default and can be omitted\n});\n\nawait client.browsers.deleteByID('htzv5orfit78e1m2biiifpbv');"
- lang: Python
source: "import os\nfrom kernel import Kernel\n\nclient = Kernel(\n api_key=os.environ.get(\"KERNEL_API_KEY\"), # This is the default and can be omitted\n)\nclient.browsers.delete_by_id(\n \"htzv5orfit78e1m2biiifpbv\",\n)"
- lang: Go
source: "package main\n\nimport (\n\t\"context\"\n\n\t\"github.com/kernel/kernel-go-sdk\"\n\t\"github.com/kernel/kernel-go-sdk/option\"\n)\n\nfunc main() {\n\tclient := kernel.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\terr := client.Browsers.DeleteByID(context.TODO(), \"htzv5orfit78e1m2biiifpbv\")\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n}\n"
patch:
operationId: patchBrowsersById
tags:
- Browsers
summary: Update browser session
description: Update a browser session.
security:
- bearerAuth: []
parameters:
- name: id
in: path
required: true
schema:
type: string
description: Browser session ID
example: htzv5orfit78e1m2biiifpbv
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BrowserUpdateRequest'
responses:
'200':
description: Browser session updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Browser'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
x-codeSamples:
- lang: JavaScript
source: "import Kernel from '@onkernel/sdk';\n\nconst client = new Kernel({\n apiKey: process.env['KERNEL_API_KEY'], // This is the default and can be omitted\n});\n\nconst browser = await client.browsers.update('htzv5orfit78e1m2biiifpbv');\n\nconsole.log(browser.session_id);"
- lang: Python
source: "import os\nfrom kernel import Kernel\n\nclient = Kernel(\n api_key=os.environ.get(\"KERNEL_API_KEY\"), # This is the default and can be omitted\n)\nbrowser = client.browsers.update(\n id=\"htzv5orfit78e1m2biiifpbv\",\n)\nprint(browser.session_id)"
- lang: Go
source: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/kernel/kernel-go-sdk\"\n\t\"github.com/kernel/kernel-go-sdk/option\"\n)\n\nfunc main() {\n\tclient := kernel.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tbrowser, err := client.Browsers.Update(\n\t\tcontext.TODO(),\n\t\t\"htzv5orfit78e1m2biiifpbv\",\n\t\tkernel.BrowserUpdateParams{},\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", browser.SessionID)\n}\n"
/browsers/{id}/extensions:
post:
operationId: uploadExtensionsToBrowser
tags:
- Browsers
summary: Ad-hoc upload one or more unpacked extensions to a running browser instance.
description: Loads one or more unpacked extensions and restarts Chromium on the browser instance.
security:
- bearerAuth: []
parameters:
- name: id
in: path
required: true
schema:
type: string
description: Browser session ID
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
extensions:
type: array
description: List of extensions to upload and activate
items:
type: object
properties:
zip_file:
type: string
format: binary
description: Zip archive containing an unpacked Chromium extension (must include manifest.json)
name:
type: string
description: Folder name to place the extension under /home/kernel/extensions/<name>
minLength: 1
maxLength: 255
pattern: ^[a-zA-Z0-9._-]{1,255}$
required:
- zip_file
- name
required:
- extensions
responses:
'201':
description: Extensions uploaded, Chromium restarted, and DevTools is ready
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
x-codeSamples:
- lang: JavaScript
source: "import Kernel from '@onkernel/sdk';\n\nconst client = new Kernel({\n apiKey: process.env['KERNEL_API_KEY'], // This is the default and can be omitted\n});\n\nawait client.browsers.loadExtensions('id', {\n extensions: [{ name: 'name', zip_file: fs.createReadStream('path/to/file') }],\n});"
- lang: Python
source: "import os\nfrom kernel import Kernel\n\nclient = Kernel(\n api_key=os.environ.get(\"KERNEL_API_KEY\"), # This is the default and can be omitted\n)\nclient.browsers.load_extensions(\n id=\"id\",\n extensions=[{\n \"name\": \"name\",\n \"zip_file\": b\"Example data\",\n }],\n)"
- lang: Go
source: "package main\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"io\"\n\n\t\"github.com/kernel/kernel-go-sdk\"\n\t\"github.com/kernel/kernel-go-sdk/option\"\n)\n\nfunc main() {\n\tclient := kernel.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\terr := client.Browsers.LoadExtensions(\n\t\tcontext.TODO(),\n\t\t\"id\",\n\t\tkernel.BrowserLoadExtensionsParams{\n\t\t\tExtensions: []kernel.BrowserLoadExtensionsParamsExtension{{\n\t\t\t\tName: \"name\",\n\t\t\t\tZipFile: io.Reader(bytes.NewBuffer([]byte(\"Example data\"))),\n\t\t\t}},\n\t\t},\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n}\n"
/browsers/{id}/computer/batch:
post:
summary: Execute a batch of computer actions sequentially
description: 'Send an array of computer actions to execute in order on the browser instance.
Execution stops on the first error. This reduces network latency compared to
sending individual action requests.
'
operationId: batchComputerAction
tags:
- Browsers
security:
- bearerAuth: []
parameters:
- name: id
in: path
required: true
schema:
type: string
description: Browser session ID
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BatchComputerActionRequest'
responses:
'200':
description: All actions executed successfully
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
x-codeSamples:
- lang: JavaScript
source: "import Kernel from '@onkernel/sdk';\n\nconst client = new Kernel({\n apiKey: process.env['KERNEL_API_KEY'], // This is the default and can be omitted\n});\n\nawait client.browsers.computer.batch('id', { actions: [{ type: 'click_mouse' }] });"
- lang: Python
source: "import os\nfrom kernel import Kernel\n\nclient = Kernel(\n api_key=os.environ.get(\"KERNEL_API_KEY\"), # This is the default and can be omitted\n)\nclient.browsers.computer.batch(\n id=\"id\",\n actions=[{\n \"type\": \"click_mouse\"\n }],\n)"
- lang: Go
source: "package main\n\nimport (\n\t\"context\"\n\n\t\"github.com/kernel/kernel-go-sdk\"\n\t\"github.com/kernel/kernel-go-sdk/option\"\n)\n\nfunc main() {\n\tclient := kernel.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\terr := client.Browsers.Computer.Batch(\n\t\tcontext.TODO(),\n\t\t\"id\",\n\t\tkernel.BrowserComputerBatchParams{\n\t\t\tActions: []kernel.BrowserComputerBatchParamsAction{{\n\t\t\t\tType: \"click_mouse\",\n\t\t\t}},\n\t\t},\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n}\n"
/browsers/{id}/computer/get_mouse_position:
post:
summary: Get the current mouse cursor position on the browser instance
operationId: getMousePosition
tags:
- Browsers
security:
- bearerAuth: []
parameters:
- name: id
in: path
required: true
schema:
type: string
description: Browser session ID
responses:
'200':
description: Current mouse position
content:
application/json:
schema:
$ref: '#/components/schemas/MousePositionResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
x-codeSamples:
- lang: JavaScript
source: "import Kernel from '@onkernel/sdk';\n\nconst client = new Kernel({\n apiKey: process.env['KERNEL_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.browsers.computer.getMousePosition('id');\n\nconsole.log(response.x);"
- lang: Python
source: "import os\nfrom kernel import Kernel\n\nclient = Kernel(\n api_key=os.environ.get(\"KERNEL_API_KEY\"), # This is the default and can be omitted\n)\nresponse = client.browsers.computer.get_mouse_position(\n \"id\",\n)\nprint(response.x)"
- lang: Go
source: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/kernel/kernel-go-sdk\"\n\t\"github.com/kernel/kernel-go-sdk/option\"\n)\n\nfunc main() {\n\tclient := kernel.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tresponse, err := client.Browsers.Computer.GetMousePosition(context.TODO(), \"id\")\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", response.X)\n}\n"
/browsers/{id}/curl:
post:
summary: Make an HTTP request through the browser's network stack
description: 'Sends an HTTP request through Chrome''s HTTP request stack, inheriting
the browser''s TLS fingerprint, cookies, proxy configuration, and headers.
Returns a structured JSON response with status, headers, body, and timing.
'
operationId: browserCurl
tags:
- Browsers
security:
- bearerAuth: []
parameters:
- name: id
in: path
required: true
schema:
type: string
description: Browser session ID
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BrowserCurlRequest'
responses:
'200':
description: Response from target URL
content:
application/json:
schema:
$ref: '#/components/schemas/BrowserCurlResult'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
'502':
description: Upstream transport failure
content:
application/json:
schema:
$ref: '#/components/schemas/BrowserCurlTransportError'
x-codeSamples:
- lang: JavaScript
source: "import Kernel from '@onkernel/sdk';\n\nconst client = new Kernel({\n apiKey: process.env['KERNEL_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.browsers.curl('id', { url: 'url' });\n\nconsole.log(response.body);"
- lang: Python
source: "import os\nfrom kernel import Kernel\n\nclient = Kernel(\n api_key=os.environ.get(\"KERNEL_API_KEY\"), # This is the default and can be omitted\n)\nresponse = client.browsers.curl(\n id=\"id\",\n url=\"url\",\n)\nprint(response.body)"
- lang: Go
source: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/kernel/kernel-go-sdk\"\n\t\"github.com/kernel/kernel-go-sdk/option\"\n)\n\nfunc main() {\n\tclient := kernel.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tresponse, err := client.Browsers.Curl(\n\t\tcontext.TODO(),\n\t\t\"id\",\n\t\tkernel.BrowserCurlParams{\n\t\t\tURL: \"url\",\n\t\t},\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", response.Body)\n}\n"
components:
schemas:
SetCursorRequest:
type: object
required:
- hidden
properties:
hidden:
type: boolean
description: Whether the cursor should be hidden or visible
additionalProperties: false
MoveMouseRequest:
type: object
required:
- x
- y
properties:
x:
type: integer
description: X coordinate to move the cursor to
y:
type: integer
description: Y coordinate to move the cursor to
hold_keys:
type: array
description: Modifier keys to hold during the move
items:
type: string
smooth:
type: boolean
description: Use human-like Bezier curve path instead of instant mouse movement.
default: true
duration_ms:
type: integer
description: Target total duration in milliseconds for the mouse movement when smooth=true. Omit for automatic timing based on distance.
minimum: 50
maximum: 5000
additionalProperties: false
BrowserProfile:
type: object
description: 'Profile selection for the browser session. Provide either id or name. If specified, the
matching profile will be loaded into the browser session. Profiles must be created beforehand.
'
properties:
id:
type: string
description: Profile ID to load for this browser session
name:
type: string
minLength: 1
maxLength: 255
pattern: ^[a-zA-Z0-9._-]{1,255}$
description: Profile name to load for this browser session (instead of id). Must be 1-255 characters, using letters, numbers, dots, underscores, or hyphens.
save_changes:
type: boolean
description: If true, save changes made during the session back to the profile when the session ends.
default: false
oneOf:
- required:
- id
- required:
- name
BrowserRequest:
type: object
description: 'Parameters for creating a browser session.
'
properties:
invocation_id:
type: string
description: action invocation ID
example: rr33xuugxj9h0bkf1rdt2bet
stealth:
type: boolean
description: If true, launches the browser in stealth mode to reduce detection by anti-bot mechanisms.
example: true
headless:
type: boolean
description: If true, launches the browser using a headless image (no VNC/GUI). Defaults to false.
example: false
gpu:
type: boolean
description: If true, enables GPU acceleration for the browser session. Requires Start-Up or Enterprise plan and headless=false.
example: false
timeout_seconds:
type: integer
description: The number of seconds of inactivity before the browser session is terminated. Activity includes CDP connections and live view connections. Defaults to 60 seconds. Minimum allowed is 10 seconds. Maximum allowed is 259200 (72 hours). We check for inactivity every 5 seconds, so the actual timeout behavior you will see is +/- 5 seconds around the specified value.
minimum: 10
maximum: 259200
profile:
$ref: '#/components/schemas/BrowserProfile'
extensions:
type: array
description: List of browser extensions to load into the session. Provide each by id or name.
maxItems: 20
items:
$ref: '#/components/schemas/BrowserExtension'
proxy_id:
type: string
description: Optional proxy to associate to the browser session. Must reference a proxy belonging to the caller's org.
viewport:
$ref: '#/components/schemas/BrowserViewport'
kiosk_mode:
type: boolean
description: If true, launches the browser in kiosk mode to hide address bar and tabs in live view.
example: true
start_url:
type: string
description: Optional URL to open when the browser session is created. Navigation is best-effort, so navigation failures do not prevent the session from being created.
example: https://example.com
chrome_policy:
type: object
additionalProperties: true
description: 'Custom Chrome enterprise policy overrides applied to this browser session. Keys are Chrome enterprise policy names; values must match their expected types. Blocked: kernel-managed policies (extensions, proxy, CDP/automation). See https://chromeenterprise.google/policies/
'
telemetry:
$ref: '#/components/schemas/BrowserTelemetryConfig'
nullable: true
description: Telemetry configuration for the browser session. If provided, telemetry capture starts with the specified category filter when the session is created. If omitted, no telemetry capture is started.
required: []
BrowserExtension:
type: object
description: 'Extension selection for the browser session. Provide either id or name of an extension uploaded to Kernel.
'
properties:
id:
type: string
description: Extension ID to load for this browser session
name:
type: string
minLength: 1
maxLength: 255
pattern: ^[a-zA-Z0-9._-]{1,255}$
description: Extension name to load for this browser session (instead of id). Must be 1-255 characters, using letters, numbers, dots, underscores, or hyphens.
oneOf:
- required:
- id
- required:
- name
ErrorDetail:
type: object
properties:
code:
type: string
description: Lower-level error code providing more specific detail
example: invalid_input
message:
type: string
description: Further detail about the error
example: Provided version string is not semver compliant
BrowserTelemetryCategoryConfig:
type: object
description: Per-category telemetry configuration.
properties:
enabled:
type: boolean
description: Whether this category is captured. Defaults to true if omitted.
BrowserPoolRef:
type: object
description: Browser pool this session was acquired from, if any.
properties:
id:
type: string
description: Browser pool ID
name:
type: string
description: Browser pool name, if set
required:
- id
BatchComputerActionRequest:
type: object
description: A batch of computer actions to execute sequentially.
required:
- actions
properties:
actions:
type: array
description: Ordered list of actions to execute. Execution stops on the first error.
minItems: 1
maxItems: 100
items:
$ref: '#/components/schemas/ComputerAction'
additionalProperties: false
DragMouseRequest:
type: object
required:
- path
properties:
path:
type: array
description: Ordered list of [x, y] coordinate pairs to move through while dragging. Must contain at least 2 points.
minItems: 2
items:
type: array
minItems: 2
maxItems: 2
items:
type: integer
button:
type: string
description: Mouse button to drag with
enum:
- left
- middle
- right
delay:
type: integer
description: Delay in milliseconds between button down and starting to move along the path.
minimum: 0
default: 0
steps_per_segment:
type: integer
description: Number of relative move steps per segment in the path. Minimum 1.
minimum: 1
default: 10
step_delay_ms:
type: integer
description: Delay in milliseconds between relative steps while dragging (not the initial delay).
minimum: 0
default: 50
hold_keys:
type: array
description: Modifier keys to hold during the drag
items:
type: string
smooth:
type: boolean
description: Use human-like Bezier curves between path waypoints instead of linear interpolation. When true, steps_per_segment and step_delay_ms are ignored.
default: true
duration_ms:
type: integer
description: Target total duration in milliseconds for the entire drag movement when smooth=true. Omit for automatic timing based on total path length.
minimum: 50
maximum: 10000
additionalProperties: false
BrowserTelemetryConfig:
type: object
description: Telemetry configuration for a browser session.
properties:
browser:
$ref: '#/components/schemas/BrowserTelemetryCategoriesConfig'
description: Per-category enable/disable flags. If omitted, all categories are captured.
BrowserViewport:
type: object
description: 'Initial browser window size in pixels with optional refresh rate.
If omitted, image defaults apply (1920x1080@25).
For GPU images, the default is 1920x1080@60.
Arbitrary viewport dimensions and refresh rates are accepted.
Known-good presets include:
2560x1440@10, 1920x1080@25, 1920x1200@25, 1440x900@25, 1280x800@60, 1024x768@60, 1200x800@60.
For GPU images, recommended presets use one of these resolutions with refresh rates 60, 30, 25, or 10:
800x600, 960x720, 1024x576, 1024x768, 1152x648, 1200x800, 1280x720, 1368x768, 1440x900, 1600x900, 1920x1080, 1920x1200, 390x844, 360x250, 768x1024, 800x1600.
Viewports outside this list may exhibit unstable live view or recording behavior.
If refresh_rate is not provided, it will be automatically determined based on the resolution
(higher resolutions use lower refresh rates to keep bandwidth reasonable).
'
properties:
width:
type: integer
description: Browser window width in pixels.
minimum: 320
maximum: 7680
example: 1280
height:
type: integer
description: Browser window height in pixels.
minimum: 240
maximum:
# --- truncated at 32 KB (49 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/kernel-so/refs/heads/main/openapi/kernel-so-browsers-api-openapi.yml