/api/v2/assistant. Use it to put
Semi in your own interface. For agent-to-platform work, the v3 MCP endpoint is
usually the better fit; the full request and response schemas are in the OpenAPI reference.
Chat
A chat request carries the
prompt (up to 32,000 characters), the scopeType and scopeId, an
optional conversationUid to continue a conversation, attachments (up to 5), an optional
preferredLanguage, and pageContext (what the person is looking at). Upload attachments first with
POST /attachments, which returns a signed upload URL.
The response carries Semi’s text, the tools it used, any pending confirmations, and a widget directive
when a tool opened a page. Render widgets as described in MCP Apps.
A dropped stream can resume: reconnect to GET /conversations/{uid}/stream with the Last-Event-ID
header (or after) set to the last event you saw.
Conversation scope
Every conversation has a scope: the account (scopeType: "customer", with the account id) or one
advertiser (scopeType: "advertiser"). Set it when you create the conversation
(POST /conversations with scopeType, scopeId, an optional title and workspace) or on the first
chat turn. List conversations for a scope with GET /conversations?scopeType=…&scopeId=…
(take/skip paging; see Pagination).
Conversations
Sharing, rooms and mentions are covered in Shared rooms.
Your preferences
GET /user-preferences returns your language and display preferences:
A request with a service token (no person) gets the same shape with
preferredLanguage, locale,
timezone and displayCurrency all null.
Set your language with PUT /user-preferences/language and { "preferredLanguage": "fr" }, or
{ "preferredLanguage": null } to clear it. It answers with the full preferences now in effect.
Setting a language also resets locale to that language’s default. A service token can’t set one
(BAD_REQUEST: “Only people have a default language.”). PUT /user-preferences takes
preferredLanguage, announcements and defaultSharingEnabled together; the older language field
is still accepted on both routes.
Language codes: en English, de German, fr French, es Spanish, pt Portuguese, it Italian,
nl Dutch, sv Swedish, pl Polish, ja Japanese, ko Korean, zh Chinese (Simplified), ar
Arabic, hi Hindi, tr Turkish. Semi replies in any of them. The app’s interface is translated into
ten: English, German, Spanish, French, Italian, Japanese, Korean, Dutch, Brazilian Portuguese and
Simplified Chinese; with the other five it stays in English (see
Language).
Your default applies to a new chat when the client sends it: the app sends it as preferredLanguage
on a new chat’s first turn, and a conversation keeps its own language after that
(PATCH /conversations/{uid}/language). Over REST, pass preferredLanguage on the first
POST /chat yourself: POST /conversations and a first turn without it don’t read your default yet.
Announcements
Settings → Semi preferences has an Announcements card: “Occasional updates from Semicola, delivered by Semi in your Slack channel.” Its switch, Receive Semi announcements (“Turn off to stop receiving broadcast updates from Semicola.”), is the account’s opt-in, on by default. Read and set it withGET /announcement-preference and PUT /announcement-preference
({ "enabled": true }), or through the announcements field of /user-preferences. Both answer with
the same setting.
Announcements are delivered only in the account’s Slack channel. That needs Semicola’s Slack app,
which isn’t registered yet, so no announcements are sent today; the opt-in is saved for when they are.
Seller call debugging
GET /agent-debug-calls (optionally ?campaignId=…) shows, for the latest proposal request, what
each seller’s get_products call did: outcome (returnedProducts, returnedNone, failed or
notCalled), productCount, latencyMs, error, and the request and response payloads.
Other reads
GET /usage (your assistant usage against its cap), GET /starter-prompts, GET /digest (unread
items), GET /mentionable-users and GET /health.
Not available yet
- A separate account-wide conversation-settings endpoint: set the sharing default with
PUT /user-preferences(defaultSharingEnabled). - Announcement delivery: it needs the Slack app (see Announcements).
- Rendering artifacts beyond widgets (for example a discovery card payload) and an
ask_semiMCP tool. - Transport attempts and sandbox/live provenance on debug calls.