Billing and usage
What the platform charges a workspace for — its plan, connected minutes and number rent — what it never charges for, and how one call's charge is worked out.
After this page you can predict what a month costs, explain any single charge from the call it came from, and say exactly which money on this platform is yours and which is ours. A workspace pays for three things: its plan, the minutes its calls were connected, and rent for its tracking numbers. That is the whole list.
Every figure is on the pricing page, which always shows the current plans. This page is about how each one is counted, which does not change.
The money that is not ours
This is what books-only money means, and it is why profitCents in a report is your margin on your own trade rather than anything to do with us. The platform's own fee is usageCents, shown separately beside it and never netted off.
What is charged
| Charge | Counted | Paid from |
|---|---|---|
| Plan | A subscription, billed per period. It sets what the workspace may do and how much of it — campaigns, numbers, buyers, targets, publishers, API keys, webhooks. | Your payment method, under Wallet & funding → Plan & billing. |
| Connected minutes | Your plan's per-minute rate, on each started minute of connected talk time. The rate covers both legs of the call. | The workspace wallet. |
| Number rent | A monthly rent per tracking number, taken when the number is bought and again at each renewal. | The workspace wallet. |
Two different pots on purpose. The plan is a subscription on a card, so a lapsed card stops the account rather than silently accruing debt. Usage comes out of a prepaid wallet, so a busy month cannot produce a surprise invoice — you can only ever spend what you have put there.
What is never charged
- Pings, in either direction, however many. Real-time bidding is not metered — a publisher pinging you a thousand times for one call costs nothing, and neither does asking ten buyers for a price.
- Calls that never connect. A call that met a closed campaign, a full cap, an empty plan or a buyer who did not answer costs nothing at all.
- Ring time and failover. The clock starts when a buyer answers, not while targets are being tried. A call that rang four targets for forty seconds and then connected is charged from the connection, not from the first ring.
- Your buyers' and publishers' money, as above.
- Reading anything. Reports, exports, the API and webhooks are not metered; the API has a rate limit, which is a brake and not a meter.
How one call's charge is worked out
- 1
The rate is frozen when the call arrives
Your plan's per-minute rate is written onto the call as it starts. A plan change part-way through the month never reprices calls that have already happened, and a call swept an hour after it ended is still priced at the rate in force when it was routed.
- 2
A buyer answers, or nothing is charged
An unconnected call is priced at zero and stamped as finished. It is not left to be swept again, and it never reaches the wallet.
- 3
Started minutes, not seconds
A connected call has started its first minute the moment it connected, which is how every carrier bills a call. A 184-second call is four started minutes.
- 4
One charge, for the whole call
The rate covers both carrier legs. What the carrier charged the platform is measured but not added on top — passing it through as well would charge you twice for the same minute.
- 5
Rounded up once, at the very end
Money is rounded up to the whole cent, and only after the multiplication. The platform never books a fraction of a cent it cannot collect.
- 6
Swept, not charged inline
A sweeper takes finished calls a few minutes after they end — the carrier's own cost figure arrives late, and sometimes never. A call whose charge could not be taken is retried on later passes rather than lost.
{
"call": {
"ref": "CA-482137",
"talkSeconds": 184,
"usageCents": 22,
"usageRateCents": "…",
"revenueCents": 4200,
"payoutCents": 2750,
"profitCents": 1450
}
}usageCentsis what was charged for that call. It is a column in the call log, a measure in every report and a column in the CSV export, so you can set the platform's fee against your margin per campaign, per publisher or per buyer.usageRateCentson the call detail is the rate that was frozen, with two decimals — a rate, not an amount.- The charge appears in the wallet's ledger against the call's reference, so a line in the ledger opens the call it paid for.
- A call is charged once. The sweeper is idempotent on the call, so running twice bills once.
Number rent
- Each tracking number carries a monthly rent, taken from the wallet when you buy the number and again at each renewal.
- Rent is per number, not per call. A number that took no calls this month still costs its rent — which is the argument for releasing numbers you are not using.
- Releasing a number is the one thing a lapsed workspace may still do. Gating it behind "restart your plan first" would mean charging somebody rent for a number and refusing to let them hand it back.
- See Buying numbers for what a number costs and how to release one.
When the wallet is empty
- Only a workspace that is being charged can be out of money. If the per-minute channel is switched off, or your plan's rate is zero, a call costs nothing and the wallet is never consulted — turning callers away over a debt that cannot arise would be absurd.
- A
wallet.lowevent fires from the gate that has just refused a caller, and at most once an hour after that. By the time it arrives, traffic is already going nowhere. - Calls in progress are not cut off. A connected call finishes and is charged as normal.
- Wallet covers funding, the ledger and the low-balance warning that comes earlier.
When the plan lapses
| Empty wallet | Lapsed subscription | |
|---|---|---|
| Calls | Not routed — workspace_unfunded. | Not routed — workspace_inactive. |
| Reading the console | Normal. | Normal. You can see everything you own, and the page explaining why. |
| Changing anything | Normal. | Refused with 402, except releasing a number. |
| The REST API | Normal. | Stops entirely, reads included. An integration that half-works after a plan ends is one that fails later, harder, and with nobody watching. |
| Getting back | Add funds. The next call routes. | Restart the plan under Wallet & funding → Plan & billing. |
Reading your position
GET /api/tracking/workspace answers, in one request, everything a screen needs before it draws: the plan and its per-minute rate, whether the subscription is live, usage against every cap, and the wallet.
{
"workspace": {
"name": "Northwind Media Group",
"timezone": "America/Chicago",
"plan": { "name": "…", "slug": "…", "trackingMinuteCents": "…" },
"subscription": { "active": true, "sentence": null },
"usage": {
"campaigns": { "used": 7, "cap": 25 },
"numbers": { "used": 41, "cap": 0 },
"buyers": { "used": 12, "cap": 25 }
},
"wallet": {
"balanceCents": 24150,
"currency": "USD",
"funded": true,
"low": false,
"lowBalanceThresholdCents": "…"
},
"funded": true
}
}usagepairs each count with its cap.0on a cap means unlimited, as it does everywhere on the platform — the console owns the word.subscription.sentenceis the reason a lapsed workspace is lapsed, in words. Reads stay open precisely so that it can be shown.wallet.lowon this object is the console's warning threshold, which is a fixed amount and comes before zero. Thewallet.lowevent is something else and fires later; do not build alerting on the name alone.- It is a console route, called with a session. An API key reads
GET /api/v1/meinstead, which answers the workspace and the key's own reach.
Worked example: what a busy day cost
A campaign took a few hundred calls yesterday and you want the platform's share of it against your own margin.
- Run a report grouped by
campaignover yesterday, in your own time zone. - Read three columns together:
profitCentsis revenue less payout — your margin on the trade — andusageCentsbeside it is what the platform charged. Subtract the second from the first yourself for a full contribution figure; the report deliberately does not, so the fee stays visible. - Group the same window by
publisherto see where the minutes came from. A source that sends long calls that rarely convert costs more in usage per pound of margin than its connect rate suggests. - Add the day's number rent only once a month — it is per number and per period, not per call, so it belongs in a monthly view rather than a daily one.
- Open one call from the log and check
usageCentsagainsttalkSeconds. Four started minutes on a 184-second call is the arithmetic; if that surprises you, the started-minute rule above is why.
If a figure still will not reconcile, the usual cause is the window rather than the arithmetic — a bare date is midnight UTC. See Metrics glossary.
