openapi: 3.0.0
info:
title: Bots scheduledmessages API
description: "
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.
For more information about Bots, please refer to the Bots Help Documentation.
Bot Handlers
\n - 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.
\n - When the trigger event occurs, the corresponding handler executes it's script to perform actions like sending messages, making API calls, or updating data.
\n - By configuring different handlers, you can create bots that respond intelligently to various user interactions and automate complex workflows within Zoho Cliq.
\n
Types of Bot Handlers
\n \n | Handler | \n Description | \n
\n \n | Menu Handler | \n Adds up to 5 quick-action items to the bot's chat menu. Triggered when a user interacts with the menu. | \n
\n \n | Message Handler | \n Triggered when the bot receives a message. | \n
\n \n | Welcome Handler | \n Defines the greeting message sent when a user subscribes to the bot. | \n
\n \n | Mention Handler | \n Triggered when the bot is @mentioned in a chat or channel. | \n
\n \n | Incoming Webhook Handler | \n Allows external services to post messages into the bot via outgoing webhooks. | \n
\n \n | Context Handler | \n Manages multi-turn conversations, maintaining context across a user's interaction with the bot. | \n
\n
What you can do with the Bots API?
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.
Each bot has an execution_type that defines how its handlers run when a trigger event occurs. The Bots API allows developers to create two types of bots:
Deluge Bots (default)
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.
\n - If
execution_type is not specified during bot creation, it defaults to deluge. \n - Handler logic is defined as a script field (Deluge source code) when creating or updating handlers.
\n - Suitable for teams that want to build and manage bot logic entirely within Zoho's ecosystem.
\n
Webhook Bots
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 execution_url you configure, and your server processes the event and returns a response.
\n - To create a Webhook bot, set
execution_type to webhook during bot creation and provide the execution_url where event payloads should be sent. \n - Your server must be publicly accessible and able to handle incoming POST requests from Zoho Cliq.
\n - 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.
\n
\n"
contact: {}
version: 1.0.0
servers:
- url: https://cliq.zoho.com/api/v3
description: Zoho Cliq US DC
tags:
- name: scheduledmessages
description: Scheduled Messages Module
paths:
/scheduledmessages:
get:
summary: List all scheduled messages
operationId: listAllScheduledMessagesV3
description: "Retrieves all scheduled messages across all chats for the authenticated user. Use this to get a consolidated view of all pending time-based and status-based scheduled messages, with support for pagination and incremental updates.\n
\n\n Threshold limit: 20 requests per min per user
\n Number of API calls allowed within a minute.
\n Lock period: 10 minutes
\n Wait time before consecutive API requests.\n
\n"
tags:
- scheduledmessages
parameters:
- name: limit
in: query
required: false
description: 'Number of results per page. Default is 50.
Maximum limit: 100
'
schema:
type: integer
maximum: 200
default: 50
- name: next_token
in: query
required: false
description: Pagination cursor returned from a previous response. Pass this value to retrieve the next page of results.
schema:
type: string
- name: sync_token
in: query
required: false
description: Token from a previous response used to fetch only changes since the last sync. Pass this to retrieve only new or updated records instead of the full list.
schema:
type: string
responses:
'200':
description: Returns all scheduled messages. Mix of time-based and status-based messages across chats.
content:
application/json:
schema:
type: object
examples:
all_scheduled_messages:
summary: All scheduled messages across chats
value:
url: /api/v3/scheduledmessages
type: scheduledmessages
sync_token: NTB8LTF8MTkwMTMxODAwMDAxMjMxNDAyNQ==
data:
- id: 84fe7397-ab35-4aef-8bf7-944d688857af
timezone: Asia/Kolkata
created_time: '2026-05-29T04:27:40-07:00'
schedule_status: user_available
message:
sender:
name: Priya
id: '697322516'
type: text
content:
text: 'Hi Benjamin, just a quick nudge. Please update the approval status for Claim #EXP-2026-0412 when you are available. No rush, respond whenever you are free!'
is_pinned: false
creator:
name: Priya
id: '697322516'
- id: 49ba8eac-8709-478d-bab3-701466b3e270
timezone: Asia/Kolkata
created_time: '2026-05-29T04:28:44-07:00'
schedule_status: check_in
message:
sender:
name: Priya
id: '697322516'
type: text
content:
text: Good morning Alan! Just a check-in reminder, please update your pending expense claims before the daily finance standup. Any blockers, ping @financeTeam.
is_pinned: false
creator:
name: Priya
id: '697322516'
- id: de8518c4-ce33-46c1-9195-d7864b9f10ce
timezone: Asia/Kolkata
created_time: '2026-05-29T04:31:33-07:00'
time: '2026-06-06T21:00:00-07:00'
message:
sender:
name: Priya
id: '697322516'
type: file
content:
file_name: Expense Summary - Zylker.pdf
file_size: 61.05 KB
comment: Please find the attached Q2 Expense Summary report. Review before the finance sync on June 6 and flag any discrepancies to @financeTeam.
is_pinned: false
creator:
name: Priya
id: '697322516'
'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.
'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.READ
/chats/{CHAT_ID}/scheduledmessages:
get:
summary: List scheduled messages in a chat
operationId: listScheduledMessagesInChatV3
description: "Retrieves all scheduled messages within a specific chat or channel. Use this to inspect pending time-based and status-based messages for a particular conversation, with support for pagination and incremental updates.\n
\n\n Threshold limit: 20 requests per min per user
\n Number of API calls allowed within a minute.
\n Lock period: 10 minutes
\n Wait time before consecutive API requests.\n
\n"
tags:
- scheduledmessages
parameters:
- name: CHAT_ID
in: path
required: true
description: Unique identifier of the chat or channel. Use this to scope the scheduled messages retrieval to a specific conversation.
To learn how to retrieve this ID, see CHAT_ID in the Glossary page.
example: CHAT_ID
schema:
type: string
- name: limit
in: query
required: false
description: 'Number of results per page. Default is 50.
Maximum limit: 100
'
schema:
type: integer
maximum: 200
default: 50
- name: next_token
in: query
required: false
description: Pagination cursor returned from a previous response. Pass this value to retrieve the next page of results.
schema:
type: string
- name: sync_token
in: query
required: false
description: Token from a previous response used to fetch only changes since the last sync. Pass this to retrieve only new or updated records instead of the full list.
schema:
type: string
responses:
'200':
description: Scheduled messages retrieved successfully.
content:
application/json:
schema:
type: object
examples:
channel_with_file_message:
summary: Channel with file attachment message
value:
url: /api/v3/chats/CT_1424569695482328362_631836344/scheduledmessages
type: scheduledmessages
sync_token: NTB8MTc4MDM2NzQwMDAwMHwxOTAxMzE4MDAwMDEyNjUxMDAx
data:
- id: de8518c4-ce33-46c1-9195-d7864b9f10ce
timezone: Asia/Kolkata
created_time: '2026-05-29T04:31:33-07:00'
time: '2026-06-06T21:00:00-07:00'
message:
sender:
name: Priya
id: '697322516'
type: file
content:
file_name: Expense Summary - Zylker.pdf
file_size: 61.05 KB
comment: Please find the attached Q2 Expense Summary report. Review before the finance sync on June 6 and flag any discrepancies to @financeTeam.
is_pinned: false
creator:
name: Priya
id: '697322516'
dm_with_status_based_message:
summary: DM with status-based message
value:
url: /api/v3/chats/1424921584119739269/scheduledmessages
type: scheduledmessages
sync_token: NTB8MTc4MDA0OTAzNDg4MHw=
data:
- id: 84fe7397-ab35-4aef-8bf7-944d688857af
timezone: Asia/Kolkata
created_time: '2026-05-29T04:27:40-07:00'
schedule_status: user_available
message:
sender:
name: Priya
id: '697322516'
type: text
content:
text: 'Hi Benjamin, just a quick nudge. Please update the approval status for Claim #EXP-2026-0412 when you are available. No rush, respond whenever you are free!'
is_pinned: false
creator:
name: Priya
id: '697322516'
empty_chat:
summary: Empty chat
value:
url: /api/v3/chats/1608865438186287622/scheduledmessages
type: scheduledmessages
sync_token: NTB8MTc4MDA0OTAzNDg4MHw=
data: []
'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.
'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.READ
post:
summary: Send scheduled messages now
operationId: sendScheduledMessagesNowV3
description: "Immediately sends one or all pending scheduled messages in a chat without waiting for the scheduled time. Use this to manually trigger delivery of a specific message by ID, or all pending messages in the chat at once.\n
\n\n Threshold limit: 50 requests per min per user
\n Number of API calls allowed within a minute.
\n Lock period: 10 minutes
\n Wait time before consecutive API requests.\n
\n\n \n !\n Possible Error Codes\n Click to expand\n
\n \n
\n
\n \n \n | Error Code | \n Description | \n
\n \n \n \n | scheduled_msg_no_pending_msgs | \n No pending scheduled messages exist in this chat. | \n
\n \n | param_missing | \n A required parameter is missing from the request. | \n
\n \n
\n
\n
\n
Error Response Format\n
When an error occurs, the API returns a JSON response in this format:
\n
{\"message\": \"A human-readable description of the error.\", \"code\": \"error_code\"}\n
where code is the error identifier (as listed above) and message is a human-readable explanation of what went wrong.
\n
\n
\n \n"
tags:
- scheduledmessages
parameters:
- name: CHAT_ID
in: path
required: true
description: Unique identifier of the chat or channel. Determines which chat's scheduled messages are targeted for immediate delivery.
To learn how to retrieve this ID, see CHAT_ID in the Glossary page.
example: CHAT_ID
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- status
properties:
status:
type: string
enum:
- send
description: "Operation trigger to send messages immediately.
\nAllowed values:
\n\n send: Triggers immediate delivery of the specified scheduled message or all pending messages in the chat. \n
\n"
id:
type: string
description: 'Unique identifier of a specific scheduled message to send immediately. When provided, only that message is sent.
Omit this field and use apply_to instead to send all pending messages.
'
apply_to:
type: string
enum:
- all
description: "Scope of messages to send when no id is provided.
\nAllowed values:
\n\n all: Sends all pending scheduled messages in the chat immediately. \n
\n"
examples:
send_specific_message:
summary: Send a specific message now
value:
status: send
id: 76d3978e-b782-4cbb-a98b-670a5a7cbc6e
send_all_pending_messages:
summary: Send all pending messages in the chat now
value:
status: send
apply_to: all
responses:
'204':
description: Message(s) sent immediately. No response body returned.
content:
application/json:
schema:
$ref: '#/components/schemas/NoResponse'
'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: Not Found.
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.
'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.CREATE
put:
summary: Bulk reschedule scheduled messages
operationId: bulkRescheduleScheduledMessagesV3
description: "Reschedules all time-based or status-based scheduled messages in a chat in a single operation. Use this to update delivery times or change status triggers across multiple messages at once without editing them individually.\n
\n\n Threshold limit: 20 requests per min per user
\n Number of API calls allowed within a minute.
\n Lock period: 10 minutes
\n Wait time before consecutive API requests.\n
\n\n \n !\n Possible Error Codes\n Click to expand\n
\n \n
\n
\n \n \n | Error Code | \n Description | \n
\n \n \n \n | param_missing | \n A required parameter is missing from the request. | \n
\n \n | scheduled_msg_no_pending_msgs | \n No pending scheduled messages exist in this chat. | \n
\n \n | scheduled_msg_invalid_time_format | \n Invalid schedule_time format. Expected epoch milliseconds. | \n
\n \n | input_pattern_mismatch | \n An unrecognized value was passed for an enum field. | \n
\n \n
\n
\n
\n
Error Response Format\n
When an error occurs, the API returns a JSON response in this format:
\n
{\"message\": \"A human-readable description of the error.\", \"code\": \"error_code\"}\n
where code is the error identifier (as listed above) and message is a human-readable explanation of what went wrong.
\n
\n
\n \n"
tags:
- scheduledmessages
parameters:
- name: CHAT_ID
in: path
required: true
description: Unique identifier of the chat or channel. All matching scheduled messages within this chat will be updated by the bulk reschedule operation.
To learn how to retrieve this ID, see CHAT_ID in the Glossary page.
example: CHAT_ID
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- status
properties:
status:
type: string
enum:
- reschedule
description: "Operation type for this request.
\nAllowed values:
\n\n reschedule: Triggers a bulk rescheduling operation for all matching messages in the chat. Use apply_to to specify the message type to target. \n
\n"
apply_to:
type: string
enum:
- all_time_based
- all_status_based
description: "Scope of scheduled messages to update in this operation.
\nAllowed values:
\n\n all_time_based: Targets all time-based scheduled messages that match the time field. Requires time and schedule_time. \n all_status_based: Targets all status-based scheduled messages that match the existing_status field. Requires existing_status and schedule_status. \n
\n"
time:
type: integer
format: int64
description: 'Existing scheduled delivery time to match, in epoch milliseconds. Required when apply_to is all_time_based.
Only messages scheduled at this exact time will be updated.
'
schedule_time:
type: integer
format: int64
description: 'New delivery time to apply to all matched messages, in epoch milliseconds. Required when apply_to is all_time_based.
'
schedule_timezone:
type: string
maxLength: 100
description: 'Timezone to apply for time fields. Example: Asia/Kolkata.
Maximum length: 100 characters.
'
existing_status:
type: string
enum:
- check_in
- check_out
- user_available
- call_end
description: "Current status trigger to match for bulk update. Required when apply_to is all_status_based.
\nAllowed values:
\n\n check_in: Matches messages scheduled to send when the sender checks in. \n check_out: Matches messages scheduled to send when the sender checks out. \n user_available: Matches messages scheduled to send when the sender becomes available. \n call_end: Matches messages scheduled to send when the sender ends a call. \n
\n"
schedule_status:
type: string
enum:
- check_in
- check_out
- user_available
- call_end
description: "New status trigger to apply to all matched messages. Required when apply_to is all_status_based.
\nAllowed values:
\n\n check_in: Delivers the message when the sender checks in. \n check_out: Delivers the message when the sender checks out. \n user_available: Delivers the message when the sender becomes available. \n call_end: Delivers the message when the sender ends a call. \n
\n"
examples:
reschedule_all_time_based:
summary: Reschedule all time-based messages to a new time
value:
status: reschedule
apply_to: all_time_based
time: 1748861400000
schedule_time: 1748947800000
schedule_timezone: Asia/Kolkata
reschedule_all_status_based:
summary: Reschedule all status-based messages from check_in to user_available
value:
status: reschedule
apply_to: all_status_based
existing_status: check_in
schedule_status: user_available
responses:
'200':
description: Scheduled messages rescheduled successfully.
content:
application/json:
schema:
type: object
examples:
time_based_reschedule:
summary: Time-based reschedule
value:
url: /api/v3/chats/CT_1424569695482328362_631836344/scheduledmessages
type: scheduledmessages
data:
- id: 3574bbf2-77ed-4b9c-99d9-8d487d6f8d11
timezone: Asia/Kolkata
created_time: '2026-05-29T03:15:49-07:00'
time: '2026-06-02T20:30:00-07:00'
message:
sender:
name: Priya
id: '697322516'
type: text
content:
text: 'Q2 Expense Report Deadline [UPDATED]: Submission extended to June 6. Ensure all vendor invoices above $500 have manager approval. Contact @financeTeam for help.'
is_pinned: false
creator:
name: Priya
id: '697322516'
status_based_reschedule:
summary: Status-based reschedule (check_in to user_available)
value:
url: /api/v3/chats/2242125276857119940/scheduledmessages
type: scheduledmessages
data:
- id: 49ba8eac-8709-478d-bab3-701466b3e270
timezone: Asia/Kolkata
created_time: '2026-05-29T04:28:44-07:00'
schedule_status: user_available
message:
sender:
name: Priya
id: '697322516'
type: text
content:
text: Good morning Alan! Just a check-in reminder, please update your pending expense claims before the daily finance standup. Any blockers, ping @financeTeam.
is_pinned: false
creator:
name: Priya
id: '697322516'
'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.
'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.UPDATE
delete:
summary: Delete all scheduled messages in a chat
operationId: deleteAllScheduledMessagesInChatV3
description: "Deletes all scheduled messages in a chat in a single operation. Use this to clear all pending scheduled messages from a conversation at once without deleting them individually.\n
\n\n Threshold limit: 20 requests per min per user
\n Number of API calls allowed within a minute.
\n Lock period: 10 minutes
\n Wait time before consecutive API requests.\n
\n"
tags:
- scheduledmessages
parameters:
- name: CHAT_ID
in: path
required: true
description: Unique identifier of the chat or channel. All scheduled messages within this chat will be permanently removed.
To learn how to retrieve this ID, see CHAT_ID in the Glossary page.
example: CHAT_ID
schema:
type: string
responses:
'204':
description: All scheduled messages deleted. No response body returned.
content:
application/json:
schema:
$ref: '#/components/schemas/NoResponse'
'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.
'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
/chats/{CHAT_ID}/scheduledmessages/{SCHEDULED_MESSAGE_ID}:
put:
summary: Edit a scheduled message
operationId: editScheduledMessageV3
description: "Updates the text, scheduled time, timezone, status trigger, or file attachment of an existing scheduled message. Use this to modify a specific scheduled message before it is delivered, including switching between time-based and status-based scheduling.\n
\n\n Threshold limit: 20 requests per min per user
\n Number of API calls allowed within a minute.
\n Lock period: 10 minutes
\n Wait time before consecutive API requests.\n
\n\n \n !\n Possible Error Codes\n Click to expand\n
\n \n
\n
\n \n \n | Error Code | \n Description | \n
\n \n \n \n | scheduled_msg_not_found | \n The requested scheduled message could not be found. | \n
\n \n | scheduled_msg_invalid_time_format | \n Invalid schedule_time format. Expected epoch milliseconds. | \n
\n \n | checkin_status_message_restricted | \n The check_in status trigger is not supported for this chat type (e.g. direct messages). | \n
\n \n | extra_key_found | \n An unsupported key was included in the request body. | \n
\n \n
\n
\n
\n
Error Response Format\n
When an error occurs, the API returns a JSON response in this format:
\n
{\"message\": \"A human-readable description of the error.\", \"code\": \"error_code\"}\n
where code is the error identifier (as listed above) and message is a human-readable explanation of what went wrong.
\n
\n
\n \n"
tags:
- scheduledmessages
parameters:
- name: CHAT_ID
in: path
required: true
description: Unique identifier of the chat or channel that contains the scheduled message to be edited.
To learn how to retrieve this ID, see CHAT_ID in the Glossary page.
example: CHAT_ID
schema:
type: string
- name: SCHEDULED_MESSAGE_ID
in: path
required: true
description: Unique identifier of the scheduled message to edit. Use this to target a specific pending message within the chat.
To retrieve this ID, use the List all scheduled messages endpoint.
example: SCHEDULED_MESSAGE_ID
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
text:
type: string
maxLength: 5000
description: 'Updated message text content to replace the existing text.
Maximum length: 5000 characters.
'
schedule_time:
type: integer
format: int64
description: 'New scheduled delivery time for the message, in epoch milliseconds. Replaces the existing scheduled time.
'
schedule_timezone:
type: string
maxLength: 100
description: 'Timezone to use for the updated scheduled time. Example: Asia/Kolkata.
Maximum length: 100 characters.
'
schedule_status:
type: string
enum:
- check_in
- check_out
- user_available
- call_end
description: "New status trigger for the message. When provided, switches the message from time-based to status-based scheduling.
\nAllowed values:
\n\n check_in: Delivers the message when the sender checks in. \n check_out: Delivers the message when the sender checks out. \n user_available: Delivers the message when the sender becomes available. \n call_end: Delivers the message when the sender ends a call. \n
\n"
file_remove:
type: boolean
description: "Controls removal of an existing file attachment from the scheduled message.
\nAllowed values:
\n\n true: Removes the existing file attachment from the message. The message text and schedule remain unchanged. \n false: Retains the existing file attachment. This is the default behavior. \n
\n"
examples:
edit_text_and_time:
summary: Edit message text and reschedule time
value:
text: 'Q2 Expense Report Deadline [UPDATED]: Submission extended to June 6. Ensure all vendor invoices above $500 have manager approval. Contact @financeTeam for help.'
schedule_time: 1748947800000
schedule_timezone: Asia/Kolkata
change_status_trigger:
summary: Change status trigger from user_available to call_end
value:
schedule_status: call_end
remove_file_attachment:
summary: Remove file attachment from scheduled message
value:
file_remove: true
responses:
'200':
description: Scheduled message updated successfully.
content:
application/json:
schema:
type: object
examples:
text_and_time_edit:
summary: Text and time edit
value:
url: /api/v3/chats/CT_1424569695482328362_631836344/scheduledmessages/3574bbf2-77ed-4b9c-99d9-8d487d6f8d11
type: scheduledmessages
data:
id: 3574bbf2-77ed-4b9c-99d9-8d487d6f8d11
timezone: Asia/Kolkata
created_time: '2026-05-29T03:15:49-07:00'
time: '2026-06-01T20:30:00-07:00'
message:
sender:
name: Priya
id: '697322516'
type: text
content:
text: 'Q2 Expense Report Deadline [UPDATED]: Submission extended to June 6. Ensure all vendor invoices above $500 have manager approval. Contact @financeTeam for help.'
is_pinned: false
creator:
name: Priya
id: '697322516'
status_trigger_edit:
summary: Status trigger edit (user_available to call_end)
value:
url: /api/v3/chats/1424921584119739269/scheduledmessages/84fe7397-ab35-4aef-8bf7-944d688857af
type: scheduledmessages
data:
id: 84fe7397-ab35-4aef-8bf7-944d688857af
timezone: Asia/Kolkata
created_time: '2026-05-29T04:27:40-07:00'
schedule_status: call_end
message:
sender:
name: Priya
id: '697322516'
type: text
content:
text: 'Hi Benjamin, just a quick nudge. Please update the approval status for Claim #EXP-2026-0412 when you are available. No rush, respond whenever you are free!'
is_pinned: false
creator:
name: Priya
id: '697322516'
file_remove:
summary: File remove (file fields remain in response but attachment is detached)
value:
url: /api/v3/chats/CT_1424569695482328362_631836344/scheduledmessages/de8518c4-ce33-46c1-9195-d7864b9f10ce
type: scheduledmessages
data:
id: de8518c4-ce33-46c1-9195-d7864b9f10ce
timezone: Asia/Kolkata
created_time: '2026-05-29T04:31:33-07:00'
time: '2026-06-06T21:00:00-07:00'
message:
sender:
id: '697322516'
type: file
content:
file_name: Expense Summary - Zylker.pdf
file_size: 61.05 KB
comment: Please find the attached Q2 Expense Summary report. Review before the finance sync on June 6 and flag any discrepancies to @financeTeam.
is_pinned: false
creator:
name: Priya
id: '697322516'
'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: Not Found.
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.
'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.UPDATE
delete:
summary: Delete a scheduled message
operationId: deleteScheduledMessageV3
description: "Deletes a specific scheduled message by its ID. Use this to remove a single pending message from a chat without affecting other scheduled messages in the same conversation.\n
\n\n Threshold limit: 20 requests per min per user
\n Number of API calls allowed within a minute.
\n Lock period: 10 minutes
\n Wait time before consecutive API requests.\n
\n\n \n !\n Possible Error Codes\n Click to expand\n
\n \n
\n
\n \n \n | Error Code | \n Description | \n
\n \n \n \n | scheduled_msg_not_found | \n The requested scheduled message could not be found. | \n
\n \n
\n
\n
\n
Error Response Format\n
When an error occurs, the API returns a JSON response in this format:
\n
{\"message\": \"A human-readable description of the error.\", \"code\": \"error_code\"}\n
where code is the error identifier (as listed above) and message is a human-readable explanation of what went wrong.
\n
\n
\n \n"
tags:
- scheduledmessages
parameters:
- name: CHAT_ID
in: path
required: true
description: Unique identifier of the chat or channel that contains the scheduled message to be deleted.
To learn how to retrieve this ID, see CHAT_ID in the Glossary page.
example: CHAT_ID
schema:
type: string
- name: SCHEDULED_MESSAGE_ID
in: path
required: true
description: Unique identifier of the scheduled message to delete. Use this to target the specific pending message to remove.
To retrieve this ID, use the List all scheduled messages endpoint.
example: SCHEDULED_MESSAGE_ID
schema:
type: string
responses:
'204':
description: Scheduled message deleted. No response body returned.
content:
application/json:
schema:
$ref: '#/components/schemas/NoResponse'
'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: Not Found.
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.
'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
components:
schemas:
NoResponse:
type: object
description: Response object returned when no content is available.
properties:
Response Code:
type: string
description: HTTP response code and message indicating no content.
example: 204 No response
securitySchemes:
Cliq_Auth:
type: oauth2
x-authorization-example: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f
flows:
implicit:
authorizationUrl: https://accounts.zoho.com/oauth/v2/auth
scopes:
ZohoCliq.Bots.READ: Read Bot Information
ZohoCliq.Bots.CREATE: Create Bots
ZohoCliq.Bots.UPDATE: Update Bots
ZohoCliq.Bots.DELETE: Delete Bots
ZohoCliq.Webhooks.CREATE: Post messages to conversations via webhooks
ZohoCliq.BotMessages.CREATE: Send messages via bot incoming webhooks
ZohoCliq.Channels.UPDATE: Update Channel Settings
externalDocs:
description: Find out more about Zoho Cliq APIs V3
url: https://www.zoho.com/cliq/help/restapi/v3/