Shortcuts
You can use the API to get or set the Shortcuts information.
Note: Accounts have a maximum limit of 15,000 shortcuts that can be defined. Once you have reached this limit, any additional API calls to create new shortcuts result in an error code 429, "Exceeded the number of shortcuts allowed for the account".
JSON format
Shortcuts are represented as JSON objects with the following properties:
Name | Type | Read-only | Mandatory | Description |
---|---|---|---|---|
agents | array | false | false | Agent the shortcut belongs to if scope is "agent". Currently only first element is taken into consideration |
departments | array | false | false | Departments the shortcut belongs to if scope is "department" |
id | string | true | false | Unique ID of the shortcut. Disallowed values: "/", "\", "$" |
message | string | false | true | The message of the shortcut |
name | string | false | true | The name of the shortcut. Disallowed values: "/", "\", "$" |
options | string | false | false | Options for the shortcut |
scope | string | false | false | Scope of the shortcut applicability. Allowed values are "all", "agent", or "department". |
tags | array | false | false | List of tags that will be added to chat if the shortcut is used |
Note that scope
, departments
and agents
fields will only be considered for accounts with these features enabled.
For backward compatibility, name
is equal to id
. To future-proof your code, use id
instead of name
.
Example
{
"id": "question",
"message": "Hi! Do you need assistance?",
"name": "question",
"options": "Yes/No",
"scope": "all",
"tags": [
"Question",
"Survey"
]
}
List Shortcuts
GET /api/v2/chat/shortcuts
Lists all shortcuts for the account.
Allowed for
- Administrator
Code Samples
curl
curl https://{subdomain}.zendesk.com/api/v2/chat/shortcuts \
-v -H "Authorization: Bearer {token}"
Go
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://subdomain.zendesk.com/api/v2/chat/shortcuts"
method := "GET"
req, err := http.NewRequest(method, url, nil)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("Content-Type", "application/json")
client := &http.Client {}
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
Java
import com.squareup.okhttp.*;
OkHttpClient client = new OkHttpClient();
HttpUrl.Builder urlBuilder = HttpUrl.parse("https://subdomain.zendesk.com/api/v2/chat/shortcuts")
.newBuilder();
Request request = new Request.Builder()
.url(urlBuilder.build())
.method("GET", null)
.addHeader("Content-Type", "application/json")
.build();
Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');
var config = {
method: 'GET',
url: 'https://subdomain.zendesk.com/api/v2/chat/shortcuts',
headers: {
'Content-Type': 'application/json',
},
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
Python
import requests
url = "https://subdomain.zendesk.com/api/v2/chat/shortcuts"
headers = {
"Content-Type": "application/json",
}
response = requests.request(
"GET",
url,
headers=headers
)
print(response.text)
Ruby
require "net/http"
uri = URI("https://subdomain.zendesk.com/api/v2/chat/shortcuts")
request = Net::HTTP::Get.new(uri, "Content-Type": "application/json")
response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|
http.request(request)
end
Example response(s)
200 OK
// Status 200 OK
[
{
"id": "question",
"message": "Hi! Do you need assistance?",
"name": "question",
"options": "Yes/No",
"scope": "all",
"tags": [
"Question",
"Survey"
]
},
{
"id": "sign up",
"message": "When would you like to sign up?",
"name": "sign up",
"options": "Now/Later",
"scope": "all",
"tags": [
"Question",
"Signup"
]
}
]
Show Shortcut
GET /api/v2/chat/shortcuts/{shortcut_id}
Returns shortcut information by specifying the shortcut name.
Allowed for
- Administrator
Parameters
Name | Type | In | Required | Description |
---|---|---|---|---|
shortcut_id | integer | Path | true | The ID of the shortcut |
Code Samples
curl
curl https://{subdomain}.zendesk.com/api/v2/chat/shortcuts/(shortcut_id) \
-v -H "Authorization: Bearer {token}"
Go
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://subdomain.zendesk.com/api/v2/chat/shortcuts/1"
method := "GET"
req, err := http.NewRequest(method, url, nil)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("Content-Type", "application/json")
client := &http.Client {}
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
Java
import com.squareup.okhttp.*;
OkHttpClient client = new OkHttpClient();
HttpUrl.Builder urlBuilder = HttpUrl.parse("https://subdomain.zendesk.com/api/v2/chat/shortcuts/1")
.newBuilder();
Request request = new Request.Builder()
.url(urlBuilder.build())
.method("GET", null)
.addHeader("Content-Type", "application/json")
.build();
Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');
var config = {
method: 'GET',
url: 'https://subdomain.zendesk.com/api/v2/chat/shortcuts/1',
headers: {
'Content-Type': 'application/json',
},
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
Python
import requests
url = "https://subdomain.zendesk.com/api/v2/chat/shortcuts/1"
headers = {
"Content-Type": "application/json",
}
response = requests.request(
"GET",
url,
headers=headers
)
print(response.text)
Ruby
require "net/http"
uri = URI("https://subdomain.zendesk.com/api/v2/chat/shortcuts/1")
request = Net::HTTP::Get.new(uri, "Content-Type": "application/json")
response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|
http.request(request)
end
Example response(s)
200 OK
// Status 200 OK
{
"id": "intro",
"message": "Hi! Do you need assistance?",
"name": "intro",
"options": "Yes/No",
"scope": "all",
"tags": [
"Question",
"Survey"
]
}
Create Shortcut
POST /api/v2/chat/shortcuts
Adds a shortcut to the account.
Allowed for
- Administrator
Code Samples
curl
curl https://{subdomain}.zendesk.com/api/v2/chat/shortcuts \
-d '{
"name" : "intro",
"message" : "Hi! Do you need assistance?",
"options" : "Yes/No"
}' \
-v -H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" -X POST
Go
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://subdomain.zendesk.com/api/v2/chat/shortcuts"
method := "POST"
req, err := http.NewRequest(method, url, nil)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("Content-Type", "application/json")
client := &http.Client {}
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
Java
import com.squareup.okhttp.*;
OkHttpClient client = new OkHttpClient();
HttpUrl.Builder urlBuilder = HttpUrl.parse("https://subdomain.zendesk.com/api/v2/chat/shortcuts")
.newBuilder();
RequestBody body = RequestBody.create(MediaType.parse("application/json"),
"""
""");
Request request = new Request.Builder()
.url(urlBuilder.build())
.method("POST", body)
.addHeader("Content-Type", "application/json")
.build();
Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');
var config = {
method: 'POST',
url: 'https://subdomain.zendesk.com/api/v2/chat/shortcuts',
headers: {
'Content-Type': 'application/json',
},
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
Python
import requests
url = "https://subdomain.zendesk.com/api/v2/chat/shortcuts"
headers = {
"Content-Type": "application/json",
}
response = requests.request(
"POST",
url,
headers=headers
)
print(response.text)
Ruby
require "net/http"
uri = URI("https://subdomain.zendesk.com/api/v2/chat/shortcuts")
request = Net::HTTP::Post.new(uri, "Content-Type": "application/json")
response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|
http.request(request)
end
Example response(s)
201 Created
// Status 201 Created
{
"id": "intro",
"message": "Hi! Do you need assistance?",
"name": "intro",
"options": "Yes/No",
"scope": "all",
"tags": []
}
Update Shortcut
PUT /api/v2/chat/shortcuts/{shortcut_id}
Updates a specified shortcut.
Allowed for
- Administrator
Parameters
Name | Type | In | Required | Description |
---|---|---|---|---|
shortcut_id | integer | Path | true | The ID of the shortcut |
Code Samples
curl
curl https://{subdomain}.zendesk.com/api/v2/chat/shortcuts/{shortcut_id} \
-d '{
"message" : "Hi! Are you confused?",
"options" : "Yes/No/Definitely Maybe",
"tags" : ["Question"]
}' \
-v -H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" -X PUT
Go
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://subdomain.zendesk.com/api/v2/chat/shortcuts/1"
method := "PUT"
req, err := http.NewRequest(method, url, nil)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("Content-Type", "application/json")
client := &http.Client {}
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
Java
import com.squareup.okhttp.*;
OkHttpClient client = new OkHttpClient();
HttpUrl.Builder urlBuilder = HttpUrl.parse("https://subdomain.zendesk.com/api/v2/chat/shortcuts/1")
.newBuilder();
RequestBody body = RequestBody.create(MediaType.parse("application/json"),
"""
""");
Request request = new Request.Builder()
.url(urlBuilder.build())
.method("PUT", body)
.addHeader("Content-Type", "application/json")
.build();
Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');
var config = {
method: 'PUT',
url: 'https://subdomain.zendesk.com/api/v2/chat/shortcuts/1',
headers: {
'Content-Type': 'application/json',
},
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
Python
import requests
url = "https://subdomain.zendesk.com/api/v2/chat/shortcuts/1"
headers = {
"Content-Type": "application/json",
}
response = requests.request(
"PUT",
url,
headers=headers
)
print(response.text)
Ruby
require "net/http"
uri = URI("https://subdomain.zendesk.com/api/v2/chat/shortcuts/1")
request = Net::HTTP::Put.new(uri, "Content-Type": "application/json")
response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|
http.request(request)
end
Example response(s)
200 OK
// Status 200 OK
{
"id": "intro",
"message": "Hi! Are you confused?",
"name": "intro",
"options": "Yes/No/Definitely Maybe",
"scope": "all",
"tags": [
"Question"
]
}
Delete Shortcut
DELETE /api/v2/chat/shortcuts/{shortcut_id}
Deletes a specified shortcut.
Allowed for
- Administrator
Parameters
Name | Type | In | Required | Description |
---|---|---|---|---|
shortcut_id | integer | Path | true | The ID of the shortcut |
Code Samples
curl
curl https://{subdomain}.zendesk.com/api/v2/chat/shortcuts/{shortcut_id} \
-v -H "Authorization: Bearer {token}" -X DELETE
Go
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://subdomain.zendesk.com/api/v2/chat/shortcuts/1"
method := "DELETE"
req, err := http.NewRequest(method, url, nil)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("Content-Type", "application/json")
client := &http.Client {}
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
Java
import com.squareup.okhttp.*;
OkHttpClient client = new OkHttpClient();
HttpUrl.Builder urlBuilder = HttpUrl.parse("https://subdomain.zendesk.com/api/v2/chat/shortcuts/1")
.newBuilder();
Request request = new Request.Builder()
.url(urlBuilder.build())
.method("DELETE", null)
.addHeader("Content-Type", "application/json")
.build();
Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');
var config = {
method: 'DELETE',
url: 'https://subdomain.zendesk.com/api/v2/chat/shortcuts/1',
headers: {
'Content-Type': 'application/json',
},
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
Python
import requests
url = "https://subdomain.zendesk.com/api/v2/chat/shortcuts/1"
headers = {
"Content-Type": "application/json",
}
response = requests.request(
"DELETE",
url,
headers=headers
)
print(response.text)
Ruby
require "net/http"
uri = URI("https://subdomain.zendesk.com/api/v2/chat/shortcuts/1")
request = Net::HTTP::Delete.new(uri, "Content-Type": "application/json")
response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|
http.request(request)
end
Example response(s)
204 No Content
// Status 204 No Content
null