Saaya API

API-first. SDKs for TS + Python. MCP-native.

Every UI action is a REST call. Live transcripts and tool-call events stream over WebSocket. Connect Claude, Cursor, or any AI client through the MCP endpoint. Bearer-auth, idempotent, cursor-paginated, shape-stable.

What it is

The whole platform, programmable.

The Saaya dashboard is a thin client over the Saaya API. Anything you can do in the UI, create an agent, upload to a knowledge base, launch a campaign, fetch a session, register a webhook, is a documented REST call. There are no console-only features. There are no UI-only features.

For real-time work, a WebSocket layer streams live transcripts, sentiment updates, and tool-call events as they happen. For AI-native work, an MCP endpoint exposes every Saaya resource as a tool that Claude, Cursor, Windsurf, or any MCP client can call directly, your agents, your KBs, your sessions, all addressable from another agent.

The shape contract is strict. Every endpoint is bearer-authenticated, idempotent on writes (with an idempotency key header), cursor-paginated on lists, and shape-stable across minor versions. Breaking changes ship as a new major version, with the old version supported for at least twelve months.

Capabilities

A platform you can script.

The bits that make a developer experience feel inevitable, instead of inflicted.

REST + WebSocket

CRUD on agents, KBs, campaigns, sessions, and webhooks via REST. Live transcripts, sentiment, and tool-call events stream over WebSocket, sub-100ms from event to subscriber.

TypeScript SDK

Strong types end-to-end, generated from the OpenAPI spec. Discriminated unions for events. Works in Node, Bun, Deno, and the Edge runtimes. Tree-shakeable, zero runtime deps.

Python SDK

Async-first, Pydantic v2 models, asyncio-native event subscribers. Drops into FastAPI handlers and LangGraph nodes. Synchronous wrappers included.

MCP endpoint

Native Model Context Protocol server at /mcp. Connect Claude Desktop, Cursor, Windsurf, or any MCP client, every Saaya resource is a tool, every webhook is a notification.

Webhooks

Signed, retried, replayable webhooks on every state change. Ten event categories, ~80 events. Replay from the dashboard or the API. Deliveries logged with full request and response.

Cursor pagination

Every list endpoint is cursor-paginated, shape-stable, and idempotent. Bearer auth, idempotency keys, RFC-7807 error envelopes. The boring parts done right.

How it works

Three steps from key to production.

Most teams have a working integration before lunch.

  • 01

    Get a key

    Generate a scoped API key from the dashboard. Per-environment (sandbox, production), per-resource (agents:read, campaigns:write), with rate-limit and IP-allowlist policies.

  • 02

    Pick a SDK / cURL / MCP

    TypeScript or Python SDK for typed calls. cURL for one-offs and CI. MCP for AI-native clients (Claude, Cursor, Windsurf). Same auth, same shapes, same docs.

  • 03

    Ship

    Wire up webhooks, subscribe to the WebSocket events you care about, and roll forward. Idempotency keys make retries safe; cursor pagination keeps backfills clean.

  • For developers

    The same operations, three ways.

    Create an agent, upload to a KB, stream a session, pick the surface that fits your stack.

    REST API
    # 1. Create an agent
    curl -X POST https://api.saaya.ai/v1/agents \
      -H "Authorization: Bearer $SAAYA_API_KEY" \
      -H "Idempotency-Key: $(uuidgen)" \
      -H "Content-Type: application/json" \
      -d '{ "name": "maya-inbound", "identity": { "language": "en-US" } }'
    
    # 2. Upload a doc to a knowledge base
    curl -X POST https://api.saaya.ai/v1/knowledge-bases/kb_docs/uploads \
      -H "Authorization: Bearer $SAAYA_API_KEY" \
      -F "file=@./handbook.pdf" \
      -F "tags=public,handbook"
    
    # 3. Stream a live session over WebSocket
    wscat -c "wss://api.saaya.ai/v1/sessions/ses_01HXAB/stream" \
      -H "Authorization: Bearer $SAAYA_API_KEY"
    # < {"type":"transcript.delta","role":"user","text":"hello"}
    # < {"type":"sentiment.update","value":0.42}
    # < {"type":"tool_call","name":"lookup_account","ms":312}
    Pricing

    On every tier, what you get.

    The API is the platform. Every plan ships with full REST and WebSocket access; the difference is rate limits, MCP, and SLA.

    Free

    Full REST + WebSocket access · 60 req/min · webhooks · TypeScript & Python SDKs · sandbox environment.

    Growth

    600 req/min · MCP endpoint · production environment · idempotency keys · saved API-key scopes · webhook replay tooling.

    Enterprise

    Custom rate limits · IP allowlists · BYO domain (api.yourco.com) · region-pinned endpoints · 99.95% SLA · dedicated support channel.

    See it in context

    Pair this with the right Solution.

    FAQ

    Frequently Asked Questions.

    Final step

    Build on the API.

    Generate a sandbox key in two clicks, paste a cURL into your terminal, and watch your first agent answer. Production access is the same call with a different key.

    Get started with the APITalk to founders

    Free plan · No credit card · 15-min setup