Datastores

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

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.

Download Datastores OpenAPI Document

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

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

unique_name
string
(Required)
Datastore unique name.
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.
name
string
(Required)
Datastore display name.
Can contain letters, numbers, and spaces. This is used for display purposes in the UI and can be non-unique.
Maximum length: 20 characters.
description
string
(Required)
Datastore description.
A brief description about the datastore's purpose or contents.
Maximum length: 250 characters.
fields
array
(Required)
List of field definitions for the datastore schema.
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.
Show Sub-Attributes arrow
unique_name
string
(Required)
Unique name of the 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.
name
string
(Required)
Display name of the field.
Can contain letters, numbers, and spaces. This is used for display purposes in the UI.
Maximum length: 20 characters.
type
string
(Required)
Data type of the field.
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: The field type cannot be changed after the datastore is created
mandatory
boolean
Indicates whether this field is mandatory for each record. If true, a value must be provided for this field when creating or updating records.
masked
boolean
Indicates whether this field's value should be masked (e.g., for sensitive information).
Note: Masking is not supported for encrypted-text fields. Encrypted fields are already stored in protected form and cannot be additionally masked.
default_value
string
Default value for the field when creating new records. Must be a string representation of a value compatible with the field's data type. For example, "true" for boolean, "123" for number, etc.
Maximum length: 100 characters.
unique_keys
array
Defines unique key constraints for the datastore. Each constraint is an array of field 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_name values.
  • Fields of type encrypted-text or large-text cannot be included in a unique key constraint.

Request Example

Click to copy
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"}'

Body Parameters

Click to copy
{ "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" ] ] }

Response Example

