Cost
Session spend, your rate card, unpriced models, telephony estimates, and margin.
Parlot estimates what providers charge you to run voice and language models: large language models (LLMs), text-to-speech (TTS), speech-to-text (STT), and related usage.
You will see cost in two places:
- Session Cost (
/sessions/:sessionId/cost) — spend for one conversation - Cost & margin (
/cost) under Observe — your workspace rate card and recent margin
What goes into cost
Estimates usually combine:
- Large language model (LLM) token usage
- Speech-to-text (STT) and text-to-speech (TTS) usage when your agent reports them
- For phone calls, an estimate of telephony minutes from call duration
Figures appear when Parlot can match usage to a rate. Update the rate card when a model still needs a price.
Cost & margin
Open Observe → Cost & margin.
| Tab | Use it to |
|---|---|
| Margin & cost | Set what you charge clients per minute, then compare revenue to estimated provider cost by agent or client for the selected date range (defaults to the past 30 days). |
| Rate card | See which models appear in usage, what rate applies, and fix unpriced rows. |
The Cost & margin nav item can show a badge with how many models still need a rate. Cost views (Overview, Agents, Sessions) also warn when usage is unpriced.
Provider list vs your contract
Each rate-card row has a source:
| Badge | Meaning |
|---|---|
| List | Public provider list price from the community catalog. Useful as a default until you enter a contract rate. |
| Your contract | A rate you entered for your organization. This wins over the list price for new sessions from the moment you save it. |
| Unpriced | Usage was seen with no list match and no contract rate. Cost appears after you set a rate. |
List rates come from the open voice-prices community catalog (vendored into Parlot). List rates are pass-through estimates of what providers charge.
Past sessions keep the rate that applied when they ran. Editing a rate applies to new sessions only; past sessions keep the rate they used.
Pins vs contract rates
When you Add model (or start from a typical voice stack) and keep the suggested list price, Parlot pins that model on the rate card so it stays visible. The displayed rate still follows the community catalog when the catalog updates.
When you enter or change your dollar rate, Parlot stores a contract rate (override). That custom rate is what feeds cost until you reset it to list or remove it.
In short:
- Pin — keep the model on the card; keep following list price
- Your contract — use the rate you typed for your org
Needs pricing (unpriced models)
Rows appear automatically from recent session usage. If Parlot finds no catalog match and no contract rate, the row is Unpriced.
Unpriced usage is excluded from cost, so margin can look better than it really is. Use Price now (or open the Rate card tab) to set a rate. Multi-unit models (for example TTS characters and audio duration) can show more than one billable unit—price the invoice unit you use; other units can stay unpriced and are counted once.
Telephony estimates
For sessions on the phone channel, Parlot estimates telephony cost from call duration. That estimate uses a telephony rate from your rate card or the community catalog when available. Treat it as pass-through visibility for planning.
Margin
On the Margin & cost tab:
- Set You charge per minute (one organization-wide sell price).
- Parlot multiplies that price by session minutes to estimate revenue.
- Margin compares that revenue to estimated provider cost for the selected date range (defaults to the past 30 days), grouped by agent or client.
Tag sessions with a client
To group margin by client, stamp client on the session from your agent:
from parlot.core import set_session_metadata
set_session_metadata(client="acme-corp")That becomes session.metadata.client. Sessions missing a client tag show as untagged in the
client rollup. Call this after the session has started. Prefer short identifiers—avoid putting
personally identifiable information (PII) in metadata. See
Custom metadata in the SDK
Concepts guide.
If sell price is empty, revenue and margin stay blank. If models are unpriced, cost can be understated—watch for warnings and incomplete-cost icons on rows that show near-zero cost despite real traffic.
Export CSV
Export CSV downloads one row per priced unit for sessions in the selected date range (defaults to the past 30 days). Use it when finance needs unit-level detail for the same date range as the on-screen agent/client rollup.
Each row includes:
- Session id, start time, end time, agent, client tag, channel, and duration
- Line item: category (LLM / STT / TTS / telephony), provider, model, unit (for example million
input tokens vs million output tokens:
input_mtok/output_mtok), quantity, frozenunit_rate_usd,cost_usd, and rate source - Session total cost, plus revenue and margin % when you have set a per-minute sell price
Unit rates are frozen at session close from the same catalog/override resolution that priced
the session—so LLM input and output appear as separate lines with their own rates. Older sessions
closed before this existed may show aggregate stage rows with blank rates
(source=legacy_aggregate).
Filenames look like YYYYMMDD-session-cost-{range}-{hex}.csv (for example
20261005-session-cost-30d-a3f1.csv). Exports may warn when sell price is missing or models are
still unpriced—revenue/margin can be blank and costs understated until rates are complete.
Session Cost tab
Use the session Cost tab when you need the bill of materials for one interaction (stage totals and usage). Use Overview and agent Cost tabs for fleet trends. Use Cost & margin when rates or margin look wrong.
Related
- Overview — cost lens across the org
- Organization settings — Plan & billing vs Cost & margin
- Licensing and plans — what your Parlot plan includes
