Create a schedule
Creates a schedule for the calling PBX. Requires the schedules scope on an
Integrations API key (a user bearer token also passes).
Send the schedule's time rules in steps, the same list the cockpit edit
page shows: weekly windows (days_of_the_week), specific calendar dates
(fixed_dates), yearly dates (recurring_dates) and date-time ranges
(specific_period). The schedule and all of its steps are written in one
transaction: if any step is invalid the request responds 422 and nothing is
created. A schedule created without steps has none and matches nothing
until steps are added. Step ids are assigned by the server; sending one here
responds 422.
pbx_id is forced from the authenticated principal (a user's PBX, or the
Pbx-owned API key itself) and is never read from the request body: sending
another tenant's id has no effect. Schedule names are not required to be
unique within a PBX.
The response is the created schedule, unwrapped (no data envelope), and is
identical to what a subsequent GET of the same id returns.
User bearer token. Default authentication for customer-facing endpoints.
Obtain a token by calling POST /login with your credentials, then send it
on every subsequent request as Authorization: Bearer <token>. The token
inherits the permissions and PBX scope of the authenticated user.
- HTTP Authorization Scheme
bearer- Bearer format
Bearer <token>
API key created on the Cockpit Integrations page (an "API key" integration).
It is a bearer token owned by the customer's PBX and limited to the scopes
selected when the key was created (e.g. phone-numbers, push-configuration).
Send it in the Authorization header:
Authorization: Bearer <api_key>
Manage keys (create / reveal / revoke) from Integrations → New integration → API key.
- HTTP Authorization Scheme
bearer
application/jsonRequest body · required · application/json
Business hoursMonday to Friday, 09:00 to 18:00stepsarray<object>
Responses
550e8400-e29b-41d4-a716-446655440000550e8400-e29b-41d4-a716-446655440001Business hoursMonday to Friday, 09:00 to 18:00steps*array<object>
7c9e6679-7425-40de-944b-e07fc1f90ae7days_of_the_week fixed_dates recurring_dates specific_perioddays_of_the_weekenabled disabledenabled09:0018:00days_of_the_week*object | null
fixed_dates*array<string>
recurring_dates*array<string>
specific_period*object | null
2026-08-03 08:002026-08-17 18:002024-03-01T08:29:07.000000Z2024-03-01T08:29:07.000000Z2024-03-01T08:29:07Z2024-03-01T08:29:07Zerrorsobject
namearray<string>
descriptionarray<string>
https://cockpit.voxbi.com/api/v1/schedules
curl -X POST 'https://cockpit.voxbi.com/api/v1/schedules' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
--data '{"name":"Business hours","description":"Monday to Friday, 09:00 to 18:00","steps":[{"type":"days_of_the_week","start_time":"09:00","end_time":"18:00","days_of_the_week":{"monday":true,"tuesday":true,"wednesday":true,"thursday":true,"friday":true,"saturday":false,"sunday":false}},{"type":"fixed_dates","start_time":"00:00","end_time":"23:59","fixed_dates":["2026-12-24","2026-12-31"]},{"type":"recurring_dates","status":"disabled","start_time":"00:00","end_time":"23:59","recurring_dates":["01-01","05-01","12-25"]},{"type":"specific_period","specific_period":{"start":"2026-08-03 08:00","end":"2026-08-17 18:00"}}]}'
const response = await fetch('https://cockpit.voxbi.com/api/v1/schedules', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${YOUR_TOKEN}`,
},
body: JSON.stringify({
"name": "Business hours",
"description": "Monday to Friday, 09:00 to 18:00",
"steps": [
{
"type": "days_of_the_week",
"start_time": "09:00",
"end_time": "18:00",
"days_of_the_week": {
"monday": true,
"tuesday": true,
"wednesday": true,
"thursday": true,
"friday": true,
"saturday": false,
"sunday": false
}
},
{
"type": "fixed_dates",
"start_time": "00:00",
"end_time": "23:59",
"fixed_dates": [
"2026-12-24",
"2026-12-31"
]
},
{
"type": "recurring_dates",
"status": "disabled",
"start_time": "00:00",
"end_time": "23:59",
"recurring_dates": [
"01-01",
"05-01",
"12-25"
]
},
{
"type": "specific_period",
"specific_period": {
"start": "2026-08-03 08:00",
"end": "2026-08-17 18:00"
}
}
]
}),
});
const data = await response.json();
console.log(data);
import requests
response = requests.post('https://cockpit.voxbi.com/api/v1/schedules',
headers={'Authorization': f'Bearer {YOUR_TOKEN}'},
json={
"name": "Business hours",
"description": "Monday to Friday, 09:00 to 18:00",
"steps": [
{
"type": "days_of_the_week",
"start_time": "09:00",
"end_time": "18:00",
"days_of_the_week": {
"monday": true,
"tuesday": true,
"wednesday": true,
"thursday": true,
"friday": true,
"saturday": false,
"sunday": false
}
},
{
"type": "fixed_dates",
"start_time": "00:00",
"end_time": "23:59",
"fixed_dates": [
"2026-12-24",
"2026-12-31"
]
},
{
"type": "recurring_dates",
"status": "disabled",
"start_time": "00:00",
"end_time": "23:59",
"recurring_dates": [
"01-01",
"05-01",
"12-25"
]
},
{
"type": "specific_period",
"specific_period": {
"start": "2026-08-03 08:00",
"end": "2026-08-17 18:00"
}
}
]
}
)
response.raise_for_status()
data = response.json()
print(data)
<?php
$context = stream_context_create([
'http' => [
'method' => 'POST',
'header' => "Content-Type: application/json\r\nAuthorization: Bearer YOUR_TOKEN",
'content' => '{
\"name\": \"Business hours\",
\"description\": \"Monday to Friday, 09:00 to 18:00\",
\"steps\": [
{
\"type\": \"days_of_the_week\",
\"start_time\": \"09:00\",
\"end_time\": \"18:00\",
\"days_of_the_week\": {
\"monday\": true,
\"tuesday\": true,
\"wednesday\": true,
\"thursday\": true,
\"friday\": true,
\"saturday\": false,
\"sunday\": false
}
},
{
\"type\": \"fixed_dates\",
\"start_time\": \"00:00\",
\"end_time\": \"23:59\",
\"fixed_dates\": [
\"2026-12-24\",
\"2026-12-31\"
]
},
{
\"type\": \"recurring_dates\",
\"status\": \"disabled\",
\"start_time\": \"00:00\",
\"end_time\": \"23:59\",
\"recurring_dates\": [
\"01-01\",
\"05-01\",
\"12-25\"
]
},
{
\"type\": \"specific_period\",
\"specific_period\": {
\"start\": \"2026-08-03 08:00\",
\"end\": \"2026-08-17 18:00\"
}
}
]
}',
],
]);
$response = file_get_contents('https://cockpit.voxbi.com/api/v1/schedules', false, $context);
$data = json_decode($response, true);
print_r($data);
{ … }
"steps": [ … ]
{ … },
"days_of_the_week": { … }
{ … },
"fixed_dates": [ … ]
{ … },
"recurring_dates": [ … ]
{ … }
"specific_period": { … }
{ … }
"steps": [ … ],
{ … },
"days_of_the_week": { … },
{ … },
"fixed_dates": [ … ],
{ … },
"recurring_dates": [ … ],
{ … }
"specific_period": { … },
cockpit.voxbi.comMon, 16 Oct 2023 14:08:48 GMTcloseno-cache, privateapplication/json6059Origin{ … }
application/json{ … }
application/json{ … }
"errors": { … }
"name": [ … ]
application/json{ … }
60application/json