Conversations capture every back-and-forth your agents have with people — chat sessions on your site, phone calls, SMS threads, inbound emails, and form submissions. Each conversation belongs to an agent (Documentation Index
Fetch the complete documentation index at: https://docs.clarky.ai/llms.txt
Use this file to discover all available pages before exploring further.
bot_id) and may be linked to a Contact and/or an anonymous Visitor.
You can read transcripts, update inbox state (assignment, archive, takeover, internal notes), and soft-delete conversations from the API. Creating conversations is not supported — they originate from real channel events (the chat widget, voice/SMS webhooks, inbound email, form submissions) so that routing, billing, and analytics stay accurate.
The Conversation object
Unique conversation identifier.
The agent this conversation belongs to.
The CRM contact linked to this conversation, if one has been resolved.
Channel the conversation happened on. See Conversation types below.
Best-known email for the participant (may be
null for anonymous chats).E.164 phone number for the participant on voice / text conversations.
Display name of the human, when known.
true when a human teammate has taken over the conversation from the agent.User ID of the teammate the conversation is assigned to.
ISO 8601 timestamp of the most recent assignment.
true while the conversation is in progress; flips to false after a period of inactivity.Soft-delete flag. Deleted conversations are excluded from list responses unless you pass
include_deleted=true.true for conversations between teammates (e.g. asking your internal agent), false for customer-facing conversations.Free-text notes added by your team. Never shared with the participant.
Snippet of the most recent message — useful for inbox-style list views.
ISO 8601 timestamp of the most recent message.
ISO 8601 timestamp of the participant’s most recent activity (typing, page change, etc.).
true if Clarky’s sentiment analysis judged the conversation as net-positive, false if negative, null if not yet analyzed.Sentiment score in the range
[-1, 1].One-sentence summary of the participant’s mood and intent.
Storage path for the call recording on voice conversations. Use the dashboard or a workspace-authenticated session to download.
Duration of voice / phone calls, in minutes.
Linked anonymous Visitor, when the conversation came from an unauthenticated chat.
ISO 8601 timestamp.
Conversation types
Thetype field is a numeric ID. The list endpoint also accepts the names below as a convenience.
type | Name | Channel |
|---|---|---|
1 | chat | Web chat widget |
2 | phone (or voice, call) | Inbound or outbound voice calls |
3 | text (or sms) | SMS / text-message threads |
4 | email | Inbound email threads |
5 | form | Form submissions |
The Message object
Who sent the message. Common roles:
user (participant), assistant (the agent), system, tool, human (a human teammate during takeover).The text payload of the message. May be empty for tool-only messages.
MIME hint for the content (e.g.
text/plain, text/markdown).Delivery status, when available — e.g.
sent, delivered, failed.Name of the tool the assistant called, when this message represents a tool invocation.
JSON arguments passed to the tool.
ISO 8601 timestamp.
List conversations
GET /api/v1/conversationscreated_at descending by default.
Query parameters
| Param | Type | Description |
|---|---|---|
bot_id | string | Filter to a single agent |
contact_id | string | Filter to conversations linked to a specific contact |
visitor_id | string | Filter to conversations linked to a specific anonymous visitor |
assigned_to | string | Filter by the user ID of the assigned teammate |
type | string | integer | Filter by channel — chat, phone, text, email, form, or numeric 1–5 |
active | boolean | true for in-progress conversations, false for inactive |
archived | boolean | Filter on the archived flag (omit to include both) |
human_takeover | boolean | true for conversations currently being handled by a human |
include_deleted | boolean | Pass true to include soft-deleted conversations |
created_after | string (ISO 8601) | Created at or after this timestamp |
created_before | string (ISO 8601) | Created at or before this timestamp |
last_message_after | string (ISO 8601) | Most-recent message at or after this timestamp |
last_message_before | string (ISO 8601) | Most-recent message at or before this timestamp |
search | string | Substring match against the latest message snippet, email, phone, or human name |
sort | string | created_at (default) or last_message_at |
order | string | desc (default) or asc |
page | integer | See Pagination |
page_size | integer | See Pagination |
Example
Get a conversation
GET /api/v1/conversations/{id}404 not_found if the conversation does not exist or belongs to another workspace.
Example
Update a conversation
PATCH /api/v1/conversations/{id}write scope. Updates the listed fields and leaves everything else untouched. Use this to manage inbox state — assigning conversations to teammates, archiving, taking over from the agent, or adding private notes.
Body fields
| Field | Type | Description |
|---|---|---|
internal_notes | string | null | Private notes for your team. Never shared with the participant. |
assigned_to | string | null | User ID of the teammate who should own this conversation. Pass null to unassign. |
archived | boolean | true to archive, false to unarchive. |
human_takeover | boolean | true to mute the agent and let a human reply. |
active | boolean | Mark the conversation in-progress (true) or closed (false). |
Setting
assigned_to automatically updates assigned_at. Setting archived automatically updates archived_at. You don’t need to send those fields yourself.Example: assign a conversation
Example: archive
Example: take over from the agent
Delete a conversation
DELETE /api/v1/conversations/{id}write scope. Returns 204 No Content with an empty body on success.
This is a soft delete — the conversation is hidden from list responses (and from the dashboard inbox) but transcripts, recordings, and analytics are preserved. Pass include_deleted=true on List conversations to surface deleted records, and PATCH with deleted: false is not supported via the API; restoration is dashboard-only.
Example
List messages in a conversation
GET /api/v1/conversations/{id}/messagesorder=asc) — the natural read order for a transcript.
Query parameters
| Param | Type | Description |
|---|---|---|
role | string | Filter to messages from a single role — e.g. user, assistant, human, tool |
created_after | string (ISO 8601) | Created at or after this timestamp |
created_before | string (ISO 8601) | Created at or before this timestamp |
order | string | asc (default) or desc |
page | integer | See Pagination |
page_size | integer | See Pagination |
Example
List a contact’s conversations
GET /api/v1/contacts/{contact_id}/conversationsQuery parameters
| Param | Type | Description |
|---|---|---|
include_deleted | boolean | Pass true to include soft-deleted conversations |
page | integer | See Pagination |
page_size | integer | See Pagination |
Example
Common patterns
Sync new conversations to a data warehouse
Poll for conversations that have started since your last sync.Pull a full transcript
Find every chat a customer has had with you
Auto-assign new conversations from your CRM
Combine List conversations with Update a conversation to route inbound chats to the right rep. Filter for unassigned, in-progress conversations and PATCH each one with the rightassigned_to.

