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.

TabUse it to
Margin & costSet 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 cardSee 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:

BadgeMeaning
ListPublic provider list price from the community catalog. Useful as a default until you enter a contract rate.
Your contractA rate you entered for your organization. This wins over the list price for new sessions from the moment you save it.
UnpricedUsage 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:

  1. Set You charge per minute (one organization-wide sell price).
  2. Parlot multiplies that price by session minutes to estimate revenue.
  3. 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, frozen unit_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.

On this page