> ## Documentation Index
> Fetch the complete documentation index at: https://docs.core.vexa.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# SDKs & clients

> The canonical interface is the REST API; published libraries wrap it.

Vexa's contract is its **HTTP API** — the [Meetings API](/api/meetings) and [Agent API](/api/agent) are
the same surface whether you self-host or use the hosted service. Any HTTP client works.

## What ships today

The open-core ships three ways to drive Vexa:

* **The HTTP API** — the canonical interface. Every capability is reachable over plain REST + WebSocket;
  see the [API reference](/api/agent).
* **`vexa-slim`** — a minimal **Python** client ([`clients/slim`](https://github.com/Vexa-ai/vexa-core/tree/main/clients/slim)).
  Gateway-only (it speaks `api.v1` and holds no domain internals), with two peer sub-clients
  (`slim.agent.*`, `slim.meetings.*`) and a high-level cookbook (`listen_to_meeting`, `agent_on_meeting`,
  `harvest`). Doubles as the living proof that the `meetings ⊥ agent` boundary holds.

  ```python theme={null}
  from vexa_slim import Slim, listen_to_meeting
  from vexa_slim.config import api_key, gateway_url, load_env
  load_env()
  slim = Slim(gateway_url(), api_key())
  harvest, doc = await listen_to_meeting(slim, "ety-jhht-nek", seconds=20)
  print(harvest.counts())   # e.g. {"transcript": 80, "note": 99, "card": 33}
  ```
* **The terminal** — the bundled browser-based [workbench](/architecture/modules) (Next.js), a thin
  client over the same API. It comes up with `make all` at `http://localhost:13000`.

Other typed clients / CLI wrappers are **on the roadmap** — until then, use `vexa-slim`, call the API
directly, or generate a client from the OpenAPI surface.

## Prefer raw HTTP?

Every guide in these docs uses plain `curl`, so you can port any example to your language directly. The
only invariant is the auth header:

```bash theme={null}
-H "X-API-Key: $API_KEY"
```

Identity is **server-derived** from the key — you never send a user id or subject. See
[Authentication](/authentication).

## Building your own client

The API is stable and self-describing:

* **Meetings** — `POST /bots`, `GET /transcripts/{platform}/{id}` (poll or WebSocket), `GET /recordings`.
* **Agent** — `POST /agent/chat` (SSE), `POST /agent/routines`, `GET /agent/sessions`, `GET /agent/models`,
  and the `/agent/workspace/*` reads. (`/api/*` is a deprecated alias for the same routes.)
* **Errors** — conventional status codes with a JSON `detail`; see the [error reference](/api/errors).

Streamed endpoints emit typed frames (SSE / WebSocket) documented per endpoint in the
[Agent API](/api/agent).
