Skip to content
DEVELOPERS

SAI is API-first. The panel you open with Cmd+J in SmoothOS calls three endpoints, and your own integrations can call the same ones. Every request runs with a real person's permissions.

Early. These endpoints power SmoothOS today and may still change. Reference documentation lives inside the product for early-access agencies; a public developer program, partner keys and outgoing webhooks aren't available yet.

Authentication

Every request carries a signed-in user's access token in the Authorization header as a Bearer token. There are no separate API keys. SAI reads and writes with that person's session, so the database's row-level security decides what it can see, not the model. When a tool hits a permission wall, SAI doesn't estimate; it says the information isn't visible with that access.

POST /functions/v1/sai/chat

One turn of conversation. Send a message and, optionally, the record on screen (context), a threadId, an agent, a task and a locale. The response returns threadId, reply, agent (operator, finance, delivery, brand or growth), model, locale, region, grounding and the tools it called. Without a threadId, a new thread opens if the user may keep conversations; otherwise the turn is stateless and threadId is null.

curl -X POST "$SMOOTHOS_API/functions/v1/sai/chat" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"message": "Which invoices are overdue?", "locale": "en-US", "context": {"route": "/admin"}}'

POST /functions/v1/sai/action

A single tool call with no model involved, for widgets and shortcuts. Send tool and args, get back tool and result. Tools available today: get_financial_summary (paid, open, overdue and due-in-30-days totals by currency for a period), get_project_kpis (status, progress, tasks, time against budget, billed and paid for one project) and get_client_dossier (a brand's approved memory). All run with the caller's permissions.

curl -X POST "$SMOOTHOS_API/functions/v1/sai/action" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"tool": "get_financial_summary", "args": {"from": "2026-10-01", "to": "2026-10-31"}}'

POST /functions/v1/sai/context

Returns what SAI would load for a screen: the record and the brand behind it. Send a page context with a route, an optional title and an optional entity made of kind, id and label. The web app builds this shape from the current page, and the mobile app planned for later will send the same one.

Languages

SAI always answers in the user's locale, whatever language the data is in. The locale comes from the request's locale field, then the Accept-Language header, then the user's saved language. The product supports English, Turkish and Arabic.

Models and keys

Each turn goes to one of three tiers: bulk for long reading (Gemini 3.6 Flash by default), reason for tools, money, scope and answers from records (Claude Sonnet 5.5 by default) and quick for short questions with no record on screen (Claude Haiku 5.5 by default). Agencies bring their own Anthropic or Google keys, kept in a vault, and can change each tier in Settings. Every call is logged with its model, tokens and cost.

Errors

401 unauthorized: the token is missing or invalid. 403 no_agency: the user doesn't belong to an agency. 409 ai_not_configured: the agency hasn't set up an AI provider. 400 invalid_message or unknown_tool: the message or the tool name isn't valid.

Not there yet

Streaming responses, write tools such as creating a task or drafting an invoice (each with an approval step) and mobile push notifications are planned, not shipped. There are no outgoing webhooks for partners yet.

License

SmoothOS is source-available under the Business Source License 1.1, and each release becomes Apache 2.0 three years later. A self-hosted Community Edition is on the way, with a waitlist.