Skip to content

Get the partner's dashboard figures (partner-api)

Returns the figures of the Home dashboard in the partner portal, computed by the same code: the stat cards, the doughnut charts and the needs-attention counts. kyc is always counted for a key (a key has no per-user permissions). new_leads is 0 while the signup funnel is switched off.

By default the figures cover everything. from and/or to (YYYY-MM-DD, inclusive days) limit customers, PBXs, signups and leads to those created in the range, exactly as the date range on Home does; the applied range is echoed in data.range. needs_attention is the state right now and is never limited. The range cannot be longer than 5 years (a missing to counts as today).

Required scopes: partner-api and partner-overview.

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>
from query · string · date
First day (inclusive) of the creation-date range, YYYY-MM-DD.
to query · string · date
Last day (inclusive) of the creation-date range, YYYY-MM-DD. Not before `from`.
accept header · string
example: application/json

Responses

Response schema
dataobject
The partner portal's Home figures for the partner that owns the API key. With `from`/`to` the figures cover the records created in that range; `needs_attention` is always the state right now.
rangeobject
The creation-date range the figures were limited to; both null when none was asked for.
fromstring | null · date
First day (inclusive) of the range.
example: 2025-03-01
tostring | null · date
Last day (inclusive) of the range.
example: 2025-03-31
statsobject
The four stat cards.
customersinteger
Customers whose signup is finished (the Active tab).
example: 12
pbxesinteger
PBXes (a distributor's include its resellers').
example: 17
signups_in_progressinteger
Self-signups started and not finished.
example: 3
new_leadsinteger
Leads still in status `new`. 0 while the signup funnel is switched off.
example: 4
doughnutsobject
The data behind the three doughnut charts.
customers_by_planobject
Customer count per plan name. Customers without a plan are left out.
Free-form object
signupsobject
completedinteger
example: 20
in_progressinteger
Unfinished signups active in the last 30 days.
example: 3
abandonedinteger
Unfinished signups with no activity for over 30 days.
example: 5
leads_by_statusobject
Lead count per status, zero included.
newinteger
example: 4
contactedinteger
example: 2
qualifiedinteger
example: 1
convertedinteger
example: 6
lostinteger
example: 3
needs_attentionobject
What needs the partner's attention.
kycinteger
Signups waiting for a KYC review.
example: 1
unpaid_countinteger
Customers with unpaid invoices.
example: 2
unpaid_totalnumber
Sum of the unpaid amounts.
example: 349.9
currencystring | null
Currency of `unpaid_total`, null when the unpaid invoices span several currencies.
example: EUR
signupsinteger
Signups in progress.
example: 3
failed_syncs_todayinteger
CRM synchronizations that failed today.
example: 0
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
Invalid `from` or `to` (not YYYY-MM-DD, `to` before `from`, or a range longer than 5 years).
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/overview
Base URL
Request sample
curl -X GET 'https://cockpit.voxbi.com/api/v1/api/v1/overview' \
  -H 'Authorization: Bearer YOUR_TOKEN'
const response = await fetch('https://cockpit.voxbi.com/api/v1/api/v1/overview', {
  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/overview',
    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/overview', false, $context);
$data = json_decode($response, true);
print_r($data);
{ … }
"data": { … }
"range": { … },
"from": "2025-03-01",
"to": "2025-03-31"
},
"stats": { … },
"customers": 12,
"pbxes": 17,
"signups_in_progress": 3,
"new_leads": 4
},
"doughnuts": { … },
"customers_by_plan": { … },
"Business": 8,
"Starter": 4
},
"signups": { … },
"completed": 20,
"in_progress": 3,
"abandoned": 5
},
"leads_by_status": { … }
"new": 4,
"contacted": 2,
"qualified": 1,
"converted": 6,
"lost": 3
}
},
"needs_attention": { … }
"kyc": 1,
"unpaid_count": 2,
"unpaid_total": 349.9,
"currency": "EUR",
"signups": 3,
"failed_syncs_today": 0
}
}
}
{ … }
"message": "Unauthenticated."
}
Content-Type string
example: application/json
{ … }
"message": "This endpoint requires a partner API key."
}
Content-Type string
example: application/json
{ … }
"message": "The to field must be a date after or equal to from.",
"errors": { … }
"to": [ … ]
"The to field must be a date after or equal to from."
]
}
}
{ … }
"message": "Too Many Attempts."
}
Retry-After integer
Seconds to wait before retrying.
example: 30
Content-Type string
example: application/json