{ "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

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

sync_token
string
Return datastores modified after the given sync token. The sync token is returned in the response when fetching the list of datastores, and can be used to retrieve only datastores that were created or updated after that request.
limit
integer
Maximum number of datastores to return in the response. Default is 20, maximum allowed value is 100.
next_token
string
Token to retrieve the next page of results. This is returned in the response when the number of datastores exceeds the specified limit. To fetch the next page, include this token in the request.

Request Example

Click to copy
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'

Response Example

{ "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

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

unique_name
string
Updated datastore unique name.
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.
name
string
Updated datastore display name.
Can contain letters, numbers, and spaces. This is used for display purposes in the UI and can be non-unique.
Maximum length: 20 characters.
description
string
Updated datastore description.
A brief description about the datastore's purpose or contents.
Maximum length: 250 characters.
unique_keys
array
Updated unique key constraints for the datastore. Replaces the existing set of constraints entirely.
  • A maximum of 4 unique key constraints can be defined per datastore.
  • Each constraint is an array of one or more field unique_name values 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

DATASTORE_ID
string
(Required)
Unique numeric identifier of the datastore. To learn how to retrieve this ID, see LONG_ID in the Glossary page.

Request Example

Click to copy
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"]]}'

Body Parameters

Click to copy
{ "unique_name": "empdir", "name": "Employee Directory", "description": "Tracks employee records and department data", "unique_keys": [ [ "empid", "empname" ] ] }

Response Example

{ "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

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

DATASTORE_ID
string
(Required)
Unique numeric identifier of the datastore. To learn how to retrieve this ID, see LONG_ID in the Glossary page.

Request Example

Click to copy
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'

Response Example

{ "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

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

DATASTORE_ID
string
(Required)
Unique numeric identifier of the datastore. To learn how to retrieve this ID, see LONG_ID in the Glossary page.

Request Example

Click to copy
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'

Response Example

{ "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

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

fields
array
(Required)
  • 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.
Show Sub-Attributes arrow
unique_name
string
(Required)
Unique name of the 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.
name
string
(Required)
Display name of the field.
Can contain letters, numbers, and spaces. This is used for display purposes in the UI.
Maximum length: 20 characters.
type
string
(Required)
Data type of the field.
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: The field type cannot be changed after the datastore is created
mandatory
boolean
Indicates whether this field is mandatory for each record. If true, a value must be provided for this field when creating or updating records.
masked
boolean
Indicates whether this field's value should be masked (e.g., for sensitive information).
Note: Masking is not supported for encrypted-text fields. Encrypted fields are already stored in protected form and cannot be additionally masked.
default_value
string
Default value for the field when creating new records. Must be a string representation of a value compatible with the field's data type. For example, "true" for boolean, "123" for number, etc.
Maximum length: 100 characters.

Path Parameters

DATASTORE_ID
string
(Required)
Unique numeric identifier of the datastore.
To learn how to retrieve this ID, see DATASTORE_ID in the Glossary page.

Request Example

Click to copy
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"}'

Body Parameters

Click to copy
{ "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": "" } ] }

Response Example

{ "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

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

fields
array
(Required)
  • 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.
Show Sub-Attributes arrow
id
string
(Required)
Unique identifier of the field to be edited. This is assigned by the system when the field is created and cannot be changed.
unique_name
string
Unique name of the 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.
name
string
Display name of the field.
Can contain letters, numbers, and spaces. This is used for display purposes in the UI.
Maximum length: 20 characters.
mandatory
boolean
Indicates whether this field is mandatory for each record. If true, a value must be provided for this field when creating or updating records.
masked
boolean
Indicates whether this field's value should be masked (e.g., for sensitive information).
Note: Masking is not supported for encrypted-text fields. Encrypted fields are already stored in protected form and cannot be additionally masked.
default_value
string
Default value for the field when creating new records. Must be a string representation of a value compatible with the field's data type. For example, "true" for boolean, "123" for number, etc.
Maximum length: 100 characters.

Path Parameters

DATASTORE_ID
string
(Required)
Unique numeric identifier of the datastore.
To learn how to retrieve this ID, see DATASTORE_ID in the Glossary page.

Request Example

Click to copy
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"}]}'

Body Parameters

Click to copy
{ "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" } ] }

Response Example

{ "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

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

DATASTORE_ID
string
(Required)
Unique numeric identifier of the datastore.
To learn how to retrieve this ID, see DATASTORE_ID in the Glossary page.

Query Parameters

ids
string
(Required)
Comma-separated list of field IDs to delete. To retrieve field IDs, use the Get Datastore Details API and refer to the id attribute of each field in the response.
Maximum number of fields that can be deleted in a single request is 10

Request Example

Click to copy
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'

Response Example

{ "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

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 the EXTENSION_KEY as 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

values
object
(Required)
Key-value pairs representing field data for the new record.
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

DATASTORE_UNIQUE_NAME
string
(Required)
Unique name of the datastore. To learn how to retrieve this, see DATABASE_UNIQUE_NAME in the Glossary page.

Query Parameters

EXTENSION_KEY
string
Encrypted app ID. Required if the target datastore is owned by an extension.

Request Example

Click to copy
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"}'

Body Parameters

Click to copy
{ "values": { "empname": "John Doe", "empid": 1001, "isactive": true, "notes": "Senior Engineer in Platform Team" } }

Response Example

{ "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

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 the EXTENSION_KEY as 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

values
object
(Required)
Key-value pairs of field unique_name and the new value to update.
criteria
string
(Required)
Expression to select records for bulk update. Use field 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

DATASTORE_UNIQUE_NAME
string
(Required)
Unique name of the datastore.
To learn how to retrieve this, see DATABASE_UNIQUE_NAME in the Glossary page.'

Query Parameters

EXTENSION_KEY
string
Unique key of the extension that the datastore belongs to. Required if the datastore is owned by an extension. To learn how to retrieve this, see EXTENSION_KEY in the Glossary

Request Example

Click to copy
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)"}'

Body Parameters

Click to copy
{ "values": { "isactive": false, "empname": "John Doe", "notes": "Moved to inactive status" }, "criteria": "(department==Engineering) && (isactive==true)" }

Response Example

{ "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

Retrieve records from a datastore with optional filtering, sorting, and pagination.

  • Use the criteria query parameter to filter records based on field values (e.g. (empname=John) && (isactive=true)).
  • Use the sync_token parameter to retrieve records modified before a certain point in time, or the next_token parameter for records modified after a certain point in time. This is useful for incremental synchronization.
  • Use the order_by parameter to sort results by specific fields.
  • Use the limit parameter 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 the EXTENSION_KEY as 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

DATASTORE_UNIQUE_NAME
string
(Required)
Unique name of the datastore.
To learn how to retrieve this, see DATABASE_UNIQUE_NAME in the Glossary page.

Query Parameters

criteria
string
Expression to filter records. Use field 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
limit
integer
Maximum number of records to return.
Default: 50
Maximum: 100
order_by
string
Comma-separated list of fields to sort by, with optional sort direction (asc or desc).
If sort direction is not specified, ascending order is used by default.
Example: empname desc, empid asc
Example 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
string
Token to retrieve records modified before a certain point in time. This is useful for incremental synchronization. The token value should be the sync_token returned in a previous response, which encodes a timestamp. Records modified before that timestamp will be returned.
next_token
string
Token to retrieve records modified after a certain point in time. This is useful for incremental synchronization. The token value should be the sync_token returned in a previous response, which encodes a timestamp. Records modified after that timestamp will be returned.
EXTENSION_KEY
string
Unique key of the extension that the datastore belongs to. Required if the datastore is owned by an extension. To learn how to retrieve this, see EXTENSION_KEY in the Glossary page.

Request Example

Click to copy
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'

Response Example

{ "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

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 the EXTENSION_KEY as 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

DATASTORE_UNIQUE_NAME
string
(Required)
Unique name of the datastore. To learn how to retrieve this, see DATABASE_UNIQUE_NAME in the Glossary page.

Query Parameters

criteria
string
Expression to select records for bulk deletion. Use field 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.
ids
string
ids of the records to be deleted
EXTENSION_KEY
string
Encrypted app id

Request Example

Click to copy
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'

Response Example

{ "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

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 the EXTENSION_KEY as 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

values
object
(Required)
Key-value pairs of field unique_name and the new value to update.

Path Parameters

DATASTORE_UNIQUE_NAME
string
(Required)
Unique name of the datastore. To learn how to retrieve this, see DATABASE_UNIQUE_NAME in the Glossary page.
RECORD_ID
string
(Required)
Unique numeric identifier of the record to update.
To learn how to retrieve this, see RECORD_ID in the Glossary page.

Query Parameters

EXTENSION_KEY
string
Unique key of the extension that the datastore belongs to. Required if the datastore is owned by an extension.
To learn how to retrieve this, see EXTENSION_KEY in the Glossary page.

Request Example

Click to copy
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"}}'

Body Parameters

Click to copy
{ "values": { "empid": "1001", "empname": "John Doe", "isactive": true, "salary": "50000", "department": "Engineering", "notes": "Senior Engineer in Platform Team" } }

Response Example

{ "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

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 the EXTENSION_KEY as 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

DATASTORE_UNIQUE_NAME
string
(Required)
Unique name of the datastore. To learn how to retrieve this, see DATABASE_UNIQUE_NAME in the Glossary page.
RECORD_ID
string
(Required)
Unique numeric identifier of the record to retrieve.
To learn how to retrieve this, see RECORD_ID in the Glossary page.

Query Parameters

EXTENSION_KEY
string
Unique key of the extension that the datastore belongs to. Required if the datastore is owned by an extension.
To learn how to retrieve this, see EXTENSION_KEY in the Glossary page.

Request Example

Click to copy
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'

Response Example

{ "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

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 the EXTENSION_KEY as 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

DATASTORE_UNIQUE_NAME
string
(Required)
Unique name of the datastore. To learn how to retrieve this, see DATABASE_UNIQUE_NAME in the Glossary page.
RECORD_ID
string
(Required)
Unique numeric identifier of the record to delete.
To learn how to retrieve this, see RECORD_ID in the Glossary page.

Query Parameters

EXTENSION_KEY
string
Unique key of the extension that the datastore belongs to. Required if the datastore is owned by an extension.
To learn how to retrieve this, see EXTENSION_KEY in the Glossary page.

Request Example

Click to copy
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'

Response Example

{ "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

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

file_type
string
(Required)
Format of the exported file.
  • 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_protected
boolean
Indicates whether the exported file should be protected with a password. If true, the password field must be provided to specify the password to use for protecting the file.
password
string
Password to protect the exported file. This field is required if 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

DATASTORE_ID
string
(Required)
Unique numeric identifier of the datastore. To learn how to retrieve this ID, see LONG_ID in the Glossary page.

Request Example

Click to copy
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"}'

Body Parameters

Click to copy
{ "file_type": "csv", "password_protected": false }
{ "file_type": "xlsx", "password_protected": true, "password": "MyS3cureP@ss" }

Response Example

{ "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." }