Download all docs

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)