Appearance
Fresh 🌱
Execute Playwright/TypeScript code against the browser ​
Execute arbitrary Playwright code in a fresh execution context against the browser. The code runs in the same VM as the browser, minimizing latency and maximizing throughput. It has access to 'page', 'context', and 'browser' variables. It can
returna value, and this value is returned in the response.
OpenAPI ​
yaml
openapi: 3.1.0
info:
title: Kernel 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.
- name: Browser Replays
description: Record and manage browser session video replays.
- name: Profiles
description: Create, list, retrieve, and delete browser profiles.
- name: Browser Filesystem
description: Read, write, and manage files on the browser instance.
- name: Browser Computer Controls
description: Control mouse, keyboard, and screen on the browser instance.
- name: Browser Playwright
description: Execute Playwright code against the browser instance.
- name: Browser Processes
description: Execute and manage processes on the browser instance.
- name: Browser Logs
description: Stream logs from the browser instance.
- name: Extensions
description: Create, list, retrieve, and delete browser extensions.
- name: Proxies
description: Create and manage proxy configurations for routing browser traffic.
- name: Browser Pools
description: Create and manage browser pools for acquiring and releasing browsers.
- name: Managed Auth
description: >-
Create and manage auth connections for automated credential capture and
login.
- name: Credentials
description: Create and manage credentials for authentication.
- name: Credential Providers
description: Configure external credential providers like 1Password.
- name: Apps
description: List applications and versions.
- name: Deployments
description: Create and manage app deployments and stream deployment events.
- name: Invocations
description: Invoke actions and stream or query invocation status and events.
- name: Projects
description: Create and manage projects for resource isolation within an organization.
paths:
/browsers/{id}/playwright/execute:
post:
tags:
- Browser Playwright
summary: Execute Playwright/TypeScript code against the browser
description: >
Execute arbitrary Playwright code in a fresh execution context against
the browser.
The code runs in the same VM as the browser, minimizing latency and
maximizing throughput.
It has access to 'page', 'context', and 'browser' variables.
It can `return` a value, and this value is returned in the response.
operationId: executePlaywrightCode
parameters:
- name: id
in: path
required: true
description: Browser session ID
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ExecutePlaywrightRequest'
responses:
'200':
description: Code executed successfully
content:
application/json:
schema:
$ref: '#/components/schemas/ExecutePlaywrightResult'
'400':
$ref: '#/components/responses/BadRequest'
'500':
$ref: '#/components/responses/InternalError'
security:
- bearerAuth: []
x-codeSamples:
- lang: JavaScript
source: >-
import Kernel from '@onkernel/sdk';
const client = new Kernel({
apiKey: process.env['KERNEL_API_KEY'], // This is the default and can be omitted
});
const response = await client.browsers.playwright.execute('id', {
code: 'code' });
console.log(response.success);
- lang: Python
source: |-
import os
from kernel import Kernel
client = Kernel(
api_key=os.environ.get("KERNEL_API_KEY"), # This is the default and can be omitted
)
response = client.browsers.playwright.execute(
id="id",
code="code",
)
print(response.success)
- 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.Playwright.Execute(\n\t\tcontext.TODO(),\n\t\t\"id\",\n\t\tkernel.BrowserPlaywrightExecuteParams{\n\t\t\tCode: \"code\",\n\t\t},\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", response.Success)\n}\n"
components:
schemas:
ExecutePlaywrightRequest:
type: object
description: Request to execute Playwright code
required:
- code
properties:
code:
type: string
description: >
TypeScript/JavaScript code to execute. The code has access to
'page', 'context', and 'browser' variables.
It runs within a function, so you can use a return statement at the
end to return a value.
This value is returned as the `result` property in the response.
Example: "await page.goto('https://example.com'); return await
page.title();"
timeout_sec:
type: integer
description: Maximum execution time in seconds. Default is 60.
default: 60
minimum: 1
maximum: 300
additionalProperties: false
ExecutePlaywrightResult:
type: object
description: Result of Playwright code execution
required:
- success
properties:
success:
type: boolean
description: Whether the code executed successfully
result:
description: The value returned by the code (if any)
error:
type: string
description: Error message if execution failed
stdout:
type: string
description: Standard output from the execution
stderr:
type: string
description: Standard error from the execution
additionalProperties: 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'
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
responses:
BadRequest:
description: Bad Request - invalid input
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
InternalError:
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
securitySchemes:
bearerAuth:
type: http
scheme: bearer