curl --request POST \
--url https://api.voxo.co/v2/admin/devices/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"tenantId": 123,
"name": "<string>",
"mac": "<string>",
"deviceModelId": 123,
"phonebookIds": [
123
]
}
'import requests
url = "https://api.voxo.co/v2/admin/devices/"
payload = {
"tenantId": 123,
"name": "<string>",
"mac": "<string>",
"deviceModelId": 123,
"phonebookIds": [123]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
tenantId: 123,
name: '<string>',
mac: '<string>',
deviceModelId: 123,
phonebookIds: [123]
})
};
fetch('https://api.voxo.co/v2/admin/devices/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.voxo.co/v2/admin/devices/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'tenantId' => 123,
'name' => '<string>',
'mac' => '<string>',
'deviceModelId' => 123,
'phonebookIds' => [
123
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.voxo.co/v2/admin/devices/"
payload := strings.NewReader("{\n \"tenantId\": 123,\n \"name\": \"<string>\",\n \"mac\": \"<string>\",\n \"deviceModelId\": 123,\n \"phonebookIds\": [\n 123\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.voxo.co/v2/admin/devices/")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"tenantId\": 123,\n \"name\": \"<string>\",\n \"mac\": \"<string>\",\n \"deviceModelId\": 123,\n \"phonebookIds\": [\n 123\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.voxo.co/v2/admin/devices/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"tenantId\": 123,\n \"name\": \"<string>\",\n \"mac\": \"<string>\",\n \"deviceModelId\": 123,\n \"phonebookIds\": [\n 123\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": 123,
"name": "<string>",
"mac": "<string>",
"tenant": {
"id": 123,
"name": "<string>"
},
"deviceModel": {
"id": 123,
"name": "<string>"
},
"extensions": [
{
"lineNumber": 123,
"id": 123,
"name": "<string>",
"number": "<string>",
"peerName": "<string>"
}
],
"buttonLayouts": [
{
"id": 123,
"type": "<string>",
"name": "<string>",
"startKey": 123,
"endKey": 123
}
],
"phonebooks": [
{
"id": 123,
"name": "<string>"
}
],
"config": [
{
"name": "<string>",
"label": "<string>",
"value": "<string>",
"displayValue": "<string>"
}
],
"userAgent": "<string>"
}{
"name": "<string>",
"message": "<string>",
"code": 123,
"validationErrors": [
"<string>"
]
}{
"name": "<string>",
"message": "<string>",
"code": 123,
"validationErrors": [
"<string>"
]
}{
"name": "<string>",
"message": "<string>",
"code": 123,
"validationErrors": [
"<string>"
]
}{
"name": "<string>",
"message": "<string>",
"code": 123,
"validationErrors": [
"<string>"
]
}Create Device
Create a device. Validates MAC uniqueness, phonebook/button-layout ownership, and writes default autoprovision values from the phone model template.
curl --request POST \
--url https://api.voxo.co/v2/admin/devices/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"tenantId": 123,
"name": "<string>",
"mac": "<string>",
"deviceModelId": 123,
"phonebookIds": [
123
]
}
'import requests
url = "https://api.voxo.co/v2/admin/devices/"
payload = {
"tenantId": 123,
"name": "<string>",
"mac": "<string>",
"deviceModelId": 123,
"phonebookIds": [123]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
tenantId: 123,
name: '<string>',
mac: '<string>',
deviceModelId: 123,
phonebookIds: [123]
})
};
fetch('https://api.voxo.co/v2/admin/devices/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.voxo.co/v2/admin/devices/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'tenantId' => 123,
'name' => '<string>',
'mac' => '<string>',
'deviceModelId' => 123,
'phonebookIds' => [
123
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.voxo.co/v2/admin/devices/"
payload := strings.NewReader("{\n \"tenantId\": 123,\n \"name\": \"<string>\",\n \"mac\": \"<string>\",\n \"deviceModelId\": 123,\n \"phonebookIds\": [\n 123\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.voxo.co/v2/admin/devices/")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"tenantId\": 123,\n \"name\": \"<string>\",\n \"mac\": \"<string>\",\n \"deviceModelId\": 123,\n \"phonebookIds\": [\n 123\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.voxo.co/v2/admin/devices/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"tenantId\": 123,\n \"name\": \"<string>\",\n \"mac\": \"<string>\",\n \"deviceModelId\": 123,\n \"phonebookIds\": [\n 123\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": 123,
"name": "<string>",
"mac": "<string>",
"tenant": {
"id": 123,
"name": "<string>"
},
"deviceModel": {
"id": 123,
"name": "<string>"
},
"extensions": [
{
"lineNumber": 123,
"id": 123,
"name": "<string>",
"number": "<string>",
"peerName": "<string>"
}
],
"buttonLayouts": [
{
"id": 123,
"type": "<string>",
"name": "<string>",
"startKey": 123,
"endKey": 123
}
],
"phonebooks": [
{
"id": 123,
"name": "<string>"
}
],
"config": [
{
"name": "<string>",
"label": "<string>",
"value": "<string>",
"displayValue": "<string>"
}
],
"userAgent": "<string>"
}{
"name": "<string>",
"message": "<string>",
"code": 123,
"validationErrors": [
"<string>"
]
}{
"name": "<string>",
"message": "<string>",
"code": 123,
"validationErrors": [
"<string>"
]
}{
"name": "<string>",
"message": "<string>",
"code": 123,
"validationErrors": [
"<string>"
]
}{
"name": "<string>",
"message": "<string>",
"code": 123,
"validationErrors": [
"<string>"
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Tenant ID
x <= 9007199254740991Device name
255MAC address
17^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$Device model ID
x <= 9007199254740991Phonebook IDs to assign to the device
x <= 9007199254740991Button layout IDs to assign as phone layouts. Omit or send an empty array for devices with no phone-side button layouts.
x <= 9007199254740991Button layout IDs to assign as sidecar layouts (Yealink only). Omit or send an empty array for non-Yealink devices.
x <= 9007199254740991Response
Newly created device with full settings profile
Device ID
Device name
MAC address
Owning tenant
Show child attributes
Show child attributes
Phone model
Show child attributes
Show child attributes
Assigned line extensions
Show child attributes
Show child attributes
Assigned button layouts
Show child attributes
Show child attributes
Assigned phonebooks
Show child attributes
Show child attributes
Device-level configurable fields. One entry per av_autoprovisionvalues row of av_type = 'PHONE' for this device, joined to its al_autoprovisionlabels row for the human-readable label. displayValue is the mapped label for select/bool/checkbox/radio fields (per the template's options); equals value otherwise.
Show child attributes
Show child attributes
SIP user agent of the device's primary line (phLine1ExId). Empty string when no primary line is set or the phone is not currently registered.
Was this page helpful?