openapi: 3.0.0
info:
title: Bots messages API
description: "<p>Bots are conversational assistants designed to automate repetitive tasks and manage simple user interactions. Their behavior is fully customizable through predefined Bot Handlers, which are activated by specific actions or through Webhooks that communicate with your own external server.</p> <p>For more information about Bots, please refer to the <b><a href=\"https://www.zoho.com/cliq/help/platform/bots.html\" target=\"_blank\">Bots Help Documentation</a></b>.</p> <p><b>Bot Handlers</b></p> <ul>\n <li>Bot Handlers are the building blocks of a bot's functionality. Each handler is associated with a specific trigger event, such as receiving a direct message, being @mentioned in a channel, or a user subscribing to the bot.</li>\n <li>When the trigger event occurs, the corresponding handler executes it's script to perform actions like sending messages, making API calls, or updating data.</li>\n <li>By configuring different handlers, you can create bots that respond intelligently to various user interactions and automate complex workflows within Zoho Cliq.</li>\n</ul> <p><b>Types of Bot Handlers</b></p> <table style=\"border-collapse: collapse; width: 100%;\">\n <tr>\n <th style=\"padding: 8px; text-align: left; border: 1px solid #ddd;\">Handler</th>\n <th style=\"padding: 8px; text-align: left; border: 1px solid #ddd;\">Description</th>\n </tr>\n <tr>\n <td style=\"padding: 8px; border: 1px solid #ddd;\">Menu Handler</td>\n <td style=\"padding: 8px; border: 1px solid #ddd;\">Adds up to 5 quick-action items to the bot's chat menu. Triggered when a user interacts with the menu.</td>\n </tr>\n <tr>\n <td style=\"padding: 8px; border: 1px solid #ddd;\">Message Handler</td>\n <td style=\"padding: 8px; border: 1px solid #ddd;\">Triggered when the bot receives a message.</td>\n </tr>\n <tr>\n <td style=\"padding: 8px; border: 1px solid #ddd;\">Welcome Handler</td>\n <td style=\"padding: 8px; border: 1px solid #ddd;\">Defines the greeting message sent when a user subscribes to the bot.</td>\n </tr>\n <tr>\n <td style=\"padding: 8px; border: 1px solid #ddd;\">Mention Handler</td>\n <td style=\"padding: 8px; border: 1px solid #ddd;\">Triggered when the bot is @mentioned in a chat or channel.</td>\n </tr>\n <tr>\n <td style=\"padding: 8px; border: 1px solid #ddd;\">Incoming Webhook Handler</td>\n <td style=\"padding: 8px; border: 1px solid #ddd;\">Allows external services to post messages into the bot via outgoing webhooks.</td>\n </tr>\n <tr>\n <td style=\"padding: 8px; border: 1px solid #ddd;\">Context Handler</td>\n <td style=\"padding: 8px; border: 1px solid #ddd;\">Manages multi-turn conversations, maintaining context across a user's interaction with the bot.</td>\n </tr>\n</table> <p><b>What you can do with the Bots API?</b></p> <p>With the Bots API, you can retrieve information about a specific bot, list all bots within your organization, manage configurations specific to handlers, trigger bot calls programmatically, manage subscribers, and much more.</p> <p>Each bot has an <code>execution_type</code> that defines how its handlers run when a trigger event occurs. The Bots API allows developers to create two types of bots:</p> <p id=\"deluge-bots\"><b>Deluge Bots (default)</b><br> Deluge bot executes handler logic using Zoho's Deluge scripting language, hosted entirely within the Zoho Cliq Developer platform, where no external server is required.</p> <ul>\n <li>If <code>execution_type</code> is not specified during bot creation, it defaults to deluge.</li>\n <li>Handler logic is defined as a script field (Deluge source code) when creating or updating handlers.</li>\n <li>Suitable for teams that want to build and manage bot logic entirely within Zoho's ecosystem.</li>\n</ul> <p id=\"webhook-bots\"><b>Webhook Bots</b><br> A Webhook bot delegates all handler execution to your own external server. When a trigger event fires, Zoho Cliq sends an HTTP POST request to the <code>execution_url</code> you configure, and your server processes the event and returns a response.</p> <ul>\n <li>To create a Webhook bot, set <code>execution_type</code> to webhook during bot creation and provide the <code>execution_url</code> where event payloads should be sent.</li>\n <li>Your server must be publicly accessible and able to handle incoming POST requests from Zoho Cliq.</li>\n <li>Ideal for teams seeking complete control over bot logic and possessing the resources to manage an external server. Also suitable for integrations requiring access to external databases, third-party APIs, or custom business logic that cannot be executed in Deluge.</li>\n</ul>\n"
contact: {}
version: 1.0.0
servers:
- url: https://cliq.zoho.com/api/v3
description: Zoho Cliq US DC
tags:
- name: messages
description: Messages Module
paths:
/chats/{CHAT_ID}/messagess:
delete:
summary: Delete multiple messages
operationId: deleteMultipleMessagesV3
description: "Deletes up to 25 messages in a chat in a single request. Returns a per-message result indicating success or failure for each ID.<br><br>\nAdmins deleting messages on behalf of other users must supply a <b>reason</b>(an optional <b>comment</b>) can also be provided.\n<br><br>\n<p>\n <b>Threshold limit</b>: 50 requests per min per user<br>\n Number of API calls allowed within a minute.<br><br>\n <b>Lock period</b>: 5 minutes<br>Wait time before consecutive API requests.<br>\n</p>\n<details style=\"margin:16px 0 8px 0; border:1px solid rgba(148,163,184,0.5); border-radius:8px; font-family:inherit;\" ontoggle=\"this.querySelector('.err-toggle-hint').textContent=this.open?'Click to collapse':'Click to expand'\">\n <summary style=\"cursor:pointer; padding:11px 16px; font-weight:600; background:rgba(148,163,184,0.1); list-style:none; display:flex; align-items:center; gap:8px; user-select:none; border-radius:8px;\">\n <span style=\"display:inline-flex; align-items:center; justify-content:center; width:20px; height:20px; background:rgba(239,68,68,0.15); border-radius:50%; font-size:12px; font-weight:700; color:#ef4444; flex-shrink:0;\">!</span>\n Possible Error Codes\n <span class=\"err-toggle-hint\" style=\"margin-left:auto; font-weight:400; opacity:0.45; font-size:0.8em; letter-spacing:0.01em;\">Click to expand</span>\n </summary>\n <div style=\"padding:14px 16px 16px 16px;\">\n <div style=\"border-radius:6px; border:1px solid rgba(148,163,184,0.35);\">\n <table style=\"border-collapse:collapse; width:100%; font-family:inherit; font-size:0.9em;\">\n <thead>\n <tr>\n <th style=\"padding:10px 18px; text-align:center; background:rgba(148,163,184,0.15); border-bottom:1px solid rgba(148,163,184,0.35); border-right:1px solid rgba(148,163,184,0.35); font-weight:600; width:45%;\">Error Code</th>\n <th style=\"padding:10px 18px; text-align:center; background:rgba(148,163,184,0.15); border-bottom:1px solid rgba(148,163,184,0.35); font-weight:600; width:55%;\">Description</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td style=\"padding:10px 18px; border-bottom:1px solid rgba(148,163,184,0.2); border-right:1px solid rgba(148,163,184,0.25); vertical-align:middle;\"><span style=\"display:inline-block; background:rgba(239,68,68,0.12); color:#ef4444; padding:3px 10px; border-radius:4px; font-family:monospace; font-size:0.82em; line-height:1.6; word-break:break-all;\">message_delete_limit_exceeded</span></td>\n <td style=\"padding:10px 18px; border-bottom:1px solid rgba(148,163,184,0.2);\">You can only delete up to 25 messages at once.</td>\n </tr>\n <tr style=\"background:rgba(148,163,184,0.05);\">\n <td style=\"padding:10px 18px; border-bottom:1px solid rgba(148,163,184,0.2); border-right:1px solid rgba(148,163,184,0.25); vertical-align:middle;\"><span style=\"display:inline-block; background:rgba(239,68,68,0.12); color:#ef4444; padding:3px 10px; border-radius:4px; font-family:monospace; font-size:0.82em; line-height:1.6; word-break:break-all;\">invalid_parameters</span></td>\n <td style=\"padding:10px 18px; border-bottom:1px solid rgba(148,163,184,0.2);\">The message_ids parameter is invalid or empty.</td>\n </tr>\n <tr>\n <td style=\"padding:10px 18px; border-bottom:1px solid rgba(148,163,184,0.2); border-right:1px solid rgba(148,163,184,0.25); vertical-align:middle;\"><span style=\"display:inline-block; background:rgba(239,68,68,0.12); color:#ef4444; padding:3px 10px; border-radius:4px; font-family:monospace; font-size:0.82em; line-height:1.6; word-break:break-all;\">invalid_delete_reason</span></td>\n <td style=\"padding:10px 18px; border-bottom:1px solid rgba(148,163,184,0.2);\">The provided reason for deletion is not valid.</td>\n </tr>\n <tr style=\"background:rgba(148,163,184,0.05);\">\n <td style=\"padding:10px 18px; border-bottom:1px solid rgba(148,163,184,0.2); border-right:1px solid rgba(148,163,184,0.25); vertical-align:middle;\"><span style=\"display:inline-block; background:rgba(239,68,68,0.12); color:#ef4444; padding:3px 10px; border-radius:4px; font-family:monospace; font-size:0.82em; line-height:1.6; word-break:break-all;\">access_denied</span></td>\n <td style=\"padding:10px 18px; border-bottom:1px solid rgba(148,163,184,0.2);\">You do not have permission to delete one or more of the selected messages.</td>\n </tr>\n <tr>\n <td style=\"padding:10px 18px; border-bottom:1px solid rgba(148,163,184,0.2); border-right:1px solid rgba(148,163,184,0.25); vertical-align:middle;\"><span style=\"display:inline-block; background:rgba(239,68,68,0.12); color:#ef4444; padding:3px 10px; border-radius:4px; font-family:monospace; font-size:0.82em; line-height:1.6; word-break:break-all;\">message_delete_timeout</span></td>\n <td style=\"padding:10px 18px; border-bottom:1px solid rgba(148,163,184,0.2);\">The time limit to delete one or more of these messages has expired.</td>\n </tr>\n <tr style=\"background:rgba(148,163,184,0.05);\">\n <td style=\"padding:10px 18px; border-bottom:1px solid rgba(148,163,184,0.2); border-right:1px solid rgba(148,163,184,0.25); vertical-align:middle;\"><span style=\"display:inline-block; background:rgba(239,68,68,0.12); color:#ef4444; padding:3px 10px; border-radius:4px; font-family:monospace; font-size:0.82em; line-height:1.6; word-break:break-all;\">message_not_found</span></td>\n <td style=\"padding:10px 18px; border-bottom:1px solid rgba(148,163,184,0.2);\">Requested message could not be found.</td>\n </tr>\n <tr>\n <td style=\"padding:10px 18px; border-right:1px solid rgba(148,163,184,0.25); vertical-align:middle;\"><span style=\"display:inline-block; background:rgba(239,68,68,0.12); color:#ef4444; padding:3px 10px; border-radius:4px; font-family:monospace; font-size:0.82em; line-height:1.6; word-break:break-all;\">chat_not_found</span></td>\n <td style=\"padding:10px 18px;\">The requested chat does not exist or you are not a participant.</td>\n </tr>\n </tbody>\n </table>\n </div>\n <div style=\"background:rgba(245,158,11,0.08); border:1px solid rgba(245,158,11,0.4); border-left:4px solid #f59e0b; padding:12px 16px; border-radius:0 6px 6px 0; margin-top:14px; overflow:hidden;\">\n <b style=\"color:#d97706; font-size:0.88em; display:block; margin-bottom:6px;\">Error Response Format</b>\n <p style=\"margin:0 0 8px 0; font-size:0.85em; opacity:0.75;\">When an error occurs, the API returns a JSON response in this format:</p>\n <code style=\"display:block; background:rgba(245,158,11,0.1); border:1px solid rgba(245,158,11,0.3); padding:8px 12px; border-radius:4px; font-size:0.75em; word-break:break-all;\">{\"message\": \"A human-readable description of the error.\", \"code\": \"error_code\"}</code>\n <p style=\"margin:8px 0 0 0; font-size:0.85em; opacity:0.75;\">where <code style=\"background:rgba(245,158,11,0.1); padding:1px 5px; border-radius:3px;\">code</code> is the error identifier (as listed above) and <code style=\"background:rgba(245,158,11,0.1); padding:1px 5px; border-radius:3px;\">message</code> is a human-readable explanation of what went wrong.</p>\n </div>\n </div>\n</details>\n"
parameters:
- name: CHAT_ID
in: path
required: true
schema:
type: string
example: CHAT_ID
description: The unique identifier of the chat. To learn how to retrieve this ID, see <a href="/cliq/help/restapi/v3/glossary/#CHAT_ID">CHAT_ID</a> in the Glossary page.
- name: message_ids
in: query
required: true
schema:
type: string
description: 'Comma-separated list of message IDs to delete.<br>
<b>Maximum of 25 IDs allowed.</b>
'
- name: reason
in: query
required: false
schema:
type: string
enum:
- irrelevant_information
- obscene_content
- others
description: "Reason for deletion when an admin is deleting messages on behalf of other users.<br>\n<b>Allowed values:</b><br>\n<ul>\n <li><code>irrelevant_information</code>: The message contains information that is no longer relevant.</li>\n <li><code>obscene_content</code>: The message contains inappropriate or offensive content.</li>\n <li><code>others</code>: Any other reason not covered by the above options.</li> \n</ul>\n"
- name: comment
in: query
required: false
schema:
type: string
maxLength: 250
description: 'Optional comment providing additional context for the deletion reason when an admin is deleting messages on behalf of other users.<br>
<b>Maximum length</b>: 250 characters.
'
responses:
'200':
description: The request was successfully completed. Returns a per-message result.
content:
application/json:
examples:
all_success:
summary: All messages deleted successfully
value:
type: message.delete_result
data:
- id: '1773813859592_51531973059'
status: success
- id: '1773813860210_51531973060'
status: success
- id: '1773813861300_51531973061'
status: success
partial_failure:
summary: Partial success - one message failed
value:
type: message.delete_result
data:
- id: '1773813859592_51531973059'
status: success
- id: '1773813860210_51531973060'
status: success
- id: '1773813861300_51531973061'
status: failed
error:
code: access_denied
message: You do not have permission to delete this message.
schema:
type: object
properties:
type:
type: string
example: message.delete_result
data:
type: array
items:
type: object
properties:
id:
type: string
status:
type: string
enum:
- success
- failed
error:
type: object
properties:
code:
type: string
message:
type: string
'400':
description: Bad Request.
content:
application/json:
examples:
limit_exceeded:
summary: Too many message IDs
value:
code: message_delete_limit_exceeded
message: You can only delete up to 25 messages at once.
invalid_params:
summary: Invalid or empty message_ids
value:
code: invalid_parameters
message: The message_ids parameter is invalid or empty.
invalid_reason:
summary: Invalid delete reason
value:
code: invalid_delete_reason
message: The provided reason for deletion is not valid.
schema:
type: object
properties:
code:
type: string
message:
type: string
'401':
description: Unauthorized.
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: Request was rejected because of invalid AuthToken.
'403':
description: Forbidden.
content:
application/json:
examples:
access_denied:
summary: Permission denied
value:
code: access_denied
message: You do not have permission to delete one or more of the selected messages.
delete_timeout:
summary: Delete time limit expired
value:
code: message_delete_timeout
message: The time limit to delete one or more of these messages has expired.
schema:
type: object
properties:
code:
type: string
message:
type: string
'404':
description: Not Found.
content:
application/json:
examples:
message_not_found:
summary: Message not found
value:
code: message_not_found
message: Requested message could not be found.
chat_not_found:
summary: Chat not found
value:
code: chat_not_found
message: The requested chat does not exist or you are not a participant.
schema:
type: object
properties:
code:
type: string
message:
type: string
'429':
description: Too many requests.
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: Too many requests within a certain time frame.
'500':
description: Internal Server Error.
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: Cliq server encountered an error which prevents it from fulfilling the request.
security:
- Cliq_Auth:
- ZohoCliq.Messages.DELETE
tags:
- messages
/channelsbyname/{CHANNEL_UNIQUE_NAME}/messages:
post:
summary: Post message in a channel with CHANNEL_UNIQUE_NAME
operationId: postMessageInChannelByChannelUniqueName
description: "Use this API to post a message in a channel using its <b>CHANNEL_UNIQUE_NAME</b>.\n<br><br>\nYou can also post a message using the following alternative endpoint:<br>\n<ul>\n <li><a href=\"#operation/postMessageInChannelByChannelId\"><code>POST /channels/{CHANNEL_ID}/messages</code></a> - Use the <b>CHANNEL_ID</b> of the channel.</li>\n</ul>\n<br><br> \n<p>\n <b>Threshold limit</b>: 50 requests per min per user<br>\n Number of API calls allowed within a minute.<br>\n This limit is per user, not per token — even if messages are sent using multiple OAuth tokens by the same user, all requests count toward this shared limit.<br><br>\n <b>Lock period</b>: 10 minutes<br>Wait time before consecutive API requests.<br>\n</p>\n"
parameters:
- name: CHANNEL_UNIQUE_NAME
in: path
description: Unique name of the channel. To learn how to retrieve this ID, see <a href="/cliq/help/restapi/v3/glossary/#CHANNEL_UNIQUE_NAME">CHANNEL_UNIQUE_NAME</a> in the Glossary page.
required: true
schema:
type: string
example: CHANNEL_UNIQUE_NAME
- name: bot_unique_name
in: query
description: Use this parameter to send a message in a channel as a bot. Note that the bot should already be a participant in the channel.
required: false
schema:
type: string
- name: appkey
in: query
description: 'Extension authentication key. Use this along with bot_unique_name when sending messages as an extension bot.
'
required: false
schema:
type: string
- name: mark_as_read
in: query
description: Use these APIs to mark the sent message as read for the user. By default, the message will be unread for the message posted by the user.
required: false
schema:
type: boolean
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/post-message-in-a-channel-request'
responses:
'200':
description: The request was successfully completed.
content:
application/json:
schema:
$ref: '#/components/schemas/post-message-in-a-channel-response'
'400':
description: Bad Request.
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: The request cannot be performed. Usually because of malformed parameter or missing parameter.
'401':
description: Unauthorized.
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: Request was rejected because of invalid AuthToken.
'403':
description: Forbidden.
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: The user does not have enough permission or possibly not an user of the respective organization to access the resource.
'404':
description: Invalid URL.
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: The URL you've sent is wrong. It's possible that the resource you've requested has been moved to another URL.
'405':
description: Method Not Allowed.
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: The requested resource does not support the HTTP method used. For example, requesting List of all customers API with PUT as the HTTP method.
'406':
description: Not Acceptable.
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: The response has been received but the requested response type is not supported by the browser.
'429':
description: Too many requests.
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: Too many requests within a certain time frame.
'500':
description: Internal Server Error.
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: Cliq server encountered an error which prevents it from fulfilling the request.
security:
- Cliq_Auth:
- ZohoCliq.Webhooks.CREATE
tags:
- messages
/channels/{CHANNEL_ID}/messages:
post:
summary: Post message in a channel with CHANNEL_ID
operationId: postMessageInChannelByChannelId
description: "Use this API to post a message in a channel using its <b>CHANNEL_ID</b>.\n<br><br>\nYou can also post a message using the following alternative endpoint:<br>\n<ul>\n <li><a href=\"#operation/postMessageInChannelByChannelUniqueName\"><code>POST /channelsbyname/{CHANNEL_UNIQUE_NAME}/messages</code></a> - Use the <b>CHANNEL_UNIQUE_NAME</b> of the channel.</li>\n</ul>\n<br><br>\n<p>\n <b>Threshold limit</b>: 50 requests per min per user<br>\n Number of API calls allowed within a minute.<br>\n This limit is per user, not per token — even if messages are sent using multiple OAuth tokens by the same user, all requests count toward this shared limit.<br><br>\n <b>Lock period</b>: 10 minutes<br>Wait time before consecutive API requests.<br>\n</p>\n"
parameters:
- name: CHANNEL_ID
in: path
description: ID of the channel. To learn how to retrieve this ID, see <a href="/cliq/help/restapi/v3/glossary/#CHANNEL_ID">CHANNEL_ID</a> in the Glossary page.
required: true
schema:
type: string
example: CHANNEL_ID
- name: bot_unique_name
in: query
description: Bot identifier for bot-sent messages. The bot must already be a participant in the channel.
required: false
schema:
type: string
pattern: ^[a-z]+$
- name: appkey
in: query
description: Extension authentication key. Use this along with bot_unique_name when sending messages as an extension bot.
required: false
schema:
type: string
- name: mark_as_read
in: query
description: Use these APIs to mark the sent message as read for the user. By default, the message will be unread for the message posted by the user.
required: false
schema:
type: boolean
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/post-message-in-a-channel-request'
responses:
'200':
description: The request was successfully completed.
content:
application/json:
schema:
$ref: '#/components/schemas/post-message-in-a-channel-response'
'400':
description: Bad Request.
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: The request cannot be performed. Usually because of malformed parameter or missing parameter.
'401':
description: Unauthorized.
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: Request was rejected because of invalid AuthToken.
'403':
description: Forbidden.
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: The user does not have enough permission or possibly not an user of the respective organization to access the resource.
'404':
description: Invalid URL.
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: The URL you've sent is wrong. It's possible that the resource you've requested has been moved to another URL.
'405':
description: Method Not Allowed.
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: The requested resource does not support the HTTP method used. For example, requesting List of all customers API with PUT as the HTTP method.
'406':
description: Not Acceptable.
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: The response has been received but the requested response type is not supported by the browser.
'429':
description: Too many requests.
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: Too many requests within a certain time frame.
'500':
description: Internal Server Error.
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: Cliq server encountered an error which prevents it from fulfilling the request.
security:
- Cliq_Auth:
- ZohoCliq.Webhooks.CREATE
tags:
- messages
/chats/{CHAT_ID}/messages:
post:
summary: Post message in chat
operationId: Post message in chat
description: "To post message in a chat (or thread), the chat_id (thread_id in case of threads) can be used in the request URL.\n<br><br>\n<p>\n <b>Threshold limit</b>: 50 requests per min per user<br>\n Number of API calls allowed within a minute.<br>\n This limit is per user, not per token — even if messages are sent using multiple OAuth tokens by the same user, all requests count toward this shared limit.<br><br>\n <b>Lock period</b>: 10 minutes<br>Wait time before consecutive API requests.<br>\n</p> \n"
parameters:
- name: CHAT_ID
in: path
required: true
schema:
type: string
example: CHAT_ID
description: The ID of the chat where the message should be posted. To learn how to retrieve this ID, see <a href="/cliq/help/restapi/v3/glossary/#CHAT_ID">CHAT_ID</a> in the Glossary page.
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/post-message-in-chat-request'
responses:
'200':
description: The request was successfully completed.
content:
application/json:
schema:
$ref: '#/components/schemas/post-message-in-a-chat-response'
'400':
description: Bad Request.
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: The request cannot be performed. Usually because of malformed parameter or missing parameter.
'401':
description: Unauthorized.
content:
application/json:
schema:
type: object
properties:
message:
typ
# --- truncated at 32 KB (67 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/zoho-cliq/refs/heads/main/openapi/zoho-cliq-messages-api-openapi.yml