Datastores
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
Cliq Database serves as an ideal storage interface for building integrations on the Cliq Platform. It allows you to create, modify, store, and synchronize easily accessible data items.
You can access the Cliq Record APIs using the following OAuth scope:
- OAuth Scope for Record APIs: ZohoCliq.Datastores.ALL , ZohoCliq.DatastoreRecords.ALL
- This scope provides basic CRUD (Create, Read, Update, Delete) access to the Record APIs.
Create a datastore
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 Datastore for the organisation.
A Datastore is a structured storage table scoped to the organisation (or an extension) that allows platform components to persist and query data across executions.
Threshold limit: 10 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 |
|---|---|
datastore_creation_limit_exceeded |
The maximum number of datastores allowed for the organisation has been reached. |
datastore_name_already_exists |
A datastore with the same name already exists in the organisation. |
datastore_invalid_creation_data |
The request body contains invalid or malformed data for datastore creation. |
datastore_fields_required |
At least one field definition must be provided to create a datastore. |
datastore_fields_invalid_value |
One or more field definitions contain an invalid value. |
datastore_fields_limit_exceeded |
The number of fields exceeds the maximum limit of 19 (plus the default record ID field). |
datastore_fields_duplicate_column |
Two or more fields share the same column name. Field names must be unique within a datastore. |
datastore_access_denied |
The authenticated user does not have permission to create a datastore. |
datastore_unique_key_column_not_found |
A field referenced in a unique key constraint does not exist in the datastore's field definitions. |
datastore_field_name_reserved |
One or more field names use a reserved keyword that cannot be used as a field name. |
datastore_field_unique_key_not_supported |
A field of type encrypted-text or large-text was included in a unique key constraint, which is not supported. |
datastore_field_mask_not_supported |
Masking was specified for a field type that does not support it. Only limited-text and number fields support masking. |
datastore_invalid |
The datastore data is invalid or in an unexpected state. |
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 : Datastores.CREATE
Arguments
Accepts lowercase letters, numbers, and underscores only, and must start with a letter. This is used in API endpoints and should be unique across datastores.
Maximum length: 20 characters.
Can contain letters, numbers, and spaces. This is used for display purposes in the UI and can be non-unique.
Maximum length: 20 characters.
A brief description about the datastore's purpose or contents.
Maximum length: 250 characters.
Each field defines a column in the datastore with specific attributes and constraints.
A datastore can have a maximum of 20 fields including the default record ID field.
Accepts lowercase letters, numbers, and underscores only, and must start with a letter. This is used in API endpoints to reference the field.
Maximum length: 20 characters.
Can contain letters, numbers, and spaces. This is used for display purposes in the UI.
Maximum length: 20 characters.
Determines the kind of data that can be stored in this field and the operations that can be performed on it.
Allowed values:
- boolean: Stores true/false values.
- number: Stores numeric values. Can be used for mathematical operations.
- limited-text: Stores short text up to 250 characters. Cannot be used for full-text search.
- encrypted-text: Stores sensitive text data in encrypted form. Cannot be included in unique key constraints and does not support masking. Maximum length: 1000 characters.
- large-text: Stores long text data up to 65,535 characters. Suitable for descriptions, comments, etc. Cannot be included in unique key constraints.
Note: Masking is not supported for encrypted-text fields. Encrypted fields are already stored in protected form and cannot be additionally masked.
Maximum length: 100 characters.
unique_name values that must be collectively unique across all records.- A maximum of 4 unique key constraints can be defined per datastore.
- Each constraint is an array of one or more field
unique_namevalues. - Fields of type encrypted-text or large-text cannot be included in a unique key constraint.
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/datastores"
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/datastores")
.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/datastores', 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/datastores", 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/datastores",
"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/datastores");
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/datastores"),
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/datastores"
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/datastores");
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/datastores \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
--header 'content-type: application/json' \
--data '{"field1":"value1","field2":"value2"}'
{
"unique_name": "empdir",
"name": "Employee Directory",
"description": "V3 API test datastore",
"fields": [
{
"name": "Notes",
"unique_name": "notes",
"type": "large-text",
"mandatory": false
},
{
"name": "Employee ID",
"unique_name": "empid",
"type": "number",
"mandatory": true
},
{
"name": "Employee Name",
"unique_name": "empname",
"type": "limited-text",
"mandatory": true
},
{
"name": "Active Status",
"unique_name": "isactive",
"type": "boolean",
"mandatory": false
}
],
"unique_keys": [
[
"empid"
]
]
}
{
"url": "/api/v3/datastores",
"type": "datastore",
"data": {
"unique_name": "empdir",
"name": "Employee Directory",
"id": "227828000000132001",
"creator": {
"name": "NP NTC",
"id": "119440882"
},
"status": "enabled",
"fields": [
{
"default_value": "",
"masked": false,
"name": "Notes",
"unique_name": "notes",
"type": "large-text",
"mandatory": false,
"id": "17202020414617773604009000"
},
{
"default_value": "0",
"masked": false,
"name": "Employee ID",
"unique_name": "empid",
"type": "number",
"mandatory": true,
"id": "17202020414617773604009001"
},
{
"default_value": "",
"masked": false,
"name": "Employee Name",
"unique_name": "empname",
"type": "limited-text",
"mandatory": true,
"id": "17202020414617773604009002"
},
{
"default_value": "true",
"masked": false,
"name": "Active Status",
"unique_name": "isactive",
"type": "boolean",
"mandatory": false,
"id": "17202020414617773604009003"
}
],
"type": "custom",
"description": "V3 API test datastore",
"unique_keys": [
[
"empid"
]
],
"scope": "personal"
}
}
{
"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."
}
List all datastores
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 a paginated list of all datastores defined for the organisation.
Threshold limit: 30 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 |
|---|---|
bulk_record_update_failed |
Failed to update one or more records. |
invalid_record_criteria |
Criteria expression is invalid. |
datastore_not_found |
Datastore with the given identifier does not exist. |
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 : Datastores.READ
Query Parameters
headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/datastores"
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/datastores")
.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/datastores', 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/datastores", 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/datastores",
"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/datastores");
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/datastores"),
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/datastores"
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/datastores");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.send(data);
curl --request GET \
--url https://cliq.zoho.com/api/v3/datastores \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
{
"url": "/api/v3/datastores",
"type": "datastore",
"data": {
"unique_name": "empdir",
"name": "Employee Directory",
"id": "227828000000132001",
"creator": {
"name": "NP NTC",
"id": "119440882"
},
"status": "enabled",
"fields": [
{
"default_value": "",
"masked": false,
"name": "Notes",
"unique_name": "notes",
"type": "large-text",
"mandatory": false,
"id": "17202020414617773604009000"
},
{
"default_value": "0",
"masked": false,
"name": "Employee ID",
"unique_name": "empid",
"type": "number",
"mandatory": true,
"id": "17202020414617773604009001"
},
{
"default_value": "",
"masked": false,
"name": "Employee Name",
"unique_name": "empname",
"type": "limited-text",
"mandatory": true,
"id": "17202020414617773604009002"
},
{
"default_value": "true",
"masked": false,
"name": "Active Status",
"unique_name": "isactive",
"type": "boolean",
"mandatory": false,
"id": "17202020414617773604009003"
}
],
"type": "custom",
"description": "V3 API test datastore",
"unique_keys": [
[
"empid"
]
],
"scope": "personal"
}
}
{
"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."
}
Edit a datastore
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
Update the metadata (name, description) of an existing datastore.
Threshold limit: 10 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 |
|---|---|
datastore_not_found |
Datastore with the given identifier does not exist. |
datastore_name_already_exists |
A datastore with the same name already exists in the organisation. |
datastore_access_denied |
The authenticated user does not have permission to edit this datastore. |
datastore_unique_key_column_not_found |
A field referenced in a unique key constraint does not exist in the datastore's field definitions. |
datastore_field_unique_key_not_supported |
A field of type encrypted-text or large-text was included in a unique key constraint, which is not supported. |
datastore_invalid |
The datastore data is invalid or in an unexpected state. |
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 : Datastores.UPDATE
Arguments
Accepts lowercase letters, numbers, and underscores only, and must start with a letter. This is used in API endpoints and should be unique across datastores.
Maximum length: 20 characters.
Can contain letters, numbers, and spaces. This is used for display purposes in the UI and can be non-unique.
Maximum length: 20 characters.
A brief description about the datastore's purpose or contents.
Maximum length: 250 characters.
- A maximum of 4 unique key constraints can be defined per datastore.
- Each constraint is an array of one or more field
unique_namevalues that must be collectively unique across all records. - Fields of type encrypted-text or large-text cannot be included in a unique key constraint.
Path Parameters
parameters_data='{"unique_name":"empdir","name":"Employee Directory","description":"Tracks employee records and department data","unique_keys":[["empid","empname"]]}';
headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/datastores/%7BDATASTORE_ID%7D"
type: PATCH
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, "{\"unique_name\":\"empdir\",\"name\":\"Employee Directory\",\"description\":\"Tracks employee records and department data\",\"unique_keys\":[[\"empid\",\"empname\"]]}");
Request request = new Request.Builder()
.url("https://cliq.zoho.com/api/v3/datastores/%7BDATASTORE_ID%7D")
.patch(body)
.addHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'PATCH',
headers: {
Authorization: 'Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f',
'content-type': 'application/json'
},
body: '{"unique_name":"empdir","name":"Employee Directory","description":"Tracks employee records and department data","unique_keys":[["empid","empname"]]}'
};
fetch('https://cliq.zoho.com/api/v3/datastores/%7BDATASTORE_ID%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 = "{\"unique_name\":\"empdir\",\"name\":\"Employee Directory\",\"description\":\"Tracks employee records and department data\",\"unique_keys\":[[\"empid\",\"empname\"]]}"
headers = {
'Authorization': "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
'content-type': "application/json"
}
conn.request("PATCH", "/api/v3/datastores/%7BDATASTORE_ID%7D", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("https");
const options = {
"method": "PATCH",
"hostname": "cliq.zoho.com",
"port": null,
"path": "/api/v3/datastores/%7BDATASTORE_ID%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({
unique_name: 'empdir',
name: 'Employee Directory',
description: 'Tracks employee records and department data',
unique_keys: [['empid', 'empname']]
}));
req.end();
var client = new RestClient("https://cliq.zoho.com/api/v3/datastores/%7BDATASTORE_ID%7D");
var request = new RestRequest(Method.PATCH);
request.AddHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\"unique_name\":\"empdir\",\"name\":\"Employee Directory\",\"description\":\"Tracks employee records and department data\",\"unique_keys\":[[\"empid\",\"empname\"]]}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Patch,
RequestUri = new Uri("https://cliq.zoho.com/api/v3/datastores/%7BDATASTORE_ID%7D"),
Headers =
{
{ "Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" },
},
Content = new StringContent("{\"unique_name\":\"empdir\",\"name\":\"Employee Directory\",\"description\":\"Tracks employee records and department data\",\"unique_keys\":[[\"empid\",\"empname\"]]}")
{
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/datastores/%7BDATASTORE_ID%7D"
payload := strings.NewReader("{\"unique_name\":\"empdir\",\"name\":\"Employee Directory\",\"description\":\"Tracks employee records and department data\",\"unique_keys\":[[\"empid\",\"empname\"]]}")
req, _ := http.NewRequest("PATCH", 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({
"unique_name": "empdir",
"name": "Employee Directory",
"description": "Tracks employee records and department data",
"unique_keys": [
[
"empid",
"empname"
]
]
});
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("PATCH", "https://cliq.zoho.com/api/v3/datastores/%7BDATASTORE_ID%7D");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.setRequestHeader("content-type", "application/json");
xhr.send(data);
curl --request PATCH \
--url https://cliq.zoho.com/api/v3/datastores/%7BDATASTORE_ID%7D \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
--header 'content-type: application/json' \
--data '{"unique_name":"empdir","name":"Employee Directory","description":"Tracks employee records and department data","unique_keys":[["empid","empname"]]}'
{
"unique_name": "empdir",
"name": "Employee Directory",
"description": "Tracks employee records and department data",
"unique_keys": [
[
"empid",
"empname"
]
]
}
{
"url": "/api/v3/datastores",
"type": "datastore",
"data": {
"unique_name": "empdir",
"name": "Employee Directory",
"id": "227828000000132001",
"creator": {
"name": "NP NTC",
"id": "119440882"
},
"status": "enabled",
"fields": [
{
"default_value": "",
"masked": false,
"name": "Notes",
"unique_name": "notes",
"type": "large-text",
"mandatory": false,
"id": "17202020414617773604009000"
},
{
"default_value": "0",
"masked": false,
"name": "Employee ID",
"unique_name": "empid",
"type": "number",
"mandatory": true,
"id": "17202020414617773604009001"
},
{
"default_value": "",
"masked": false,
"name": "Employee Name",
"unique_name": "empname",
"type": "limited-text",
"mandatory": true,
"id": "17202020414617773604009002"
},
{
"default_value": "true",
"masked": false,
"name": "Active Status",
"unique_name": "isactive",
"type": "boolean",
"mandatory": false,
"id": "17202020414617773604009003"
}
],
"type": "custom",
"description": "V3 API test datastore",
"unique_keys": [
[
"empid"
]
],
"scope": "personal"
}
}
{
"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."
}
Get a datastore
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 the metadata and field schema of a single datastore identified by its numeric ID. The response includes the datastore name, description, and the list of typed fields (columns) defined in the schema.
Threshold limit: 30 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 |
|---|---|
record_not_found |
Record with the given ID does not exist. |
datastore_not_found |
Datastore with the given identifier does not exist. |
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 : Datastores.READ
Path Parameters
headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/datastores/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/datastores/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/datastores/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/datastores/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/datastores/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/datastores/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/datastores/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/datastores/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/datastores/987000000654321");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.send(data);
curl --request GET \
--url https://cliq.zoho.com/api/v3/datastores/987000000654321 \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
{
"url": "/api/v3/datastores",
"type": "datastore",
"data": {
"unique_name": "empdir",
"name": "Employee Directory",
"id": "227828000000132001",
"creator": {
"name": "NP NTC",
"id": "119440882"
},
"status": "enabled",
"fields": [
{
"default_value": "",
"masked": false,
"name": "Notes",
"unique_name": "notes",
"type": "large-text",
"mandatory": false,
"id": "17202020414617773604009000"
},
{
"default_value": "0",
"masked": false,
"name": "Employee ID",
"unique_name": "empid",
"type": "number",
"mandatory": true,
"id": "17202020414617773604009001"
},
{
"default_value": "",
"masked": false,
"name": "Employee Name",
"unique_name": "empname",
"type": "limited-text",
"mandatory": true,
"id": "17202020414617773604009002"
},
{
"default_value": "true",
"masked": false,
"name": "Active Status",
"unique_name": "isactive",
"type": "boolean",
"mandatory": false,
"id": "17202020414617773604009003"
}
],
"type": "custom",
"description": "V3 API test datastore",
"unique_keys": [
[
"empid"
]
],
"scope": "personal"
}
}
{
"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."
}
Delete a datastore
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
Permanently delete a datastore and all its stored records. This operation is irreversible, and all data in the datastore will be lost. Hence, ensure no active platform components depend on this datastore before deleting it.
Threshold limit: 10 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 |
|---|---|
datastore_not_found |
Datastore with the given identifier does not exist. |
datastore_access_denied |
The authenticated user does not have permission to delete this datastore. |
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 : Datastores.DELETE
Path Parameters
headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/datastores/987000000654321"
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/datastores/987000000654321")
.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/datastores/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("DELETE", "/api/v3/datastores/987000000654321", 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/datastores/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/datastores/987000000654321");
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/datastores/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/datastores/987000000654321"
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/datastores/987000000654321");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.send(data);
curl --request DELETE \
--url https://cliq.zoho.com/api/v3/datastores/987000000654321 \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
{
"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."
}
Add fields to a datastore
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
Add one or more new fields (columns) to an existing datastore. Existing records will have null for newly added fields unless a default value is specified.
Threshold limit: 10 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 |
|---|---|
datastore_not_found |
Datastore with the given identifier does not exist. |
datastore_fields_invalid_value |
One or more field definitions contain an invalid value. |
datastore_fields_limit_exceeded |
The number of fields exceeds the maximum limit of 19 (plus the default record ID field). |
datastore_fields_duplicate_column |
Two or more fields in the request share the same column name. |
datastore_access_denied |
The authenticated user does not have permission to modify this datastore. |
datastore_field_name_already_exists |
A field with this unique name already exists in the datastore. |
datastore_field_name_reserved |
One or more field names use a reserved keyword that cannot be used as a field name. |
datastore_field_mask_not_supported |
Masking was specified for a field type that does not support it. Only limited-text and number fields support masking. |
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 : Datastores.UPDATE
Arguments
- List of new fields to add to the datastore.
- Each field must have a unique_name, name, and type. The new fields will be appended to the existing schema and can be used in subsequent record operations.
- Maximum of 10 fields can be added in a single request.
Accepts lowercase letters, numbers, and underscores only, and must start with a letter. This is used in API endpoints to reference the field.
Maximum length: 20 characters.
Can contain letters, numbers, and spaces. This is used for display purposes in the UI.
Maximum length: 20 characters.
Determines the kind of data that can be stored in this field and the operations that can be performed on it.
Allowed values:
- boolean: Stores true/false values.
- number: Stores numeric values. Can be used for mathematical operations.
- limited-text: Stores short text up to 250 characters. Cannot be used for full-text search.
- encrypted-text: Stores sensitive text data in encrypted form. Cannot be included in unique key constraints and does not support masking. Maximum length: 1000 characters.
- large-text: Stores long text data up to 65,535 characters. Suitable for descriptions, comments, etc. Cannot be included in unique key constraints.
Note: Masking is not supported for encrypted-text fields. Encrypted fields are already stored in protected form and cannot be additionally masked.
Maximum length: 100 characters.
Path Parameters
To learn how to retrieve this ID, see DATASTORE_ID in the Glossary page.
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/datastores/987000000654321/fields"
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/datastores/987000000654321/fields")
.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/datastores/987000000654321/fields', 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/datastores/987000000654321/fields", 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/datastores/987000000654321/fields",
"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/datastores/987000000654321/fields");
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/datastores/987000000654321/fields"),
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/datastores/987000000654321/fields"
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/datastores/987000000654321/fields");
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/datastores/987000000654321/fields \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
--header 'content-type: application/json' \
--data '{"field1":"value1","field2":"value2"}'
{
"fields": [
{
"unique_name": "join_date",
"name": "Join Date",
"type": "limited-text",
"mandatory": false,
"default_value": ""
},
{
"unique_name": "location",
"name": "Location",
"type": "limited-text",
"mandatory": false,
"default_value": ""
}
]
}
{
"url": "/api/v3/datastores",
"type": "datastore",
"data": {
"unique_name": "empdir",
"name": "Employee Directory",
"id": "227828000000132001",
"creator": {
"name": "NP NTC",
"id": "119440882"
},
"status": "enabled",
"fields": [
{
"default_value": "",
"masked": false,
"name": "Notes",
"unique_name": "notes",
"type": "large-text",
"mandatory": false,
"id": "17202020414617773604009000"
},
{
"default_value": "0",
"masked": false,
"name": "Employee ID",
"unique_name": "empid",
"type": "number",
"mandatory": true,
"id": "17202020414617773604009001"
},
{
"default_value": "",
"masked": false,
"name": "Employee Name",
"unique_name": "empname",
"type": "limited-text",
"mandatory": true,
"id": "17202020414617773604009002"
},
{
"default_value": "true",
"masked": false,
"name": "Active Status",
"unique_name": "isactive",
"type": "boolean",
"mandatory": false,
"id": "17202020414617773604009003"
}
],
"type": "custom",
"description": "V3 API test datastore",
"unique_keys": [
[
"empid"
]
],
"scope": "personal"
}
}
{
"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."
}
Edit datastore fields
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
Update the existing fields (columns) in a datastore. The modifiable attributes include the field display name, type, and required field flag. The names of fields cannot be changed after they are created.
Threshold limit: 10 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 |
|---|---|
datastore_not_found |
Datastore with the given identifier does not exist. |
datastore_access_denied |
The authenticated user does not have permission to modify this datastore. |
datastore_field_update_failed |
Failed to update one or more datastore fields. |
datastore_field_not_found |
A field with the given ID does not exist in this datastore. |
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 : Datastores.UPDATE
Arguments
- List of existing fields to edit in the datastore schema.
- Each field must be identified by its numeric ID and can have its name, mandatory status, masked status, and default value updated. The field type cannot be changed.
- Maximum of 10 fields can be edited in a single request.
Accepts lowercase letters, numbers, and underscores only, and must start with a letter. This is used in API endpoints to reference the field.
Maximum length: 20 characters.
Can contain letters, numbers, and spaces. This is used for display purposes in the UI.
Maximum length: 20 characters.
Note: Masking is not supported for encrypted-text fields. Encrypted fields are already stored in protected form and cannot be additionally masked.
Maximum length: 100 characters.
Path Parameters
To learn how to retrieve this ID, see DATASTORE_ID in the Glossary page.
parameters_data='{"fields":[{"id":"17202020414617773604009000","name":"Notes","unique_name":"notes","mandatory":false,"default_value":""},{"id":"17202020414617773604009001","name":"Employee ID","unique_name":"empid","mandatory":true,"default_value":"0"}]}';
headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/datastores/%7BDATASTORE_ID%7D/fields"
type: PATCH
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, "{\"fields\":[{\"id\":\"17202020414617773604009000\",\"name\":\"Notes\",\"unique_name\":\"notes\",\"mandatory\":false,\"default_value\":\"\"},{\"id\":\"17202020414617773604009001\",\"name\":\"Employee ID\",\"unique_name\":\"empid\",\"mandatory\":true,\"default_value\":\"0\"}]}");
Request request = new Request.Builder()
.url("https://cliq.zoho.com/api/v3/datastores/%7BDATASTORE_ID%7D/fields")
.patch(body)
.addHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'PATCH',
headers: {
Authorization: 'Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f',
'content-type': 'application/json'
},
body: '{"fields":[{"id":"17202020414617773604009000","name":"Notes","unique_name":"notes","mandatory":false,"default_value":""},{"id":"17202020414617773604009001","name":"Employee ID","unique_name":"empid","mandatory":true,"default_value":"0"}]}'
};
fetch('https://cliq.zoho.com/api/v3/datastores/%7BDATASTORE_ID%7D/fields', 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 = "{\"fields\":[{\"id\":\"17202020414617773604009000\",\"name\":\"Notes\",\"unique_name\":\"notes\",\"mandatory\":false,\"default_value\":\"\"},{\"id\":\"17202020414617773604009001\",\"name\":\"Employee ID\",\"unique_name\":\"empid\",\"mandatory\":true,\"default_value\":\"0\"}]}"
headers = {
'Authorization': "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
'content-type': "application/json"
}
conn.request("PATCH", "/api/v3/datastores/%7BDATASTORE_ID%7D/fields", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("https");
const options = {
"method": "PATCH",
"hostname": "cliq.zoho.com",
"port": null,
"path": "/api/v3/datastores/%7BDATASTORE_ID%7D/fields",
"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({
fields: [
{
id: '17202020414617773604009000',
name: 'Notes',
unique_name: 'notes',
mandatory: false,
default_value: ''
},
{
id: '17202020414617773604009001',
name: 'Employee ID',
unique_name: 'empid',
mandatory: true,
default_value: '0'
}
]
}));
req.end();
var client = new RestClient("https://cliq.zoho.com/api/v3/datastores/%7BDATASTORE_ID%7D/fields");
var request = new RestRequest(Method.PATCH);
request.AddHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\"fields\":[{\"id\":\"17202020414617773604009000\",\"name\":\"Notes\",\"unique_name\":\"notes\",\"mandatory\":false,\"default_value\":\"\"},{\"id\":\"17202020414617773604009001\",\"name\":\"Employee ID\",\"unique_name\":\"empid\",\"mandatory\":true,\"default_value\":\"0\"}]}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Patch,
RequestUri = new Uri("https://cliq.zoho.com/api/v3/datastores/%7BDATASTORE_ID%7D/fields"),
Headers =
{
{ "Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" },
},
Content = new StringContent("{\"fields\":[{\"id\":\"17202020414617773604009000\",\"name\":\"Notes\",\"unique_name\":\"notes\",\"mandatory\":false,\"default_value\":\"\"},{\"id\":\"17202020414617773604009001\",\"name\":\"Employee ID\",\"unique_name\":\"empid\",\"mandatory\":true,\"default_value\":\"0\"}]}")
{
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/datastores/%7BDATASTORE_ID%7D/fields"
payload := strings.NewReader("{\"fields\":[{\"id\":\"17202020414617773604009000\",\"name\":\"Notes\",\"unique_name\":\"notes\",\"mandatory\":false,\"default_value\":\"\"},{\"id\":\"17202020414617773604009001\",\"name\":\"Employee ID\",\"unique_name\":\"empid\",\"mandatory\":true,\"default_value\":\"0\"}]}")
req, _ := http.NewRequest("PATCH", 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({
"fields": [
{
"id": "17202020414617773604009000",
"name": "Notes",
"unique_name": "notes",
"mandatory": false,
"default_value": ""
},
{
"id": "17202020414617773604009001",
"name": "Employee ID",
"unique_name": "empid",
"mandatory": true,
"default_value": "0"
}
]
});
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("PATCH", "https://cliq.zoho.com/api/v3/datastores/%7BDATASTORE_ID%7D/fields");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.setRequestHeader("content-type", "application/json");
xhr.send(data);
curl --request PATCH \
--url https://cliq.zoho.com/api/v3/datastores/%7BDATASTORE_ID%7D/fields \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
--header 'content-type: application/json' \
--data '{"fields":[{"id":"17202020414617773604009000","name":"Notes","unique_name":"notes","mandatory":false,"default_value":""},{"id":"17202020414617773604009001","name":"Employee ID","unique_name":"empid","mandatory":true,"default_value":"0"}]}'
{
"fields": [
{
"id": "17202020414617773604009000",
"name": "Notes",
"unique_name": "notes",
"mandatory": false,
"default_value": ""
},
{
"id": "17202020414617773604009001",
"name": "Employee ID",
"unique_name": "empid",
"mandatory": true,
"default_value": "0"
}
]
}
{
"url": "/api/v3/datastores",
"type": "datastore",
"data": {
"unique_name": "empdir",
"name": "Employee Directory",
"id": "227828000000132001",
"creator": {
"name": "NP NTC",
"id": "119440882"
},
"status": "enabled",
"fields": [
{
"default_value": "",
"masked": false,
"name": "Notes",
"unique_name": "notes",
"type": "large-text",
"mandatory": false,
"id": "17202020414617773604009000"
},
{
"default_value": "0",
"masked": false,
"name": "Employee ID",
"unique_name": "empid",
"type": "number",
"mandatory": true,
"id": "17202020414617773604009001"
},
{
"default_value": "",
"masked": false,
"name": "Employee Name",
"unique_name": "empname",
"type": "limited-text",
"mandatory": true,
"id": "17202020414617773604009002"
},
{
"default_value": "true",
"masked": false,
"name": "Active Status",
"unique_name": "isactive",
"type": "boolean",
"mandatory": false,
"id": "17202020414617773604009003"
}
],
"type": "custom",
"description": "V3 API test datastore",
"unique_keys": [
[
"empid"
]
],
"scope": "personal"
}
}
{
"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."
}
Delete fields of a datastore
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
Remove one or more fields (columns) from a Datastore schema by providing the field IDs in the ids query parameter. All data stored in those fields will be permanently deleted. This action is irreversible.
Threshold limit: 10 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 |
|---|---|
datastore_not_found |
Datastore with the given identifier does not exist. |
datastore_column_not_found |
A field with the given ID does not exist in this datastore. |
datastore_access_denied |
The authenticated user does not have permission to modify this datastore. |
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 : Datastores.UPDATE
Path Parameters
To learn how to retrieve this ID, see DATASTORE_ID in the Glossary page.
Query Parameters
id attribute of each field in the response.
Maximum number of fields that can be deleted in a single request is 10
headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/datastores/227828000000132001/fields?ids=1720202009000"
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/datastores/227828000000132001/fields?ids=1720202009000")
.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/datastores/227828000000132001/fields?ids=1720202009000', 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/datastores/227828000000132001/fields?ids=1720202009000", 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/datastores/227828000000132001/fields?ids=1720202009000",
"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/datastores/227828000000132001/fields?ids=1720202009000");
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/datastores/227828000000132001/fields?ids=1720202009000"),
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/datastores/227828000000132001/fields?ids=1720202009000"
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/datastores/227828000000132001/fields?ids=1720202009000");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.send(data);
curl --request DELETE \
--url 'https://cliq.zoho.com/api/v3/datastores/227828000000132001/fields?ids=1720202009000' \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
{
"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."
}
Add records to a datastore
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
Insert a record into a datastore.
Note: To manage records of a datastore bundled with an extension, use the extension-scoped endpoint instead:v3/extensions/{EXTENSION_ID}/datastores/{DATASTORE_UNIQUE_NAME}/records
and pass theEXTENSION_KEYas a query parameter.
Threshold limit: 30 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 |
|---|---|
datastore_not_found |
Datastore with the given identifier does not exist. |
datastore_data_limit_exceeded |
The record data exceeds the maximum allowed size (max 20 fields, each value up to 1000 characters, total max 2500 bytes). |
datastore_column_not_found |
A field key in values does not match any field unique_name in this datastore. |
datastore_invalid_number_value |
A value provided for a number-type field is not a valid number. |
datastore_access_denied |
The authenticated user does not have permission to insert records into this datastore. |
datastore_unique_key_violation |
The record violates a unique key constraint defined on the datastore. |
datastore_required_field_missing |
A mandatory field was not provided in the request. |
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 : DatastoreRecords.CREATE
Arguments
Keys must match the
unique_name of fields defined in the datastore schema. Values must conform to the field type (e.g. string, number, boolean) and respect the datastore's constraints.Datastore constraints:
- Maximum 20 fields per record
- Each value can be up to 1000 characters
Path Parameters
Query 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/datastores/987000000654321/records"
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/datastores/987000000654321/records")
.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/datastores/987000000654321/records', 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/datastores/987000000654321/records", 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/datastores/987000000654321/records",
"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/datastores/987000000654321/records");
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/datastores/987000000654321/records"),
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/datastores/987000000654321/records"
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/datastores/987000000654321/records");
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/datastores/987000000654321/records \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
--header 'content-type: application/json' \
--data '{"field1":"value1","field2":"value2"}'
{
"values": {
"empname": "John Doe",
"empid": 1001,
"isactive": true,
"notes": "Senior Engineer in Platform Team"
}
}
{
"url": "/api/v3/datastores/empdir/records",
"type": "datastore_record",
"data": {
"id": "227828000000128010",
"empname": "John Doe",
"empid": "1001",
"isactive": true,
"notes": "Senior Engineer in Platform Team",
"added_time": "1777360402254",
"modified_time": "1777360402254"
}
}
{
"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."
}
Bulk update records in a datastore
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
Update multiple records in a datastore with a single request. Identify target records by specifying record IDs or a criteria expression in the request body.
Note: To manage records of a datastore bundled with an extension, use the extension-scoped endpoint instead:v3/extensions/{EXTENSION_ID}/datastores/{DATASTORE_UNIQUE_NAME}/records
and pass theEXTENSION_KEYas a query parameter.
Threshold limit: 30 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 |
|---|---|
datastore_not_found |
Datastore with the given identifier does not exist. |
datastore_invalid_criteria |
The criteria expression provided is invalid or malformed. |
datastore_criteria_invalid_operator |
The criteria expression uses an invalid or unsupported operator. |
datastore_criteria_limit_exceeded |
The number of conditions in the criteria expression exceeds the allowed limit. |
datastore_column_not_found |
A field key in values or criteria does not match any field unique_name in this datastore. |
datastore_update_violates_unique_key |
The update would violate a unique key constraint defined on the datastore. |
datastore_access_denied |
The authenticated user does not have permission to update records in this datastore. |
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 : DatastoreRecords.UPDATE
Arguments
unique_names as keys. Supported comparison operators: =, ==, !=, >, >=, <, <=, like, not like, in (max 10 values), not in (max 10 values). Combine conditions with && (AND) or || (OR), and use parentheses for grouping. Max 10 clauses.Path Parameters
To learn how to retrieve this, see DATABASE_UNIQUE_NAME in the Glossary page.'
Query Parameters
parameters_data='{"values":{"isactive":false,"empname":"John Doe","notes":"Moved to inactive status"},"criteria":"(department==Engineering) && (isactive==true)"}';
headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/datastores/employee_data/records"
type: PATCH
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, "{\"values\":{\"isactive\":false,\"empname\":\"John Doe\",\"notes\":\"Moved to inactive status\"},\"criteria\":\"(department==Engineering) && (isactive==true)\"}");
Request request = new Request.Builder()
.url("https://cliq.zoho.com/api/v3/datastores/employee_data/records")
.patch(body)
.addHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'PATCH',
headers: {
Authorization: 'Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f',
'content-type': 'application/json'
},
body: '{"values":{"isactive":false,"empname":"John Doe","notes":"Moved to inactive status"},"criteria":"(department==Engineering) && (isactive==true)"}'
};
fetch('https://cliq.zoho.com/api/v3/datastores/employee_data/records', 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 = "{\"values\":{\"isactive\":false,\"empname\":\"John Doe\",\"notes\":\"Moved to inactive status\"},\"criteria\":\"(department==Engineering) && (isactive==true)\"}"
headers = {
'Authorization': "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
'content-type': "application/json"
}
conn.request("PATCH", "/api/v3/datastores/employee_data/records", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("https");
const options = {
"method": "PATCH",
"hostname": "cliq.zoho.com",
"port": null,
"path": "/api/v3/datastores/employee_data/records",
"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({
values: {isactive: false, empname: 'John Doe', notes: 'Moved to inactive status'},
criteria: '(department==Engineering) && (isactive==true)'
}));
req.end();
var client = new RestClient("https://cliq.zoho.com/api/v3/datastores/employee_data/records");
var request = new RestRequest(Method.PATCH);
request.AddHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\"values\":{\"isactive\":false,\"empname\":\"John Doe\",\"notes\":\"Moved to inactive status\"},\"criteria\":\"(department==Engineering) && (isactive==true)\"}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Patch,
RequestUri = new Uri("https://cliq.zoho.com/api/v3/datastores/employee_data/records"),
Headers =
{
{ "Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" },
},
Content = new StringContent("{\"values\":{\"isactive\":false,\"empname\":\"John Doe\",\"notes\":\"Moved to inactive status\"},\"criteria\":\"(department==Engineering) && (isactive==true)\"}")
{
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/datastores/employee_data/records"
payload := strings.NewReader("{\"values\":{\"isactive\":false,\"empname\":\"John Doe\",\"notes\":\"Moved to inactive status\"},\"criteria\":\"(department==Engineering) && (isactive==true)\"}")
req, _ := http.NewRequest("PATCH", 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({
"values": {
"isactive": false,
"empname": "John Doe",
"notes": "Moved to inactive status"
},
"criteria": "(department==Engineering) && (isactive==true)"
});
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("PATCH", "https://cliq.zoho.com/api/v3/datastores/employee_data/records");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.setRequestHeader("content-type", "application/json");
xhr.send(data);
curl --request PATCH \
--url https://cliq.zoho.com/api/v3/datastores/employee_data/records \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
--header 'content-type: application/json' \
--data '{"values":{"isactive":false,"empname":"John Doe","notes":"Moved to inactive status"},"criteria":"(department==Engineering) && (isactive==true)"}'
{
"values": {
"isactive": false,
"empname": "John Doe",
"notes": "Moved to inactive status"
},
"criteria": "(department==Engineering) && (isactive==true)"
}
{
"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."
}
List records from a datastore
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 records from a datastore with optional filtering, sorting, and pagination.
- Use the
criteriaquery parameter to filter records based on field values (e.g.(empname=John) && (isactive=true)). - Use the
sync_tokenparameter to retrieve records modified before a certain point in time, or thenext_tokenparameter for records modified after a certain point in time. This is useful for incremental synchronization. - Use the
order_byparameter to sort results by specific fields. - Use the
limitparameter to restrict the number of records returned.
Note: To manage records of a datastore bundled with an extension, use the extension-scoped endpoint instead:v3/extensions/{EXTENSION_ID}/datastores/{DATASTORE_UNIQUE_NAME}/records
and pass theEXTENSION_KEYas a query parameter.
Threshold limit: 30 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 |
|---|---|
datastore_not_found |
Datastore with the given identifier does not exist. |
datastore_invalid_criteria |
The criteria expression provided is invalid or malformed. |
datastore_criteria_invalid_operator |
The criteria expression uses an invalid or unsupported operator. |
datastore_criteria_limit_exceeded |
The number of conditions in the criteria expression exceeds the allowed limit. |
datastore_column_not_found |
A field used in the criteria does not exist in this datastore. |
datastore_invalid_next_token |
The next_token value provided is invalid or expired. |
datastore_invalid_number_value |
A value used in the criteria for a number-type field is not a valid number. |
datastore_in_query_limit_exceeded |
The number of values in an in query exceeds the allowed limit. |
datastore_duplicate_sort_field |
The same field was specified more than once in the order_by parameter. |
datastore_access_denied |
The authenticated user does not have permission to read records from this datastore. |
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 : DatastoreRecords.READ
Path Parameters
To learn how to retrieve this, see DATABASE_UNIQUE_NAME in the Glossary page.
Query Parameters
unique_names as keys. Wrap each condition in parentheses and combine with && / ||.Example:
(empname=John) && (isactive=true)
Supported Comparison Operators
| Operator | Meaning | Notes |
|---|---|---|
= |
Equal | |
== |
Equal | Alias for = |
!= |
Not Equal | |
> |
Greater Than | |
>= |
Greater Than or Equal | |
< |
Less Than | |
<= |
Less Than or Equal | |
like |
Like (pattern match) | Case-insensitive, only for CHAR fields |
not like |
Not Like | Case-insensitive, only for CHAR fields |
in |
In (multi-value) | Comma-separated values, max 10 values |
not in |
Not In | Comma-separated values, max 10 values |
Logical Operators (for combining criteria)
| Operator | Meaning |
|---|---|
&& |
AND |
|| |
OR |
( ) |
Grouping / parentheses for precedence |
AND has higher priority than OR (standard precedence).
Limits
- Max criteria clauses: 10 (combined with
&&/||) - Max values in
in/not in: 10
Default: 50
Maximum: 100
If sort direction is not specified, ascending order is used by default.
Example:
empname desc, empid ascExample syntax: +timestamp (e.g.
+1777360402254) to get records modified before the specified timestamp, or -age (e.g. -3600000) to get records modified within the last hour.
sync_token returned in a previous response, which encodes a timestamp. Records modified before that timestamp will be returned.sync_token returned in a previous response, which encodes a timestamp. Records modified after that timestamp will be returned.
headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/datastores/987000000654321/records"
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/datastores/987000000654321/records")
.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/datastores/987000000654321/records', 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/datastores/987000000654321/records", 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/datastores/987000000654321/records",
"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/datastores/987000000654321/records");
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/datastores/987000000654321/records"),
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/datastores/987000000654321/records"
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/datastores/987000000654321/records");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.send(data);
curl --request GET \
--url https://cliq.zoho.com/api/v3/datastores/987000000654321/records \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
{
"url": "/api/v3/datastores/empdir/records",
"type": "datastore_record",
"sync_token": "MTB8MTc3NzM2MDQwMzQ1NXw=",
"list": [
{
"productcateogry": "zylker",
"id": "14756000000008008",
"productid": "1004",
"instock": true,
"productsecretcode": "secretkey234",
"productdescription": "zylker description"
},
{
"productcateogry": "zylcal",
"id": "14756000000008003",
"productid": "1003",
"instock": false,
"productsecretcode": "secretkey123",
"productdescription": "zylcal description"
},
{
"productcateogry": "zylker",
"id": "14756000000008004",
"productid": "1002",
"instock": true,
"productsecretcode": "secretkey123",
"productdescription": "zylker description"
},
{
"productcateogry": "zylker",
"id": "14756000000008005",
"productid": "1001",
"instock": true,
"productsecretcode": "secretkey897",
"productdescription": "zylker description"
}
]
}
{
"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."
}
Delete records from a datastore
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
Delete one or more records from a datastore. Specify the records to delete by providing comma-separated record ids in the query string, or by providing a criteria expression to match records. Deletions are irreversible.
Note: To manage records of a datastore bundled with an extension, use the extension-scoped endpoint instead:v3/extensions/{EXTENSION_ID}/datastores/{DATASTORE_UNIQUE_NAME}/records
and pass theEXTENSION_KEYas a query parameter.
Threshold limit: 30 requests per min per user
Number of API calls allowed within a minute.
Lock period: 5 minutes
Wait time before consecutive API requests.
OAuth Scope : DatastoreRecords.DELETE
Path Parameters
Query Parameters
unique_names as keys. Supported comparison operators: =, ==, !=, >, >=, <, <=, like, not like, in (max 10 values), not in (max 10 values). Combine conditions with && (AND) or || (OR), and use parentheses for grouping. Max 10 clauses.
headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/datastores/987000000654321/records"
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/datastores/987000000654321/records")
.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/datastores/987000000654321/records', 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/datastores/987000000654321/records", 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/datastores/987000000654321/records",
"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/datastores/987000000654321/records");
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/datastores/987000000654321/records"),
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/datastores/987000000654321/records"
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/datastores/987000000654321/records");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.send(data);
curl --request DELETE \
--url https://cliq.zoho.com/api/v3/datastores/987000000654321/records \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
{
"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."
}
Update a record in a datastore
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
Update a single record in a datastore.
Note: To manage records of a datastore bundled with an extension, use the extension-scoped endpoint instead:v3/extensions/{EXTENSION_ID}/datastores/{DATASTORE_UNIQUE_NAME}/records/{RECORD_ID}
and pass theEXTENSION_KEYas a query parameter.
Threshold limit: 30 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 |
|---|---|
datastore_record_not_found |
The record with the given ID does not exist in this datastore. |
datastore_not_found |
Datastore with the given identifier does not exist. |
datastore_column_not_found |
A field key in values does not match any field unique_name in this datastore. |
datastore_update_violates_unique_key |
The update would violate a unique key constraint defined on the datastore. |
datastore_invalid_number_value |
A value provided for a number-type field is not a valid number. |
datastore_access_denied |
The authenticated user does not have permission to update records in this datastore. |
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 : DatastoreRecords.UPDATE
Arguments
Path Parameters
To learn how to retrieve this, see RECORD_ID in the Glossary page.
Query Parameters
To learn how to retrieve this, see EXTENSION_KEY in the Glossary page.
parameters_data='{"values":{"empid":"1001","empname":"John Doe","isactive":true,"salary":"50000","department":"Engineering","notes":"Senior Engineer in Platform Team"}}';
headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/datastores/employee_data/records/RECORD_ID"
type: PATCH
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, "{\"values\":{\"empid\":\"1001\",\"empname\":\"John Doe\",\"isactive\":true,\"salary\":\"50000\",\"department\":\"Engineering\",\"notes\":\"Senior Engineer in Platform Team\"}}");
Request request = new Request.Builder()
.url("https://cliq.zoho.com/api/v3/datastores/employee_data/records/RECORD_ID")
.patch(body)
.addHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'PATCH',
headers: {
Authorization: 'Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f',
'content-type': 'application/json'
},
body: '{"values":{"empid":"1001","empname":"John Doe","isactive":true,"salary":"50000","department":"Engineering","notes":"Senior Engineer in Platform Team"}}'
};
fetch('https://cliq.zoho.com/api/v3/datastores/employee_data/records/RECORD_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 = "{\"values\":{\"empid\":\"1001\",\"empname\":\"John Doe\",\"isactive\":true,\"salary\":\"50000\",\"department\":\"Engineering\",\"notes\":\"Senior Engineer in Platform Team\"}}"
headers = {
'Authorization': "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
'content-type': "application/json"
}
conn.request("PATCH", "/api/v3/datastores/employee_data/records/RECORD_ID", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("https");
const options = {
"method": "PATCH",
"hostname": "cliq.zoho.com",
"port": null,
"path": "/api/v3/datastores/employee_data/records/RECORD_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({
values: {
empid: '1001',
empname: 'John Doe',
isactive: true,
salary: '50000',
department: 'Engineering',
notes: 'Senior Engineer in Platform Team'
}
}));
req.end();
var client = new RestClient("https://cliq.zoho.com/api/v3/datastores/employee_data/records/RECORD_ID");
var request = new RestRequest(Method.PATCH);
request.AddHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\"values\":{\"empid\":\"1001\",\"empname\":\"John Doe\",\"isactive\":true,\"salary\":\"50000\",\"department\":\"Engineering\",\"notes\":\"Senior Engineer in Platform Team\"}}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Patch,
RequestUri = new Uri("https://cliq.zoho.com/api/v3/datastores/employee_data/records/RECORD_ID"),
Headers =
{
{ "Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" },
},
Content = new StringContent("{\"values\":{\"empid\":\"1001\",\"empname\":\"John Doe\",\"isactive\":true,\"salary\":\"50000\",\"department\":\"Engineering\",\"notes\":\"Senior Engineer in Platform Team\"}}")
{
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/datastores/employee_data/records/RECORD_ID"
payload := strings.NewReader("{\"values\":{\"empid\":\"1001\",\"empname\":\"John Doe\",\"isactive\":true,\"salary\":\"50000\",\"department\":\"Engineering\",\"notes\":\"Senior Engineer in Platform Team\"}}")
req, _ := http.NewRequest("PATCH", 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({
"values": {
"empid": "1001",
"empname": "John Doe",
"isactive": true,
"salary": "50000",
"department": "Engineering",
"notes": "Senior Engineer in Platform Team"
}
});
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("PATCH", "https://cliq.zoho.com/api/v3/datastores/employee_data/records/RECORD_ID");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.setRequestHeader("content-type", "application/json");
xhr.send(data);
curl --request PATCH \
--url https://cliq.zoho.com/api/v3/datastores/employee_data/records/RECORD_ID \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
--header 'content-type: application/json' \
--data '{"values":{"empid":"1001","empname":"John Doe","isactive":true,"salary":"50000","department":"Engineering","notes":"Senior Engineer in Platform Team"}}'
{
"values": {
"empid": "1001",
"empname": "John Doe",
"isactive": true,
"salary": "50000",
"department": "Engineering",
"notes": "Senior Engineer in Platform Team"
}
}
{
"url": "/api/v3/datastores/shejbwfz/records/227828000000128010",
"type": "datastore_record",
"data": {
"modified_time": "1777360403455",
"empid": "1001",
"isactive": false,
"salary": "0",
"department": "",
"id": "227828000000128010",
"empname": "John Doe Jr.",
"added_time": "1777360402254",
"notes": "Senior Engineer in Platform Team"
}
}
{
"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."
}
Get a record from a datastore
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 a single record from a datastore.
Note: To manage records of a datastore bundled with an extension, use the extension-scoped endpoint instead:v3/extensions/{EXTENSION_ID}/datastores/{DATASTORE_UNIQUE_NAME}/records/{RECORD_ID}
and pass theEXTENSION_KEYas a query parameter.
Threshold limit: 30 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 |
|---|---|
datastore_record_not_found |
The record with the given ID does not exist in this datastore. |
datastore_not_found |
Datastore with the given identifier does not exist. |
datastore_access_denied |
The authenticated user does not have permission to read records from this datastore. |
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 : DatastoreRecords.READ
Path Parameters
To learn how to retrieve this, see RECORD_ID in the Glossary page.
Query Parameters
To learn how to retrieve this, see EXTENSION_KEY in the Glossary page.
headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/datastores/987000000654321/records/RECORD_ID"
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/datastores/987000000654321/records/RECORD_ID")
.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/datastores/987000000654321/records/RECORD_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")
headers = { 'Authorization': "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" }
conn.request("GET", "/api/v3/datastores/987000000654321/records/RECORD_ID", 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/datastores/987000000654321/records/RECORD_ID",
"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/datastores/987000000654321/records/RECORD_ID");
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/datastores/987000000654321/records/RECORD_ID"),
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/datastores/987000000654321/records/RECORD_ID"
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/datastores/987000000654321/records/RECORD_ID");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.send(data);
curl --request GET \
--url https://cliq.zoho.com/api/v3/datastores/987000000654321/records/RECORD_ID \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
{
"url": "/api/v3/datastores/shejbwfz/records/227828000000128010",
"type": "datastore_record",
"data": {
"modified_time": "1777360403455",
"empid": "1001",
"isactive": false,
"salary": "0",
"department": "",
"id": "227828000000128010",
"empname": "John Doe Jr.",
"added_time": "1777360402254",
"notes": "Senior Engineer in Platform Team"
}
}
{
"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."
}
Delete a record from a datastore
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
Permanently delete a single record from a datastore.
Note: To manage records of a datastore bundled with an extension, use the extension-scoped endpoint instead:v3/extensions/{EXTENSION_ID}/datastores/{DATASTORE_UNIQUE_NAME}/records/{RECORD_ID}
and pass theEXTENSION_KEYas a query parameter.
Threshold limit: 30 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 |
|---|---|
datastore_record_not_found |
The record with the given ID does not exist in this datastore. |
datastore_not_found |
Datastore with the given identifier does not exist. |
datastore_access_denied |
The authenticated user does not have permission to delete records from this datastore. |
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 : DatastoreRecords.DELETE
Path Parameters
To learn how to retrieve this, see RECORD_ID in the Glossary page.
Query Parameters
To learn how to retrieve this, see EXTENSION_KEY in the Glossary page.
headers_data = Map();
headers_data.put("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://cliq.zoho.com/api/v3/datastores/987000000654321/records/RECORD_ID"
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/datastores/987000000654321/records/RECORD_ID")
.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/datastores/987000000654321/records/RECORD_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")
headers = { 'Authorization': "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" }
conn.request("DELETE", "/api/v3/datastores/987000000654321/records/RECORD_ID", 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/datastores/987000000654321/records/RECORD_ID",
"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/datastores/987000000654321/records/RECORD_ID");
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/datastores/987000000654321/records/RECORD_ID"),
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/datastores/987000000654321/records/RECORD_ID"
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/datastores/987000000654321/records/RECORD_ID");
xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
xhr.send(data);
curl --request DELETE \
--url https://cliq.zoho.com/api/v3/datastores/987000000654321/records/RECORD_ID \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
{
"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."
}
Export datastore records
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
Initiate a bulk export of all records from a datastore, identified by its numeric ID. This export is useful for data migration, backups, or analyzing platform storage data.
Threshold limit: 5 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 |
|---|---|
datastore_not_found |
Datastore with the given identifier does not exist. |
datastore_access_denied |
The authenticated user does not have permission to export this datastore. |
datastore_export_password_missing |
A password is required when password_protected is set to true. |
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 : Datastores.READ
Arguments
- csv: Comma-separated values format, suitable for spreadsheets and data analysis tools.
- xlsx: Microsoft Excel format, supports multiple sheets, formatting, and larger data volumes.
- pdf: Portable Document Format, ideal for sharing and printing.
password field must be provided to specify the password to use for protecting the file.
password_protected is true.Must be between 8 and 20 characters in length and should include a mix of letters, numbers, and special characters for better security.
Minimum length: 8 characters
Maximum length: 20 characters
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/datastores/987000000654321/export"
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/datastores/987000000654321/export")
.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/datastores/987000000654321/export', 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/datastores/987000000654321/export", 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/datastores/987000000654321/export",
"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/datastores/987000000654321/export");
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/datastores/987000000654321/export"),
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/datastores/987000000654321/export"
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/datastores/987000000654321/export");
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/datastores/987000000654321/export \
--header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
--header 'content-type: application/json' \
--data '{"field1":"value1","field2":"value2"}'
{
"file_type": "csv",
"password_protected": false
}
{
"file_type": "xlsx",
"password_protected": true,
"password": "MyS3cureP@ss"
}
{
"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."
}