Wallet
The workspace wallet pays for platform usage. How to fund it, what comes out of it, and exactly what happens when it runs dry.
After this page you can fund the workspace, tell the two kinds of money on the platform apart, and make sure an empty balance never costs you a morning of calls. The workspace wallet is a prepaid balance that platform usage is drawn from.
It belongs to the workspace, not to any one person, and it has nothing to do with the money your buyers owe you. That is recorded on your calls and never passes through here — see books-only money.
What comes out of it
| Charge | When |
|---|---|
| Connected minutes | A few minutes after each call ends, at your plan's per-minute rate on the connected talk time. An unconnected call costs nothing. |
| Number rent | When a tracking number is bought, and again at each monthly renewal. |
Two different pots on purpose. A busy month cannot produce a surprise invoice, because you can only ever spend what you have put in; and a card that expires stops the account cleanly rather than accruing a debt nobody agreed to.
Funding it
- 1
Open Wallet & funding
It is Wallet in the console's rail. The page has two tabs: Wallet & funding, and Plan & billing where a plan is bought or restarted.
- 2
Add funds
Add funds takes an amount and a payment method. Any fee on a deposit depends on your plan and is shown before you confirm; the pricing page has the current figures.
- 3
It is spendable when the payment clears
There is nothing to approve afterwards and no delay of ours. The balance on the page is what routing checks.
- 4
Check the payment history
Everything the workspace has been charged or credited arrives as one dated feed — plan charges, deposits and call spend together, rather than a wallet view that cannot see the largest recurring charge on the account.
Reading the balance
Every screen in the tracking console reads the same four fields, and so can you: GET /api/tracking/workspace answers with the wallet inside the workspace summary.
{
"wallet": {
"balanceCents": 24150,
"currency": "USD",
"funded": true,
"low": false,
"lowBalanceThresholdCents": "…"
},
"funded": true
}| Field | Means |
|---|---|
balanceCents | What is left, in integer cents. |
currency | USD. |
funded | true while the balance is above zero. This is what routing checks. |
low | true when the balance is above zero but under the warning threshold. The console says low at this point. |
lowBalanceThresholdCents | Where that warning sits. It is a fixed amount, not a share of anything: a workspace routing ten calls a day and one routing ten thousand both need the same thing from a warning, which is time to act before zero. |
{
"wallet": {
"balanceCents": 0,
"currency": "USD",
"funded": false,
"low": false,
"lowBalanceThresholdCents": "…"
},
"funded": false
}When the balance runs out
| What happens | Detail |
|---|---|
| Routing stops | Calls to your numbers are not routed. They end with the reason code workspace_unfunded, and the caller hears whatever the campaign's unrouted action says — a hang-up, a message, or the fallback number. |
| Nothing is hidden | Those calls are still in the call log with their reason, so you can see exactly what was missed and whose traffic it was. |
| You are told | The workspace's owners are notified — Calls are not being routed — the wallet is empty — at most once an hour for as long as it lasts, however many callers are being turned away in it. |
| Calls in progress are not cut off | A connected call finishes and is charged as normal. |
| Routing resumes on the next call | As soon as funds arrive. There is nothing to switch back on and nobody to tell. |
The wallet.low event
{
"id": "req_92a3b4c5d6e7f809",
"event": "wallet.low",
"createdAt": "2026-09-20T14:03:11.118Z",
"data": {
"agencyId": "5d0e7c2a-1b3f-4e6d-9a8c-7f6e5d4c3b2a",
"agencyName": "Northwind Media Group",
"balanceCents": 0,
"reason": "workspace_unfunded"
}
}It is the one event that is not about a call, and its payload has nothing in common with the others: the workspace, the balance and the reason, and no call anywhere in it. reason is workspace_unfunded, the same code the refused calls carry.
So set up two alerts, not one.
| The early one | The late one | |
|---|---|---|
| What | Your own check of wallet.balanceCents or wallet.low. | A webhook on wallet.low. |
| Fires | While there is still time to top up. | After the first caller has been turned away. |
| Means | "Add funds today." | "We are losing calls right now." |
| Send it to | A daily digest or a team channel. | A pager. |
// Watch your own balance rather than waiting to be told, and alert well
// above zero. This is a console route, so it takes a session token.
const res = await fetch("https://api.buy3.io/api/tracking/workspace", {
headers: { Authorization: "Bearer " + process.env.BUY3_SESSION_TOKEN },
});
const { workspace } = await res.json();
const { balanceCents, funded, low } = workspace.wallet;
if (!funded) page("buy3: the wallet is EMPTY — calls are not routing");
else if (low) page("buy3: wallet low — " + (balanceCents / 100).toFixed(2) + " USD left");Worked example: the Monday morning that went quiet
Calls stopped at 08:40 and nobody changed anything over the weekend.
- Open the call log filtered to
outcome=unroutedover this morning. Every row readsworkspace_unfunded, with the sentence saying the wallet is empty. - Open Wallet & funding. The balance is zero, and the payment history shows the last deposit and the call spend that consumed it.
- Add funds. The very next call routes; there is nothing else to do to restore service.
- Count what it cost: the unrouted calls in that window are exactly the calls you lost, and the log has their publishers, so you know who to tell.
- Stop it happening again. Set the early alert above, and — if the traffic was a publisher's — tell them, because a source whose calls all fail for a morning will quietly move elsewhere.
Had the reason read workspace_inactive instead, the wallet would have been fine and the plan would have lapsed. That is restarted under Plan & billing on the same page, and it is why the wallet page is reachable even when the rest of the console refuses writes.
What the wallet is not
- Not where your buyers pay you. Revenue is a record on the call; the money changes hands between you and your buyer, off the platform.
- Not where your publishers are paid from. Payout is a record too. You settle with your publishers yourself.
- Not per person. It is the workspace's, and any owner or admin can fund it and spend it.
- Not a credit line. There is no overdraft and no invoicing after the fact: an empty wallet stops routing rather than accruing a balance owed.
