One billing month across all nine meters
const url = 'https://api.vocapable.com/v1/usage/summary';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://api.vocapable.com/v1/usage/summary \ --header 'Authorization: Bearer <token>'Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Responses
Section titled “Responses”Successful Response
One billing month across all nine meters, in registry order.
object
A live, read-only estimate for the subscription’s actual billing period.
Stripe remains the source of truth for the final invoice. This value is calculated only from the current plan and usage ledger; it excludes tax, credits, discounts, proration, and any Stripe-side adjustment.
object
Where the period stands on the volume-discount ladder (ADR-0022).
Rates are minor units per minute; cumulative_period_spend_minor is the bracket
basis - total period spend: base fee, extra-session fees, call fees, and minute
charges. base_minute_rate_minor is the tenant’s RESOLVED starting rate (ADR-0028
d7 as amended): the open subscription_terms row’s negotiated rate when one
exists, the term’s published rate otherwise - the rate the engine actually descends
from. next_tier_threshold_minor/next_tier_minute_rate_minor are null once
the floor is reached, and whenever the rate is pinned - a terms row snapshotting
volume_ladder_applies false, or a negotiated start already below the ladder’s
floor.
object
One meter’s totals for the period.
The component’s headline invariant is the quantity is None vs
billing == "carrier_billed" split - they are independent facts:
quantity is None- the ledger holds no rows for this meter. Nothing was metered.billing == "carrier_billed"- this tenant’s own carrier bills the meter directly (CANON fact 70), so Vocapable never writes a row for it.
A tenant that switched managed→byo mid-period therefore still reports the minutes it
really accrued while carrying carrier_billed, and a managed tenant with no calls
reports 0, never null.
Example
{ "telephony_mode": "managed", "billing_period_estimate": { "unpriced_meters": [ "telephony_minutes" ], "excluded_usage_types": [ "byo_carrier_usage" ] }, "meters": [ { "meter": "telephony_minutes", "billing": "billed" } ]}Validation Error
object
object
object
Examplegenerated
{ "detail": [ { "loc": [ "example" ], "msg": "example", "type": "example", "input": "example", "ctx": {} } ]}