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