The Unprice manifesto

Every AI charge starts with an authorization.

An agent can spend a customer's credits before an end-of-cycle invoice exists. A usage counter can record the cost, but it cannot decide whether the work should run.

Put the commercial decision before the run. Check the plan and budget, reserve customer credits, and deny unfunded work. Then settle actual usage and trace the invoice line to the authorization.

Static pricing · diagnosed
over-budget usageno way to stop it before it runs
packaging changeedits product code · scripts · cron
pricing logichardcoded · config, not decision
disputed invoicereconstructed from logs · by hand

cause: the money decision runs after the cost exists

Pre-flightanswered before cost exists
Which plan version applies?pro@v3 · pinned
Is the customer entitled?plan entitlement · active
Which meter rule rates it?tokens_used · $0.002 / token
Do wallet credits cover it?reserve −1 credit
Is there budget left?$4.10 remaining

every answer yes · work runs

200

any answer no · denied first

LIMIT_EXCEEDED

01The mechanism

Every AI charge starts with an authorization.

Before an agent or workflow runs, your app checks the customer's plan, budget, and credits. That authorization stays with the usage and explains the invoice line later.

One decision, two futures. A deny comes back as LIMIT_EXCEEDED before any cost exists. The wallet stays untouched, the ledger stays empty, and the invoice has no line. An allow keeps the evidence from the decision that let the work run.

02The operating model

Operate pricing like infrastructure.

PriceOps means keeping pricing rules in versioned infrastructure. Plans, versions, entitlements, meters, budgets, credits, and invoice evidence stay separate but connected. You can change packaging without rewriting the product.

  1. 01

    Spend safety

    Put a real-time budget around the expensive action. Over-budget customer or workload spend is rejected in the request path, before the work runs.

    stop cost before it exists

  2. 02

    Runtime decisions

    Pricing is not a page or an end-of-cycle job. Entitlement, budget, and credit checks happen while the request is in flight.

    decide in the request path

  3. 03

    Explainable money flow

    Usage, entitlements, budgets, credits, and invoices share one evidence trail. Every charge traces back to rated events and ledger captures.

    every charge carries evidence

  4. 04

    Open and inspectable

    Money logic should not be a black box. Read the open-source runtime yourself, or have your agent inspect it.

    trust follows inspection

03Ownership

The billing layer you rent can be acquired. The money path you own cannot.

Between 2025 and 2026, four venture-backed billing vendors were acquired or taken private. When your revenue logic runs in a closed vendor runtime, an acquisition can change the product and roadmap you depend on.

Unprice keeps the customer spend decision, the double-entry ledger, and the invoice explanation in one open money path you can read, fork, and run in your own Cloudflare account. Read the code that guards your money, or have your agent inspect it, before you trust it.

The billing middle market2025 to 2026 · traced
Zuorataken private · Silver Lake
OpenMeteracquired · Kong
Metronomeacquired · Stripe · ~$1B
Orbacquired · Adyen · $335M
venture-backed metering vendorsacquired or pivoted
your money pathyours · AGPL-3.0
What you own
licenseAGPL-3.0 core · commercial available
wallet ledgerdouble-entry · always balances
schemasplans · versions · meters · entitlements
SDKgenerated from OpenAPI contracts
runtimeCloudflare Workers + DOs · your account
paymentsStripe-first · provider-extensible
funds flowyours · unprice never sits in it

git clone github.com/jhonsfran1165/unprice

The team that owns the request path should own pricing.

  • You shouldn't need a deployment to change a price.
  • You shouldn't discover an over-budget customer at invoice time.
  • You shouldn't reconstruct a disputed charge by hand.

For AI products, every charge starts with a runtime decision. Unprice keeps that decision in open code you can run and inspect.