Place a phone number order
Submit a phone number order. Must be called as multipart/form-data because
KYC document files are part of the request. Call POST /numbers/orders/check
first to obtain the address-specific kycRequirements.
You may attach your own order_id (any short string, max 64 chars) - it
will be echoed back to you in the response, in GET /numbers/orders/{id},
and in the asynchronous webhook payload below. If you omit it, the upstream
provider will generate one and we'll backfill it on your row.
Order fulfilment is asynchronous. This endpoint returns 201 as soon as the
order is accepted upstream. The final outcome (success or rejection) will be
delivered to your webhook URL (if provided) and is queryable via
GET /numbers/orders/{id}.
Webhook payload
When the order reaches its final state we POST to your webhook URL the
exact same body as GET /numbers/orders/{id} (the schema below). Read
the status field to tell success from rejection:
status: "success"-numbersandphone_numbersare populated.status: "error"-error_messagecarries the rejection reason.
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
Request body · required
Responses
550e8400-e29b-41d4-a716-446655440000po-2026-00042ACME GmbHcreated requested submission_failed processing success error processing_failedrequestedaddressobject
Adenauerallee153113BonnDEAdenauerallee 1, 53113 Bonn, DE1+49228numbersarray<string>
phone_numbersarray<object>
550e8400-e29b-41d4-a716-446655440000+12125550100Customer Support1550e8400-e29b-41d4-a716-446655440100call_flowobject | null
not_required pending retrying delivered failed cancelledAuthorization Token is missingerrors*object
https://cockpit.voxbi.com/api/v1/numbers/orders
curl -X POST 'https://cockpit.voxbi.com/api/v1/numbers/orders' \
-H 'Authorization: Bearer YOUR_TOKEN'
const response = await fetch('https://cockpit.voxbi.com/api/v1/numbers/orders', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${YOUR_TOKEN}`,
},
});
const data = await response.json();
console.log(data);
import requests
response = requests.post('https://cockpit.voxbi.com/api/v1/numbers/orders',
headers={'Authorization': f'Bearer {YOUR_TOKEN}'}
)
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",
],
]);
$response = file_get_contents('https://cockpit.voxbi.com/api/v1/numbers/orders', false, $context);
$data = json_decode($response, true);
print_r($data);
{ … }
"address": { … },
{ … }
private, must-revalidatekeep-aliveapplication/jsonOrigin6057