---
title: "TypeScript SDK"
description: "Generated types and a thin fetch-based client."
---
The TypeScript SDK is generated from the OpenAPI spec produced by the Rust server.
## Generate types
```bash
pnpm --filter @sandbox-agent/typescript-sdk generate
```
This runs:
- `cargo run -p sandbox-agent-openapi-gen` to emit OpenAPI JSON
- `openapi-typescript` to generate types
## Usage
```ts
import { SandboxDaemonClient } from "@sandbox-agent/typescript-sdk";
const client = new SandboxDaemonClient({
baseUrl: "http://127.0.0.1:8787",
token: process.env.SANDBOX_TOKEN,
});
await client.createSession("my-session", { agent: "claude" });
await client.postMessage("my-session", { message: "Hello" });
const events = await client.getEvents("my-session", { offset: 0, limit: 50 });
```
## Endpoint mapping
client.listAgents()
Maps to `GET /v1/agents`.
client.installAgent(agentId, body)
Maps to `POST /v1/agents/{agentId}/install`.
client.getAgentModes(agentId)
Maps to `GET /v1/agents/{agentId}/modes`.
client.createSession(sessionId, body)
Maps to `POST /v1/sessions/{sessionId}`.
client.postMessage(sessionId, body)
Maps to `POST /v1/sessions/{sessionId}/messages`.
client.getEvents(sessionId, params)
Maps to `GET /v1/sessions/{sessionId}/events`.
client.getEventsSse(sessionId, params)
Maps to `GET /v1/sessions/{sessionId}/events/sse` (raw SSE response).
client.streamEvents(sessionId, params)
Helper that parses SSE into `UniversalEvent` objects.
client.replyQuestion(sessionId, questionId, body)
Maps to `POST /v1/sessions/{sessionId}/questions/{questionId}/reply`.
client.rejectQuestion(sessionId, questionId)
Maps to `POST /v1/sessions/{sessionId}/questions/{questionId}/reject`.
client.replyPermission(sessionId, permissionId, body)
Maps to `POST /v1/sessions/{sessionId}/permissions/{permissionId}/reply`.