Kernel Profiles API
Create, list, retrieve, and delete browser profiles.
Create, list, retrieve, and delete browser profiles.
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:kernel-profiles-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: 3.2.0
info:
description: Developer tools and cloud infrastructure for AI agents to use web browsers
title: Kernel Profiles API
version: 0.1.0
servers:
- description: API Server
url: https://api.onkernel.com
security:
- bearerAuth: []
tags:
- description: Create, list, retrieve, and delete browser profiles.
name: Profiles
paths:
/profiles:
get:
description: List profiles with optional filtering and pagination.
operationId: getProfiles
parameters:
- description: Limit the number of profiles to return.
in: query
name: limit
required: false
schema:
default: 20
maximum: 100
minimum: 1
type: integer
- description: Offset the number of profiles to return.
in: query
name: offset
required: false
schema:
default: 0
minimum: 0
type: integer
- description: Case-insensitive substring match against profile name or ID.
in: query
name: query
required: false
schema:
type: string
- description: Exact-match filter on profile name using the database collation. In production, matching is case- and accent-insensitive. During the default-project migration, unscoped requests prefer a concrete default-project profile over a legacy unscoped profile with the same name.
in: query
name: name
required: false
schema:
type: string
responses:
'200':
content:
application/json:
schema:
items:
$ref: '#/components/schemas/Profile'
type: array
description: List of profiles
headers:
X-Has-More:
description: Whether there are more profiles to fetch.
schema:
default: false
type: boolean
X-Limit:
description: Limit the number of profiles to return.
schema:
default: 20
maximum: 100
minimum: 1
type: integer
X-Next-Offset:
description: The offset where the next page starts. 0 when there are no more results.
schema:
nullable: true
type: integer
X-Offset:
description: The offset of profiles to return.
schema:
default: 0
minimum: 0
type: integer
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'500':
$ref: '#/components/responses/InternalError'
security:
- bearerAuth: []
summary: List profiles
tags:
- Profiles
post:
description: Create a browser profile that can be used to load state into future browser sessions.
operationId: postProfiles
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ProfileRequest'
required: true
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/Profile'
description: Profile created successfully
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'409':
$ref: '#/components/responses/Conflict'
'500':
$ref: '#/components/responses/InternalError'
security:
- bearerAuth: []
summary: Create a new profile
tags:
- Profiles
/profiles/{id_or_name}:
delete:
description: Delete a profile by its ID or by its name.
operationId: deleteProfileByIdOrName
parameters:
- description: Profile ID or profile name
in: path
name: id_or_name
required: true
schema:
type: string
responses:
'204':
description: Profile deleted successfully
'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'
security:
- bearerAuth: []
summary: Delete profile by ID or name
tags:
- Profiles
get:
description: Retrieve details for a single profile by its ID or name.
operationId: getProfileByIdOrName
parameters:
- description: Profile ID or name
in: path
name: id_or_name
required: true
schema:
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Profile'
description: Profile details
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
security:
- bearerAuth: []
summary: Get profile by ID or name
tags:
- Profiles
patch:
description: Update a profile's name. Names must be unique within the logical project; during the default-project migration, unscoped profiles and profiles in the org default project are treated as the same project. Duplicate-name conflicts are checked before update but are best-effort because there is no backing unique index. Renaming a profile while a browser session references it by name may prevent that session's changes from saving; prefer renaming when the profile is not in use.
operationId: patchProfileByIdOrName
parameters:
- description: Profile ID or profile name
in: path
name: id_or_name
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ProfileUpdateRequest'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Profile'
description: Profile updated
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'500':
$ref: '#/components/responses/InternalError'
security:
- bearerAuth: []
summary: Rename profile by ID or name
tags:
- Profiles
/profiles/{id_or_name}/download:
get:
description: 'Downloads the profile in its stored format by default. Current profiles are returned as
zstd-compressed tar archives, while legacy profiles remain JSON. Set `format=tar` to
decompress current profiles during download; legacy profiles remain JSON.'
operationId: downloadProfileByIdOrName
parameters:
- description: Profile ID or name
in: path
name: id_or_name
required: true
schema:
type: string
- description: Response format for current profile archives. Legacy profiles are always returned as JSON.
in: query
name: format
required: false
schema:
default: tar.zst
enum:
- tar.zst
- tar
type: string
responses:
'200':
content:
application/octet-stream:
schema:
format: binary
type: string
application/x-tar:
schema:
format: binary
type: string
application/zstd:
schema:
format: binary
type: string
description: Profile data in the requested format, or JSON for a legacy profile.
headers:
Content-Disposition:
description: Attachment filename matching the returned profile format.
schema:
type: string
'202':
description: Profile exists but has not yet captured any state. Use it in a browser session first to capture state.
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
security:
- bearerAuth: []
summary: Download profile archive
tags:
- Profiles
components:
responses:
NotFound:
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
description: Resource not found
BadRequest:
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
description: Bad Request – invalid input
Conflict:
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
description: Conflict – resource already exists
InternalError:
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
description: Internal Server Error
Forbidden:
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
description: Forbidden – insufficient permissions or plan
Unauthorized:
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
description: Unauthorized – missing or invalid authorization token
schemas:
Profile:
description: Browser profile metadata.
properties:
created_at:
description: Timestamp when the profile was created
format: date-time
type: string
id:
description: Unique identifier for the profile
type: string
last_used_at:
description: Timestamp when the profile was last used
format: date-time
type: string
name:
description: Optional, easier-to-reference name for the profile
nullable: true
type: string
updated_at:
description: Timestamp when the profile was last updated
format: date-time
type: string
required:
- id
- created_at
type: object
ProfileRequest:
description: Request body for creating a profile.
properties:
name:
description: Optional name of the profile. Must be unique within the logical project; during the default-project migration, unscoped profiles and profiles in the org default project are treated as the same project.
type: string
required: []
type: object
ProfileUpdateRequest:
properties:
name:
description: New profile name. Must be unique within the logical project; during the default-project migration, unscoped profiles and profiles in the org default project are treated as the same project.
example: my-renamed-profile
maxLength: 255
minLength: 1
type: string
required:
- name
type: object
ErrorDetail:
properties:
code:
description: Lower-level error code providing more specific detail
example: invalid_input
type: string
message:
description: Further detail about the error
example: Provided version string is not semver compliant
type: string
type: object
Error:
properties:
code:
description: Application-specific error code (machine-readable)
example: bad_request
type: string
details:
description: Additional error details (for multiple errors)
items:
$ref: '#/components/schemas/ErrorDetail'
type: array
inner_error:
$ref: '#/components/schemas/ErrorDetail'
message:
description: Human-readable error description for debugging
example: 'Missing required field: app_name'
type: string
required:
- code
- message
type: object
securitySchemes:
bearerAuth:
scheme: bearer
type: http
x-service-info:
categories:
- browsers
docs:
apiReference: https://www.kernel.sh/docs
homepage: https://www.kernel.sh
llms: https://api.onkernel.com/llms.txt
x-provenance:
method: harvested
publisher: Kernel
source: https://api.onkernel.com/openapi.json
note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
stamped by stamp-openapi-provenance.py (roadmap#793)