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 Menus are represented as JSON objects with the following properties:
default boolean true false Whether this is the default menu for the IVR greeting_id integer false false The ID of the greeting associated with the IVR menu id integer true false The IVR menu ID name string false false The name of the IVR menu routes array true false The list of the IVR menu routes
Example
{
"default" : true ,
"greeting_id" : 10001 ,
"id" : 10001 ,
"name" : "Main menu" ,
"routes" : [
{
"action" : "group" ,
"greeting" : null ,
"id" : 10001 ,
"keypress" : "0" ,
"option_text" : "Support Group" ,
"options" : {
"group_ids" : [
360001381413
]
}
}
]
}
GET /api/v2/channels/voice/ivr/{ivr_id}/menus
Allowed For
Parameters
ivr_id integer Path true The ID of the IVR
Code Samples
curl
curl https:// { subdomain } .zendesk.com/api/v2/channels/voice/ivr/ { ivr_id } /menus.json \
-v -u { email_address } /token: { api_token } -X GET
Go
import (
"fmt"
"io"
"net/http"
)
func main ( ) {
url := "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus"
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" )
. newBuilder ( ) ;
String userCredentials = "your_email_address" + "/token:" + "your_api_token" ;
String basicAuth = "Basic " + java . util . Base64 . getEncoder ( ) . encodeToString ( userCredentials . getBytes ( ) ) ;
Request request = new Request . Builder ( )
. url ( urlBuilder . build ( ) )
. method ( "GET" , null )
. addHeader ( "Content-Type" , "application/json" )
. addHeader ( "Authorization" , basicAuth )
. 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' ,
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
from requests . auth import HTTPBasicAuth
url = "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus"
headers = {
"Content-Type" : "application/json" ,
}
email_address = 'your_email_address'
api_token = 'your_api_token'
auth = HTTPBasicAuth ( f' { email_address } /token' , api_token )
response = requests . request (
"GET" ,
url ,
auth = auth ,
headers = headers
)
print ( response . text )
Ruby
require "net/http"
require "base64"
uri = URI ( "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus" )
request = Net : : HTTP : : Get . new ( uri , "Content-Type" : "application/json" )
email = "your_email_address"
api_token = "your_api_token"
credentials = "#{email}/token:#{api_token}"
encoded_credentials = Base64 . strict_encode64 ( credentials )
request [ "Authorization" ] = "Basic #{encoded_credentials}"
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_menus" : [
{
"default" : true ,
"greeting_id" : 10001 ,
"id" : 10001 ,
"name" : "Main menu" ,
"routes" : [
{
"action" : "group" ,
"greeting" : null ,
"id" : 10001 ,
"keypress" : "0" ,
"option_text" : "Support Group" ,
"options" : {
"group_ids" : [
360001381413
]
}
}
]
}
] ,
"next_page" : null ,
"previous_page" : null
}
GET /api/v2/channels/voice/ivr/{ivr_id}/menus/{menu_id}
Allowed For
Parameters
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 } .json \
-v -u { email_address } /token: { api_token } -X GET
Go
import (
"fmt"
"io"
"net/http"
)
func main ( ) {
url := "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/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" )
. newBuilder ( ) ;
String userCredentials = "your_email_address" + "/token:" + "your_api_token" ;
String basicAuth = "Basic " + java . util . Base64 . getEncoder ( ) . encodeToString ( userCredentials . getBytes ( ) ) ;
Request request = new Request . Builder ( )
. url ( urlBuilder . build ( ) )
. method ( "GET" , null )
. addHeader ( "Content-Type" , "application/json" )
. addHeader ( "Authorization" , basicAuth )
. 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' ,
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
from requests . auth import HTTPBasicAuth
url = "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001"
headers = {
"Content-Type" : "application/json" ,
}
email_address = 'your_email_address'
api_token = 'your_api_token'
auth = HTTPBasicAuth ( f' { email_address } /token' , api_token )
response = requests . request (
"GET" ,
url ,
auth = auth ,
headers = headers
)
print ( response . text )
Ruby
require "net/http"
require "base64"
uri = URI ( "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001" )
request = Net : : HTTP : : Get . new ( uri , "Content-Type" : "application/json" )
email = "your_email_address"
api_token = "your_api_token"
credentials = "#{email}/token:#{api_token}"
encoded_credentials = Base64 . strict_encode64 ( credentials )
request [ "Authorization" ] = "Basic #{encoded_credentials}"
response = Net : : HTTP . start uri . hostname , uri . port , use_ssl : true do | http |
http . request ( request )
end
Example response(s)
200 OK
{
"ivr_menu" : {
"default" : false ,
"greeting_id" : null ,
"id" : 10001 ,
"name" : "Main Menu" ,
"routes" : [
{
"action" : "group" ,
"greeting" : null ,
"id" : 10001 ,
"keypress" : "0" ,
"option_text" : "Support Group" ,
"options" : {
"group_ids" : [
360001381413
]
}
}
]
}
}
POST /api/v2/channels/voice/ivr/{ivr_id}/menus
Allowed For
Parameters
ivr_id integer Path true The ID of the IVR
Example body
{
"ivr_menu" : {
"name" : "Main Menu"
}
}
Code Samples
curl
curl https:// { subdomain } .zendesk.com/api/v2/channels/voice/ivr/ { ivr_id } /menus.json \
-H "Content-Type: application/json" -d '{"ivr_menu": {"name": "Main Menu"}}' \
-v -u { email_address } /token: { api_token } -X POST
Go
import (
"fmt"
"io"
"net/http"
"strings"
)
func main ( ) {
url := "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus"
method := "POST"
payload := strings . NewReader ( `{
"ivr_menu": {
"name": "Main Menu"
}
}` )
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" )
. newBuilder ( ) ;
RequestBody body = RequestBody . create ( MediaType . parse ( "application/json" ) ,
"" "
{
\"ivr_menu\" : {
\"name\" : \" Main Menu \"
}
} "" " ) ;
String userCredentials = "your_email_address" + "/token:" + "your_api_token" ;
String basicAuth = "Basic " + java . util . Base64 . getEncoder ( ) . encodeToString ( userCredentials . getBytes ( ) ) ;
Request request = new Request . Builder ( )
. url ( urlBuilder . build ( ) )
. method ( "POST" , body )
. addHeader ( "Content-Type" , "application/json" )
. addHeader ( "Authorization" , basicAuth )
. build ( ) ;
Response response = client . newCall ( request ) . execute ( ) ;
Nodejs
var axios = require ( 'axios' ) ;
var data = JSON . stringify ( {
"ivr_menu" : {
"name" : "Main Menu"
}
} ) ;
var config = {
method : 'POST' ,
url : 'https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus' ,
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
from requests . auth import HTTPBasicAuth
url = "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus"
payload = json . loads ( """{
"ivr_menu": {
"name": "Main Menu"
}
}""" )
headers = {
"Content-Type" : "application/json" ,
}
email_address = 'your_email_address'
api_token = 'your_api_token'
auth = HTTPBasicAuth ( f' { email_address } /token' , api_token )
response = requests . request (
"POST" ,
url ,
auth = auth ,
headers = headers ,
json = payload
)
print ( response . text )
Ruby
require "net/http"
require "base64"
uri = URI ( "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus" )
request = Net : : HTTP : : Post . new ( uri , "Content-Type" : "application/json" )
request . body = % q ( {
"ivr_menu" : {
"name" : "Main Menu"
}
} )
email = "your_email_address"
api_token = "your_api_token"
credentials = "#{email}/token:#{api_token}"
encoded_credentials = Base64 . strict_encode64 ( credentials )
request [ "Authorization" ] = "Basic #{encoded_credentials}"
response = Net : : HTTP . start uri . hostname , uri . port , use_ssl : true do | http |
http . request ( request )
end
Example response(s)
201 Created
{
"ivr_menu" : {
"default" : false ,
"greeting_id" : null ,
"id" : 10001 ,
"name" : "Main Menu" ,
"routes" : [
{
"action" : "group" ,
"greeting" : null ,
"id" : 10001 ,
"keypress" : "0" ,
"option_text" : "Support Group" ,
"options" : {
"group_ids" : [
360001381413
]
}
}
]
}
}
PUT /api/v2/channels/voice/ivr/{ivr_id}/menus/{menu_id}
Allowed For
Parameters
ivr_id integer Path true The ID of the IVR menu_id integer Path true The ID of the IVR Menu
Example body
{
"ivr_menu" : {
"name" : "Main Menu"
}
}
Code Samples
curl
curl https:// { subdomain } .zendesk.com/api/v2/channels/voice/ivr/ { ivr_id } /menus/ { menu_id } .json \
-H "Content-Type: application/json" -d '{"ivr_menu": {"name": "Secondary Menu"}}' \
-v -u { email_address } /token: { api_token } -X PUT
Go
import (
"fmt"
"io"
"net/http"
"strings"
)
func main ( ) {
url := "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001"
method := "PUT"
payload := strings . NewReader ( `{
"ivr_menu": {
"name": "Main Menu"
}
}` )
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" )
. newBuilder ( ) ;
RequestBody body = RequestBody . create ( MediaType . parse ( "application/json" ) ,
"" "
{
\"ivr_menu\" : {
\"name\" : \" Main Menu \"
}
} "" " ) ;
String userCredentials = "your_email_address" + "/token:" + "your_api_token" ;
String basicAuth = "Basic " + java . util . Base64 . getEncoder ( ) . encodeToString ( userCredentials . getBytes ( ) ) ;
Request request = new Request . Builder ( )
. url ( urlBuilder . build ( ) )
. method ( "PUT" , body )
. addHeader ( "Content-Type" , "application/json" )
. addHeader ( "Authorization" , basicAuth )
. build ( ) ;
Response response = client . newCall ( request ) . execute ( ) ;
Nodejs
var axios = require ( 'axios' ) ;
var data = JSON . stringify ( {
"ivr_menu" : {
"name" : "Main Menu"
}
} ) ;
var config = {
method : 'PUT' ,
url : 'https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/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
from requests . auth import HTTPBasicAuth
url = "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001"
payload = json . loads ( """{
"ivr_menu": {
"name": "Main Menu"
}
}""" )
headers = {
"Content-Type" : "application/json" ,
}
email_address = 'your_email_address'
api_token = 'your_api_token'
auth = HTTPBasicAuth ( f' { email_address } /token' , api_token )
response = requests . request (
"PUT" ,
url ,
auth = auth ,
headers = headers ,
json = payload
)
print ( response . text )
Ruby
require "net/http"
require "base64"
uri = URI ( "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001" )
request = Net : : HTTP : : Put . new ( uri , "Content-Type" : "application/json" )
request . body = % q ( {
"ivr_menu" : {
"name" : "Main Menu"
}
} )
email = "your_email_address"
api_token = "your_api_token"
credentials = "#{email}/token:#{api_token}"
encoded_credentials = Base64 . strict_encode64 ( credentials )
request [ "Authorization" ] = "Basic #{encoded_credentials}"
response = Net : : HTTP . start uri . hostname , uri . port , use_ssl : true do | http |
http . request ( request )
end
Example response(s)
200 OK
{
"ivr_menu" : {
"default" : false ,
"greeting_id" : null ,
"id" : 10001 ,
"name" : "Main Menu" ,
"routes" : [
{
"action" : "group" ,
"greeting" : null ,
"id" : 10001 ,
"keypress" : "0" ,
"option_text" : "Support Group" ,
"options" : {
"group_ids" : [
360001381413
]
}
}
]
}
}
DELETE /api/v2/channels/voice/ivr/{ivr_id}/menus/{menu_id}
Allowed For
Parameters
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 } .json \
-v -u { email_address } /token: { api_token } -X DELETE
Go
import (
"fmt"
"io"
"net/http"
)
func main ( ) {
url := "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/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" )
. newBuilder ( ) ;
String userCredentials = "your_email_address" + "/token:" + "your_api_token" ;
String basicAuth = "Basic " + java . util . Base64 . getEncoder ( ) . encodeToString ( userCredentials . getBytes ( ) ) ;
Request request = new Request . Builder ( )
. url ( urlBuilder . build ( ) )
. method ( "DELETE" , null )
. addHeader ( "Content-Type" , "application/json" )
. addHeader ( "Authorization" , basicAuth )
. 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' ,
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
from requests . auth import HTTPBasicAuth
url = "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001"
headers = {
"Content-Type" : "application/json" ,
}
email_address = 'your_email_address'
api_token = 'your_api_token'
auth = HTTPBasicAuth ( f' { email_address } /token' , api_token )
response = requests . request (
"DELETE" ,
url ,
auth = auth ,
headers = headers
)
print ( response . text )
Ruby
require "net/http"
require "base64"
uri = URI ( "https://support.zendesk.com/api/v2/channels/voice/ivr/10001/menus/10001" )
request = Net : : HTTP : : Delete . new ( uri , "Content-Type" : "application/json" )
email = "your_email_address"
api_token = "your_api_token"
credentials = "#{email}/token:#{api_token}"
encoded_credentials = Base64 . strict_encode64 ( credentials )
request [ "Authorization" ] = "Basic #{encoded_credentials}"
response = Net : : HTTP . start uri . hostname , uri . port , use_ssl : true do | http |
http . request ( request )
end
Example response(s)
200 OK
{
"ivr_menu" : {
"default" : false ,
"greeting_id" : null ,
"id" : 10001 ,
"name" : "Main Menu" ,
"routes" : [
{
"action" : "group" ,
"greeting" : null ,
"id" : 10001 ,
"keypress" : "0" ,
"option_text" : "Support Group" ,
"options" : {
"group_ids" : [
360001381413
]
}
}
]
}
}