Conversations are member-mode: every call here uses the short-lived member
token your backend mints, not the Org-API-Key. See
Authentication for the two-token model and refresh
contract.
Stream live messages
Subscribe to new concierge messages over SSE, consumed as an
AsyncIterable,
AsyncStream, or Flow. The right way to receive incoming messages.The flow
List the member’s conversations, read a thread’s history, then send a reply:Operations
List conversations
GET /v1/conversations returns the member’s conversations.
string
Names the member when a machine token calls on their behalf.
ListConversationsResponse:
Conversation[]
required
The member’s conversations.
List messages
GET /v1/conversations/{id}/messages returns one page of a conversation’s
messages with cursor pagination.
string
required
The conversation id.
integer
Page size. Defaults to the server’s default if omitted.
string
The
nextCursor from the previous page. Omit for the first page.string
Names the member when a machine token calls on their behalf.
ListMessagesResponse:
Message[]
required
The page of messages.
string | null
required
Pass this back as
cursor to fetch the next page. null marks the end of the
history.Send a message
POST /v1/conversations/{id}/messages posts a message to the conversation.
string
required
The conversation id.
string
required
The message text to send.
SendMessageResponse:
boolean
required
true when the message was accepted.Idempotency on
sendMessage is supported via the Idempotency-Key header- a retried send replays rather than double-posting. The API
reference omits the header on the
{id}route because of an emitter limitation, not because it is unsupported, so set the header yourself when retrying. The SDKs send one automatically on every write. See Retries and idempotency.
Schemas
Conversation
Message
Testing in the sandbox
In the sandbox, the concierge is fully self-contained: a message you send is never forwarded to our Ops team, and a sandbox concierge bot replies automatically. The bot’s reply streams back to you overGET /v1/conversations/{id}/stream exactly like a real concierge message, so you
can build and test the whole send -> stream -> reply loop end to end without paging
a human. In LIVE, messages reach a real concierge as usual.
Related
Streaming messages
Receive live incoming messages over SSE.
Errors
The error taxonomy and stable codes for failed calls.