Voxbi Cockpit APIs
All endpoints

Validate several home office day-rows at once

Apply a single decision (accepted or rejected) to several home office day-rows in one call, for example a whole request group or week. The acting user must be a validator with home office scope over the affected employees.

Rows that are not pending, or that the acting validator has already decided, are skipped rather than failing the batch. The response reports how many rows were processed and skipped.

HTTP: bearerAuth

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>
pbx_id path · string · uuid *
Identifier of the PBX tenant

Request body · required

Request schema
ids*array<string>
Identifiers of the home office day-rows to validate.
items: 1–100
[]string · uuid
example: 550e8400-e29b-41d4-a716-446655440030
status*string
The decision to apply to every listed row.
enum: accepted rejected
example: accepted
commentstring | null
Optional note stored on each created approval.
length: 0–1000
example: Approved for the whole week.

Responses

The decision was applied. Reports processed and skipped counts.
Response schema
message*string
example: Validation completed.
processed*integer
Number of rows a decision was recorded for.
example: 2
skipped*integer
Rows skipped (not pending, or already decided by this validator).
example: 0
Authorization Token Missing. This error is returned when the authorization token is missing.
Response schema
errorstring
Error message
example: Authorization Token is missing
The acting user is not a validator for one of the listed rows.
Response schema
No response body.
Unprocessable Parameters. This error is returned when a parameter is not valid.
Response schema
messagestring
example: The given data was invalid.
errorsobject
filterarray<string>
[]string
sortarray<string>
[]string
pagearray<string>
[]string
per_pagearray<string>
[]string
post https://cockpit.voxbi.com/api/v1/{pbx_id}/home-office-requests/validations
Base URL
Request sample
curl -X POST 'https://cockpit.voxbi.com/api/v1/{pbx_id}/home-office-requests/validations' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  --data '{"ids":["550e8400-e29b-41d4-a716-446655440030","550e8400-e29b-41d4-a716-446655440031"],"status":"accepted"}'
const response = await fetch('https://cockpit.voxbi.com/api/v1/{pbx_id}/home-office-requests/validations', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${YOUR_TOKEN}`,
  },
  body: JSON.stringify({
    "ids": [
        "550e8400-e29b-41d4-a716-446655440030",
        "550e8400-e29b-41d4-a716-446655440031"
    ],
    "status": "accepted"
}),
});

const data = await response.json();
console.log(data);
import requests

response = requests.post('https://cockpit.voxbi.com/api/v1/{pbx_id}/home-office-requests/validations',
    headers={'Authorization': f'Bearer {YOUR_TOKEN}'},
    json={
    "ids": [
        "550e8400-e29b-41d4-a716-446655440030",
        "550e8400-e29b-41d4-a716-446655440031"
    ],
    "status": "accepted"
}
)
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' => '{
    \"ids\": [
        \"550e8400-e29b-41d4-a716-446655440030\",
        \"550e8400-e29b-41d4-a716-446655440031\"
    ],
    \"status\": \"accepted\"
}',
    ],
]);

$response = file_get_contents('https://cockpit.voxbi.com/api/v1/{pbx_id}/home-office-requests/validations', false, $context);
$data = json_decode($response, true);
print_r($data);
Sample request
{}
"ids": [],
"550e8400-e29b-41d4-a716-446655440030",
"550e8400-e29b-41d4-a716-446655440031"
],
"status": "accepted"
}
No example for this status.
{}
"error": "Authorization Token is missing"
}
Cache-Control string
example: private, must-revalidate
Connection string
example: keep-alive
Content-Type string
example: application/json
Vary string
example: Origin
X-RateLimit-Limit integer
Max requests allowed in the current rate-limit window.
example: 60
X-RateLimit-Remaining integer
Requests remaining in the current rate-limit window.
example: 57
No example for this status.
{}
"errors": {}
"filter": [],
"The filter field must be an array."
],
"sort": [],
"The sort field must be a string."
],
"page": [],
"The page field must be an integer."
],
"per_page": []
"The per page field must be an integer."
]
}
}
Cache-Control string
example: private, must-revalidate
Connection string
example: keep-alive
Content-Type string
example: application/json
Vary string
example: Origin
X-RateLimit-Limit integer
Max requests allowed in the current rate-limit window.
example: 60
X-RateLimit-Remaining integer
Requests remaining in the current rate-limit window.
example: 57