Skip to content

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/json

Responses

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-446655440000
namestring
Partner display name.
example: Acme Telecom
slugstring
URL-safe partner identifier.
example: acme-telecom
typestring
Partner type. Partner API keys are available to resellers only.
enum: reseller
example: reseller
statusstring
Partner status. Only active partners can use the Partner Scope API.
enum: active
example: active
contact_emailstring | null · email
Partner contact email.
example: support@example.com
contact_phonestring | null
Partner contact phone number.
example: +12125550100
company_domainstring | null
Partner company domain.
example: example.com
customers_countinteger
Number of customers of this partner.
example: 12
pbxes_countinteger
Number of PBXes of this partner.
example: 18
created_atstring · date-time
When the partner was created.
example: 2025-01-15T09:30:00+00:00
api_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-446655440010
namestring
Name given to the key when it was generated.
example: CRM sync
scopesarray<string>
Scopes ticked at creation. The base `partner-api` ability that every key carries is not listed here.
[]string
enum: partner-customers partner-pbxes
expires_atstring | null · date
Expiry date of the key, or null when it does not expire.
example: 2027-01-31
last_used_atstring | null · date-time
When the key was last used, or null if never.
example: 2026-10-25T14:02:11+00:00
created_atstring · date-time
When the key was generated.
example: 2026-10-01T08:00:00+00:00
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
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