Kernel Browser Replays API
Record and manage browser session video replays.
Record and manage browser session video replays.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/kernel-browser-replays-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.2.0
info:
title: Kernel API Keys Browser Replays 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: Browser Replays
description: Record and manage browser session video replays.
paths:
/browsers/{id}/replays:
post:
operationId: startBrowserReplayRecording
tags:
- Browser Replays
summary: Start a browser session replay recording
description: Start recording the browser session and return a replay ID.
security:
- bearerAuth: []
parameters:
- name: id
in: path
required: true
description: Browser session ID
schema:
type: string
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
framerate:
type: integer
description: Recording framerate in fps. Values above 20 require GPU to be enabled on the browser session.
minimum: 1
maximum: 60
max_duration_in_seconds:
type: integer
description: Maximum recording duration in seconds.
minimum: 1
record_audio:
type: boolean
description: Record audio in addition to video. When false (the default), the recording is video-only.
default: false
responses:
'201':
description: Recording started successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/BrowserReplay'
'400':
$ref: '#/components/responses/BadRequest'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'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.replays.start('id');\n\nconsole.log(response.replay_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)\nresponse = client.browsers.replays.start(\n id=\"id\",\n)\nprint(response.replay_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\tresponse, err := client.Browsers.Replays.Start(\n\t\tcontext.TODO(),\n\t\t\"id\",\n\t\tkernel.BrowserReplayStartParams{},\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", response.ReplayID)\n}\n"
get:
operationId: listBrowsersReplays
tags:
- Browser Replays
summary: List browser session replays
description: List all replays for the specified browser session.
security:
- bearerAuth: []
parameters:
- name: id
in: path
required: true
description: Browser session ID
schema:
type: string
responses:
'200':
description: List of replays retrieved successfully.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/BrowserReplay'
'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 replays = await client.browsers.replays.list('id');\n\nconsole.log(replays);"
- 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)\nreplays = client.browsers.replays.list(\n \"id\",\n)\nprint(replays)"
- 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\treplays, err := client.Browsers.Replays.List(context.TODO(), \"id\")\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", replays)\n}\n"
/browsers/{id}/replays/{replay_id}:
get:
operationId: getBrowsersReplaysById
tags:
- Browser Replays
summary: Download a replay recording
description: Download or stream the specified replay recording.
security:
- bearerAuth: []
parameters:
- name: id
in: path
required: true
description: Browser session ID
schema:
type: string
- name: replay_id
in: path
required: true
description: Replay recording identifier
schema:
type: string
responses:
'200':
description: Replay recording retrieved successfully.
content:
video/mp4:
schema:
type: string
format: binary
'202':
description: Replay recording is still in progress, please try again later
headers:
Retry-After:
description: Suggested wait time in seconds before retrying
schema:
type: integer
minimum: 1
'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 response = await client.browsers.replays.download('replay_id', { id: 'id' });\n\nconsole.log(response);\n\nconst content = await response.blob();\nconsole.log(content);"
- 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.replays.download(\n replay_id=\"replay_id\",\n id=\"id\",\n)\nprint(response)\ncontent = response.read()\nprint(content)"
- 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.Replays.Download(\n\t\tcontext.TODO(),\n\t\t\"replay_id\",\n\t\tkernel.BrowserReplayDownloadParams{\n\t\t\tID: \"id\",\n\t\t},\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", response)\n}\n"
/browsers/{id}/replays/{replay_id}/stop:
post:
operationId: stopBrowserReplayRecording
tags:
- Browser Replays
summary: Stop a browser session replay recording
description: Stop the specified replay recording and persist the video.
security:
- bearerAuth: []
parameters:
- name: id
in: path
required: true
description: Browser session ID
schema:
type: string
- name: replay_id
in: path
required: true
description: Replay recording identifier
schema:
type: string
responses:
'200':
description: Recording stopped successfully.
'400':
$ref: '#/components/responses/BadRequest'
'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.replays.stop('replay_id', { id: '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)\nclient.browsers.replays.stop(\n replay_id=\"replay_id\",\n id=\"id\",\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.Replays.Stop(\n\t\tcontext.TODO(),\n\t\t\"replay_id\",\n\t\tkernel.BrowserReplayStopParams{\n\t\t\tID: \"id\",\n\t\t},\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n}\n"
components:
responses:
NotFound:
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Unauthorized:
description: Unauthorized – missing or invalid authorization token
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
BadRequest:
description: Bad Request – invalid input
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Conflict:
description: Conflict – resource already exists
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Forbidden:
description: Forbidden – insufficient permissions or plan
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
InternalError:
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
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
BrowserReplay:
type: object
description: Information about a browser replay recording.
required:
- replay_id
properties:
replay_id:
type: string
description: Unique identifier for the replay recording.
started_at:
type: string
format: date-time
nullable: true
description: Timestamp when replay started
finished_at:
type: string
format: date-time
nullable: true
description: Timestamp when replay finished
replay_view_url:
type: string
description: URL for viewing the replay recording.
example: https://api.onkernel.com/browser/replays?jwt=eyJ0eXAi...&replay_id=7e2c1a9f-1234-4cde-9abc-ffeedd001122
securitySchemes:
bearerAuth:
type: http
scheme: bearer