openapi: 3.1.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:
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.
BrowserCurlRequest:
type: object
description: Request to make an HTTP request through the browser's network stack.
required:
- url
properties:
url:
type: string
description: Target URL (must be http or https).
method:
type: string
description: HTTP method.
enum:
- GET
- HEAD
- POST
- PUT
- PATCH
- DELETE
- OPTIONS
default: GET
headers:
type: object
description: Custom headers merged with browser defaults.
additionalProperties:
type: string
body:
type: string
description: Request body (for POST/PUT/PATCH).
timeout_ms:
type: integer
description: Request timeout in milliseconds.
minimum: 1000
maximum: 60000
default: 30000
response_encoding:
type: string
description: Encoding for the response body. Use base64 for binary content.
enum:
- utf8
- base64
default: utf8
additionalProperties: false
PressKeyRequest:
type: object
required:
- keys
properties:
keys:
type: array
description: 'List of key symbols to press. Each item should be a key symbol supported by xdotool
(see X11 keysym definitions). Examples include "Return", "Shift", "Ctrl", "Alt", "F5".
Items in this list could also be combinations, e.g. "Ctrl+t" or "Ctrl+Shift+Tab".
'
items:
type: string
duration:
type: integer
description: Duration to hold the keys down in milliseconds. If omitted or 0, keys are tapped.
minimum: 0
default: 0
hold_keys:
type: array
description: Optional modifier keys to hold during the key press sequence.
items:
type: string
additionalProperties: false
BrowserUpdateRequest:
type: object
description: Request body for updating a browser session.
properties:
proxy_id:
type: string
nullable: true
description: ID of the proxy to use. Omit to leave unchanged, set to empty string to remove proxy.
disable_default_proxy:
type: boolean
description: If true, stealth browsers connect directly instead of using the default stealth proxy.
profile:
$ref: '#/components/schemas/BrowserProfile'
description: Profile to load into the browser session. Only allowed if the session does not already have a profile loaded.
viewport:
$ref: '#/components/schemas/BrowserViewportUpdate'
description: Viewport configuration to apply to the browser session.
telemetry:
$ref: '#/components/schemas/BrowserTelemetryConfig'
nullable: true
description: 'Telemetry configuration. Omit, set to null, or set to an empty object ({}) to leave the existing configuration unchanged (no-op). To enable capture for all categories using VM defaults, set browser to an empty object ({"browser": {}}). To stop capture, set every category''s enabled to false.
'
Error:
type: object
required:
- code
- message
properties:
code:
type: string
description: Application-specific error code (machine-readable)
example: bad_request
message:
type: string
description: Human-readable error description for debugging
example: 'Missing required field: app_name'
details:
type: array
description: Additional error details (for multiple errors)
items:
$ref: '#/components/schemas/ErrorDetail'
inner_error:
$ref: '#/components/schemas/ErrorDetail'
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
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
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.
TypeTextRequest:
type: object
required:
- text
properties:
text:
type: string
description: Text to type on the browser instance
delay:
type: integer
description: Delay in milliseconds between keystrokes
minimum: 0
default: 0
additionalProperties: false
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: []
ClickMouseRequest:
type: object
required:
- x
- y
properties:
button:
type: string
description: Mouse button to interact with
enum:
- left
- right
- middle
- back
- forward
click_type:
type: string
description: Type of click action
enum:
- down
- up
- click
x:
type: integer
description: X coordinate of the click position
y:
type: integer
description: Y coordinate of the click position
hold_keys:
type: array
description: Modifier keys to h
# --- 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