Billing and AU
Triform meters usage in AU (1 AU = €1.00; internally tracked in micro-AU at 6-decimal precision). Each circle has a wallet with an AU balance; operations debit from it according to per-element pricing.
AU is the platform’s single billing unit. All internal pricing math is done in integer micro-AU (1 AU = 1,000,000 micro-AU); the euro figure is display-only, derived from the micro-AU amount. The wallet is one of a circle’s intrinsic parts — it exists the moment the circle does, alongside the circle’s git repository, and is where credentials, secrets, and the AU balance live. Because the wallet belongs to the circle, billing is scoped to the same airtight tenancy boundary as everything else you build: a circle’s balance is its own, never shared across the wall.
How pricing works
Price is resolved per operation from a cascade of pricing.yaml files —
root → category → element. The narrowest scope that declares a rate wins, so an
element can override its category, and a category can override the platform-wide
defaults. Those YAML files are the source of truth; they flow through codegen into
generated resolver tables, the same YAML→build-all.sh→generated lockstep that
governs every other element behavior. Pricing is never written in physics or
portal code by element type — physics walks the generated tables and stays
element-agnostic.
Pricing is a dimension framework, not a flat operation→cost map. An element
declares the dimensions it bills on (for example, per invocation, per input or
output token, per running second). At the point an operation runs, the runtime
builds a pricing context and resolves it to a set of debit lines, summed in
micro-AU. One operation can therefore produce several debit lines at once — a
compute action might bill both per invocation and per running second; an agent
turn bills on input and output tokens together. Operations with no matching rule
resolve to zero, preserving the “unmetered operation is free” default. In
practice this means reads, lists, updates, and deletes are free, while the metered
surfaces are the ones that consume real resources — invoking actions, agent
inference, storage, database compute, and outbound telecom. Elements are not quite
free merely to hold, though: a small universal charge applies to element
creation (a per_creation dimension) and to each element’s daily existence
(per_day_existence), independent of whether the element is ever invoked.
What happens when a run would cost more AU than the wallet holds depends on the
circle’s plan. Plans carry a hard_wall flag: the freemium tier hard-walls —
the over-budget operation returns HTTP 402 with the code insufficient_balance.
Match on the code, not the human-readable message — every 4xx carries an actionable
_suggestion, but the code is the stable contract. The paid tiers (starter,
scaler, pro, enterprise) run with hard_wall: false, so they may dip briefly
negative rather than block. Either way, debits are taken under a per-circle lock, so
under concurrency the balance moves consistently — on a hard-walled plan exactly one
over-budget run drains the balance and the others get the 402.
Before an operation runs, the cost is surfaced in the UI as a cost chip whose
prominence scales with the amount — small costs stay quiet, larger ones become
insistent — with the exact thresholds set by platform policy rather than
hard-coded. Costs above the policy threshold route through an approval gate:
the caller confirms, and the approved operation proceeds. A read-only estimate
endpoint (POST /api/{circle}/pricing/estimate) resolves the same cost without
writing to the ledger, so a client can preview a charge before committing to it.
To read what a given element costs per operation, open its docs page: every
element page carries a Pricing section whose per-operation cost is
cascade-resolved from the same pricing.yaml source the runtime bills against.
This page deliberately quotes no rate table — the authoritative numbers live in
the YAML cascade and would rot if copied here.
Related
- Concept: runs — a run is what gets debited
- Concept: tenancy-airtight — the wallet lives on the circle
- Every element page carries a Pricing section (cascade-resolved per-op cost)