Skip to content

List the PBXes of one of the partner's customers (partner-api)

Lists the PBXes linked to one customer of the partner the key belongs to. An unknown or foreign customer id answers 404.

Required scopes: partner-api, partner-customers AND partner-pbxes. A key with only one of the two scopes gets 403 with the missing one in required_scopes.

Query parameters: search, per_page (1 to 5000, default 100) and page. Results are ordered by name, then id, and returned as a Laravel paginator: data, links and meta. search matches the PBX name and instance name.

HTTP: PartnerApiKey

Partner API key. A bearer token that a Reseller Admin generates in the partner portal under Settings, API keys. It belongs to the reseller partner, not to a person, and carries the scopes ticked at creation time. Send it on every request as Authorization: Bearer <partner_api_key>.

Every response is confined to the partner the key belongs to. Keep the key secret and call the API from your server only, never from a browser app.

HTTP Authorization Scheme
bearer
Bearer format
Bearer <partner_api_key>
customer path · string · uuid *
Customer id (UUID). It must belong to your partner, otherwise the answer is `404`.
search query · string
Case-insensitive text matched against the PBX name and instance name. At most 100 characters.
per_page query · integer
Number of items per page, 1 to 5000. Defaults to `100`. A value above 5000 is rejected with `422`.
page query · integer
Page number to fetch, starting at 1. Defaults to `1`.
accept header · string
example: application/json

Responses

Response schema
dataarray<object>
Each item — A PBX of the reseller partner that owns the API key. It carries `customer_id` only, never customer details, so the `partner-pbxes` scope cannot be used to read customer data. No secrets and no server or provisioning internals are exposed.
idstring · uuid
Unique identifier of the PBX.
example: 550e8400-e29b-41d4-a716-446655440002
namestring
PBX name.
example: Head Office
instance_namestring
PBX instance name.
example: acme-hq
profile_idinteger | null
Numeric profile identifier of the PBX.
example: 1042
customer_idstring | null · uuid
Identifier of the customer the PBX is linked to, or null if none.
example: 550e8400-e29b-41d4-a716-446655440001
languagestring | null
Default language of the PBX.
example: en
trial_ends_atstring | null · date-time
When the trial ends, or null when the PBX is not on a trial.
is_trialboolean
True when `trial_ends_at` is set and in the future.
example:
countsobject
Number of records on the PBX.
usersinteger
Number of users.
example: 14
extensionsinteger
Number of extensions.
example: 16
sip_devicesinteger
Number of SIP devices.
example: 12
phone_numbersinteger
Number of phone numbers.
example: 6
created_atstring · date-time
When the PBX was created.
example: 2025-03-12T11:00:00+00:00
updated_atstring · date-time
When the PBX was last updated.
example: 2026-09-20T07:30:00+00:00
linksobject
firststring
The first page of the resource
example: http://localhost/api/v1/resources?page=1
laststring
The last page of the resource
example: http://localhost/api/v1/resources?page=1
prevnull | string
The previous page of the resource
nextnull | string
The next page of the resource
metaobject
current_pageinteger
The current page of the resource
≥ 1
example: 1
fromnull | integer
The first item of the resource
≥ 1
example: 1
last_pageinteger
The last page of the resource
≥ 1
example: 1
linksarray<object>
urlstring | null
The url of the resource (null for the boundary prev/next links)
example: http://localhost/api/v1/resources?page=1
labelstring
The label of the resource
example: first
activeboolean
The status of the resource
example: 1
pathstring
The path of the resource
example: http://localhost/api/v1/resources
per_pageinteger
The number of items per page of the resource
≥ 1
example: 15
tonull | integer
The last item of the resource
≥ 1
example: 1
totalinteger
The total number of items of the resource
≥ 0
example: 1
Unauthenticated. The `Authorization: Bearer <token>` header was missing, malformed, or names a token that has been revoked or deleted.
Response schema
messagestring
Forbidden. Three different situations share this status, told apart by `message`: * the token is not a partner API key (a user token, a PBX API key, or any other token); * the partner is not an active reseller; * the key lacks a scope the endpoint needs. The body then also lists `required_scopes`.
Response schema
messagestring
Human-readable reason.
example: This API key is missing a required scope.
required_scopesarray<string>
Present on the missing-scope 403 only. Scopes the endpoint needs that the key lacks.
[]string
Not Found. No customer with this id belongs to your partner. A customer of another partner and a nonexistent id answer the same way, and so does an id that is not a UUID.
Response schema
messagestring
Human-readable reason.
example: This API key is missing a required scope.
required_scopesarray<string>
Present on the missing-scope 403 only. Scopes the endpoint needs that the key lacks.
[]string
Unprocessable Content. A query parameter failed validation (`search` longer than 100 characters, `per_page` outside 1 to 5000, `page` below 1, or a value of the wrong type). Nothing is returned: correct the query string and retry.
Response schema
messagestring
The first validation error.
errorsobject
Validation errors keyed by parameter name.
Free-form object
Too Many Requests. Two budgets apply: 120 requests per minute per API key, and 600 per minute across all of a partner's keys together. Wait for the number of seconds in the `Retry-After` header before retrying.
Response schema
messagestring
get https://cockpit.voxbi.com/api/v1/api/v1/customers/{customer}/pbxes
Base URL
Request sample
curl -X GET 'https://cockpit.voxbi.com/api/v1/api/v1/customers/{customer}/pbxes' \
  -H 'Authorization: Bearer YOUR_TOKEN'
