Callback Requests

Creates a request for a callback for the specified phone number. Instead of waiting on hold in the queue when all agents are busy, the caller's place is held in the queue and their call is automatically returned when an agent becomes available. For more information on callback requests, see Understanding the end-user experience in Zendesk help. Callbacks don't need to be enabled on the phone number to create a callback request with the API.

JSON format

Callback Requests are represented as JSON objects with the following properties:

group_idsarrayfalsefalseIDs of groups to route the call to. If omnichannel routing is enabled, only the first group_id provided is used to route the callback
phone_number_idnumberfalsetrueThe Talk phone number ID
requester_phone_numberstringfalsetrueThe callback phone number in E.164 international number format

Create Callback Request

  • POST /api/v2/channels/voice/callback_requests

Allowed For

  • Agents

Rate Limit

You can create 30 callback requests every 10 minutes using this endpoint.

Example body

{  "callback_request": {    "phone_number_id": 1001,    "requester_phone_number": "+12518717081"  }}

Code Samples

curl https://{subdomain} \  -d '{"callback_request": {"phone_number_id": 1001, "requester_phone_number": "+1234567890"}}' \    -H "Content-Type: application/json" -X POST \    -v -u {email_address}:{password}
import (	"fmt"	"io"	"net/http"	"strings")
func main() {	url := ""	method := "POST"	payload := strings.NewReader(`{  "callback_request": {    "phone_number_id": 1001,    "requester_phone_number": "+12518717081"  }}`)	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>") // Base64 encoded "username:password"
	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))}
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("")		.newBuilder();RequestBody body = RequestBody.create(MediaType.parse("application/json"),		"""{  \"callback_request\": {    \"phone_number_id\": 1001,    \"requester_phone_number\": \"+12518717081\"  }}""");
Request request = new Request.Builder()		.url(		.method("POST", body)		.addHeader("Content-Type", "application/json")		.addHeader("Authorization", Credentials.basic("your-email", "your-password"))		.build();Response response = client.newCall(request).execute();
var axios = require('axios');var data = JSON.stringify({  "callback_request": {    "phone_number_id": 1001,    "requester_phone_number": "+12518717081"  }});
var config = {  method: 'POST',  url: '',  headers: {	'Content-Type': 'application/json',	'Authorization': 'Basic <auth-value>', // Base64 encoded "username:password"  },  data : data,};
axios(config).then(function (response) {  console.log(JSON.stringify(;}).catch(function (error) {  console.log(error);});
import requestsimport json
url = ""
payload = json.loads("""{  "callback_request": {    "phone_number_id": 1001,    "requester_phone_number": "+12518717081"  }}""")headers = {	"Content-Type": "application/json",}
response = requests.request(	"POST",	url,	auth=('<username>', '<password>'),	headers=headers,	json=payload)
require "net/http"uri = URI("")request =, "Content-Type": "application/json")request.body = %q({  "callback_request": {    "phone_number_id": 1001,    "requester_phone_number": "+12518717081"  }})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
// Status 201 Created