Scopes and endpoints: conversations and messages
Last updated: 11 November 2026 · 11 min read
Scopes for reading, changing and assigning conversations and for sending messages. A conversation's number in the API ({conversation_id}) is the number the dashboard shows. In sync objects, though, id is the internal ID and the dashboard number is in number.
Steps
-
1
How to read this article
- Paths follow
https://api.clomni.ai/v1:GET /v1/agentsmeanshttps://api.clomni.ai/v1/agents. Paths have no workspace ID, because a token belongs to one workspace. - Every request carries the
Authorization: Bearer clomni_pat_xxxheader. How to get a token: Tokens and authentication in the Developer API. - Risk: low (no personal data), medium (reads customer data or changes internal data), high (sends to customers, deletes, bulk exports, changes live settings).
- Every scope goes through review, in public apps too. More: Review: checking scopes and rejection reasons.
- "Also grants":
writeandmanagegrant thereadof the same resource.send,delete,publish,assignandrungrant nothing. - When an endpoint lists several scopes, any one of them is enough. Without the scope the API answers 403
insufficient_scopewithrequired_scopesin the body. - Every POST takes an
Idempotency-Keyheader, so a repeated request is not run twice.
- Paths follow
-
2
Read conversations (conversations:read)
Reads conversations: status, assignee, team, labels, custom attributes, last message. List, search, filter, counts and sync (
/v1/sync/conversations) work with it. Theconversation.*webhooks need it too. For the full message text you needmessages:readas well.- Risk: medium.
- Review: goes through review. Say exactly which data you use with it, when and why.
- Also grants: nothing else.
Endpoints:
GET /v1/contacts/{contact_id}/conversations: List a contact's conversationsGET /v1/conversations: List conversationsPOST /v1/conversations/filter: Filter conversationsGET /v1/conversations/meta: Count conversations by assignmentGET /v1/conversations/search: Search conversationsGET /v1/conversations/{conversation_id}: Get a conversationGET /v1/conversations/{conversation_id}/labels: List a conversation's labelsGET /v1/conversations/{conversation_id}/participants: List a conversation's participantsGET /v1/search/conversations: Search conversations (global search)GET /v1/sync/conversations: Sync conversations
Example:
curl "https://api.clomni.ai/v1/conversations?status=open&assignee_type=unassigned&page=1" \ -H "Authorization: Bearer clomni_pat_xxx"
curl "https://api.clomni.ai/v1/sync/conversations?updated_since=2026-11-10T00:00:00Z&limit=100" \ -H "Authorization: Bearer clomni_pat_xxx"
-
3
Edit conversations (conversations:write)
Changes a conversation's status (open, resolved, pending, snoozed), priority, labels and custom attributes, starts new conversations, marks them read or unread. Starting a conversation with a first message also needs
messages:send. This scope works on the test channel before its review.- Risk: medium.
- Review: goes through review. Say exactly which data you use with it, when and why.
- Also grants:
conversations:read.
Endpoints:
POST /v1/conversations: Start a conversationPATCH /v1/conversations/{conversation_id}: Update a conversationPOST /v1/conversations/{conversation_id}/custom_attributes: Set a conversation's custom attributesPOST /v1/conversations/{conversation_id}/labels: Set a conversation's labelsPOST /v1/conversations/{conversation_id}/mute: Mute a conversationPOST /v1/conversations/{conversation_id}/toggle_priority: Change a conversation's priorityPOST /v1/conversations/{conversation_id}/toggle_status: Change a conversation's statusPOST /v1/conversations/{conversation_id}/toggle_typing_status: Show or hide the typing indicatorPOST /v1/conversations/{conversation_id}/unmute: Unmute a conversationPOST /v1/conversations/{conversation_id}/unread: Mark a conversation as unreadPOST /v1/conversations/{conversation_id}/update_last_seen: Mark a conversation as readPOST /v1/test_channel/messages: Simulate a customer message (test channel).messages:sendorconversations:writeis enough, and works on the test channel before the review
Example:
curl -X POST "https://api.clomni.ai/v1/conversations/1042/toggle_status" \ -H "Authorization: Bearer clomni_pat_xxx" \ -H "Content-Type: application/json" \ -d '{"status": "resolved"}'curl -X POST "https://api.clomni.ai/v1/conversations/1042/labels" \ -H "Authorization: Bearer clomni_pat_xxx" \ -H "Content-Type: application/json" \ -d '{"labels": ["order", "vip"]}' -
4
Assign conversations (conversations:assign)
Assigns a conversation to an agent or a team, adds participants, takes a conversation for the token's owner. It does not grant reading: the conversation list needs
conversations:read.- Risk: medium.
- Review: goes through review. Say exactly which data you use with it, when and why.
- Also grants: nothing else.
Endpoints:
POST /v1/conversations/{conversation_id}/assignments: Assign a conversationPOST /v1/conversations/{conversation_id}/participants: Add participants to a conversationPATCH /v1/conversations/{conversation_id}/participants: Replace a conversation's participantsDELETE /v1/conversations/{conversation_id}/participants: Remove participants from a conversationPOST /v1/conversations/{conversation_id}/take: Assign a conversation to the token's user
Example:
curl -X POST "https://api.clomni.ai/v1/conversations/1042/assignments" \ -H "Authorization: Bearer clomni_pat_xxx" \ -H "Content-Type: application/json" \ -d '{"assignee_id": 12}'curl -X POST "https://api.clomni.ai/v1/conversations/1042/assignments" \ -H "Authorization: Bearer clomni_pat_xxx" \ -H "Content-Type: application/json" \ -d '{"team_id": 3}' -
5
Delete conversations (conversations:delete)
Deletes a conversation. It cannot be undone, so it is high risk. To archive, resolve the conversation instead (
conversations:write).- Risk: high.
- Review: goes through review and gets a closer look. A detailed explanation and a short video of the feature are needed; the target is 2 working days.
- Also grants: nothing else.
Endpoints:
DELETE /v1/conversations/{conversation_id}: Delete a conversation
Example:
curl -X DELETE "https://api.clomni.ai/v1/conversations/1042" \ -H "Authorization: Bearer clomni_pat_xxx"
-
6
Read messages (messages:read)
Reads message text and files: a conversation's messages, its files, message search, message sync, a WhatsApp message's status and the 24 hour window. The
message.createdandmessage.updatedwebhooks need this scope too.- Risk: medium.
- Review: goes through review. Say exactly which data you use with it, when and why.
- Also grants: nothing else.
Endpoints:
GET /v1/conversations/{conversation_id}/attachments: List a conversation's filesGET /v1/conversations/{conversation_id}/messages: List messages in a conversationGET /v1/search/messages: Search messagesGET /v1/sync/messages: Sync messagesGET /v1/whatsapp/messages/window: Check the 24 hour window for a numberGET /v1/whatsapp/messages/{message_id}: Get a WhatsApp message's status
Example:
curl "https://api.clomni.ai/v1/conversations/1042/messages" \ -H "Authorization: Bearer clomni_pat_xxx"
curl "https://api.clomni.ai/v1/sync/messages?updated_since=2026-11-10T00:00:00Z&limit=100" \ -H "Authorization: Bearer clomni_pat_xxx"
-
7
Send messages (messages:send)
Sends messages to customers on any channel: replies in a conversation, edits, reactions, retrying a failed message, WhatsApp text to a number. Sending does not grant reading: to see the conversation you also need
messages:read. A conversation message withprivate: trueis a private note and needsnotes:write; one withtemplate_paramsneedsmessages:send.template. This scope works on the test channel before its review.- Risk: high.
- Review: goes through review and gets a closer look. A detailed explanation and a short video of the feature are needed; the target is 2 working days. Also say who creates the messages (a person, AI, an automation), roughly how many go out a day and how consent for marketing messages is collected.
- Also grants: nothing else.
Endpoints:
POST /v1/conversations/{conversation_id}/messages: Send a message or add a private note.private: trueneedsnotes:write,template_paramsneedsmessages:send.templatePATCH /v1/conversations/{conversation_id}/messages/{message_id}: Report a message's delivery status (API channel)PATCH /v1/conversations/{conversation_id}/messages/{message_id}/edit_content: Edit a sent messagePOST /v1/conversations/{conversation_id}/messages/{message_id}/reaction: React to a messagePOST /v1/conversations/{conversation_id}/messages/{message_id}/retry: Retry a failed messagePOST /v1/test_channel/messages: Simulate a customer message (test channel).messages:sendorconversations:writeis enough, and works on the test channel before the reviewPOST /v1/whatsapp/messages: Send a WhatsApp message to a number.templateneedsmessages:send.template,fallback_templateneeds bothmessages:sendandmessages:send.template
Example:
curl -X POST "https://api.clomni.ai/v1/conversations/1042/messages" \ -H "Authorization: Bearer clomni_pat_xxx" \ -H "Idempotency-Key: 6f1c2a9e-3b7d-4f0a-9c55-0e8b1d2a7f41" \ -H "Content-Type: application/json" \ -d '{"content": "Hello, your order goes to the courier today.", "content_attributes": {"client_echo_id": "crm-7f3a9c"}}' -
8
Send template messages (messages:send.template)
Sends WhatsApp template messages: works outside the 24 hour window too, and Meta charges for every template. Required when
POST /v1/whatsapp/messageshastemplate, or a conversation message hastemplate_params. Withfallback_templateit is needed together withmessages:send. It also opens the list of approved templates.- Risk: high.
- Review: goes through review and gets a closer look. A detailed explanation and a short video of the feature are needed; the target is 2 working days. Also say who creates the messages (a person, AI, an automation), roughly how many go out a day and how consent for marketing messages is collected.
- Also grants: nothing else.
Endpoints:
POST /v1/whatsapp/messages: Send a WhatsApp message to a number.templateneedsmessages:send.template,fallback_templateneeds bothmessages:sendandmessages:send.templateGET /v1/whatsapp/templates: List approved WhatsApp templates. Also opens withinboxes:read
Example:
curl "https://api.clomni.ai/v1/whatsapp/templates?channel_id=5" \ -H "Authorization: Bearer clomni_pat_xxx"
curl -X POST "https://api.clomni.ai/v1/whatsapp/messages" \ -H "Authorization: Bearer clomni_pat_xxx" \ -H "Content-Type: application/json" \ -d '{"channel_id": 5, "phone_number": "+994501234567", "template": {"name": "order_ready", "language": "az", "parameters": {"body": {"1": "Leyla", "2": "A-1042"}}}, "source_reference": "order-A-1042-ready"}' -
9
Delete messages (messages:delete)
Marks a message as deleted and removes its files. On WhatsApp QR the message is also revoked on the customer's phone.
- Risk: high.
- Review: goes through review and gets a closer look. A detailed explanation and a short video of the feature are needed; the target is 2 working days.
- Also grants: nothing else.
Endpoints:
DELETE /v1/conversations/{conversation_id}/messages/{message_id}: Delete a message
Example:
curl -X DELETE "https://api.clomni.ai/v1/conversations/1042/messages/51240" \ -H "Authorization: Bearer clomni_pat_xxx"
-
10
Write private notes (notes:write)
Adds a private note to a conversation (
private: true). The customer never sees it. Your CRM, order system or own bot uses it to leave a note for agents. Low risk.- Risk: low.
- Review: goes through review; low risk scopes are looked at quickly.
- Also grants: nothing else.
Endpoints:
POST /v1/conversations/{conversation_id}/messages: Send a message or add a private note.private: trueneedsnotes:write,template_paramsneedsmessages:send.template
Example:
curl -X POST "https://api.clomni.ai/v1/conversations/1042/messages" \ -H "Authorization: Bearer clomni_pat_xxx" \ -H "Content-Type: application/json" \ -d '{"content": "CRM: VIP customer, payment is late.", "private": true}' -
11
Related articles
- Which scopes you need: scopes and endpoints by what you want to do
- Recipe: show Clomni conversations in your own dashboard
- Recipe: send WhatsApp notifications and templates from your website
- Recipe: AI agent answers, the knowledge base and your own bot
- Using Developer API endpoints: examples, pagination, idempotency