Chats
AI Tools
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
The Chats API enables effective conversation management, offering complete control over chat interactions, making it suitable for various messaging and collaboration scenarios.
The v3 version of the Chats API is designed to provide full lifecycle control over chat interactions, enabling developers to create scalable, feature-rich communication experiences.
Key Capabilities
With the latest v3 version of the Chats API, you can:
- Search Chats: Efficiently query and retrieve chats based on parameters such as participants, metadata, or chat state.
- Chat Management: Create new chats, retrieve existing ones (including direct chats or specific conversations), and fork chats from existing discussions.
- Member Management: Add or remove participants and access the list of members within a chat.
- Chat Operations: Update chat states, send typing indicators, and perform bulk updates across multiple chats.
Create chat
AI Tools
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Create a new direct conversation or a group chat.
Threshold limit: 30 requests per min
Number of API calls allowed within a minute.
Possible Error Codes
| Error Code | Description |
|---|---|
121_deptmem_message |
Permission to chat with department members is restricted by admin. |
121_orgmem_message |
Permission to chat with organization members is restricted by admin. |
chat_continue_nonorg_nonmutual_contact_failed |
The user is no longer part of your contacts or organization. |
121_extmem_message |
Permission to chat with external users is restricted by admin. |
chat_not_available_with_this_inactive_user_and_cannot_create_newchat |
No chat history with this inactive user; cannot create a new chat. |
invalid_inputs |
Missing or invalid fields (e.g. chat_type not provided or unsupported). |
no_valid_users_available_to_create_chat |
All specified users are inactive or not in your contacts. |
insufficient_members_to_create_group_chat |
Not enough valid members to create a group chat (minimum 3 including creator). |
chat_operation_failed |
Unexpected server error while creating the chat. |
Error Response Format
When an error occurs, the API returns a JSON response in this format:
{"message": "A human-readable description of the error.", "code": "error_code"}
where code is the error identifier (as listed in the table above) and message is a human-readable explanation of what went wrong.
OAuth Scope : ZohoCliq.Chats.CREATE
Arguments
direct_message: A one-to-one chat with another user.group_chat: A chat with multiple users, requires a title.
direct_message chat type.User ID of the other participant for direct messages.
group_chat chat type.List of user IDs to include in the group chat. Must include at least 1 user and can include up to 50 users.
group_chat chat type.Title of the group chat. Required when creating a group chat.
parameters_data='{"field1":"value1","field2":"value2"}';
headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/chats"
type: POST
headers: headers_data
content-type: application/json
parameters: parameters_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}");
Request request = new Request.Builder()
.url("https://cliq.zoho.com/api/v3/chats")
.post(body)
.addHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'POST',
headers: {
Authorization: 'Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f',
'content-type': 'application/json'
},
body: '{"field1":"value1","field2":"value2"}'
};
fetch('https://cliq.zoho.com/api/v3/chats', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPSConnection("cliq.zoho.com")
payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}"
headers = {
'Authorization': "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
'content-type': "application/json"
}
conn.request("POST", "/api/v3/chats", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("https");
const options = {
"method": "POST",
"hostname": "cliq.zoho.com",
"port": null,
"path": "/api/v3/chats",
"headers": {
"Authorization": "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
"content-type": "application/json"
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.write(JSON.stringify({field1: 'value1', field2: 'value2'}));
req.end();
var client = new RestClient("https://cliq.zoho.com/api/v3/chats");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\"field1\":\"value1\",\"field2\":\"value2\"}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://cliq.zoho.com/api/v3/chats"),
Headers =
{
{ "Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" },
},
Content = new StringContent("{\"field1\":\"value1\",\"field2\":\"value2\"}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://cliq.zoho.com/api/v3/chats"
payload := strings.NewReader("{\"field1\":\"value1\",\"field2\":\"value2\"}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
const data = JSON.stringify({
"field1": "value1",
"field2": "value2"
});
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("POST", "https://cliq.zoho.com/api/v3/chats");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.setRequestHeader("content-type", "application/json");
xhr.send(data);
curl --request POST \
--url https://cliq.zoho.com/api/v3/chats \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
--header 'content-type: application/json' \
--data '{"field1":"value1","field2":"value2"}'
{
"chat_type": "direct_message",
"user_id": "70027934"
}
{
"chat_type": "group_chat",
"user_ids": [
"70027934",
"106324287",
"70317945",
"72589892"
],
"title": "Q2 Product Review - Design, Engineering & QA"
}
{
"url": "/v3/chats",
"type": "chat",
"data": {
"user_membership": {
"pinned": false,
"removed": false
},
"chat_type": "direct_message",
"name": "Ryan West",
"creator": {
"name": "Ryan West",
"id": "855727963"
},
"participant_count": 2,
"created_time": "2024-11-06T22:39:30-08:00",
"last_modified_time": "2026-05-06T23:37:30-07:00",
"chat_id": "2198144177691461096"
}
}
{
"url": "/v3/chats",
"type": "chat",
"data": {
"name": "Q2 Product Review - Design, Engineering & QA",
"chat_id": "1456816193674892935",
"chat_type": "group_chat",
"participant_count": 5,
"created_time": "2025-06-15T10:30:00+05:30",
"last_modified_time": "2025-06-15T10:30:00+05:30",
"user_membership": {
"pinned": false,
"removed": false
},
"creator": {
"id": "70027934",
"name": "Tim Harrison"
}
}
}
{
"message": "The request cannot be performed. Usually because of malformed parameter or missing parameter."
}
{
"message": "Request was rejected because of invalid AuthToken."
}
{
"message": "The user does not have enough permission or possibly not an user of the respective organization to access the resource."
}
{
"message": "Too many requests within a certain time frame."
}
{
"message": "Cliq server encountered an error which prevents it from fulfilling the request."
}
Mark Multiple Chats as Read or Clear Unread Count
AI Tools
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Manage the read state of multiple chats in a single request.
Two bulk actions are supported, controlled by the operation field in the request body:
read_status_update- Manage the read status of multiple chats in a single request. This is particularly useful for keeping your chat list organized and up-to-date, especially when you have a large number of conversations.clear_unread- Clears the unread message count or status to zero for the specified chats. If a specified chat has no unread entries, it is silently skipped.
Threshold limits: 60 requests per min
Number of API calls allowed within a minute.
Lock periods: 5 minutes
Wait time before consecutive API requests.
Possible Error Codes - Mark Chats as Read (
read_status_update)| Error Code | Description |
|---|---|
param_missing |
The param 'operation' is missing. |
param_missing |
The param 'read_status' is missing. |
param_missing |
The param 'chats' is missing. |
param_missing |
The param 'chat_id' is missing. |
invalid.inputs.submitted |
Incorrect values submitted. |
chat_access_denied |
You must be a participant in this chat to perform this action. |
chat_operation_failed |
Unable to perform the action. Please retry. |
Possible Error Codes - Clear Unread Count (
clear_unread)| Error Code | Description |
|---|---|
param_missing |
The param 'operation' is missing. |
param_missing |
One or more required params are missing: operation or chat_ids. |
invalid.inputs.submitted |
Incorrect values submitted. |
chat_operation_failed |
Unable to perform the action. Please retry. |
Error Response Format
When an error occurs, the API returns a JSON response in this format:
{"message": "A human-readable description of the error.", "code": "error_code"}
where code is the error identifier (as listed in the table above) and message is a human-readable explanation of what went wrong.
OAuth Scope : ZohoCliq.Chats.UPDATE
Arguments
Allowed values:
read_status_update: Marks the specified chats as read up to the givenlast_message_id. Requiresread_statusandchatsfields.clear_unread: Clears the unread message count or status to zero for the specified chats. Requireschat_idsfield.
Applicable for the
read_status_update operation only.Allowed value:
read - Marks the specified chats as read.
read_status_update operation only.Maximum of 100 chats per request.
clear_unread operation only.Chats that do not have any unread entries will be skipped without error.
Maximum items: 100 chat IDs.
parameters_data='{"field1":"value1","field2":"value2"}';
headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/chats"
type: PUT
headers: headers_data
content-type: application/json
parameters: parameters_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}");
Request request = new Request.Builder()
.url("https://cliq.zoho.com/api/v3/chats")
.put(body)
.addHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'PUT',
headers: {
Authorization: 'Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f',
'content-type': 'application/json'
},
body: '{"field1":"value1","field2":"value2"}'
};
fetch('https://cliq.zoho.com/api/v3/chats', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPSConnection("cliq.zoho.com")
payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}"
headers = {
'Authorization': "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
'content-type': "application/json"
}
conn.request("PUT", "/api/v3/chats", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("https");
const options = {
"method": "PUT",
"hostname": "cliq.zoho.com",
"port": null,
"path": "/api/v3/chats",
"headers": {
"Authorization": "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
"content-type": "application/json"
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.write(JSON.stringify({field1: 'value1', field2: 'value2'}));
req.end();
var client = new RestClient("https://cliq.zoho.com/api/v3/chats");
var request = new RestRequest(Method.PUT);
request.AddHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\"field1\":\"value1\",\"field2\":\"value2\"}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Put,
RequestUri = new Uri("https://cliq.zoho.com/api/v3/chats"),
Headers =
{
{ "Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" },
},
Content = new StringContent("{\"field1\":\"value1\",\"field2\":\"value2\"}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://cliq.zoho.com/api/v3/chats"
payload := strings.NewReader("{\"field1\":\"value1\",\"field2\":\"value2\"}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
const data = JSON.stringify({
"field1": "value1",
"field2": "value2"
});
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("PUT", "https://cliq.zoho.com/api/v3/chats");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.setRequestHeader("content-type", "application/json");
xhr.send(data);
curl --request PUT \
--url https://cliq.zoho.com/api/v3/chats \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
--header 'content-type: application/json' \
--data '{"field1":"value1","field2":"value2"}'
{
"operation": "read_status_update",
"read_status": "read",
"chats": [
{
"chat_id": "2890538000000012345",
"last_message_id": "1773813859592_51531973059"
},
{
"chat_id": "2890538000000067890",
"last_message_id": "1773813860210_51531973060"
}
]
}
{
"operation": "clear_unread",
"chat_ids": [
"2890538000000012345",
"2890538000000067890"
]
}
{
"type": "chat.read_status",
"data": {
"success": [
"2890538000000012345",
"2890538000000067890"
],
"failure": []
}
}
{
"Response Code": "204 No response"
}
{
"message": "The request cannot be performed. Usually because of malformed parameter or missing parameter."
}
{
"message": "Request was rejected because of invalid AuthToken."
}
{
"message": "The user does not have enough permission or possibly not an user of the respective organization to access the resource."
}
{
"message": "Too many requests within a certain time frame."
}
{
"message": "Cliq server encountered an error which prevents it from fulfilling the request."
}
Retrieve all direct chats
AI Tools
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Use this API to get details of all direct chats.
Threshold limit: 20 requests per min per user
Number of API calls allowed within a minute.
Lock period: 10 minutes
Wait time before consecutive API requests.
OAuth Scope : ZohoCliq.Chats.READ
Query Parameters
Maximum limit : 100
The time should be in ISO 8601 format: YYYY-MM-DDTHH:mm:ssZ.
For example, 2024-01-01T00:00:00Z for January 1, 2024, at midnight UTC.
The time should be in ISO 8601 format: YYYY-MM-DDTHH:mm:ssZ.
For example, 2024-01-01T00:00:00Z for January 1, 2024, at midnight UTC.
headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/chats"
type: GET
headers: headers_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://cliq.zoho.com/api/v3/chats")
.get()
.addHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'GET',
headers: {
Authorization: 'Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
}
};
fetch('https://cliq.zoho.com/api/v3/chats', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPSConnection("cliq.zoho.com")
headers = { 'Authorization': "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" }
conn.request("GET", "/api/v3/chats", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("https");
const options = {
"method": "GET",
"hostname": "cliq.zoho.com",
"port": null,
"path": "/api/v3/chats",
"headers": {
"Authorization": "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.end();
var client = new RestClient("https://cliq.zoho.com/api/v3/chats");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
IRestResponse response = client.Execute(request);
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://cliq.zoho.com/api/v3/chats"),
Headers =
{
{ "Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://cliq.zoho.com/api/v3/chats"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
const data = null;
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("GET", "https://cliq.zoho.com/api/v3/chats");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.send(data);
curl --request GET \
--url https://cliq.zoho.com/api/v3/chats \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
{
"chats": [
{
"chat_id": "2890538000000012345",
"name": "Alice Johnson",
"chat_type": "direct_message",
"participant_count": 2,
"created_time": "2024-06-01T09:00:00.000Z",
"last_modified_time": "2025-04-10T14:30:00.000Z",
"pinned": false,
"removed": false,
"creator": {
"id": "70027934",
"name": "Tim Harrison"
},
"last_message_info": {
"message_id": "1773813859592_51531973059",
"sender": "70027934",
"time": "2025-04-10T14:30:00.000Z",
"content": {
"text": "See you at the standup!"
},
"type": "text"
}
},
{
"chat_id": "2890538000000067890",
"name": "Bob Carter",
"chat_type": "direct_message",
"participant_count": 2,
"created_time": "2024-09-15T11:00:00.000Z",
"last_modified_time": "2025-04-09T09:45:00.000Z",
"pinned": true,
"removed": false,
"creator": {
"id": "70027934",
"name": "Tim Harrison"
}
}
]
}
{
"message": "The request cannot be performed. Usually because of malformed parameter or missing parameter."
}
{
"message": "Request was rejected because of invalid AuthToken."
}
{
"message": "The user does not have enough permission or possibly not an user of the respective organization to access the resource."
}
{
"message": "The URL you've sent is wrong. It's possible that the resource you've requested has been moved to another URL."
}
{
"message": "The requested resource does not support the HTTP method used. For example, requesting List of all customers API with PUT as the HTTP method."
}
{
"message": "The response has been received but the requested response type is not supported by the browser."
}
{
"message": "Too many requests within a certain time frame."
}
{
"message": "Cliq server encountered an error which prevents it from fulfilling the request."
}
Search chats
AI Tools
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Search for chats accessible to the current user. You can filter by name, type, date range, participant, and more.
Threshold limit: 50 requests per min per user
Number of API calls allowed within a minute.
Lock period: 10 minutes
Wait time before consecutive API requests.
Possible Error Codes
| Error Code | Description |
|---|---|
invalid.inputs.submitted |
An invalid value was passed (e.g. unrecognised chat_type or sort_by). |
invalid.time.submitted |
modified_before or modified_after is not a valid timestamp, or modified_after is not earlier than modified_before. |
invalid_access |
The user is not a member of the organisation. |
chat_operation_failed |
An unexpected server-side error occurred. |
Error Response Format
When an error occurs, the API returns a JSON response in this format:
{"message": "A human-readable description of the error.", "code": "error_code"}
where code is the error identifier (as listed in the table above) and message is a human-readable explanation of what went wrong.
OAuth Scope : ZohoCliq.Chats.READ
Query Parameters
Maximum length: 200 characters
Maximum limit: 500. Default is 500 if not specified.
Accepts epoch time in milliseconds or ISO 8601 format.
Note: When both modified_before and modified_after are provided, modified_after must be earlier than modified_before.
Accepts epoch time in milliseconds or ISO 8601 format.
Note: When both modified_before and modified_after are provided, modified_after must be earlier than modified_before.
direct_message, group_chat, channel, thread. You can specify multiple types separated by commas (e.g. direct_message,group_chat) to include multiple chat types in the results.
Allowed values:
usage: Sort by usage frequency, with the most frequently accessed chats appearing first.recent: Sort by recent activity, with the most recently active chats appearing first. This is the default sorting method.
headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/chats/search"
type: GET
headers: headers_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://cliq.zoho.com/api/v3/chats/search")
.get()
.addHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'GET',
headers: {
Authorization: 'Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
}
};
fetch('https://cliq.zoho.com/api/v3/chats/search', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPSConnection("cliq.zoho.com")
headers = { 'Authorization': "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" }
conn.request("GET", "/api/v3/chats/search", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("https");
const options = {
"method": "GET",
"hostname": "cliq.zoho.com",
"port": null,
"path": "/api/v3/chats/search",
"headers": {
"Authorization": "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.end();
var client = new RestClient("https://cliq.zoho.com/api/v3/chats/search");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
IRestResponse response = client.Execute(request);
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://cliq.zoho.com/api/v3/chats/search"),
Headers =
{
{ "Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://cliq.zoho.com/api/v3/chats/search"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
const data = null;
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("GET", "https://cliq.zoho.com/api/v3/chats/search");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.send(data);
curl --request GET \
--url https://cliq.zoho.com/api/v3/chats/search \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
{
"chats": [
{
"chat_id": "6795XXXXXXXXXXXXXX",
"name": "General",
"chat_type": "channel",
"participant_count": 42,
"created_time": "2024-01-10T09:00:00.000Z",
"last_modified_time": "2025-03-20T14:30:00.000Z",
"pinned": false,
"removed": false,
"creator": {
"id": "711622XXXX",
"name": "Alice"
},
"last_message_info": {
"message_id": "1710934200000",
"sender": "711622XXXX",
"time": "2025-03-20T14:30:00.000Z",
"content": {
"text": "Hello everyone!"
},
"type": "text"
}
},
{
"chat_id": "6795YYYYYYYYYYYY",
"name": "Bob",
"chat_type": "direct_message",
"participant_count": 2,
"created_time": "2024-06-01T10:00:00.000Z",
"last_modified_time": "2025-03-18T11:00:00.000Z",
"pinned": false,
"removed": false
}
]
}
{
"error": {
"code": "invalid.inputs.submitted",
"message": "An invalid value was passed. Please check chat_type or sort_by parameters."
}
}
{
"error": {
"code": "invalid.time.submitted",
"message": "Invalid timestamp format or modified_after must be earlier than modified_before."
}
}
{
"error": {
"code": "invalid_access",
"message": "You are not a member of this organisation or do not have permission to access this resource."
}
}
{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests within a certain time frame. Please try again later."
}
}
{
"error": {
"code": "chat_operation_failed",
"message": "Cliq server encountered an error which prevents it from fulfilling the request."
}
}
Update chat title or history status
AI Tools
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Modify a chat's title or history status. Only one operation can be performed per request.
Supported operations:
update_title: Updates the visible title of the chat. Pass the new title in thetitlefield.
update_history_status: Controls whether chat history is retained. Sethistory_statustoenabledordisabled.
Threshold limits:
update_title: 60 req/min
update_history_status: 60 req/min
Lock periods:
update_title: 10 min
update_history_status: 10 min
Possible Error Codes - Update Title (
update_title)| Error Code | Description |
|---|---|
param_missing |
The param 'operation' is missing. |
param_missing |
The param 'title' is missing. |
invalid.inputs.submitted |
Incorrect values submitted. |
chat_title_empty |
Title cannot be empty. Please enter a valid title. |
channel_title_update_not_supported |
Channel title update is not supported through this API. |
contact_rename_not_supported |
Renaming contacts in one-to-one chats is not allowed when contact display name is not preferred. |
chatlet_title_modification_not_allowed |
You do not have permission to modify the title of this chatlet. |
chat_access_denied |
You must be a participant in this chat to perform this action. |
chat_title_update_failed |
Failed to update the chat title. Please try again. |
chat_operation_failed |
Unable to perform the action. Please retry. |
Possible Error Codes - Update History Status (
update_history_status)| Error Code | Description |
|---|---|
param_missing |
The param 'operation' is missing. |
param_missing |
The param 'history_status' is missing. |
invalid.inputs.submitted |
Incorrect values submitted. |
chat_access_denied |
You must be a participant in this chat to perform this action. |
chat_operation_failed |
Unable to perform the action. Please retry. |
Error Response Format
When an error occurs, the API returns a JSON response in this format:
{"message": "A human-readable description of the error.", "code": "error_code"}
where code is the error identifier (as listed in the table above) and message is a human-readable explanation of what went wrong.
OAuth Scope : ZohoCliq.Chats.UPDATE
Arguments
Allowed values:
- update_title: Updates the visible title of the chat. Requires the
titlefield. - update_history_status: Controls whether chat history is retained. Requires the
history_statusfield set to eitherenabledordisabled.
operation is update_title.Maximum length: 255 characters.
operation is update_history_status.Allowed values:
- enabled: Chat history will be retained.
- disabled: Chat history will not be retained.
Path Parameters
parameters_data='{"field1":"value1","field2":"value2"}';
headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/chats/987000000654321"
type: PUT
headers: headers_data
content-type: application/json
parameters: parameters_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}");
Request request = new Request.Builder()
.url("https://cliq.zoho.com/api/v3/chats/987000000654321")
.put(body)
.addHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'PUT',
headers: {
Authorization: 'Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f',
'content-type': 'application/json'
},
body: '{"field1":"value1","field2":"value2"}'
};
fetch('https://cliq.zoho.com/api/v3/chats/987000000654321', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPSConnection("cliq.zoho.com")
payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}"
headers = {
'Authorization': "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
'content-type': "application/json"
}
conn.request("PUT", "/api/v3/chats/987000000654321", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("https");
const options = {
"method": "PUT",
"hostname": "cliq.zoho.com",
"port": null,
"path": "/api/v3/chats/987000000654321",
"headers": {
"Authorization": "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
"content-type": "application/json"
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.write(JSON.stringify({field1: 'value1', field2: 'value2'}));
req.end();
var client = new RestClient("https://cliq.zoho.com/api/v3/chats/987000000654321");
var request = new RestRequest(Method.PUT);
request.AddHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\"field1\":\"value1\",\"field2\":\"value2\"}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Put,
RequestUri = new Uri("https://cliq.zoho.com/api/v3/chats/987000000654321"),
Headers =
{
{ "Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" },
},
Content = new StringContent("{\"field1\":\"value1\",\"field2\":\"value2\"}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://cliq.zoho.com/api/v3/chats/987000000654321"
payload := strings.NewReader("{\"field1\":\"value1\",\"field2\":\"value2\"}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
const data = JSON.stringify({
"field1": "value1",
"field2": "value2"
});
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("PUT", "https://cliq.zoho.com/api/v3/chats/987000000654321");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.setRequestHeader("content-type", "application/json");
xhr.send(data);
curl --request PUT \
--url https://cliq.zoho.com/api/v3/chats/987000000654321 \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
--header 'content-type: application/json' \
--data '{"field1":"value1","field2":"value2"}'
{
"operation": "update_title",
"title": "Quarterly Rewards"
}
{
"operation": "update_history_status",
"history_status": "enabled"
}
{
"type": "chat.title",
"data": {
"title": "Quarterly Rewards",
"chat_id": "1424358626334691820"
}
}
"204 No response"
{
"message": "The request cannot be performed. Usually because of malformed parameter or missing parameter."
}
{
"message": "Request was rejected because of invalid AuthToken."
}
{
"message": "The user does not have enough permission or possibly not an user of the respective organization to access the resource."
}
{
"message": "The URL you've sent is wrong. It's possible that the resource you've requested has been moved to another URL."
}
{
"message": "Too many requests within a certain time frame."
}
{
"message": "Cliq server encountered an error which prevents it from fulfilling the request."
}
Retrieve chat details
AI Tools
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Retrieve details of a specific chat by its unique identifier. You can specify optional fields to include in the response for more efficient data retrieval.
Threshold limit: 60 requests per min per user
Number of API calls allowed within a minute.
Lock period: 5 minutes
Wait time before consecutive API requests.
Possible Error Codes
| Error Code | Description |
|---|---|
chat_access_denied |
You must be a participant in this chat to perform this action. |
chat_operation_failed |
Unable to perform the action. Please retry. |
Error Response Format
When an error occurs, the API returns a JSON response in this format:
{"message": "A human-readable description of the error.", "code": "error_code"}
where code is the error identifier (as listed in the table above) and message is a human-readable explanation of what went wrong.
OAuth Scope : ZohoCliq.Chats.READ
Path Parameters
Query Parameters
By default, a standard set of fields is returned. Use this parameter to include additional fields or to optimize performance by excluding unnecessary data.
Example:
https://cliq.zoho.com/api/v3/chats/{CHAT_ID}?fields=title,chat_type,participant_count,permissions
headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/chats/987000000654321"
type: GET
headers: headers_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://cliq.zoho.com/api/v3/chats/987000000654321")
.get()
.addHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'GET',
headers: {
Authorization: 'Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
}
};
fetch('https://cliq.zoho.com/api/v3/chats/987000000654321', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPSConnection("cliq.zoho.com")
headers = { 'Authorization': "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" }
conn.request("GET", "/api/v3/chats/987000000654321", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("https");
const options = {
"method": "GET",
"hostname": "cliq.zoho.com",
"port": null,
"path": "/api/v3/chats/987000000654321",
"headers": {
"Authorization": "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.end();
var client = new RestClient("https://cliq.zoho.com/api/v3/chats/987000000654321");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
IRestResponse response = client.Execute(request);
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://cliq.zoho.com/api/v3/chats/987000000654321"),
Headers =
{
{ "Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://cliq.zoho.com/api/v3/chats/987000000654321"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
const data = null;
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("GET", "https://cliq.zoho.com/api/v3/chats/987000000654321");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.send(data);
curl --request GET \
--url https://cliq.zoho.com/api/v3/chats/987000000654321 \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
{
"type": "chat",
"data": {
"chat_id": "2890538000000012345",
"name": "Q2 Product Review - Design, Engineering & QA",
"chat_type": "group_chat",
"participant_count": 5,
"created_time": "2025-06-15T10:30:00+05:30",
"last_modified_time": "2025-06-15T10:30:00+05:30",
"pinned": false,
"removed": false,
"creator": {
"id": "70027934",
"name": "Tim Harrison"
},
"unread_message_count": 3
}
}
{
"message": "The request cannot be performed. Usually because of malformed parameter or missing parameter."
}
{
"message": "Request was rejected because of invalid AuthToken."
}
{
"message": "The user does not have enough permission or possibly not an user of the respective organization to access the resource."
}
{
"message": "The URL you've sent is wrong. It's possible that the resource you've requested has been moved to another URL."
}
{
"message": "Too many requests within a certain time frame."
}
{
"message": "Cliq server encountered an error which prevents it from fulfilling the request."
}
Update Chat Read or Unread Status
AI Tools
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Marks a single chat as read or unread for the calling user.
Supported operations:
mark_as_read: Marks the chat as read up to a specific message. Pass thelast_message_idof the chat till to be read.mark_as_unread: Marks the chat as unread from a specific message. Pass the targetmessage_id.
Threshold limit: 60 requests per min
Number of API calls allowed within a minute.
Possible Error Codes
| Error Code | Description |
|---|---|
invalid.inputs.submitted |
Invalid inputs |
chat_access_denied |
Caller is not a participant of this chat |
chat_operation_failed |
Unexpected server error |
Error Response Format
When an error occurs, the API returns a JSON response in this format:
{"message": "A human-readable description of the error.", "code": "error_code"}
where code is the error identifier (as listed in the table above) and message is a human-readable explanation of what went wrong.
OAuth Scope : ZohoCliq.Chats.UPDATE
Arguments
Allowed values:
- mark_as_read: Marks the chat as read up to a specific message. Requires the
last_message_idfield. - mark_as_unread: Marks the chat as unread from a specific message. Requires the
message_idfield indicating the message from which to mark as unread.
operation is mark_as_read.
operation is mark_as_unread.
Path Parameters
Note:
CHAT_ID1 is a documentation alias for CHAT_ID, used to separate the "Update Chat Read or Unread Status" operation for better readability while sharing the same /chats/{CHAT_ID} endpoint.
parameters_data='{"field1":"value1","field2":"value2"}';
headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/chats/CHAT_ID"
type: PUT
headers: headers_data
content-type: application/json
parameters: parameters_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}");
Request request = new Request.Builder()
.url("https://cliq.zoho.com/api/v3/chats/CHAT_ID")
.put(body)
.addHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'PUT',
headers: {
Authorization: 'Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f',
'content-type': 'application/json'
},
body: '{"field1":"value1","field2":"value2"}'
};
fetch('https://cliq.zoho.com/api/v3/chats/CHAT_ID', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPSConnection("cliq.zoho.com")
payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}"
headers = {
'Authorization': "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
'content-type': "application/json"
}
conn.request("PUT", "/api/v3/chats/CHAT_ID", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("https");
const options = {
"method": "PUT",
"hostname": "cliq.zoho.com",
"port": null,
"path": "/api/v3/chats/CHAT_ID",
"headers": {
"Authorization": "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
"content-type": "application/json"
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.write(JSON.stringify({field1: 'value1', field2: 'value2'}));
req.end();
var client = new RestClient("https://cliq.zoho.com/api/v3/chats/CHAT_ID");
var request = new RestRequest(Method.PUT);
request.AddHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\"field1\":\"value1\",\"field2\":\"value2\"}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Put,
RequestUri = new Uri("https://cliq.zoho.com/api/v3/chats/CHAT_ID"),
Headers =
{
{ "Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" },
},
Content = new StringContent("{\"field1\":\"value1\",\"field2\":\"value2\"}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://cliq.zoho.com/api/v3/chats/CHAT_ID"
payload := strings.NewReader("{\"field1\":\"value1\",\"field2\":\"value2\"}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
const data = JSON.stringify({
"field1": "value1",
"field2": "value2"
});
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("PUT", "https://cliq.zoho.com/api/v3/chats/CHAT_ID");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.setRequestHeader("content-type", "application/json");
xhr.send(data);
curl --request PUT \
--url https://cliq.zoho.com/api/v3/chats/CHAT_ID \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
--header 'content-type: application/json' \
--data '{"field1":"value1","field2":"value2"}'
{
"operation": "mark_as_read",
"last_message_id": "1773813859592_51531973059"
}
{
"operation": "mark_as_unread",
"message_id": "1773813859592_51531973059"
}
{
"Response Code": "204 No response"
}
{
"message": "The request cannot be performed. Usually because of malformed parameter or missing parameter."
}
{
"message": "Request was rejected because of invalid AuthToken."
}
{
"message": "The user does not have enough permission or possibly not an user of the respective organization to access the resource."
}
{
"message": "Too many requests within a certain time frame."
}
{
"message": "Cliq server encountered an error which prevents it from fulfilling the request."
}
Clear Local Chat History
AI Tools
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Clears the local message history of a chat for the current user. The chat itself and all members remain intact; only the locally visible message history is cleared.
Only supported for direct messages and group chats.
Threshold limit: 60 requests per min
Number of API calls allowed within a minute.
Possible Error Codes
| Error Code | Description |
|---|---|
param_missing |
The param 'operation' is missing. |
invalid.inputs.submitted |
Incorrect values submitted. |
chat_clear_local_history_not_supported |
Clear local history is only supported for direct messages and group chats. |
chat_access_denied |
You must be a participant in this chat to perform this action. |
chat_clear_local_history_failed |
Unable to clear local history. Please retry. |
Error Response Format
When an error occurs, the API returns a JSON response in this format:
{"message": "A human-readable description of the error.", "code": "error_code"}
where code is the error identifier (as listed in the table above) and message is a human-readable explanation of what went wrong.
OAuth Scope : ZohoCliq.Chats.UPDATE
Arguments
clear_local_history to clear the local chat history.Path Parameters
Note:
CHAT_ID2 is a documentation alias for CHAT_ID, used to separate the "Clear Local Chat History" operation for better readability while sharing the same /chats/{CHAT_ID} endpoint.
parameters_data='{"field1":"value1","field2":"value2"}';
headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/chats/CHAT_ID"
type: PUT
headers: headers_data
content-type: application/json
parameters: parameters_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}");
Request request = new Request.Builder()
.url("https://cliq.zoho.com/api/v3/chats/CHAT_ID")
.put(body)
.addHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'PUT',
headers: {
Authorization: 'Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f',
'content-type': 'application/json'
},
body: '{"field1":"value1","field2":"value2"}'
};
fetch('https://cliq.zoho.com/api/v3/chats/CHAT_ID', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPSConnection("cliq.zoho.com")
payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}"
headers = {
'Authorization': "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
'content-type': "application/json"
}
conn.request("PUT", "/api/v3/chats/CHAT_ID", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("https");
const options = {
"method": "PUT",
"hostname": "cliq.zoho.com",
"port": null,
"path": "/api/v3/chats/CHAT_ID",
"headers": {
"Authorization": "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
"content-type": "application/json"
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.write(JSON.stringify({field1: 'value1', field2: 'value2'}));
req.end();
var client = new RestClient("https://cliq.zoho.com/api/v3/chats/CHAT_ID");
var request = new RestRequest(Method.PUT);
request.AddHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\"field1\":\"value1\",\"field2\":\"value2\"}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Put,
RequestUri = new Uri("https://cliq.zoho.com/api/v3/chats/CHAT_ID"),
Headers =
{
{ "Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" },
},
Content = new StringContent("{\"field1\":\"value1\",\"field2\":\"value2\"}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://cliq.zoho.com/api/v3/chats/CHAT_ID"
payload := strings.NewReader("{\"field1\":\"value1\",\"field2\":\"value2\"}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
const data = JSON.stringify({
"field1": "value1",
"field2": "value2"
});
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("PUT", "https://cliq.zoho.com/api/v3/chats/CHAT_ID");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.setRequestHeader("content-type", "application/json");
xhr.send(data);
curl --request PUT \
--url https://cliq.zoho.com/api/v3/chats/CHAT_ID \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
--header 'content-type: application/json' \
--data '{"field1":"value1","field2":"value2"}'
{
"operation": "clear_local_history"
}
{
"Response Code": "204 No response"
}
{
"message": "The request cannot be performed. Usually because of malformed parameter or missing parameter."
}
{
"message": "Request was rejected because of invalid AuthToken."
}
{
"message": "The user does not have enough permission or possibly not an user of the respective organization to access the resource."
}
{
"message": "Too many requests within a certain time frame."
}
{
"message": "Cliq server encountered an error which prevents it from fulfilling the request."
}
Add members to a chat
AI Tools
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Adds one or more users to an existing group chat.
Threshold limit: 20 requests per min per user
Number of API calls allowed within a minute.
Lock period: 10 minutes
Wait time before consecutive API requests.
Possible Error Codes
| Error Code | Description |
|---|---|
group_chat_participants_limit_exceeded |
The maximum number of participants for this chat has been reached. |
one_to_one_chat_add_member_not_allowed |
Adding members to a one-to-one chat is not allowed. |
chat_with_other_org_disabled |
Adding members from other organizations is disabled. |
member_add_failed |
An unexpected error occurred while adding members. |
service_unavailable |
The messaging service is temporarily unavailable. Please try again later. |
Error Response Format
When an error occurs, the API returns a JSON response in this format:
{"message": "A human-readable description of the error.", "code": "error_code"}
where code is the error identifier (as listed in the table above) and message is a human-readable explanation of what went wrong.
OAuth Scope : ZohoCliq.Chats.UPDATE
Arguments
Path Parameters
parameters_data='{"field1":"value1","field2":"value2"}';
headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/chats/%7BCHAT_ID3%7D"
type: POST
headers: headers_data
content-type: application/json
parameters: parameters_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}");
Request request = new Request.Builder()
.url("https://cliq.zoho.com/api/v3/chats/%7BCHAT_ID3%7D")
.post(body)
.addHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'POST',
headers: {
Authorization: 'Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f',
'content-type': 'application/json'
},
body: '{"field1":"value1","field2":"value2"}'
};
fetch('https://cliq.zoho.com/api/v3/chats/%7BCHAT_ID3%7D', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPSConnection("cliq.zoho.com")
payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}"
headers = {
'Authorization': "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
'content-type': "application/json"
}
conn.request("POST", "/api/v3/chats/%7BCHAT_ID3%7D", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("https");
const options = {
"method": "POST",
"hostname": "cliq.zoho.com",
"port": null,
"path": "/api/v3/chats/%7BCHAT_ID3%7D",
"headers": {
"Authorization": "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
"content-type": "application/json"
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.write(JSON.stringify({field1: 'value1', field2: 'value2'}));
req.end();
var client = new RestClient("https://cliq.zoho.com/api/v3/chats/%7BCHAT_ID3%7D");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\"field1\":\"value1\",\"field2\":\"value2\"}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://cliq.zoho.com/api/v3/chats/%7BCHAT_ID3%7D"),
Headers =
{
{ "Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" },
},
Content = new StringContent("{\"field1\":\"value1\",\"field2\":\"value2\"}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://cliq.zoho.com/api/v3/chats/%7BCHAT_ID3%7D"
payload := strings.NewReader("{\"field1\":\"value1\",\"field2\":\"value2\"}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
const data = JSON.stringify({
"field1": "value1",
"field2": "value2"
});
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("POST", "https://cliq.zoho.com/api/v3/chats/%7BCHAT_ID3%7D");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.setRequestHeader("content-type", "application/json");
xhr.send(data);
curl --request POST \
--url https://cliq.zoho.com/api/v3/chats/%7BCHAT_ID3%7D \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
--header 'content-type: application/json' \
--data '{"field1":"value1","field2":"value2"}'
{
"user_ids": [
"55743307",
"55622727"
]
}
{
"type": "chat.member",
"data": {
"chat_id": "2971901296197152390",
"added_user_ids": [
"55743307",
"55622727"
]
}
}
{
"message": "The request cannot be performed. Usually because of malformed parameter or missing parameter."
}
{
"message": "Request was rejected because of invalid AuthToken."
}
{
"message": "The user does not have enough permission or possibly not an user of the respective organization to access the resource."
}
{
"message": "Too many requests within a certain time frame."
}
{
"message": "Cliq server encountered an error which prevents it from fulfilling the request."
}
{
"message": "The messaging service is temporarily unavailable. Please try again later."
}
Close a chat
AI Tools
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Closes a chat by removing it from the recent chats list of the user. The chat will still be accessible through search and other means, all members remain intact and only the visibility in recent chats is affected.
Threshold limit: 60 requests per min
Number of API calls allowed within a minute.
Possible Error Codes
| Error Code | Description |
|---|---|
chat_access_denied |
Caller is not a participant of this chat. |
chat_operation_failed |
Unexpected server error. |
Error Response Format
When an error occurs, the API returns a JSON response in this format:
{"message": "A human-readable description of the error.", "code": "error_code"}
where code is the error identifier (as listed in the table above) and message is a human-readable explanation of what went wrong.
OAuth Scope : ZohoCliq.Chats.UPDATE
Arguments
close_chat to remove the chat from recent chats.Path Parameters
Note:
CHAT_ID3 is a documentation alias for CHAT_ID, used to separate the "Close a chat" operation for better readability while sharing the same /chats/{CHAT_ID} endpoint.
parameters_data='{"field1":"value1","field2":"value2"}';
headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/chats/CHAT_ID"
type: PUT
headers: headers_data
content-type: application/json
parameters: parameters_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}");
Request request = new Request.Builder()
.url("https://cliq.zoho.com/api/v3/chats/CHAT_ID")
.put(body)
.addHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'PUT',
headers: {
Authorization: 'Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f',
'content-type': 'application/json'
},
body: '{"field1":"value1","field2":"value2"}'
};
fetch('https://cliq.zoho.com/api/v3/chats/CHAT_ID', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPSConnection("cliq.zoho.com")
payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}"
headers = {
'Authorization': "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
'content-type': "application/json"
}
conn.request("PUT", "/api/v3/chats/CHAT_ID", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("https");
const options = {
"method": "PUT",
"hostname": "cliq.zoho.com",
"port": null,
"path": "/api/v3/chats/CHAT_ID",
"headers": {
"Authorization": "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
"content-type": "application/json"
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.write(JSON.stringify({field1: 'value1', field2: 'value2'}));
req.end();
var client = new RestClient("https://cliq.zoho.com/api/v3/chats/CHAT_ID");
var request = new RestRequest(Method.PUT);
request.AddHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\"field1\":\"value1\",\"field2\":\"value2\"}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Put,
RequestUri = new Uri("https://cliq.zoho.com/api/v3/chats/CHAT_ID"),
Headers =
{
{ "Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" },
},
Content = new StringContent("{\"field1\":\"value1\",\"field2\":\"value2\"}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://cliq.zoho.com/api/v3/chats/CHAT_ID"
payload := strings.NewReader("{\"field1\":\"value1\",\"field2\":\"value2\"}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
const data = JSON.stringify({
"field1": "value1",
"field2": "value2"
});
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("PUT", "https://cliq.zoho.com/api/v3/chats/CHAT_ID");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.setRequestHeader("content-type", "application/json");
xhr.send(data);
curl --request PUT \
--url https://cliq.zoho.com/api/v3/chats/CHAT_ID \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
--header 'content-type: application/json' \
--data '{"field1":"value1","field2":"value2"}'
{
"operation": "close_chat"
}
{
"Response Code": "204 No response"
}
{
"message": "The request cannot be performed. Usually because of malformed parameter or missing parameter."
}
{
"message": "Request was rejected because of invalid AuthToken."
}
{
"message": "The user does not have enough permission or possibly not an user of the respective organization to access the resource."
}
{
"message": "Too many requests within a certain time frame."
}
{
"message": "Cliq server encountered an error which prevents it from fulfilling the request."
}
Remove members from a chat
AI Tools
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Removes one or more users from an existing group chat.
Threshold limit: 20 requests per min per user
Number of API calls allowed within a minute.
Lock period: 10 minutes
Wait time before consecutive API requests.
Possible Error Codes
| Error Code | Description |
|---|---|
one_to_one_chat_delete_member_not_allowed |
Removing members from a one-to-one chat is not allowed. |
member_delete_failed |
An unexpected error occurred while removing members. |
service_unavailable |
The messaging service is temporarily unavailable. Please try again later. |
Error Response Format
When an error occurs, the API returns a JSON response in this format:
{"message": "A human-readable description of the error.", "code": "error_code"}
where code is the error identifier (as listed in the table above) and message is a human-readable explanation of what went wrong.
OAuth Scope : ZohoCliq.Chats.DELETE
Path Parameters
Query Parameters
55743307,55622727headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/chats/%7BCHAT_ID3%7D?user_ids=SOME_STRING_VALUE"
type: DELETE
headers: headers_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://cliq.zoho.com/api/v3/chats/%7BCHAT_ID3%7D?user_ids=SOME_STRING_VALUE")
.delete(null)
.addHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'DELETE',
headers: {
Authorization: 'Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
}
};
fetch('https://cliq.zoho.com/api/v3/chats/%7BCHAT_ID3%7D?user_ids=SOME_STRING_VALUE', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPSConnection("cliq.zoho.com")
headers = { 'Authorization': "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" }
conn.request("DELETE", "/api/v3/chats/%7BCHAT_ID3%7D?user_ids=SOME_STRING_VALUE", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("https");
const options = {
"method": "DELETE",
"hostname": "cliq.zoho.com",
"port": null,
"path": "/api/v3/chats/%7BCHAT_ID3%7D?user_ids=SOME_STRING_VALUE",
"headers": {
"Authorization": "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.end();
var client = new RestClient("https://cliq.zoho.com/api/v3/chats/%7BCHAT_ID3%7D?user_ids=SOME_STRING_VALUE");
var request = new RestRequest(Method.DELETE);
request.AddHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
IRestResponse response = client.Execute(request);
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Delete,
RequestUri = new Uri("https://cliq.zoho.com/api/v3/chats/%7BCHAT_ID3%7D?user_ids=SOME_STRING_VALUE"),
Headers =
{
{ "Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://cliq.zoho.com/api/v3/chats/%7BCHAT_ID3%7D?user_ids=SOME_STRING_VALUE"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
const data = null;
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("DELETE", "https://cliq.zoho.com/api/v3/chats/%7BCHAT_ID3%7D?user_ids=SOME_STRING_VALUE");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.send(data);
curl --request DELETE \
--url 'https://cliq.zoho.com/api/v3/chats/%7BCHAT_ID3%7D?user_ids=SOME_STRING_VALUE' \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
{
"type": "chat.member",
"data": {
"chat_id": "1729901956721293190",
"removed_user_ids": [
"55743307",
"55622727"
]
}
}
{
"message": "The request cannot be performed. Usually because of malformed parameter or missing parameter."
}
{
"message": "Request was rejected because of invalid AuthToken."
}
{
"message": "The user does not have enough permission or possibly not an user of the respective organization to access the resource."
}
{
"message": "Too many requests within a certain time frame."
}
{
"message": "Cliq server encountered an error which prevents it from fulfilling the request."
}
{
"message": "The messaging service is temporarily unavailable. Please try again later."
}
Fork a chat
AI Tools
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Fork chats help you start a new conversation from an existing one (1-1, Group Chat, Channel). You can choose how many users you want to share the chat with and from which point you want to share it.
With this API , you can create a new chat with a selected set of messages from the original chat. This is useful when you want to start a new discussion based on a specific topic or context from an existing chat, without sharing the entire chat history.
Threshold limit: 50 requests per min
Number of API calls allowed within a minute.
Lock period: 10 seconds
Wait time before consecutive API requests.
Possible Error Codes
| Error Code | Description |
|---|---|
invalid_request |
Fork input payload is invalid or incomplete. |
operation_failed |
Unable to create forked chat due to an internal error. |
Error Response Format
When an error occurs, the API returns a JSON response in this format:
{"message": "A human-readable description of the error.", "code": "error_code"}
where code is the error identifier (as listed in the table above) and message is a human-readable explanation of what went wrong.
OAuth Scope : ZohoCliq.Chats.CREATE
Arguments
55743307,55622727
user_ids field will be ignored and all participants will be included.
Path Parameters
parameters_data='{"field1":"value1","field2":"value2"}';
headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/chats/987000000654321/forks"
type: POST
headers: headers_data
content-type: application/json
parameters: parameters_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}");
Request request = new Request.Builder()
.url("https://cliq.zoho.com/api/v3/chats/987000000654321/forks")
.post(body)
.addHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'POST',
headers: {
Authorization: 'Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f',
'content-type': 'application/json'
},
body: '{"field1":"value1","field2":"value2"}'
};
fetch('https://cliq.zoho.com/api/v3/chats/987000000654321/forks', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPSConnection("cliq.zoho.com")
payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}"
headers = {
'Authorization': "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
'content-type': "application/json"
}
conn.request("POST", "/api/v3/chats/987000000654321/forks", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("https");
const options = {
"method": "POST",
"hostname": "cliq.zoho.com",
"port": null,
"path": "/api/v3/chats/987000000654321/forks",
"headers": {
"Authorization": "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
"content-type": "application/json"
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.write(JSON.stringify({field1: 'value1', field2: 'value2'}));
req.end();
var client = new RestClient("https://cliq.zoho.com/api/v3/chats/987000000654321/forks");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\"field1\":\"value1\",\"field2\":\"value2\"}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://cliq.zoho.com/api/v3/chats/987000000654321/forks"),
Headers =
{
{ "Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" },
},
Content = new StringContent("{\"field1\":\"value1\",\"field2\":\"value2\"}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://cliq.zoho.com/api/v3/chats/987000000654321/forks"
payload := strings.NewReader("{\"field1\":\"value1\",\"field2\":\"value2\"}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
const data = JSON.stringify({
"field1": "value1",
"field2": "value2"
});
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("POST", "https://cliq.zoho.com/api/v3/chats/987000000654321/forks");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.setRequestHeader("content-type", "application/json");
xhr.send(data);
curl --request POST \
--url https://cliq.zoho.com/api/v3/chats/987000000654321/forks \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
--header 'content-type: application/json' \
--data '{"field1":"value1","field2":"value2"}'
{
"message_id": "1234567890123456789",
"user_ids": "631830848,631830849",
"include_participants": false,
"title": "Discussion on Q3 Marketing Strategy"
}
{
"type": "chat",
"data": {
"chat_id": "3104729000000098765",
"name": "Fork: Q2 Product Review - Design, Engineering & QA",
"chat_type": "group_chat",
"participant_count": 3,
"created_time": "2025-04-29T10:00:00+05:30",
"last_modified_time": "2025-04-29T10:00:00+05:30",
"pinned": false,
"removed": false,
"creator": {
"id": "70027934",
"name": "Tim Harrison"
}
}
}
{
"message": "The request cannot be performed. Usually because of malformed parameter or missing parameter."
}
{
"message": "Request was rejected because of invalid AuthToken."
}
{
"message": "The user does not have enough permission or possibly not an user of the respective organization to access the resource."
}
{
"message": "Too many requests within a certain time frame."
}
{
"message": "Cliq server encountered an error which prevents it from fulfilling the request."
}
Send Typing Indicator
AI Tools
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Open in ChatGPT
Open in ChatGPT to ask questions about this page
Open in Claude
Open in Claude to ask questions about this page
Copy as Markdown
Copy this page as markdown to use with AI assistants
View as Markdown
Open this page as markdown in a new tab
Sends a typing indicator activity to a chat, signaling that the user is currently typing a message.
Threshold limit: 100 requests per min per user
Number of API calls allowed within a minute.
Lock period: 50 minutes
Wait time before consecutive API requests.
Possible Error Codes
| Error Code | Description |
|---|---|
param_missing |
The param 'action' is missing. |
invalid.inputs.submitted |
Incorrect values submitted. |
chat_access_denied |
You must be a participant in this chat to perform this action. |
chat_operation_failed |
Unable to perform the action. Please retry. |
Error Response Format
When an error occurs, the API returns a JSON response in this format:
{"message": "A human-readable description of the error.", "code": "error_code"}
where code is the error identifier (as listed in the table above) and message is a human-readable explanation of what went wrong.
OAuth Scope : ZohoCliq.Chats.UPDATE
Arguments
Allowed values:
typing: Indicates that the user is currently typing a message.text_entered: Indicates that the user has entered text but has not yet sent the message.text_cleared: Indicates that the user has cleared the entered text.
Path Parameters
parameters_data='{"field1":"value1","field2":"value2"}';
headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/chats/987000000654321/activities"
type: POST
headers: headers_data
content-type: application/json
parameters: parameters_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}");
Request request = new Request.Builder()
.url("https://cliq.zoho.com/api/v3/chats/987000000654321/activities")
.post(body)
.addHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'POST',
headers: {
Authorization: 'Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f',
'content-type': 'application/json'
},
body: '{"field1":"value1","field2":"value2"}'
};
fetch('https://cliq.zoho.com/api/v3/chats/987000000654321/activities', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPSConnection("cliq.zoho.com")
payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}"
headers = {
'Authorization': "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
'content-type': "application/json"
}
conn.request("POST", "/api/v3/chats/987000000654321/activities", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("https");
const options = {
"method": "POST",
"hostname": "cliq.zoho.com",
"port": null,
"path": "/api/v3/chats/987000000654321/activities",
"headers": {
"Authorization": "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
"content-type": "application/json"
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.write(JSON.stringify({field1: 'value1', field2: 'value2'}));
req.end();
var client = new RestClient("https://cliq.zoho.com/api/v3/chats/987000000654321/activities");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\"field1\":\"value1\",\"field2\":\"value2\"}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://cliq.zoho.com/api/v3/chats/987000000654321/activities"),
Headers =
{
{ "Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" },
},
Content = new StringContent("{\"field1\":\"value1\",\"field2\":\"value2\"}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://cliq.zoho.com/api/v3/chats/987000000654321/activities"
payload := strings.NewReader("{\"field1\":\"value1\",\"field2\":\"value2\"}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
const data = JSON.stringify({
"field1": "value1",
"field2": "value2"
});
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("POST", "https://cliq.zoho.com/api/v3/chats/987000000654321/activities");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.setRequestHeader("content-type", "application/json");
xhr.send(data);
curl --request POST \
--url https://cliq.zoho.com/api/v3/chats/987000000654321/activities \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
--header 'content-type: application/json' \
--data '{"field1":"value1","field2":"value2"}'
{
"action": "typing"
}
{
"action": "text_entered"
}
{
"action": "text_cleared"
}
{
"Response Code": "204 No response"
}
{
"message": "The request cannot be performed. Usually because of malformed parameter or missing parameter."
}
{
"message": "Request was rejected because of invalid AuthToken."
}
{
"message": "The user does not have enough permission or possibly not an user of the respective organization to access the resource."
}
{
"message": "Too many requests within a certain time frame."
}
{
"message": "Cliq server encountered an error which prevents it from fulfilling the request."
}