Personal desktop API
One desktop per authenticated user. Requires Desktops:Enabled, Kubernetes, and the personal_desktop plan entitlement (Pro and above).
| Method | Path | Purpose |
|---|---|---|
GET | /api/desktop | Current desktop |
POST | /api/desktop/accept-terms | First-use terms |
POST | /api/desktop/start | Queue start (pod + Service) |
POST | /api/desktop/stop | Stop the pod, keep the profile |
POST | /api/desktop/reset | Wipe the Chrome profile |
DELETE | /api/desktop | Delete desktop + volume |
POST | /api/desktop/consent | Grant agent use (web / telegram / text) |
POST | /api/desktop/consent/revoke | Revoke agent use |
POST | /api/desktop/control/take | User takes the keyboard (stopAgent) |
POST | /api/desktop/control/release | Hand back to the agent |
POST | /api/desktop/connect-token | Short-lived { scope: view|control } |
GET | /api/desktop/events | SSE status stream |
GET | /api/desktop/vnc/{*path} | KasmVNC proxy: HTTP files and the websockify WebSocket (token query t or cookie) |
Connect tokens last about 60 seconds. Open the returned viewPath in an iframe or a separate window — it already carries the token, pins noVNC's path to the proxied WebSocket endpoint, and sets show_control_bar=1&resize=remote&enable_webp=0 so KasmVNC shows its control bar, resizes the remote screen to the viewport instead of assuming a Kasm Workspaces embed, and sticks to JPEG rects (Chrome's ImageDecoder fails on its WebP rects). While the agent is driving, a control request is downgraded to view-only, which KasmVNC enforces (the proxy signs in as its read-only user). Paths under /api/desktop/vnc/api/… (KasmVNC's owner API) answer 403 to a view token.
A Yes/No card from desktop_request_access, or a standalone yes / oui / ok on
the assistant thread (including Telegram), grants the same one-shot agent use.
Running minutes are billed at Desktops:CreditsPerRunningMinute (default 2).