Phonebook Contacts
This page documents endpoints related to Phonebook contacts.
For shared REST API environment and authentication requirements, see REST API Overview.
Endpoints
Phonebook contacts
Base path: /v3/phonebook/contact/
Rate limit scope: "phonebook"
List contacts
GET /v3/phonebook/contact/?phonebook={phonebook_id}&search={search}&ordering={ordering}&page={page}&page_size={page_size}
curl --include --request GET \
--header "Content-Type: application/json" \
--header "Authorization: Bearer {token}" \
https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/?phonebook={phonebook_id}&search={search}&ordering={ordering}&page={page}&page_size={page_size}
import requests
# Prepare headers
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer {token}"
}
# Send the request
response = requests.get('https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/?phonebook={phonebook_id}&search={search}&ordering={ordering}&page={page}&page_size={page_size}', headers=headers)
<?php
// Create a new cURL resource
$ch = curl_init();
// Prepare headers
$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: Bearer {token}';
// Set the header
curl_setopt($ch, CURL_HTTPHEADER, $headers);
// Indicate URL
curl_setopt($ch, CURLOPT_URL, 'https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/?phonebook={phonebook_id}&search={search}&ordering={ordering}&page={page}&page_size={page_size}');
// Return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Indicate the method
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
// Send the request
$result = curl_exec($ch);
curl_close($ch);
using (var httpClient = new HttpClient())
{
// Prepare request
using (var request = new HttpRequestMessage(new HttpMethod("GET"), "https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/?phonebook={phonebook_id}&search={search}&ordering={ordering}&page={page}&page_size={page_size}"))
{
// Prepare headers
request.Headers.Add("Content-Type", "application/json");
request.Headers.Add("Authorization", "Bearer {token}");
// Send response
var response = await httpClient.SendAsync(request);
}
}
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;
Client client = ClientBuilder.newClient();
Response response = client.target("https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/?phonebook={phonebook_id}&search={search}&ordering={ordering}&page={page}&page_size={page_size}")
.request(MediaType.APPLICATION_JSON_TYPE)
.header("Content-Type", "application/json")
.header("Authorization", "Bearer {token}")
.get();
const Http = new XMLHttpRequest();
Http.open("GET", "https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/?phonebook={phonebook_id}&search={search}&ordering={ordering}&page={page}&page_size={page_size}");
// Prepare headers
Http.setRequestHeader("Content-Type", "application/json");
Http.setRequestHeader("Authorization", "Bearer {token}");
// Send the request
Http.send();
// Handle the response
Http.onreadystatechange = (e) => {
console.log(Http.responseText)
}
Concrete example
GET /v3/phonebook/contact/?phonebook=1&search=Test contact&ordering=-display_name&page=1&page_size=48
curl --include --request GET \
--header "Content-Type: application/json" \
--header "Authorization: Bearer {token}" \
https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/?phonebook=1&search=Test contact&ordering=-display_name&page=1&page_size=48
import requests
# Prepare headers
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer {token}"
}
# Send the request
response = requests.get('https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/?phonebook=1&search=Test contact&ordering=-display_name&page=1&page_size=48', headers=headers)
<?php
// Create a new cURL resource
$ch = curl_init();
// Prepare headers
$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: Bearer {token}';
// Set the header
curl_setopt($ch, CURL_HTTPHEADER, $headers);
// Indicate URL
curl_setopt($ch, CURLOPT_URL, 'https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/?phonebook=1&search=Test contact&ordering=-display_name&page=1&page_size=48');
// Return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Indicate the method
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
// Send the request
$result = curl_exec($ch);
curl_close($ch);
using (var httpClient = new HttpClient())
{
// Prepare request
using (var request = new HttpRequestMessage(new HttpMethod("GET"), "https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/?phonebook=1&search=Test contact&ordering=-display_name&page=1&page_size=48"))
{
// Prepare headers
request.Headers.Add("Content-Type", "application/json");
request.Headers.Add("Authorization", "Bearer {token}");
// Send response
var response = await httpClient.SendAsync(request);
}
}
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;
Client client = ClientBuilder.newClient();
Response response = client.target("https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/?phonebook=1&search=Test contact&ordering=-display_name&page=1&page_size=48")
.request(MediaType.APPLICATION_JSON_TYPE)
.header("Content-Type", "application/json")
.header("Authorization", "Bearer {token}")
.get();
const Http = new XMLHttpRequest();
Http.open("GET", "https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/?phonebook=1&search=Test contact&ordering=-display_name&page=1&page_size=48");
// Prepare headers
Http.setRequestHeader("Content-Type", "application/json");
Http.setRequestHeader("Authorization", "Bearer {token}");
// Send the request
Http.send();
// Handle the response
Http.onreadystatechange = (e) => {
console.log(Http.responseText)
}
Query parameters
| Parameter | Type | Description |
|---|---|---|
phonebook |
integer |
Filterable field: phonebook (phonebook ID). |
search |
string |
Searchable fields: display_name, number, speed_dial, company. |
ordering |
string |
Orderable fields: phonebook, display_name, number, company, speed_dial. Use ordering=display_name for ascending order and ordering=-display_name for descending order. |
page |
integer |
Page number (1-based). |
page_size |
integer |
Number of items per page. Default: 48. |
Response format (example)
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"id": 100,
"phonebook": 1,
"display_name": "John Doe",
"number": "+3212345678",
"secondary_number": "+32470123456",
"speed_dial": 123,
"company": "Test Company"
}
]
}
Create a contact
POST /v3/phonebook/contact/
curl --include --request POST \
--header "Content-Type: application/json" \
--header "Authorization: Bearer {token}" \
-d '{"phonebook": 1, "display_name": "John Doe", "number": "+3212345678", "secondary_number": "+32470123456", "speed_dial": "123", "company": "Test Company"}' \
https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/
import requests
import json
# Prepare headers
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer {token}"
}
# Prepare data
myDict = {
"phonebook": 1,
"display_name": "John Doe",
"number": "+3212345678",
"secondary_number": "+32470123456",
"speed_dial": "123",
"company": "Test Company"
}
# Send the request
response = requests.post('https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/', headers=headers, json=json.dumps(myDict))
<?php
// Create a new cURL resource
$ch = curl_init();
// Prepare headers
$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: Bearer {token}';
// Set the header
curl_setopt($ch, CURL_HTTPHEADER, $headers);
// Indicate URL
curl_setopt($ch, CURLOPT_URL, 'https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/');
// Return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Indicate the method
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
// Prepare data
$data = array(
"phonebook" => "1",
"display_name" => "John Doe",
"number" => "+3212345678",
"secondary_number" => "+32470123456",
"speed_dial" => "123",
"company" => "Test Company",
};
$fields = json_encode($data);
// Set the body
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
// Send the request
$result = curl_exec($ch);
curl_close($ch);
using (var httpClient = new HttpClient())
{
// Prepare request
using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/"))
{
// Prepare headers
request.Headers.Add("Content-Type", "application/json");
request.Headers.Add("Authorization", "Bearer {token}");
// Prepare body
request.content = JsonContent.Create(new {
phonebook = "1"
display_name = "John Doe"
number = "+3212345678"
secondary_number = "+32470123456"
speed_dial = "123"
company = "Test Company"
});
// Send response
var response = await httpClient.SendAsync(request);
}
}
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;
// Prepare body
String jsonString = "{\"phonebook\": 1, \"display_name\": \"John Doe\", \"number\": \"+3212345678\", \"secondary_number\": \"+32470123456\", \"speed_dial\": \"123\", \"company\": \"Test Company\"}";
Client client = ClientBuilder.newClient();
Response response = client.target("https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/")
.request(MediaType.APPLICATION_JSON_TYPE)
.header("Content-Type", "application/json")
.header("Authorization", "Bearer {token}")
.post(Entity.json(jsonString));
const Http = new XMLHttpRequest();
Http.open("POST", "https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/");
// Prepare headers
Http.setRequestHeader("Content-Type", "application/json");
Http.setRequestHeader("Authorization", "Bearer {token}");
// Prepare data
const json = {
"phonebook": 1,
"display_name": "John Doe",
"number": "+3212345678",
"secondary_number": "+32470123456",
"speed_dial": "123",
"company": "Test Company"
}
// Send the request
Http.send(JSON.stringify(json));
// Handle the response
Http.onreadystatechange = (e) => {
console.log(Http.responseText)
}
Request body
| Field | Type | Required | Description |
|---|---|---|---|
phonebook |
integer |
Yes | Phonebook ID. |
display_name |
string |
Yes | Display name. |
number |
string |
Yes | Phone number (E.164 is recommended). Some local formats may be normalized. Validated for uniqueness per phonebook. |
secondary_number |
string | null |
Yes | Secondary number (E.164 is recommended). Some local formats may be normalized. |
speed_dial |
integer |
Yes | Internal extension used for speed dialing. Allowed values are 3–4 digits within 200–999 range and 2000–9999 range excluding 9191. Validated for uniqueness among phonebook contact speed dial extensions, call flow extensions, call queue extensions, voicemail box extensions and user extensions. |
company |
string |
No | Company name. |
Response format (example)
{
"id": 100,
"phonebook": 1,
"display_name": "John Doe",
"number": "+3212345678",
"secondary_number": "+32470123456",
"speed_dial": 123,
"company": "Test Company"
}
Retrieve a contact
GET /v3/phonebook/contact/100/
curl --include --request GET \
--header "Content-Type: application/json" \
--header "Authorization: Bearer {token}" \
https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/100/
import requests
# Prepare headers
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer {token}"
}
# Send the request
response = requests.get('https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/100/', headers=headers)
<?php
// Create a new cURL resource
$ch = curl_init();
// Prepare headers
$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: Bearer {token}';
// Set the header
curl_setopt($ch, CURL_HTTPHEADER, $headers);
// Indicate URL
curl_setopt($ch, CURLOPT_URL, 'https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/100/');
// Return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Indicate the method
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
// Send the request
$result = curl_exec($ch);
curl_close($ch);
using (var httpClient = new HttpClient())
{
// Prepare request
using (var request = new HttpRequestMessage(new HttpMethod("GET"), "https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/100/"))
{
// Prepare headers
request.Headers.Add("Content-Type", "application/json");
request.Headers.Add("Authorization", "Bearer {token}");
// Send response
var response = await httpClient.SendAsync(request);
}
}
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;
Client client = ClientBuilder.newClient();
Response response = client.target("https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/100/")
.request(MediaType.APPLICATION_JSON_TYPE)
.header("Content-Type", "application/json")
.header("Authorization", "Bearer {token}")
.get();
const Http = new XMLHttpRequest();
Http.open("GET", "https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/100/");
// Prepare headers
Http.setRequestHeader("Content-Type", "application/json");
Http.setRequestHeader("Authorization", "Bearer {token}");
// Send the request
Http.send();
// Handle the response
Http.onreadystatechange = (e) => {
console.log(Http.responseText)
}
Response format (example)
{
"id": 100,
"phonebook": 1,
"display_name": "John Doe",
"number": "+3212345678",
"secondary_number": "+32470123456",
"speed_dial": 123,
"company": "Test Company"
}
Update a contact
PUT /v3/phonebook/contact/100/
curl --include --request PUT \
--header "Content-Type: application/json" \
--header "Authorization: Bearer {token}" \
-d '{"phonebook": 1, "display_name": "John Doe Updated", "number": "+3212345678", "secondary_number": "+32470123456", "speed_dial": "123", "company": "Test Company"}' \
https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/100/
import requests
import json
# Prepare headers
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer {token}"
}
# Prepare data
myDict = {
"phonebook": 1,
"display_name": "John Doe Updated",
"number": "+3212345678",
"secondary_number": "+32470123456",
"speed_dial": "123",
"company": "Test Company"
}
# Send the request
response = requests.put('https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/100/', headers=headers, json=json.dumps(myDict))
<?php
// Create a new cURL resource
$ch = curl_init();
// Prepare headers
$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: Bearer {token}';
// Set the header
curl_setopt($ch, CURL_HTTPHEADER, $headers);
// Indicate URL
curl_setopt($ch, CURLOPT_URL, 'https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/100/');
// Return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Indicate the method
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
// Prepare data
$data = array(
"phonebook" => "1",
"display_name" => "John Doe Updated",
"number" => "+3212345678",
"secondary_number" => "+32470123456",
"speed_dial" => "123",
"company" => "Test Company",
};
$fields = json_encode($data);
// Set the body
curl_setopt($ch, CURLOPT_PUTFIELDS, $fields);
// Send the request
$result = curl_exec($ch);
curl_close($ch);
using (var httpClient = new HttpClient())
{
// Prepare request
using (var request = new HttpRequestMessage(new HttpMethod("PUT"), "https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/100/"))
{
// Prepare headers
request.Headers.Add("Content-Type", "application/json");
request.Headers.Add("Authorization", "Bearer {token}");
// Prepare body
request.content = JsonContent.Create(new {
phonebook = "1"
display_name = "John Doe Updated"
number = "+3212345678"
secondary_number = "+32470123456"
speed_dial = "123"
company = "Test Company"
});
// Send response
var response = await httpClient.SendAsync(request);
}
}
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;
// Prepare body
String jsonString = "{\"phonebook\": 1, \"display_name\": \"John Doe Updated\", \"number\": \"+3212345678\", \"secondary_number\": \"+32470123456\", \"speed_dial\": \"123\", \"company\": \"Test Company\"}";
Client client = ClientBuilder.newClient();
Response response = client.target("https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/100/")
.request(MediaType.APPLICATION_JSON_TYPE)
.header("Content-Type", "application/json")
.header("Authorization", "Bearer {token}")
.put(Entity.json(jsonString));
const Http = new XMLHttpRequest();
Http.open("PUT", "https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/100/");
// Prepare headers
Http.setRequestHeader("Content-Type", "application/json");
Http.setRequestHeader("Authorization", "Bearer {token}");
// Prepare data
const json = {
"phonebook": 1,
"display_name": "John Doe Updated",
"number": "+3212345678",
"secondary_number": "+32470123456",
"speed_dial": "123",
"company": "Test Company"
}
// Send the request
Http.send(JSON.stringify(json));
// Handle the response
Http.onreadystatechange = (e) => {
console.log(Http.responseText)
}
Response format (example)
{
"id": 100,
"phonebook": 1,
"display_name": "John Doe Updated",
"number": "+3212345678",
"secondary_number": "+32470123456",
"speed_dial": 123,
"company": "Test Company"
}
Delete a contact
DELETE /v3/phonebook/contact/100/
curl --include --request DELETE \
--header "Content-Type: application/json" \
--header "Authorization: Bearer {token}" \
https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/100/
import requests
# Prepare headers
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer {token}"
}
# Send the request
response = requests.delete('https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/100/', headers=headers)
<?php
// Create a new cURL resource
$ch = curl_init();
// Prepare headers
$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: Bearer {token}';
// Set the header
curl_setopt($ch, CURL_HTTPHEADER, $headers);
// Indicate URL
curl_setopt($ch, CURLOPT_URL, 'https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/100/');
// Return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Indicate the method
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
// Send the request
$result = curl_exec($ch);
curl_close($ch);
using (var httpClient = new HttpClient())
{
// Prepare request
using (var request = new HttpRequestMessage(new HttpMethod("DELETE"), "https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/100/"))
{
// Prepare headers
request.Headers.Add("Content-Type", "application/json");
request.Headers.Add("Authorization", "Bearer {token}");
// Send response
var response = await httpClient.SendAsync(request);
}
}
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;
Client client = ClientBuilder.newClient();
Response response = client.target("https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/100/")
.request(MediaType.APPLICATION_JSON_TYPE)
.header("Content-Type", "application/json")
.header("Authorization", "Bearer {token}")
.delete();
const Http = new XMLHttpRequest();
Http.open("DELETE", "https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/100/");
// Prepare headers
Http.setRequestHeader("Content-Type", "application/json");
Http.setRequestHeader("Authorization", "Bearer {token}");
// Send the request
Http.send();
// Handle the response
Http.onreadystatechange = (e) => {
console.log(Http.responseText)
}
Note
A Phonebook Contact cannot be deleted if it is used in a Call Queue or Call Flow. It must first be removed from all places it is used.
Response
204 No Content
Error responses
400 Bad Request when the contact is in use.
If used in a queue:
{
"type": "client_error",
"errors": [
{
"code": "contacts_in_use",
"detail": "Contacts are in use: John Doe in queue \"Jonh Queue\".",
"attr": null
}
]
}
If used in a call flow:
{
"type": "client_error",
"errors": [
{
"code": "contacts_in_use",
"detail": "Contacts are in use: John Doe in call flow \"John Call Flow\".",
"attr": null
}
]
}
If used in both a queue and a call flow:
{
"type": "client_error",
"errors": [
{
"code": "contacts_in_use",
"detail": "Contacts are in use: John Doe in queue \"Josip Queue\", John Doe in call flow \"John Call Flow\".",
"attr": null
}
]
}
Bulk delete contacts
DELETE /v3/phonebook/contact/bulk_delete/
curl --include --request DELETE \
--header "Content-Type: application/json" \
--header "Authorization: Bearer {token}" \
-d '{"contact_ids": [100, 101]}' \
https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/bulk_delete/
import requests
import json
# Prepare headers
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer {token}"
}
# Prepare data
myDict = {
"contact_ids": [
100,
101
]
}
# Send the request
response = requests.delete('https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/bulk_delete/', headers=headers, json=json.dumps(myDict))
<?php
// Create a new cURL resource
$ch = curl_init();
// Prepare headers
$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: Bearer {token}';
// Set the header
curl_setopt($ch, CURL_HTTPHEADER, $headers);
// Indicate URL
curl_setopt($ch, CURLOPT_URL, 'https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/bulk_delete/');
// Return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Indicate the method
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
// Prepare data
$data = array(
"contact_ids" => "[100, 101]",
};
$fields = json_encode($data);
// Set the body
curl_setopt($ch, CURLOPT_DELETEFIELDS, $fields);
// Send the request
$result = curl_exec($ch);
curl_close($ch);
using (var httpClient = new HttpClient())
{
// Prepare request
using (var request = new HttpRequestMessage(new HttpMethod("DELETE"), "https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/bulk_delete/"))
{
// Prepare headers
request.Headers.Add("Content-Type", "application/json");
request.Headers.Add("Authorization", "Bearer {token}");
// Prepare body
request.content = JsonContent.Create(new {
contact_ids = "[100, 101]"
});
// Send response
var response = await httpClient.SendAsync(request);
}
}
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;
// Prepare body
String jsonString = "{\"contact_ids\": [100, 101]}";
Client client = ClientBuilder.newClient();
Response response = client.target("https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/bulk_delete/")
.request(MediaType.APPLICATION_JSON_TYPE)
.header("Content-Type", "application/json")
.header("Authorization", "Bearer {token}")
.delete(Entity.json(jsonString));
const Http = new XMLHttpRequest();
Http.open("DELETE", "https://api-eu-central-1.phoneserver.dev/v3/phonebook/contact/bulk_delete/");
// Prepare headers
Http.setRequestHeader("Content-Type", "application/json");
Http.setRequestHeader("Authorization", "Bearer {token}");
// Prepare data
const json = {
"contact_ids": [
100,
101
]
}
// Send the request
Http.send(JSON.stringify(json));
// Handle the response
Http.onreadystatechange = (e) => {
console.log(Http.responseText)
}
Request body
| Field | Type | Required | Description |
|---|---|---|---|
contact_ids |
integer[] |
Yes | A non-empty list of phonebook contact IDs. |
Response
204 No Content
Bulk delete is all-or-nothing: if any requested contact returns an error, no contacts are deleted.
Error responses
| Status | Condition |
|---|---|
400 Bad Request |
contact_ids is missing. |
400 Bad Request |
contact_ids is an empty list. |
400 Bad Request |
contact_ids contains one or more non-integer values. |
403 Forbidden |
One or more requested IDs are not allowed for the authenticated user. |
400 Bad Request |
Unexpected exception. |
Validation error example (contact_ids missing):
{
"type": "validation_error",
"errors": [
{
"code": "required",
"detail": "This field is required.",
"attr": "contact_ids"
}
]
}
Validation error behavior (contact_ids empty):
The API returns a field-level validation error in the same structured format (type: "validation_error", attr: "contact_ids").
Validation error behavior (non-integer values in contact_ids):
The API returns a field-level validation error in the same structured format (type: "validation_error", with attr pointing to contact_ids / invalid list item path).
403 Forbidden behavior:
The response body is empty. Only the HTTP status code is returned.
Contacts in use (matches Delete a contact):
If used in a queue:
{
"type": "client_error",
"errors": [
{
"code": "contacts_in_use",
"detail": "Contacts are in use: John Doe in queue \"John Queue\".",
"attr": null
}
]
}
If used in a call flow:
{
"type": "client_error",
"errors": [
{
"code": "contacts_in_use",
"detail": "Contacts are in use: John Doe in call flow \"John Call Flow\".",
"attr": null
}
]
}
If used in both a queue and a call flow:
{
"type": "client_error",
"errors": [
{
"code": "contacts_in_use",
"detail": "Contacts are in use: John Doe in queue \"John Queue\", John Doe in call flow \"John Call Flow\".",
"attr": null
}
]
}