Widget Map Tickers

Widget Map Tickers 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

Tickers are pointers for the map view. Using tickers, you can track and monitor the movement or location of objects or individuals on a map in real-time. They can be updated instantaneously via REST API, which will be transmitted to users who are actively viewing the map. Live update works on a subscription model where users are updated for 10 minutes counting from the time they open the map view tab. Note: Ticker updates should be stored by the developer to send the updated data in widget response.

Download Widget Map Tickers OpenAPI Document

Add/Update a ticker 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

Use this API to add a new ticker/update a ticker in the map view in widgets. Note : You can get the ticker endpoint from the widget preview page (Profile -> Bots & tools -> Widgets -> Required widget)
OAuth Scope : ZohoCliq.Applications.UPDATE

Arguments

title
string
(Required)
The display title for the ticker (e.g., vehicle number, location name).
type
string
(Required)
Type of ticker representing the object or location being tracked:
  • person: Represents an individual being tracked.
  • bicycle: Represents a bicycle.
  • motorcycle: Represents a motorcycle.
  • car: Represents a car.
  • van: Represents a van.
  • bus: Represents a bus.
  • plane: Represents an aircraft.
  • office: Represents a fixed office location.
  • home: Represents a home location.
last_modified_time
long
(Required)
Epoch timestamp in milliseconds representing the last time the ticker was updated.
info
string
Optional additional information about the ticker.
latitude
double
(Required)
Latitude coordinate of the ticker location.
longitude
double
(Required)
Longitude coordinate of the ticker location.
color
string
Visual color of the ticker marker on the map.
Allowed values:
  • green: Marks the ticker in green. Typically used to indicate an active or on-schedule status.
  • yellow: Marks the ticker in yellow. Typically used to indicate a warning or delayed status.
  • red: Marks the ticker in red. Typically used to indicate an alert or critical status.
destination
object
Destination coordinates for live route tracking. When included in a ticker payload, the map draws a live route line from the ticker's current position (latitude/longitude) to the destination coordinates specified here, visible to all users with the map view open.

How live route tracking works:
  1. The first time you send the ticker, include destination with the final endpoint of the route (for example, a delivery address or a driver's last stop).
  2. On every subsequent PUT call, update latitude/longitude to the object's current position and increment last_modified_time. The ticker moves along the route on the map in real time.
  3. Users who have the map view open see the route line and the ticker's position refresh automatically as each new PUT call comes in (subject to the 10-minute subscription window).

The serialized size of the destination object must not exceed 210 characters.
Show Sub-Attributes arrow
latitude
double
(Required)
Destination latitude coordinate.
longitude
double
(Required)
Destination longitude coordinate.
waypoints
array
A list of intermediate coordinates the route passes through, in order from the ticker's current position toward the destination. The map draws the route line through each waypoint in sequence, letting you define a precise path rather than a straight line to the destination.

Note: waypoints is valid only when destination is also present in the same payload. A maximum of 10 waypoints can be specified.
Show Sub-Attributes arrow
latitude
double
(Required)
Waypoint latitude coordinate.
longitude
double
(Required)
Waypoint longitude coordinate.
buttons
array
List of call-to-action buttons rendered on the ticker's info card. A maximum of 5 buttons can be included. The serialized size of the entire buttons array must not exceed 5000 characters.

Each button is defined as a Ticker button object. See the Ticker buttons section below for the full list of fields.
Show Sub-Attributes arrow
label
string
(Required)
Text displayed on the button. Maximum 30 characters.
type
string
(Required)
Defines the action triggered when the button is clicked.
Allowed values:
  • open.url: Opens a URL in a new browser tab. Use web to specify the URL (max 256 chars). Optional platform-specific overrides: windows, iOS, android.
  • preview.url: Displays a URL preview within Cliq. Use url to specify the iFrame URL (max 500 chars).
  • invoke.function: Runs a function when clicked. Use name to specify the function name and owner for the function owner's email.
  • system.api: Triggers a built-in Cliq action. Use api in the format system_action/{zuid}. Supported actions: audiocall | videocall | startchat | invite | locationpermission.
  • copy: Copies text to the user's clipboard when clicked. Use text to specify the content to be copied.
  • invoke.form: Opens a form when the button is clicked. See platform documentation for the field schema.
emotion
string
Controls the button's visual outline. positive renders a green outline, negative renders a red outline, neutral leaves the button unstyled.
disabled
boolean
When true, the button is rendered but non-interactive.

Path Parameters

WIDGET_ID
string
(Required)
Unique identifier of the widget To learn how to retrieve this ID, see WIDGET_ID in the Glossary page.
MAP_ID
string
(Required)
Unique identifier of the map within the widget To learn how to retrieve this ID, see MAP_ID in the Glossary page.

Query Parameters

appkey
string
To specify updating a ticker that belongs to a widget bundled 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/v2/widgets/WIDGET_ID/maps/MAP_ID" type: PUT headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://cliq.zoho.com/api/v2/widgets/WIDGET_ID/maps/MAP_ID") .put(body) .addHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'PUT', headers: { Authorization: 'Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://cliq.zoho.com/api/v2/widgets/WIDGET_ID/maps/MAP_ID', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("cliq.zoho.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'Authorization': "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("PUT", "/api/v2/widgets/WIDGET_ID/maps/MAP_ID", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "PUT", "hostname": "cliq.zoho.com", "port": null, "path": "/api/v2/widgets/WIDGET_ID/maps/MAP_ID", "headers": { "Authorization": "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
var client = new RestClient("https://cliq.zoho.com/api/v2/widgets/WIDGET_ID/maps/MAP_ID"); var request = new RestRequest(Method.PUT); request.AddHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); request.AddHeader("content-type", "application/json"); request.AddParameter("application/json", "{\"field1\":\"value1\",\"field2\":\"value2\"}", ParameterType.RequestBody); IRestResponse response = client.Execute(request);
var client = new HttpClient(); var request = new HttpRequestMessage { Method = HttpMethod.Put, RequestUri = new Uri("https://cliq.zoho.com/api/v2/widgets/WIDGET_ID/maps/MAP_ID"), Headers = { { "Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" }, }, Content = new StringContent("{\"field1\":\"value1\",\"field2\":\"value2\"}") { Headers = { ContentType = new MediaTypeHeaderValue("application/json") } } }; using (var response = await client.SendAsync(request)) { response.EnsureSuccessStatusCode(); var body = await response.Content.ReadAsStringAsync(); Console.WriteLine(body); }
package main import ( "fmt" "strings" "net/http" "io/ioutil" ) func main() { url := "https://cliq.zoho.com/api/v2/widgets/WIDGET_ID/maps/MAP_ID" payload := strings.NewReader("{\"field1\":\"value1\",\"field2\":\"value2\"}") req, _ := http.NewRequest("PUT", url, payload) req.Header.Add("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") req.Header.Add("content-type", "application/json") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := ioutil.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) }
const data = JSON.stringify({ "field1": "value1", "field2": "value2" }); const xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function () { if (this.readyState === this.DONE) { console.log(this.responseText); } }); xhr.open("PUT", "https://cliq.zoho.com/api/v2/widgets/WIDGET_ID/maps/MAP_ID"); xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); xhr.setRequestHeader("content-type", "application/json"); xhr.send(data);
curl --request PUT \ --url https://cliq.zoho.com/api/v2/widgets/WIDGET_ID/maps/MAP_ID \ --header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "title": "John's Van", "type": "van", "color": "green", "last_modified_time": 1770630000000, "latitude": 12.9716, "longitude": 77.5946, "info": "En route", "destination": { "latitude": 12.9352, "longitude": 77.6146 }, "waypoints": [ { "latitude": 12.9524, "longitude": 77.6046 } ], "buttons": [ { "label": "Call driver", "type": "invoke.function", "name": "call" }, { "label": "Track live", "type": "open.url", "web": "https://example.com/track/driver_001" } ] }

