List Conversations
query Parameters
channelFilter by channel: sms or whatsapp_chat. Omit for all.
statusFilter by status: active/ended/timed_out/closed
skiplimitList Conversations › Responses
Successful Response
Pagination metadata in API responses.
Get Conversation
path Parameters
conversation_idGet Conversation › Responses
Successful Response
idorganization_idchannelcontact_addressbusiness_addressstatusstarted_atmessage_countcreated_atupdated_atUpdate Conversation Dynamic Variables
Set or merge per-conversation runtime variables.
Replaces the dual-purpose dynamic_variables field that used to
live on every send request — Stage 7c (option A) split context-setting
out of message-send so the freeform composer doesn't carry vars dead
weight. Operators call this once at first contact (typically right
before the first send) to seed the agent's reply context. The agent's
_run_direct_chat reads from conversation.dynamic_variables on
every reply turn.
Default merge semantics (replace=False): caller-supplied keys are
merged into the existing bucket. Pass replace=True to fully
overwrite. system__* keys are stripped — platform-controlled.
path Parameters
conversation_idUpdate Conversation Dynamic Variables › Request Body
Map of variable name to value. Keys with reserved prefix system__ are stripped server-side (platform-controlled).
replaceTrue = full replace (existing keys not in the payload are cleared). False (default) = merge into existing bucket.
Update Conversation Dynamic Variables › Responses
Successful Response
idorganization_idchannelcontact_addressbusiness_addressstatusstarted_atmessage_countcreated_atupdated_atList Messages
path Parameters
conversation_idquery Parameters
skiplimitsinceReturn only messages with sent_at strictly greater than this ISO timestamp (used by SSE reconnect backfill).
beforeReturn only messages with sent_at strictly less than this ISO timestamp (used by reverse infinite scroll).
List Messages › Responses
Successful Response
Pagination metadata in API responses.
Send Message
Send an outbound message inside an existing conversation.
The provider is picked from conversation.channel:
sms→ SMS carrierwhatsapp_chat→ Meta WhatsApp Cloud API (text only on this route)
Channel-specific surfaces (WhatsApp templates, voice notes, media MMS
workflows) stay under /v1/whatsapp/... and /v1/messaging/....
path Parameters
conversation_idSend Message › Request Body
bodyMMS attachments (SMS only — WhatsApp text endpoint rejects).
Client-supplied id echoed back for optimistic UI reconciliation.
Send Message › Responses
Successful Response
idconversation_idorganization_idchanneldirectionexternal_message_idmessage_typestatussent_atMark Conversation Read
path Parameters
conversation_idMark Conversation Read › Responses
Successful Response
idorganization_idchannelcontact_addressbusiness_addressstatusstarted_atmessage_countcreated_atupdated_atList Conversation Timeline
Unified message + voice-call stream for a conversation.
Returns {kind: "message", id, sent_at, message: MessageResponse} or
{kind: "call", id, sent_at, call: VoiceSessionResponse} per item.
The frontend picks the right renderer based on kind.
path Parameters
conversation_idquery Parameters
limitsincebeforeList Conversation Timeline › Responses
Successful Response
Chat Analytics Dashboard
query Parameters
start_dateInclusive ISO start. Default: 7 days ago.
end_dateInclusive ISO end. Default: now.
channelFilter by channel: sms or whatsapp_chat
agent_idinterval^(hour|day|week)$Volume bucket size
Chat Analytics Dashboard › Responses
Successful Response
start_dateend_dateTop-line chat dashboard KPIs.
