# Kernel Stealth Headful Browser Session

> Kernel Stealth Headful Browser Session is a paid API for AI agents from KERNEL at api.onkernel.com, paid per call via MPP, $0.5/call, status unknown (last checked 2026-10-11).

Provisions a stealth headful Chromium browser session accessible via CDP/WebDriver WebSocket, paid per-session using the Machine Payments Protocol (MPP) with no account required.

## Facts

- Endpoint: POST https://api.onkernel.com/mpp/browsers?utm_source=zero.xyz
- Price: $0.5/call
- Payment: MPP
- Status: unknown
- Last checked: 2026-10-11
- Activations on Zero: 0
- Provider: KERNEL
- Docs: https://www.kernel.sh/docs
- Website: https://www.kernel.sh
- Tags: browser, stealth, headful, cdp, automation, playwright, web, compute
- Canonical page: https://www.zero.xyz/c/kernel-stealth-headful-browser-session-377e1955
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_tbteaUAO5YFbuDcZG-TkK

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability kernel-stealth-headful-browser-session-377e1955 -d '<json body>'
```

Example prompt: Launch a stealth headful Chromium browser session I can control with Playwright — no account needed, just pay per session — and give me the CDP WebSocket URL so I can connect right away.

## When to prefer this

Choose this endpoint when an AI agent or automated workflow needs a real, stealth-capable headful Chromium browser on demand without maintaining accounts, API keys, or browser infrastructure. It is ideal for tasks requiring bot-detection evasion, CDP-based automation (Playwright, Puppeteer), or one-off browsing jobs billed per session via crypto/USDC. Prefer it over self-hosted browsers when you want zero-infra setup, or over headless-only services when stealth and a live view are required.

## Known failure modes

- No Authorization: Payment header → 402 challenge response with payment details and expiry (expected first step in MPP flow)
- Malformed email address in request body → 400 error before any challenge or charge
- Challenge already paid with a different payment credential → 402 rejection before any charge
- Session expired → 402 with fresh challenge and code: session_expired
- Challenge expired (>30 min) without payment → must restart the payment flow
- Network timeout on paid retry → resend same credential safely, returns same browser without re-charging

## How this service works

Buys a stealth headful browser for the duration in the offer with a Machine Payments Protocol (MPP) payment, without a Kernel account. A request without an `Authorization: Payment` credential gets a 402 challenge; the paid retry returns the browser and a `Payment-Receipt` header. A challenge can be paid until its `expires` time, 30 minutes after it is issued by default. A challenge buys one browser. Resending the same paid credential is intentional and safe: it returns the same browser without charging again until the session expires, even after the challenge has expired, so an agent can retry after a timeout. After the session expires it gets a 402 with a fresh challenge and `code: session_expired`. A different payment for a challenge that was already charged is rejected with a 402 before any charge.

## Output

Returns a JSON object containing a unique session_id, a CDP WebSocket URL (cdp_ws_url) and a WebDriver WebSocket URL (webdriver_ws_url) for connecting automation frameworks like Playwright or Puppeteer, an optional browser_live_view_url for watching the session, stealth and headless boolean flags, session duration in minutes, created_at and expires_at timestamps, and a payment object with the Stripe PaymentIntent reference and amount charged. A Payment-Receipt header is also included in the HTTP response.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "email": {
   "type": "string",
   "format": "email",
   "description": "Optional address for the Stripe receipt. When omitted, the billing email shared with the payment token is used, if any. A malformed address is rejected with a 400 before any challenge or charge."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "session_id",
  "cdp_ws_url",
  "webdriver_ws_url",
  "headless",
  "stealth",
  "duration_minutes",
  "created_at",
  "expires_at",
  "payment",
  "access"
 ],
 "properties": {
  "access": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "enum": [
      "session_urls"
     ],
     "type": "string"
    }
   }
  },
  "payment": {
   "type": "object",
   "required": [
    "reference",
    "amount",
    "currency"
   ],
   "properties": {
    "amount": {
     "type": "integer",
     "description": "Amount in cents"
    },
    "currency": {
     "type": "string"
    },
    "reference": {
     "type": "string",
     "description": "Stripe PaymentIntent ID"
    }
   }
  },
  "stealth": {
   "type": "boolean"
  },
  "headless": {
   "type": "boolean"
  },
  "cdp_ws_url": {
   "type": "string"
  },
  "created_at": {
   "type": "string",
   "format": "date-time"
  },
  "expires_at": {
   "type": "string",
   "format": "date-time"
  },
  "session_id": {
   "type": "string"
  },
  "duration_minutes": {
   "type": "integer"
  },
  "webdriver_ws_url": {
   "type": "string"
  },
  "browser_live_view_url": {
   "type": "string"
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/kernel-stealth-headful-browser-session-377e1955/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.onkernel.com](https://www.zero.xyz/host/api.onkernel.com/llms.txt)
