Skip to main content
Every AI charge starts with an authorization. Unprice is the spend authorization your app calls before an agent run or paid workflow reaches a provider. Reserve against the customer’s budget, run the work, then settle what it actually cost and release the rest. A denied run makes zero provider calls and still leaves a receipt.
Three $4.10 usage.consume requests share a $10 budget. Two are accepted and produce wallet, ledger, invoice, and Stripe payment evidence. The third is denied with LIMIT_EXCEEDED at $1.80 remaining, with no wallet change, invoice line, or charge.Three $4.10 usage.consume requests share a $10 budget. Two are accepted and produce wallet, ledger, invoice, and Stripe payment evidence. The third is denied with LIMIT_EXCEEDED at $1.80 remaining, with no wallet change, invoice line, or charge.

The money path: two requests accepted, the third denied.

The value

  • Authorize before cost. Call Unprice before an agent run or paid workflow reaches a provider. A deny is a hard stop: no provider call, no ledger entry, no invoice line.
  • Keep pricing out of product branches. Plans, plan versions, features, meters, entitlements, budgets, and wallet credits stay connected but separate.
  • Keep the receipt. Accepted usage carries evidence from the authorization to the invoice line.

Start with one agent action

Choose the action that can spend against a customer’s budget, credits, or usage allowance: an LLM call, API request, data job, workflow, export, or tool run.

1. Model the rule

Publish one plan version and map one customer to it.

2. Choose the runtime call

Select access.check, usage.consume, usage.record, or a budgeted run.

3. Inspect the evidence

Inspect usage, wallet credits, holds, and invoice evidence.

The runtime calls

Why not a counter?

A counter can stop a run. Check it before the provider call, hold and release the amount in a Lua script, and it will be correct. The reservation was never the hard part. The trail is: which plan version was in force, what rate applied, which grant the hold came from, how the settled amount became a ledger entry that balances, and which invoice line it landed on. That is what gets rebuilt by hand every time support asks why a customer was charged. Unprice keeps the authorization and that explanation on one inspectable path.

Agent quickstart

Give your coding agent the Unprice skill and put one agent run behind an authorization.

TypeScript SDK

Install the SDK and call the public API with typed results.

Open and payment-provider aware

Unprice owns the customer money path: the authorization, the wallet, the ledger, and the invoice evidence. Your payment provider still captures payment, and the money never touches Unprice. Use Sandbox to test the flow, then connect Stripe for production payment capture. Stripe is the production provider today. The provider model can support more providers without moving pricing logic into your application. The hosted runtime, database, and usage analytics run in EU regions. Per-customer Durable Object state — wallet reservations, run budgets, idempotency keys — is pinned to Cloudflare’s EU jurisdiction, so it is never placed or migrated outside it. If you run Unprice yourself, your data lives wherever you deploy it.