Connect by JBRH Open Connect

A call cost more than expected

A live call is billed on audio tokens, which cost several times what the same model charges for text, and a realtime session is re-billed for the whole context it carries on every single turn. On production calls, 92% of the input tokens are carried context rather than anything new. A long call is therefore not linear in its length, and that is the usual surprise.

Status
Available What this means
Audience
both
Channels
phone
In the app
#/usage, #/calls
Last verified
Product version
6.3.2

The two things that make a voice minute expensive#

The first is the rate. Audio is not charged like text: input audio costs four times the same model's text rate, and output audio roughly 2.7 times. Metering is therefore split by modality rather than kept as one total, because a total cannot be converted back into a bill once the two kinds are mixed.

The second is carried context, and it is the larger effect. A realtime session is re-billed for its entire context on every turn — everything said so far, plus the persona, the line's purpose, the caller's facts, the knowledge and the rules. Measured across production calls, 92% of input tokens were carried context rather than the sentence just spoken. The tenth minute of a call costs more than the first because the tenth minute is paying for the first nine again.

The four cases that look like a fault and are not#

What you seeWhat it isWhy it works that way
A short call with a large chargeLong instructions, re-billed every turnPrompt size is paid per turn, not once per call
A call charged after a mid-call restartEvery session the call held, added togetherA restart used to bill only the surviving session, which under-reported real usage
A call with no tokens reported, still chargedCharged from its own duration at the per-minute rateA call that happened is never priced at zero because the model's own accounting was missing
A call that ended hours ago, charged laterSwept when it was found stale, and charged as it closedOne browser call sat 'active' for 24.78 hours; the sweep now closes and books them

The restart case is worth stating plainly, because it changed direction. Sessions are merged so that every session a call held is counted, not just the one it finished on. If you compared old and recent bills for similar calls, the recent ones are the accurate pair.

The sweep matters for browser calls in particular, because a call placed from the browser has no worker holding it. Stale-call sweeping runs from the engine tick as well as from a worker heartbeat for exactly that reason, holds every provider to its configured cap, and books the cost of what it closes rather than discarding it.

What Connect completed#

  • The call was metered, split into input and output and into audio and text, from the usage the model itself reported.
  • Every session the call held was included, so a mid-call restart does not under-bill.
  • A call that reported no tokens was still priced, from its own duration at the published per-minute rate.
  • A call left open was swept to the configured cap and charged as it was closed.
  • The per-call profiler reports what was measured — and says what was not measured rather than filling the gap with an estimate.

What Connect did not complete#

  • Nothing was estimated to make a number look complete. A field the model did not report is shown as unmeasured, not inferred.
  • No context compression was applied unless it was sized: the default trigger is the entire context window, which in practice means none.
  • No charge was reversed, re-priced or refunded after the call — metering records what happened rather than adjusting it.
  • The per-call profiler is not available to a customer workspace: like the rest of the ledger it is operator-only, so a tenant sees usage rather than the per-call breakdown.

What you can do#

  1. Compare the call's length against its charge, then look at the instruction size for that line.

    Result A long prompt on a long call is multiplicative, not additive — the same characters are paid for on every turn.

  2. Trim what goes into every call: the knowledge budget is four facts and 2,000 characters, memory 700 and the contact block 600, and a human voice profile sits under about 2,500.

    Result The budgets exist because 7,500 characters gave a first token in 1.2–1.8 s and 9,600 gave 2.3–3.4 s. Cutting them buys speed and cost together.

  3. Ask whether the call should have run as long as it did.

    Result A voice that closes cleanly is the cheapest change available, because the last minutes of a call are the dearest ones.

  4. Set a budget on the line if cost matters more than answering every call.

    Result The budget is asked before an outbound call and before answering an inbound one, and a refused inbound hears the spoken closed-line message rather than silence.

What an administrator can do#

Size context compression
The trigger and target are settings. Leaving them at the model's whole window means the call carries everything to the end.
Read the profiler, not the average
The per-call breakdown separates input audio from input text and shows the carried share. An average across calls hides exactly the call you are asking about.
Check for stuck calls
A call that never closed is a call still being held somewhere. The sweep will close it, and the charge appears when it does rather than when the caller hung up.
Know what a breaker does
A refused key or a rate limit opens a breaker: scheduled work is skipped while a caller already on the line is still attempted. That protects the conversation, not the budget.

When to escalate#

Escalate when a charge cannot be reconciled with a call's duration and reported tokens at all, when calls keep being closed by the sweep rather than by their own ending, or when the carried share on short calls is high enough to suggest the instructions are much larger than the budgets above. The first is an accounting question; the second and third are configuration, and both are fixable without touching the model.

Questions#

Why is a call charged when the model reported no tokens?

Because the call happened. Missing usage from the model is a gap in its accounting, not evidence that nothing was spent, so the call is priced from its own duration at the per-minute rate. Charging zero would make a reporting failure look like free service.

Does a longer instruction only cost once per call?

No — that is the assumption behind most cost surprises. The session is re-billed for its whole context every turn, so every character of the instruction is paid for again on each reply.

Can a customer workspace see the per-call breakdown?

Not today. The per-call voice profiler is operator-only, in line with the rest of the usage ledger. A customer workspace sees its usage and its allowance; the modality-level breakdown of one call is not exposed to it.