Interactive voice response (IVR) uses keypad tones to route customers to the right agent or department, provide recorded responses for frequently asked questions, and deflect calls by allowing callers to switch the interaction to text. IVR is available on the Talk Professional and Enterprise plans. For more information, see Route incoming calls with IVR in the Zendesk Help Center.
IVR Routes are represented as JSON objects with the following properties:
Name
Type
Read-only
Mandatory
Description
action
string
false
false
The action that will be performed by the IVR route. See Valid IVR Route Actions . Allowed values are "group", "voicemail", "phone_number", "textback", or "menu".
greeting
string
true
false
The name of the greeting associated with the IVR route
id
integer
true
false
The IVR route ID
keypress
string
false
false
The keypress associated with the IVR route. Allowed values are "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "*", "#", or "default".
option_text
string
true
false
A text describing the options of the route. Example: When the option is group
, "option_text" will be the name of the associated group
options
object
false
false
The options for the IVR route depending on the action. See Valid IVR Route Actions
overflow_options
array
false
false
Options for managing overflow calls
Valid IVR Route Actions
Action
Option
Type
Description
group
group_ids
array
Valid group ids
voicemail
group_ids
array
Valid group ids
phone_number
phone_number
string
Valid phone number
textback
sms_textstring
string
Text to be sent in the sms message
textback
textback_phone_number_id
integer
Valid id of the text enabled phone number
menu
menu_id
integer
Valid IVR menu id
Example
{
"action" : "group" ,
"greeting" : null ,
"id" : 10001 ,
"keypress" : "0" ,
"option_text" : "Support Group" ,
"options" : {
"group_ids" : [
360001381413
]
}
}
List IVR Routes
GET /api/v2/channels/voice/ivr/{ivr_id}/menus/{menu_id}/routes
Allowed For
Parameters
Name
Type
In
Required
Description
ivr_id
integer
Path
true
The ID of the IVR
menu_id
integer
Path
true
The ID of the IVR Menu
Code Samples
curl
curl https:// { subdomain } .zendesk.com/api/v2/channels/voice/ivr/ { ivr_id } /menus/ { menu_id } /routes.json \
-v -u { email_address } : { password } -X GET
Go
import (
"fmt"
"io"
"net/http"
)
func main ( ) {
url := "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes"
method := "GET"
req , err := http . NewRequest ( method , url , nil )
if err != nil {
fmt . Println ( err )
return
}
req . Header . Add ( "Content-Type" , "application/json" )
req . Header . Add ( "Authorization" , "Basic <auth-value>" )
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://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes" )
. newBuilder ( ) ;
Request request = new Request . Builder ( )
. url ( urlBuilder . build ( ) )
. method ( "GET" , null )
. addHeader ( "Content-Type" , "application/json" )
. addHeader ( "Authorization" , Credentials . basic ( "your-email" , "your-password" ) )
. build ( ) ;
Response response = client . newCall ( request ) . execute ( ) ;
Nodejs
var axios = require ( 'axios' ) ;
var config = {
method : 'GET' ,
url : 'https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes' ,
headers : {
'Content-Type' : 'application/json' ,
'Authorization' : 'Basic <auth-value>' ,
} ,
} ;
axios ( config )
. then ( function ( response ) {
console . log ( JSON . stringify ( response . data ) ) ;
} )
. catch ( function ( error ) {
console . log ( error ) ;
} ) ;
Python
import requests
url = "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes"
headers = {
"Content-Type" : "application/json" ,
}
response = requests . request (
"GET" ,
url ,
auth = ( '<username>' , '<password>' ) ,
headers = headers
)
print ( response . text )
Ruby
require "net/http"
uri = URI ( "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes" )
request = Net : : HTTP : : Get . new ( uri , "Content-Type" : "application/json" )
request . basic_auth "username" , "password"
response = Net : : HTTP . start uri . hostname , uri . port , use_ssl : true do | http |
http . request ( request )
end
Example response(s)
200 OK
{
"count" : 1 ,
"ivr_routes" : [
{
"action" : "group" ,
"greeting" : null ,
"id" : 10001 ,
"keypress" : "0" ,
"option_text" : "Support Group" ,
"options" : {
"group_ids" : [
360001381413
]
}
}
] ,
"next_page" : null ,
"previous_page" : null
}
Show IVR Route
GET /api/v2/channels/voice/ivr/{ivr_id}/menus/{menu_id}/routes/{route_id}
Allowed For
Parameters
Name
Type
In
Required
Description
ivr_id
integer
Path
true
The ID of the IVR
menu_id
integer
Path
true
The ID of the IVR Menu
route_id
integer
Path
true
The ID of the IVR Route
Code Samples
curl
curl https:// { subdomain } .zendesk.com/api/v2/channels/voice/ivr/ { ivr_id } /menus/ { menu_id } /routes/ { route_id } .json \
-v -u { email_address } : { password } -X GET
Go
import (
"fmt"
"io"
"net/http"
)
func main ( ) {
url := "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes/10001"
method := "GET"
req , err := http . NewRequest ( method , url , nil )
if err != nil {
fmt . Println ( err )
return
}
req . Header . Add ( "Content-Type" , "application/json" )
req . Header . Add ( "Authorization" , "Basic <auth-value>" )
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://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes/10001" )
. newBuilder ( ) ;
Request request = new Request . Builder ( )
. url ( urlBuilder . build ( ) )
. method ( "GET" , null )
. addHeader ( "Content-Type" , "application/json" )
. addHeader ( "Authorization" , Credentials . basic ( "your-email" , "your-password" ) )
. build ( ) ;
Response response = client . newCall ( request ) . execute ( ) ;
Nodejs
var axios = require ( 'axios' ) ;
var config = {
method : 'GET' ,
url : 'https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes/10001' ,
headers : {
'Content-Type' : 'application/json' ,
'Authorization' : 'Basic <auth-value>' ,
} ,
} ;
axios ( config )
. then ( function ( response ) {
console . log ( JSON . stringify ( response . data ) ) ;
} )
. catch ( function ( error ) {
console . log ( error ) ;
} ) ;
Python
import requests
url = "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes/10001"
headers = {
"Content-Type" : "application/json" ,
}
response = requests . request (
"GET" ,
url ,
auth = ( '<username>' , '<password>' ) ,
headers = headers
)
print ( response . text )
Ruby
require "net/http"
uri = URI ( "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes/10001" )
request = Net : : HTTP : : Get . new ( uri , "Content-Type" : "application/json" )
request . basic_auth "username" , "password"
response = Net : : HTTP . start uri . hostname , uri . port , use_ssl : true do | http |
http . request ( request )
end
Example response(s)
200 OK
{
"ivr_route" : {
"action" : "group" ,
"greeting" : null ,
"id" : 10002 ,
"keypress" : "1" ,
"option_text" : "Support Group" ,
"options" : {
"group_ids" : [
10001
]
}
}
}
Create IVR Route
POST /api/v2/channels/voice/ivr/{ivr_id}/menus/{menu_id}/routes
Allowed For
Parameters
Name
Type
In
Required
Description
ivr_id
integer
Path
true
The ID of the IVR
menu_id
integer
Path
true
The ID of the IVR Menu
Example body
{
"ivr_route" : {
"action" : "group" ,
"keypress" : "1" ,
"options" : {
"group_ids" : [
10001
]
}
}
}
Code Samples
curl
curl https:// { subdomain } .zendesk.com/api/v2/channels/voice/ivr/ { ivr_id } /menus/ { menu_id } /routes.json \
-H "Content-Type: application/json" -d '{"ivr_route": {"keypress": "1", "action": "group", "options": {"group_ids" : [10001]}}}' \
-v -u { email_address } : { password } -X POST
Go
import (
"fmt"
"io"
"net/http"
"strings"
)
func main ( ) {
url := "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes"
method := "POST"
payload := strings . NewReader ( `{
"ivr_route": {
"action": "group",
"keypress": "1",
"options": {
"group_ids": [
10001
]
}
}
}` )
req , err := http . NewRequest ( method , url , payload )
if err != nil {
fmt . Println ( err )
return
}
req . Header . Add ( "Content-Type" , "application/json" )
req . Header . Add ( "Authorization" , "Basic <auth-value>" )
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://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes" )
. newBuilder ( ) ;
RequestBody body = RequestBody . create ( MediaType . parse ( "application/json" ) ,
"" "
{
\"ivr_route\" : {
\"action\" : \"group\" ,
\"keypress\" : \" 1 \" ,
\"options\" : {
\"group_ids\" : [
10001
]
}
}
} "" " ) ;
Request request = new Request . Builder ( )
. url ( urlBuilder . build ( ) )
. method ( "POST" , body )
. addHeader ( "Content-Type" , "application/json" )
. addHeader ( "Authorization" , Credentials . basic ( "your-email" , "your-password" ) )
. build ( ) ;
Response response = client . newCall ( request ) . execute ( ) ;
Nodejs
var axios = require ( 'axios' ) ;
var data = JSON . stringify ( {
"ivr_route" : {
"action" : "group" ,
"keypress" : "1" ,
"options" : {
"group_ids" : [
10001
]
}
}
} ) ;
var config = {
method : 'POST' ,
url : 'https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes' ,
headers : {
'Content-Type' : 'application/json' ,
'Authorization' : 'Basic <auth-value>' ,
} ,
data : data ,
} ;
axios ( config )
. then ( function ( response ) {
console . log ( JSON . stringify ( response . data ) ) ;
} )
. catch ( function ( error ) {
console . log ( error ) ;
} ) ;
Python
import requests
import json
url = "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes"
payload = json . loads ( """{
"ivr_route": {
"action": "group",
"keypress": "1",
"options": {
"group_ids": [
10001
]
}
}
}""" )
headers = {
"Content-Type" : "application/json" ,
}
response = requests . request (
"POST" ,
url ,
auth = ( '<username>' , '<password>' ) ,
headers = headers ,
json = payload
)
print ( response . text )
Ruby
require "net/http"
uri = URI ( "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes" )
request = Net : : HTTP : : Post . new ( uri , "Content-Type" : "application/json" )
request . body = % q ( {
"ivr_route" : {
"action" : "group" ,
"keypress" : "1" ,
"options" : {
"group_ids" : [
10001
]
}
}
} )
request . basic_auth "username" , "password"
response = Net : : HTTP . start uri . hostname , uri . port , use_ssl : true do | http |
http . request ( request )
end
Example response(s)
201 Created
{
"ivr_route" : {
"action" : "group" ,
"greeting" : null ,
"id" : 10002 ,
"keypress" : "1" ,
"option_text" : "Support Group" ,
"options" : {
"group_ids" : [
10001
]
}
}
}
Update IVR Route
PUT /api/v2/channels/voice/ivr/{ivr_id}/menus/{menu_id}/routes/{route_id}
Allowed For
Parameters
Name
Type
In
Required
Description
ivr_id
integer
Path
true
The ID of the IVR
menu_id
integer
Path
true
The ID of the IVR Menu
route_id
integer
Path
true
The ID of the IVR Route
Example body
{
"ivr_route" : {
"action" : "group" ,
"keypress" : "1" ,
"options" : {
"group_ids" : [
10001
]
}
}
}
Code Samples
curl
curl https:// { subdomain } .zendesk.com/api/v2/channels/voice/ivr/ { ivr_id } /menus/ { menu_id } /routes/ { id } .json \
-H "Content-Type: application/json" -d '{"ivr_route": {"keypress": "2"}}' \
-v -u { email_address } : { password } -X PUT
Go
import (
"fmt"
"io"
"net/http"
"strings"
)
func main ( ) {
url := "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes/10001"
method := "PUT"
payload := strings . NewReader ( `{
"ivr_route": {
"action": "group",
"keypress": "1",
"options": {
"group_ids": [
10001
]
}
}
}` )
req , err := http . NewRequest ( method , url , payload )
if err != nil {
fmt . Println ( err )
return
}
req . Header . Add ( "Content-Type" , "application/json" )
req . Header . Add ( "Authorization" , "Basic <auth-value>" )
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://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes/10001" )
. newBuilder ( ) ;
RequestBody body = RequestBody . create ( MediaType . parse ( "application/json" ) ,
"" "
{
\"ivr_route\" : {
\"action\" : \"group\" ,
\"keypress\" : \" 1 \" ,
\"options\" : {
\"group_ids\" : [
10001
]
}
}
} "" " ) ;
Request request = new Request . Builder ( )
. url ( urlBuilder . build ( ) )
. method ( "PUT" , body )
. addHeader ( "Content-Type" , "application/json" )
. addHeader ( "Authorization" , Credentials . basic ( "your-email" , "your-password" ) )
. build ( ) ;
Response response = client . newCall ( request ) . execute ( ) ;
Nodejs
var axios = require ( 'axios' ) ;
var data = JSON . stringify ( {
"ivr_route" : {
"action" : "group" ,
"keypress" : "1" ,
"options" : {
"group_ids" : [
10001
]
}
}
} ) ;
var config = {
method : 'PUT' ,
url : 'https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes/10001' ,
headers : {
'Content-Type' : 'application/json' ,
'Authorization' : 'Basic <auth-value>' ,
} ,
data : data ,
} ;
axios ( config )
. then ( function ( response ) {
console . log ( JSON . stringify ( response . data ) ) ;
} )
. catch ( function ( error ) {
console . log ( error ) ;
} ) ;
Python
import requests
import json
url = "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes/10001"
payload = json . loads ( """{
"ivr_route": {
"action": "group",
"keypress": "1",
"options": {
"group_ids": [
10001
]
}
}
}""" )
headers = {
"Content-Type" : "application/json" ,
}
response = requests . request (
"PUT" ,
url ,
auth = ( '<username>' , '<password>' ) ,
headers = headers ,
json = payload
)
print ( response . text )
Ruby
require "net/http"
uri = URI ( "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes/10001" )
request = Net : : HTTP : : Put . new ( uri , "Content-Type" : "application/json" )
request . body = % q ( {
"ivr_route" : {
"action" : "group" ,
"keypress" : "1" ,
"options" : {
"group_ids" : [
10001
]
}
}
} )
request . basic_auth "username" , "password"
response = Net : : HTTP . start uri . hostname , uri . port , use_ssl : true do | http |
http . request ( request )
end
Example response(s)
200 OK
{
"ivr_route" : {
"action" : "group" ,
"greeting" : null ,
"id" : 10002 ,
"keypress" : "1" ,
"option_text" : "Support Group" ,
"options" : {
"group_ids" : [
10001
]
}
}
}
Delete IVR Route
DELETE /api/v2/channels/voice/ivr/{ivr_id}/menus/{menu_id}/routes/{route_id}
Allowed For
Parameters
Name
Type
In
Required
Description
ivr_id
integer
Path
true
The ID of the IVR
menu_id
integer
Path
true
The ID of the IVR Menu
route_id
integer
Path
true
The ID of the IVR Route
Code Samples
curl
curl https:// { subdomain } .zendesk.com/api/v2/channels/voice/ivr/ { ivr_id } /menus/ { menu_id } /routes/ { route_id } .json \
-v -u { email_address } : { password } -X DELETE
Go
import (
"fmt"
"io"
"net/http"
)
func main ( ) {
url := "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes/10001"
method := "DELETE"
req , err := http . NewRequest ( method , url , nil )
if err != nil {
fmt . Println ( err )
return
}
req . Header . Add ( "Content-Type" , "application/json" )
req . Header . Add ( "Authorization" , "Basic <auth-value>" )
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://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes/10001" )
. newBuilder ( ) ;
Request request = new Request . Builder ( )
. url ( urlBuilder . build ( ) )
. method ( "DELETE" , null )
. addHeader ( "Content-Type" , "application/json" )
. addHeader ( "Authorization" , Credentials . basic ( "your-email" , "your-password" ) )
. build ( ) ;
Response response = client . newCall ( request ) . execute ( ) ;
Nodejs
var axios = require ( 'axios' ) ;
var config = {
method : 'DELETE' ,
url : 'https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes/10001' ,
headers : {
'Content-Type' : 'application/json' ,
'Authorization' : 'Basic <auth-value>' ,
} ,
} ;
axios ( config )
. then ( function ( response ) {
console . log ( JSON . stringify ( response . data ) ) ;
} )
. catch ( function ( error ) {
console . log ( error ) ;
} ) ;
Python
import requests
url = "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes/10001"
headers = {
"Content-Type" : "application/json" ,
}
response = requests . request (
"DELETE" ,
url ,
auth = ( '<username>' , '<password>' ) ,
headers = headers
)
print ( response . text )
Ruby
require "net/http"
uri = URI ( "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001/routes/10001" )
request = Net : : HTTP : : Delete . new ( uri , "Content-Type" : "application/json" )
request . basic_auth "username" , "password"
response = Net : : HTTP . start uri . hostname , uri . port , use_ssl : true do | http |
http . request ( request )
end
Example response(s)
200 OK
{
"ivr_route" : {
"action" : "group" ,
"greeting" : null ,
"id" : 10002 ,
"keypress" : "1" ,
"option_text" : "Support Group" ,
"options" : {
"group_ids" : [
10001
]
}
}
}