openapi: 3.0.0
info:
title: Bots reminders 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: reminders
description: Reminders Module
paths:
/chats/{CHAT_ID}/reminders:
get:
summary: Get reminders in a chat
operationId: getRemindersInChatV3
description: "Retrieves all reminders set on messages within a specific chat. Use this to list all active reminder alerts across direct messages, group chats, and channels, including single-user and multi-user assigned reminders.\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
Note: This endpoint uses a different base URL: https://cliq.zoho.com/v3 (without /api).
\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. The limit query parameter must be provided. | \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"
servers:
- url: https://cliq.zoho.com/v3
description: Zoho Cliq US DC (GET reminders)
tags:
- reminders
parameters:
- name: CHAT_ID
in: path
required: true
description: Unique identifier of the chat or channel. Use this to scope the reminders retrieval to a specific conversation.
example: CHAT_ID
schema:
type: string
- name: limit
in: query
required: true
description: 'Number of results per page.
Maximum limit: 100
'
schema:
type: integer
maximum: 200
- 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
responses:
'200':
description: Reminders retrieved successfully.
content:
application/json:
schema:
type: object
examples:
channel_recurring_reminder:
summary: Channel with recurring reminder
value:
category: chat
time: '2026-05-29T03:57:43-07:00'
list:
- id: '1901318000012651019'
time: '2026-05-31T19:30:00-07:00'
timezone: Asia/Kolkata
content: Weekly Finance Sync
completed: false
creation_time: '2026-05-29T04:05:57-07:00'
creator:
name: Priya
id: '697322516'
users:
- name: Priya
id: '697322516'
completed: false
deleted: false
message:
msgid: '1780052699342'
msg: 'Weekly Finance Sync: Review all pending expense approvals and flag any claims older than 7 days for escalation. Ensure the expense tracker is updated before the sync.'
chat_id: CT_1424569695482328362_631836344
sender_id: '697322516'
dname: Priya
- id: '1901318000012651010'
time: '2026-06-09T21:30:00-07:00'
timezone: Asia/Kolkata
content: Vendor Payment Review
completed: false
creation_time: '2026-05-29T03:51:46-07:00'
creator:
name: Priya
id: '697322516'
users:
- name: Priya
id: '697322516'
completed: false
deleted: false
message:
msgid: '1780051880491'
msg: 'Vendor Payment Review: Review and approve all pending vendor payment requests before the monthly finance sync on June 6.'
chat_id: CT_1424569695482328362_631836344
sender_id: '697322516'
dname: Priya
group_chat_multi_user_assigned:
summary: Group chat with multi-user assigned reminder
value:
category: chat
time: '2026-05-29T03:57:43-07:00'
list:
- id: '1901318000012651028'
time: '2026-06-15T04:30:00-07:00'
timezone: Asia/Kolkata
content: Action Item followup reminder
completed: false
creation_time: '2026-05-29T04:08:17-07:00'
creator:
name: Priya
id: '697322516'
users:
- name: Scott
id: '631830848'
completed: false
deleted: false
- name: Olivia Palmer
id: '631830846'
completed: false
deleted: false
message:
msgid: '1780051988899'
msg: 'Action Item Follow-up: Check the status of all open action items from last week''s sprint review. Update the tracker and post a summary in this channel before EOD.'
chat_id: '1608865438186287622'
sender_id: '697322516'
dname: Priya
empty_chat:
summary: Empty chat
value:
category: chat
time: '2026-05-29T03:57:42-07:00'
list: []
'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.Reminders.READ
/reminders/{REMINDER_ID}:
put:
summary: Update reminder status
operationId: updateReminderStatusV3
description: "Marks a recurring reminder as completed across all occurrences. Use this to close out a recurring reminder entirely once the associated task or event no longer requires follow-up.\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
Note: apply_to: all_occurrences is applicable only for recurring reminders. For one-time reminders, use batch edit to reschedule instead.
\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 | reminder_missing_apply_to | \n The apply_to field is required. Supported value: all_occurrences. | \n
\n \n | reminder_not_recurring | \n apply_to: all_occurrences is only applicable for recurring reminders. | \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:
- reminders
parameters:
- name: REMINDER_ID
in: path
required: true
description: Unique identifier of the reminder to update. Use this to target the specific recurring reminder whose status needs to be marked as completed.
To retrieve this ID, use the Get reminders in a chat endpoint or the List all reminders (v2).
example: REMINDER_ID
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- status
- apply_to
properties:
status:
type: string
enum:
- completed
description: "New status to apply to the reminder.
\nAllowed values:
\n\n completed: Marks the reminder as done. When used with apply_to: all_occurrences, marks all occurrences of a recurring reminder as completed. \n
\n"
apply_to:
type: string
enum:
- all_occurrences
description: "Scope of the status update. Required for all status changes.
\nAllowed values:
\n\n all_occurrences: Applies the status update across every occurrence of a recurring reminder. Not applicable for one-time reminders. \n
\n"
example:
status: completed
apply_to: all_occurrences
responses:
'204':
description: Recurring reminder marked as completed across all occurrences. 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.
'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.Reminders.UPDATE
/reminders/{REMINDER_ID}/notifications:
post:
summary: Trigger reminder notification to assignees
operationId: triggerReminderNotificationV3
description: "Immediately notifies all assignees of a reminder, bypassing the scheduled time. Use this to push a reminder notification to all assigned users on demand, without waiting for the reminder to fire automatically. Supported only for reminders assigned to other users.\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 | remind_self_not_allowed | \n Notification trigger is not applicable for self-assigned reminders. | \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:
- reminders
parameters:
- name: REMINDER_ID
in: path
required: true
description: Unique identifier of the reminder whose assignees should be notified immediately. Must be a reminder assigned to other users, not a self-assigned reminder.
To retrieve this ID, use the Get reminders in a chat endpoint or the List all reminders (v2).
example: REMINDER_ID
schema:
type: string
responses:
'200':
description: Notification triggered. Returns the list of notified assignees.
content:
application/json:
schema:
type: object
examples:
notification_triggered:
summary: Notification triggered successfully
value:
data:
- name: Scott
id: '631830848'
completed: false
deleted: false
- name: Olivia Palmer
id: '631830846'
completed: false
deleted: false
'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.Reminders.CREATE
/reminders/edits:
put:
summary: Batch edit reminders
operationId: batchEditRemindersV3
description: "Reschedules multiple reminders in a single request. Use this to update the delivery time of several reminders at once, avoiding the need to make individual edit calls for each one.\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
Note: Use reminder_id (not id) as the key for each reminder object. Timezone is not a supported field in the request body, convert to epoch milliseconds in the desired timezone before sending.\n
Response status values
\nThe top-level status field reflects the overall result of the batch operation across all submitted reminders.
\n\n success: All reminders in the batch were rescheduled successfully. \n partial: One or more reminders failed while the rest succeeded. Check the individual status field inside each object in the data array to identify which ones failed. \n failure: All reminders in the batch failed to reschedule. \n
\nEach object in the data array carries its own status and reminder_id, allowing you to handle successes and failures per reminder regardless of the overall batch outcome.
\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. Ensure reminder_id and time are provided for each reminder object. | \n
\n \n | extra_key_found | \n An unsupported key was included in the request body. For example, timezone is not accepted. | \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:
- reminders
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- reminders
properties:
reminders:
type: array
maxItems: 25
description: 'List of reminder objects to reschedule.
Maximum items: 25 per request.
'
items:
type: object
required:
- reminder_id
- time
properties:
reminder_id:
type: string
description: Unique identifier of the reminder to reschedule.
time:
type: integer
format: int64
description: New reminder time in epoch milliseconds.
examples:
single_reminder:
summary: Reschedule a single reminder
value:
reminders:
- reminder_id: '1901318000012651019'
time: 1749369000000
multiple_reminders:
summary: Reschedule multiple reminders
value:
reminders:
- reminder_id: '1901318000012651010'
time: 1749282600000
- reminder_id: '1901318000012651016'
time: 1748930400000
responses:
'200':
description: Returns per-reminder result with updated data for each ID.
content:
application/json:
schema:
type: object
examples:
batch_edit_success:
summary: Multiple reminders rescheduled successfully
value:
status: success
data:
- status: success
reminder_id: '1901318000012651010'
data:
id: '1901318000012651010'
time: '2026-06-09T21:30:00-07:00'
timezone: Asia/Kolkata
content: Vendor Payment Review
completed: false
creation_time: '2026-05-29T03:51:46-07:00'
creator:
name: Priya
id: '697322516'
users:
- name: Priya
id: '697322516'
completed: false
deleted: false
message:
msgid: '1780051880491'
msg: 'Vendor Payment Review: Review and approve all pending vendor payment requests before the monthly finance sync on June 6.'
chat_id: CT_1424569695482328362_631836344
sender_id: '697322516'
dname: Priya
- status: success
reminder_id: '1901318000012651016'
data:
id: '1901318000012651016'
time: '2026-06-04T20:30:00-07:00'
timezone: Asia/Kolkata
completed: false
creation_time: '2026-05-29T03:53:32-07:00'
creator:
name: Priya
id: '697322516'
users:
- name: Priya
id: '697322516'
completed: false
deleted: false
message:
msgid: '1780051988899'
msg: 'Sprint Review Prep: All team members to update their task status in the project tracker before the sprint review on June 4.'
chat_id: '1608865438186287622'
sender_id: '697322516'
dname: Priya
'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.Reminders.UPDATE
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/