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 any MCP-compatible AI client through the MCP endpoint. Bearer-auth, idempotent, cursor-paginated, shape-stable.
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 any MCP-compatible AI 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.
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 every major server and edge JavaScript runtime. Tree-shakeable, zero runtime deps.
Python SDK
Async-first, typed data models, asyncio-native event subscribers. Drops into async web handlers and agent-workflow nodes. Synchronous wrappers included.
MCP endpoint
Native Model Context Protocol server at /mcp. Connect any MCP-compatible AI 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.
Three steps from key to production.
Most teams have a working integration before lunch.
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.
Pick an SDK, REST, or MCP
TypeScript or Python SDK for typed calls. REST for one-offs and CI. MCP for any MCP-compatible AI client. Same auth, same shapes, same docs.
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.
The same operations, three ways.
Create an agent, upload to a KB, stream a session, pick the surface that fits your stack.
# 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}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.
Full REST + WebSocket access · 60 req/min · webhooks · TypeScript & Python SDKs · sandbox environment.
600 req/min · MCP endpoint · production environment · idempotency keys · saved API-key scopes · webhook replay tooling.
Custom rate limits · IP allowlists · BYO domain (api.yourco.com) · region-pinned endpoints · 99.95% SLA · dedicated support channel.
Pair this with the right Solution.
Frequently Asked Questions.
60 req/min on Free, 600 req/min on Growth, custom on Enterprise. Limits are per-key and per-endpoint-class. WebSocket connections are counted separately. 429s include a Retry-After header and a token-bucket refill timestamp.
Build on the API.
Generate a sandbox key in two clicks, paste a request into your terminal, and watch your first agent answer. Production access is the same call with a different key.
