Identifiers
Always
"conversation".UUID. Use this as your foreign key in external systems.
UUID of the Chatbot the visitor was talking to.
null if the conversation predates the Chatbot being deleted or originated outside any chatbot.Updating a conversation
PATCH /conversations/{id} accepts only the writable fields — status, priority, title, the three contact_* fields, and assigned_to. The endpoint is strict: any unknown or unrecognized field in the body (including read-only fields like summary, sentiment_score, or last_message_at) is rejected with 400. Send only the fields you intend to change.
Status
One of
open, bot_active, agent_requested, resolved, closed, archived. See Lifecycle for the transition rules.You can read bot_active here, but you cannot set it via PATCH — once a human or API caller is driving the conversation, you can’t put the bot back in the loop.One of
low, medium, high. Defaults to medium on creation; agents bump it via PATCH.Human-readable summary line shown in the inbox. The Chatbot generates this automatically once enough context has accumulated; you can overwrite it via
PATCH.Longer recap of the conversation, generated when the thread is resolved or closed. Set by AI; not editable via API.
Integer between
0 and 100. 0 is fully negative, 100 fully positive. null until the model has scored the thread. Set by AI; not editable via API.Contact
The visitor’s volunteered contact details. All three are nullable and staynull for anonymous threads.
Best email of record for the visitor. Used to send the away-email follow-up when an agent replies and the visitor isn’t watching the tab.
Display name. Free-text — don’t assume any particular format.
Phone number, as the visitor typed it. No normalization.
Assignment
UUID of the agent who currently owns the conversation.
null means unassigned (anyone on the team can pick it up). When an API key posts the first reply, the conversation stays unassigned — there’s no user to claim with.When you set assigned_to via PATCH, the id must belong to an active member of your organization; an unknown user, or a removed/foreign member, is rejected with 422. Pass null to unassign.Attribution
Set at creation time from the visitor’s entry point. Drives routing rules and analytics.QR code the visitor scanned to get here.
null for any other entry path.Product that drove this session, when the visitor scanned a product code.
Custom object that drove this session, when the visitor scanned an
/o/<slug> URL.Activity
First 200 characters of the most recent message. Use for inbox rows — saves a round trip to
/messages.ISO 8601. Updated on every message, including system markers.
Timestamps
ISO 8601. Stamped when status moves to
resolved. Cleared on reopen.ISO 8601. Stamped when status moves to
closed. Cleared on reopen.ISO 8601. Set by the chat widget at session start.
Example
Fields you won’t find here. Cost, token usage, the model that handled a turn, billing rates, internal resume tokens, and presence timestamps are all server-only. They never appear in API responses or webhook payloads.

