Get the partner and API key behind the token (partner-api)
Returns the reseller partner the key belongs to and the metadata of the key itself (name, scopes, expiry, last use). Use it to verify a key and to discover which scopes it carries.
Required scope: partner-api (carried by every partner API key).
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>
accept
header · string
example:
application/jsonResponses
Response schema
dataobject
The reseller partner that owns the API key, plus the key itself. Returned by
`GET /me`.
partnerobject
The reseller partner the key belongs to.
idstring · uuid
Unique identifier of the partner.
example:
550e8400-e29b-41d4-a716-446655440000namestring
Partner display name.
example:
Acme Telecomslugstring
URL-safe partner identifier.
example:
acme-telecomtypestring
Partner type. Partner API keys are available to resellers only.
enum:
resellerexample:
resellerstatusstring
Partner status. Only active partners can use the Partner Scope API.
enum:
activeexample:
activecontact_emailstring | null · email
Partner contact email.
example:
support@example.comcontact_phonestring | null
Partner contact phone number.
example:
+12125550100company_domainstring | null
Partner company domain.
example:
example.comcustomers_countinteger
Number of customers of this partner.
example:
12pbxes_countinteger
Number of PBXes of this partner.
example:
18created_atstring · date-time
When the partner was created.
example:
2025-01-15T09:30:00+00:00api_keyobject
Metadata of the API key used for the request. The secret itself is never returned by
the API.
idstring · uuid
Identifier of the API key record, as listed in the partner portal.
example:
550e8400-e29b-41d4-a716-446655440010namestring
Name given to the key when it was generated.
example:
CRM syncscopesarray<string>
Scopes ticked at creation. The base `partner-api` ability that every key carries is
not listed here.
[]string
enum:
partner-customers partner-pbxesexpires_atstring | null · date
Expiry date of the key, or null when it does not expire.
example:
2027-01-31last_used_atstring | null · date-time
When the key was last used, or null if never.
example:
2026-10-25T14:02:11+00:00created_atstring · date-time
When the key was generated.
example:
2026-10-01T08:00:00+00:00Unauthenticated. 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
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/me
Base URL
Request sample
curl -X GET 'https://cockpit.voxbi.com/api/v1/api/v1/me' \
-H 'Authorization: Bearer YOUR_TOKEN'
const response = await fetch('https://cockpit.voxbi.com/api/v1/api/v1/me', {
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/me',
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/me', false, $context);
$data = json_decode($response, true);
print_r($data);
{ … }
"data": { … }
"partner": { … },
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Acme Telecom",
"slug": "acme-telecom",
"type": "reseller",
"status": "active",
"contact_email": "support@example.com",
"contact_phone": "+12125550100",
"company_domain": "example.com",
"customers_count": 12,
"pbxes_count": 18,
"created_at": "2025-01-15T09:30:00+00:00"
},
"api_key": { … }
"id": "550e8400-e29b-41d4-a716-446655440010",
"name": "CRM sync",
"scopes": [ … ],
"partner-customers",
"partner-pbxes"
],
"expires_at": "2027-01-31",
"last_used_at": "2026-10-25T14:02:11+00:00",
"created_at": "2026-10-01T08:00:00+00:00"
}
}
}
{ … }
"message": "Unauthenticated."
}
Content-Type
string
example:
application/json{ … }
"message": "This endpoint requires a partner API key."
}
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