Skip to main content

Conversations

List Conversations​

Returns a paginated list of all conversations for a given chatbot.

GET /api/dev/v1/chatbots/{chatbot_id}/conversations
Authorization: Bearer <api-key>

Filter Parameters

ParameterTypeDescription
statusstringFilter by conversation status. One of: ACTIVE, CLOSED, ARCHIVED, HANDOFF_PENDING, AGENT_ACTIVE.
channelstringFilter by channel (e.g. whatsapp, web, sms, api).
start_timestringFilter conversations created at or after this time (ISO 8601, e.g. 2026-01-01T00:00:00Z).
end_timestringFilter conversations created at or before this time (ISO 8601).

Pagination Parameters

ParameterTypeDefaultDescription
limitinteger50Page size. Min 1, max 67.
cursorstring-Pagination cursor from a previous response.
curl -X GET "https://developers.sarufi.io/api/dev/v1/chatbots/<chatbot-id>/conversations?status=ACTIVE&channel=whatsapp&limit=25" \
-H "Authorization: Bearer <your-api-key>"

Response - 200 OK

{
"count": 1,
"conversations": [
{
"id": "01JPQ...",
"chatbot_id": "01JMXYZ...",
"user_phone": "+255712345678",
"contact_name": "Lorem Ipsum",
"channel": "whatsapp",
"status": "ACTIVE",
"last_message_id": "01JRS...",
"last_message_at": "2026-02-18T14:35:00Z",
"last_message_preview": "Thanks for your help!",
"unread_count": 2,
"created_at": "2026-02-18T14:22:00Z",
"updated_at": "2026-02-18T14:35:00Z"
}
],
"next_cursor": "eyJpZCI6IjAxSlBRIn0="
}

Get Conversation​

Retrieves a single conversation by ID.

GET /api/dev/v1/chatbots/{chatbot_id}/conversations/{conversation_id}
Authorization: Bearer <api-key>
curl -X GET https://developers.sarufi.io/api/dev/v1/chatbots/<chatbot-id>/conversations/<conversation-id> \
-H "Authorization: Bearer <your-api-key>"

Response - 200 OK - returns a single ConversationRecord (same shape as the list items above).


Get Conversation Messages​

Returns messages for a conversation, ordered oldest first.

GET /api/dev/v1/chatbots/{chatbot_id}/conversations/{conversation_id}/messages
Authorization: Bearer <api-key>

Pagination Parameters

ParameterTypeDefaultDescription
limitinteger50Page size. Min 1, max 67.
cursorstring-Pagination cursor from a previous response.
curl -X GET "https://developers.sarufi.io/api/dev/v1/chatbots/<chatbot-id>/conversations/<conversation-id>/messages?limit=25" \
-H "Authorization: Bearer <your-api-key>"

Response - 200 OK

The wrapper carries count, total, page, limit, pages, next_cursor and messages. Each entry in messages is one stored turn. The response.messages array holds the same shapes as the Chat API send-message response.

{
"count": 1,
"total": 1,
"page": 1,
"limit": 25,
"pages": 1,
"next_cursor": null,
"messages": [
{
"id": "01K5M2Q8Z7C3V9R1T4Y6W0B2NF",
"conversation_id": "01K5M2Q8Z7C3V9R1T4Y6W0B2NE",
"message": { "text": "hi" },
"response": {
"messages": [
{ "type": "TEXT", "text": "Lorem ipsum dolor sit amet, welcome!" },
{
"type": "BUTTONS",
"text": "Choose an option.",
"buttons": [
{ "id": "view_products", "title": "Products" },
{ "id": "support_menu", "title": "Support" }
]
}
]
},
"message_type": "text",
"responder": "BOT",
"received_at": "2026-09-22T10:40:01+00:00",
"responded_at": "2026-09-22T10:40:02+00:00",
"status": "delivered",
"created_at": "2026-09-22T10:40:01+00:00",
"media": null
}
]
}

Conversation Object​

FieldTypeDescription
idstringConversation ULID.
chatbot_idstringParent chatbot ID.
user_phonestringUser phone number (e.g. +255712345678 for WhatsApp).
contact_namestring | nullContact display name, if available.
channelstringIntegration channel: whatsapp, web, sms, api.
statusstringConversation status: ACTIVE, CLOSED, ARCHIVED, HANDOFF_PENDING, AGENT_ACTIVE.
last_message_idstring | nullID of the last message in the conversation.
last_message_atstringTimestamp of the most recent message.
last_message_previewstring | nullPreview text of the last message.
unread_countintegerNumber of unread messages.
created_atstringWhen the conversation was created.
updated_atstring | nullWhen the conversation was last updated.

Message Object​

FieldTypeDescription
idstringULID of the turn.
conversation_idstringParent conversation ID.
messageobject | nullWhat the user sent.
responseobject | nullWhat the bot replied. Its messages array holds the same shapes as the Chat API send-message response.
message_typestringType of the user's message.
responderstringWho responded: BOT or HUMAN.
received_atstringISO 8601. When the user message was received.
responded_atstring | nullISO 8601. When the response was sent.
statusstringMessage status. Includes the WhatsApp delivery tick once one arrives.
created_atstringISO 8601. When the record was created.
mediaobject | nullMedia the user sent: type, url, mime_type, caption, filename, transcript. Never describes bot messages.
Older history rows

Rows recorded before 2026-09-22 may contain combined bot messages. See History of combined messages for how they are returned.

Want to chat with your bot via API?

Use the Chat API to create sessions and send messages programmatically. Conversations created via the Chat API appear here with channel=api.