Docs

Billing outcomes

Hand a client a one-page invoice that defends every billable AI minute. Per-client / contractor invoice export (CSV + print-to-PDF), proof-of-work line items, consent-mode watermark, outcomes panel. Reuses /api/billing/by-account.

See it in motion

Where to find it

  • Localhost: /billing-outcomes.html?repo=<id>
  • API: GET /api/billing/per-client/outcomes?repo=<id>
  • Keyboard: ⌘ K then invoice
  • Navigation: LLM Cost Metrics in the sidebar, then Billing outcomes under All tools, in the Cost receipts group

What it does for you

One line item per billable session.Each row: date, session, source tool, model, tokens, and cost (the session's tracked LLM API spend). The proof-of-work column ties the row to what the session shipped. The client sees the work, not the tooling.
Consent state travels with the export.The print-to-PDF invoice stamps a consent-mode watermark (strict, full, or mixed) in its header and footer, so the recipient knows which consent states are included. The CSV carries each row's consent state at record time. Off-prem clients get a trail either way.
CSV + print-to-PDF, no SaaS dependency.The export is local - CSV for accounting, browser print-to-PDF for the email attachment. No third-party invoice service in the loop.

Configure

Each session's cost is its tracked LLM API spend, summed from raw token counts. Human time is priced separately. An owner or admin sets a developer's hourly rate on the hosted team overview (paid plans, effective-dated), and the invoice carries a per-day labor section beside the session rows. With no rate set, those hours export as unpriced rather than as zero. The proof-of-work column is built from the session's causal links (each defect with its commit SHA and confidence band) and the lessons those defects produced; there is no free-text field to fill in.

Use it well

At the end of the billing cycle, filter by client + date range. Skim the proof-of-work column on the exported invoice: each session lists the defects it fixed under AI did, and the lessons that came out of it under I cleaned up. A session with no recorded causal link shows none in both columns, so decide whether it belongs on the invoice before you send it.

Read more

Last updated