const response = await fetch('https://cockpit.voxbi.com/api/v1/api/v1/customers/{customer}/pbxes', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${YOUR_TOKEN}`,
  },
});

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

response = requests.get('https://cockpit.voxbi.com/api/v1/api/v1/customers/{customer}/pbxes',
    headers={'Authorization': f'Bearer {YOUR_TOKEN}'}
)
response.raise_for_status()
data = response.json()
print(data)
<?php
$context = stream_context_create([
    'http' => [
        'method'  => 'GET',
        'header'  => "Content-Type: application/json\r\nAuthorization: Bearer YOUR_TOKEN",
    ],
]);

$response = file_get_contents('https://cockpit.voxbi.com/api/v1/api/v1/customers/{customer}/pbxes', false, $context);
$data = json_decode($response, true);
print_r($data);
{ … }
"data": [ … ],
{ … },
"id": "550e8400-e29b-41d4-a716-446655440002",
"name": "Head Office",
"instance_name": "acme-hq",
"profile_id": 1042,
"customer_id": "550e8400-e29b-41d4-a716-446655440001",
"language": "en",
"trial_ends_at": null,
"is_trial": false,
"counts": { … },
"users": 14,
"extensions": 16,
"sip_devices": 12,
"phone_numbers": 6
},
"created_at": "2025-03-12T11:00:00+00:00",
"updated_at": "2026-09-20T07:30:00+00:00"
},
{ … }
"id": "550e8400-e29b-41d4-a716-446655440003",
"name": "Branch Office",
"instance_name": "acme-branch",
"profile_id": 1043,
"customer_id": "550e8400-e29b-41d4-a716-446655440001",
"language": "en",
"trial_ends_at": null,
"is_trial": false,
"counts": { … },
"users": 8,
"extensions": 10,
"sip_devices": 6,
"phone_numbers": 6
},
"created_at": "2025-03-12T11:00:00+00:00",
"updated_at": "2026-09-20T07:30:00+00:00"
}
],
"links": { … },
"first": "https://partner.voxbi.com/api/v1/customers/550e8400-e29b-41d4-a716-446655440001/pbxes?page=1",
"last": "https://partner.voxbi.com/api/v1/customers/550e8400-e29b-41d4-a716-446655440001/pbxes?page=1",
"prev": null,
"next": null
},
"meta": { … }
"current_page": 1,
"from": 1,
"last_page": 1,
"links": [ … ],
{ … },
"url": null,
"label": "&laquo; Previous",
"active": false
},
{ … },
"url": "https://partner.voxbi.com/api/v1/customers/550e8400-e29b-41d4-a716-446655440001/pbxes?page=1",
"label": "1",
"active": true
},
{ … }
"url": null,
"label": "Next &raquo;",
"active": false
}
],
"path": "https://partner.voxbi.com/api/v1/customers/550e8400-e29b-41d4-a716-446655440001/pbxes",
"per_page": 100,
"to": 2,
"total": 2
}
}
{ … }
"message": "Unauthenticated."
}
Content-Type string
example: application/json
{ … }
"message": "This endpoint requires a partner API key."
}
Content-Type string
example: application/json
{ … }
"message": "Customer not found."
}
Content-Type string
example: application/json
{ … }
"message": "The per page field must not be greater than 5000.",
"errors": { … }
"per_page": [ … ]
"The per page field must not be greater than 5000."
]
}
}
Content-Type string
example: application/json
{ … }
"message": "Too Many Attempts."
}
Retry-After integer
Seconds to wait before retrying.
example: 30
Content-Type string
example: application/json