> ## Documentation Index
> Fetch the complete documentation index at: https://docs.firetone.com.au/llms.txt
> Use this file to discover all available pages before exploring further.

# Billing

> Balances, what a period came to, and reading a figure that is withheld.

<img src="https://mintlify.s3.us-west-1.amazonaws.com/firetone/images/billing.png" alt="Billing" />

## Balances

Each tenant has a balance, a credit limit and a reserved amount. **Reserved** is
credit held against calls in progress — money not yet spent but no longer
available, which is what stops a prepaid tenant starting more calls than their
balance can finish.

## Prepaid cut-off

A credit check runs **before** a call is placed. A tenant out of credit is
refused at origination rather than discovered mid-call, and the refusal carries
a reason.

The caller hears the reason too: "Your balance is not enough to make this call"
when credit or a team budget has run out, and "Calls to this destination are not
allowed on your account" when the rate card has no price for the number. Each
organisation can replace either with its own recording; see
[refusal announcements](/operator/organisations#refusal-announcements).

## Settlement is idempotent

A call is settled exactly once. A replayed hangup — which happens — does not
bill twice.

## AI is separate

Minutes and tokens are rated on different cards and appear separately. The
"charged" figure on a call record is **telephony only**; a call answered by a
virtual agent has its AI cost alongside, not folded in.

## Exchange rates

A carrier charges in its currency; you bill an organisation in yours. **Billing →
Exchange rates** is what joins them, so that a call's margin is a real number
and not dollars subtracted from rupees.

Enter one direction — *1 USD = 83.2 INR* — and the other is worked out from it.

* **A rate is added, never edited.** When it changes, add a new one. The rate in
  force when a call ends is **written on that call**, beside what the carrier
  charged in its own money, so entering this month's rate cannot move last
  month's margin. Old rates stay listed: they are the record of what past calls
  were converted at.
* A rate dated in the future waits its turn. **In force** marks the one a call
  ending now would use.
* The **charge** is converted, not the price. Minimums and increments are the
  carrier's arithmetic and are done in the carrier's currency first.

On a call record: `currency` is what the sale, the cost and the margin are all
in; `cost_currency`, `cost_amount_original` and `fx_rate` are what the carrier
charged, in what, and the rate that turned it into `cost_amount`.

<Warning>
  With **no rate** for a pair, a call's cost cannot be converted. The carrier's
  figure is kept, the call is marked `cost_unconverted`, the log says so at
  error level, and the calls list shows that margin as **?** — never as a
  number, because it would be one currency subtracted from another. Add the
  rate; calls from then on convert. Importing a price list tells you about a
  missing pair before anything is written.
</Warning>

## Withheld is not zero

<Warning>
  Where a reader may not see cost or margin, FireTone omits it and the panel
  draws it as withheld. It never substitutes zero. A zero here would read as
  "this call cost us nothing", which would be a false statement about the
  business rather than a missing one.
</Warning>