Response Example

{ "driver_001": { "title": "John's Van", "type": "van", "color": "green", "last_modified_time": 1770630000000, "latitude": 12.9716, "longitude": 77.5946, "info": "En route", "destination": { "latitude": 12.9352, "longitude": 77.6146 }, "waypoints": [ { "latitude": 12.9524, "longitude": 77.6046 } ], "buttons": [ { "label": "Call driver", "type": "invoke.function", "name": "call" }, { "label": "Track live", "type": "open.url", "web": "https://example.com/track/driver_001" } ] } }
{ "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 ticker 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

Use this API to delete an existing ticker in the map view in widgets.
OAuth Scope : ZohoCliq.Applications.DELETE

Arguments

ids
array
(Required)
List of ticker IDs or keys that should be removed from the map.

Path Parameters

WIDGET_ID
string
(Required)
Unique identifier of the widget To learn how to retrieve this ID, see WIDGET_ID in the Glossary page.
MAP_ID
string
(Required)
Unique identifier of the map within the widget To learn how to retrieve this ID, see MAP_ID in the Glossary page.

Query Parameters

appkey
string
To specify deleting a ticker that belongs to a widget bundled 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/v2/widgets/WIDGET_ID/maps/MAP_ID" type: DELETE 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/v2/widgets/WIDGET_ID/maps/MAP_ID") .delete(body) .addHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'DELETE', headers: { Authorization: 'Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://cliq.zoho.com/api/v2/widgets/WIDGET_ID/maps/MAP_ID', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("cliq.zoho.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'Authorization': "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("DELETE", "/api/v2/widgets/WIDGET_ID/maps/MAP_ID", payload, 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/v2/widgets/WIDGET_ID/maps/MAP_ID", "headers": { "Authorization": "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
var client = new RestClient("https://cliq.zoho.com/api/v2/widgets/WIDGET_ID/maps/MAP_ID"); var request = new RestRequest(Method.DELETE); 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.Delete, RequestUri = new Uri("https://cliq.zoho.com/api/v2/widgets/WIDGET_ID/maps/MAP_ID"), Headers = { { "Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" }, }, Content = new StringContent("{\"field1\":\"value1\",\"field2\":\"value2\"}") { Headers = { ContentType = new MediaTypeHeaderValue("application/json") } } }; using (var response = await client.SendAsync(request)) { response.EnsureSuccessStatusCode(); var body = await response.Content.ReadAsStringAsync(); Console.WriteLine(body); }
package main import ( "fmt" "strings" "net/http" "io/ioutil" ) func main() { url := "https://cliq.zoho.com/api/v2/widgets/WIDGET_ID/maps/MAP_ID" payload := strings.NewReader("{\"field1\":\"value1\",\"field2\":\"value2\"}") req, _ := http.NewRequest("DELETE", 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("DELETE", "https://cliq.zoho.com/api/v2/widgets/WIDGET_ID/maps/MAP_ID"); xhr.setRequestHeader("Authorization", "Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); xhr.setRequestHeader("content-type", "application/json"); xhr.send(data);
curl --request DELETE \ --url https://cliq.zoho.com/api/v2/widgets/WIDGET_ID/maps/MAP_ID \ --header 'Authorization: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "ids": [ "chennai", "mumbai" ] }

Response Example

{ "status": "success", "message": "Operation completed successfully." }
{ "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." }