Skip to main content
ClawUp exposes a public HTTP API so you can build integrations, CLIs, and automation on top of your account — without scraping the dashboard. The API is described by a machine-readable OpenAPI 3.1 spec, so you can also generate a client SDK in your language of choice.
Status: Draft v1. The spec covers authentication, the read-only catalogs (plans, models, runtimes, tools, team templates), agent and team management (list / create / get / update / delete), and agent chat (OpenAI-compatible, with streaming). More endpoints are added over time. Documented endpoints are stable — we only add fields, never rename or remove them, without a version bump.

Base URL

Every endpoint lives under /api/v1/.

The OpenAPI spec

The full machine-readable spec is served straight from the backend and always matches the live API (it’s generated from the server code, so it never drifts):
Point any OpenAPI tool at that URL to explore endpoints or generate a typed client:

Authentication

All API calls authenticate with an API key passed as a Bearer token:
A key grants the same access as your account, so treat it like a password.

Creating an API key

  1. Sign in at clawup.org.
  2. Go to Account → API Keys.
  3. Click Create key, choose the permissions the key should grant and an optional expiry, then confirm.
  4. Click Reveal to show the key, then Copy it.
Keys are hidden by default and shown only when you reveal them. You can Revoke a key at any time — revoked keys stop working immediately.
Keys are prefixed cu_. Older keys with an eb_ prefix continue to work.

Permissions (scopes)

Each key grants a set of <resource>:<action> scopes, chosen when you create it: New keys default to read-only (agents:read, teams:read). A request made with a key that lacks the scope a route requires returns 403 SCOPE_FORBIDDEN. (Browser/session logins from the dashboard are unrestricted.)

Quick example

Verify your key by fetching your own account:

Chat with an agent

The chat endpoint is OpenAI-compatible, so you can point any OpenAI client (or a raw curl) at it. Use the agent’s id in the path. Requires the agents:chat scope.
Use "model": "openclaw" to route to the agent’s own configured model. Only the last user message is sent — earlier turns are loaded from the agent’s stored transcript on the server.

Streaming

Set "stream": true to receive a text/event-stream of OpenAI chat.completion.chunk frames, terminated by data: [DONE]:
Read the stored transcript with GET /api/v1/agents/AGENT_ID/chat (requires agents:read).

Available endpoints (v1)

See https://api.clawup.org/openapi.json for the authoritative, always-current list, request/response schemas, and which endpoints require authentication.

Errors

Errors use a consistent JSON shape:
The error field is a stable string code (e.g. AUTH_401); message is human-readable and may change. A 401 means the key is missing, invalid, expired, or revoked. A 403 SCOPE_FORBIDDEN means the key is valid but lacks the scope the route requires — mint a key with the right permission (see Permissions).

Versioning

Every route is under /api/v1/. Breaking changes ship as a new version (/api/v2/) and the old version keeps working during a deprecation window. Within a version, we only add optional request fields and additive response fields.