Developers

REST API

Buda's contract-first REST API at /api/v1 — OpenAPI spec, Swagger UI, and a worked quick start.

Call Buda from any language. The REST API at /api/v1 is contract-first: every endpoint is defined by an oRPC contract, so the OpenAPI spec and Swagger UI are always in sync with what the server actually does. Use it from a backend, a CI job, a non-TypeScript client, or generated SDKs.

Explore the API

  • Swagger UI (/api/v1/doc) — test calls live with your API key.
  • OpenAPI JSON (/api/v1/openapi.json) — feed it to openapi-generator, Postman, Insomnia, or contract tests.
  • buda-cli (github.com/buda-ai/buda-cli) — the official Rust CLI, no SDK generation needed. There's currently no TypeScript/JS SDK; use the OpenAPI JSON with your generator of choice if you need one.

TypeScript clients can also generate types directly from the exported oRPC contract instead of from the JSON spec.

Authentication

Every protected endpoint expects an sk_ API key as a Bearer token:

curl https://buda.im/api/v1/api-agents \
  -H "Authorization: Bearer sk_your_api_key"

A missing or invalid key returns 401 Unauthorized. See Authentication to create and manage keys.

Quick start

Health check (no auth)

curl https://buda.im/api/v1/health
{ "status": "ok", "timestamp": "2025-01-01T00:00:00.000Z" }

Who am I?

curl https://buda.im/api/v1/users/me \
  -H "Authorization: Bearer sk_your_api_key"

Create a Drive-based Claw agent

curl -X POST https://buda.im/api/v1/api-agents \
  -H "Authorization: Bearer sk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "spaceId": "YOUR_SPACE_ID",
    "name": "Watch Assistant",
    "instructions": "Use Drive files as source of truth and keep replies concise."
  }'

Add knowledge to the agent Drive

curl -X PUT https://buda.im/api/v1/api-agents/YOUR_AGENT_ID/drive/files \
  -H "Authorization: Bearer sk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "path": "manuals/reset-device.md",
    "content": "# Resetting\n\nHold the crown for 8 seconds.",
    "mimeType": "text/markdown"
  }'

Start a session and poll for the reply

# Send a message — the agent run starts asynchronously (202)
curl -X POST https://buda.im/api/v1/api-agents/YOUR_AGENT_ID/sessions \
  -H "Authorization: Bearer sk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{ "message": "How do I reset my device?", "mode": "chat" }'

# Poll the session until status is completed / waiting_for_input / failed / cancelled
curl https://buda.im/api/v1/api-agents/YOUR_AGENT_ID/sessions/SESSION_ID \
  -H "Authorization: Bearer sk_your_api_key"

Endpoint groups

The API is organized into a few cooperating groups, all under /api/v1:

GroupBase pathWhat it does
System/health, /metaLiveness and service metadata (no auth on /health).
Users/users/meThe authenticated key owner.
API Claws/api-agents, /spaces, /spaces/{id}/agents, .../drive/files, .../sessionsProvision Spaces and hosted agents, manage Drive, run and read sessions, schedule tasks.
Embed.../embed-urls, .../embed-sessions, /embed/chat-sessions/{id}Short-lived iframe URLs and frontend-safe tokens.

For the full request/response shapes, use the live Swagger UI or the OpenAPI JSON.

On this page