Core Concepts
This page covers the mental model you need to work with Chaser effectively.
Sessions
A session is a running microVM. It has a UUID, a type (browser or sandbox), and a set of control endpoints. When you create a session, Chaser boots a VM, and when you terminate it, the VM is destroyed.
Sessions can be ephemeral (no durable state) or workspace-backed (attached to a persistent disk).
Rules:
- If
ephemeralistrue, no workspace is used. The session is disposable. - If
ephemeralisfalse(the default), aworkspaceselector is required. - Browser sessions accept
workspaceorephemeral, but notimage. - Sandbox sessions accept
imageonly whenephemeralistrue. For persistent sandboxes, the image is set on the workspace.
Workspaces
A workspace is a named persistent disk. It stores files across sessions — terminate a session, boot a new one against the same workspace, and your files are still there.
Each workspace is locked to a session type (browser or sandbox) and belongs to an account.
Key properties:
- Names are unique per account, case-insensitive, max 64 characters.
- Selectors — anywhere the API accepts a workspace reference, you can use the workspace name (preferred) or UUID.
- Templates — flag a workspace as a template, then clone new workspaces from it.
- Snapshots — create filesystem-level restore points. Snapshot operations are blocked while a session is actively attached unless
force=trueis passed. - GitHub import — import a workspace from a GitHub repository with
POST /v1/workspaces/import. The repository selector is persisted on the workspace for re-bootstrap.
Accounts
Every user gets an implicit personal account. You can also create organization accounts for team collaboration.
All resources (sessions, workspaces, API keys, webhooks, audit events) are scoped to the active account. Select the active account on any request:
If omitted, your personal account is used. Accepted values: account ID, exact account name, or personal.
Organization features:
- Members with roles:
owner,admin,member - Service accounts with scoped API keys for automation
- Shared workspaces visible to all members of the organization
Authentication
All API requests require a bearer token:
Accepted token types:
- API keys (
sk_...) — created via the dashboard, CLI, or API - JWT access tokens — from OAuth login flows (Google, GitHub)
Scoped API keys can be restricted to specific permissions: sessions.read, sessions.write, workspaces.read, workspaces.write, exec.write, files.read, files.write, keys.read, keys.write, billing.read, billing.write, audit.read, webhooks.read, webhooks.write. Keys without explicit scopes have full access.
API keys are bound to the account selected at creation time and cannot be redirected to a different account later.
Session endpoints
When a session is created, the response includes control endpoints:
- Subdomain style:
https://<session_id>.chaser.sh/ - Path style:
https://api.chaser.sh/s/<session_id>/
Both resolve to the same session. Browser sessions use these for CDP access. Sandbox sessions use them for PTY, exec, file transfer, and port forwarding.
Connection leases
Chaser tracks active connections to sessions (PTY streams, exec streams, and other transports). The active_connection_leases field in session responses reflects this.
When you terminate a session with DELETE /v1/sessions/{id}, it may return a conflict if the session has active connections. Use force=true to override. The same applies to workspace deletion when sessions are attached.
Session status
Session status is one of: creating, running, or terminated. The API reconciles status from the control plane and the underlying VM daemon to give you an accurate view.
