Fintech
Key points

Key points

  1. 1Prepaid credits let customers pay before they use the product, which secures cash up front and caps your exposure to unpaid usage and abuse.
  2. 2A credits system is a ledger, not a number: every purchase, grant, deduction, top-up, expiry and refund is an entry with a source and a timestamp.
  3. 3Decide the credit types, the order they are consumed, the zero-balance behavior, the top-up rules and the expiry policy before launch, and show them to customers.
  4. 4Prepaid money is usually a liability until the service is delivered, and unused credits raise breakage questions that finance and an accountant should settle.

What prepaid credits are and when they fit

In a prepaid credits model, customers buy a balance and spend it on measured actions in your product. Lago describes it as a customer buying or receiving credits and spending them on measured product actions, where each credit has a defined purchase value and each action a defined credit cost, with a wallet tracking grants, purchases, consumption and expiry.

The model differs from postpaid usage billing in one important way: the money arrives first. Lago points out that prepayment mitigates the risk of overuse and abuse and ensures invoices are paid promptly. For products where every action costs you real money, such as AI inference, image generation, messaging or data enrichment, that matters. A postpaid customer who runs up a large bill and then disputes the charge leaves you holding the vendor cost.

Prepaid credits fit well when:

  • Your costs are variable and immediate. Each action triggers a third-party bill you must pay regardless of whether the customer pays you.
  • Customers have uneven usage. A balance lets them use a lot one week and nothing the next without plan changes.
  • You sell several kinds of actions. One credit unit can price chat, images and exports on one balance.
  • You attract anonymous or self-serve signups. Prepayment is a natural fraud control.

They fit less well when customers need a predictable monthly invoice for procurement, or when your product delivers value as access rather than as actions. Stripe also lists real drawbacks: customers who do not immediately understand how many credits they need, revenue that is harder to predict than subscriptions, and the risk of pricing shock when credits burn faster than expected.

Designing the credit unit

The credit is a conversion layer between money and usage. You set two rates: how much money buys a credit, and how many credits each action costs.

Purchase rate:  1 credit = a fixed amount of money (for example, one cent)
Action costs:   chat message = 5 credits, image = 20 credits, export = 50 credits

Three design rules keep the unit honest.

Make the money value obvious. Stripe warns that the challenge is to make credits pricing feel as intuitive as a dollar amount without making people do mental math. A credit worth a round fraction of your currency is easier to reason about than an arbitrary unit. Some products skip the abstraction entirely and keep the balance in money.

Price actions from cost and value. Lago cautions that a request using an expensive model should not silently have the same credit cost as a cheap one unless your margin can absorb it, and recommends modeling credit burn for light, typical and heavy workloads. Revisit action costs when your own vendor prices change.

Keep the price list short. Stripe notes that if every feature has a different credit cost, you create a cognitive load for customers. A handful of action prices, shown next to the action in the product, works better than a long table on the pricing page.

Version the action costs with effective dates. When you change a price, deductions after the change use the new cost and old deductions remain explainable.

Credit types and consumption order

Not all credits are the same, even if the customer sees one balance. Lago separates purchased, included and promotional credits, and recommends treating them as distinct in the ledger because they can have different terms for expiry, rollover and refunds.

Credit typeWhere it comes fromQuestions to answer
PurchasedCheckout or invoiceUsable on order or only after payment succeeds? Refundable?
IncludedA recurring grant with a planDoes the unused amount roll over to the next period?
PromotionalTrial, referral or goodwill grantWhen does it expire? Can it be used on every action?

Then decide which credits are spent first. Lago shows why this matters: with 2,000 promotional and 10,000 purchased credits, a 9,000-credit month consumes 2,000 free and 7,000 paid credits if promotional credits go first, but 9,000 paid credits if purchased credits go first. The customer sees the same usage, yet the remaining paid balance, the refund exposure and the revenue associated with that month all differ.

A common default is to spend credits that expire soonest first, which usually means promotional and included credits before purchased ones. Whatever you choose, write it in your terms and implement it deliberately rather than relying on whatever order your database returns.

Lago also warns against mixing two different things under one word. A usage credit is spent on actions. A billing credit, or credit note, adjusts an amount owed on an invoice. Label them differently in the product and the books.

The wallet is a ledger

The most common implementation mistake is storing the balance as a single number and updating it in place. When a customer asks where their credits went, a single number cannot answer. Lago puts it directly: a wallet needs entries for each paid purchase, free grant, charge, top-up, void, expiry and adjustment, each with a timestamp, source, amount and a reference to the event or invoice it settles.

A minimal schema looks like this:

create table credit_ledger (
  id            uuid primary key,
  account_id    uuid not null,
  entry_type    text not null,   -- purchase, grant, usage, top_up, expiry, refund, adjustment
  credit_type   text not null,   -- purchased, included, promotional
  amount        bigint not null, -- positive adds credits, negative removes them
  money_amount  numeric,         -- cash value for purchases and refunds
  source_ref    text,            -- payment id, invoice id or usage event id
  idempotency_key text unique,   -- prevents double deductions on retries
  expires_at    timestamptz,
  created_at    timestamptz not null default now()
);

The balance is the sum of entries. You can cache it for speed, but the ledger stays the source of truth. Three rules make it reliable:

  1. Deduct atomically. Check the balance and write the usage entry in one transaction, so two parallel requests cannot spend the same credits.
  2. Use idempotency keys. Give every usage deduction the ID of the action that caused it, so a retried request does not charge twice.
  3. Never delete entries. Corrections are new entries that reverse old ones.

Lago describes the payoff: real-time deduction keeps the balance always up to date, so you can block usage or grant credits with confidence. Finance gets a trail from purchase through usage, expiry and refund.

Top-ups and auto-recharge

Customers need a way to add credits before they run out. There are three common mechanisms:

  • Manual top-up. The customer buys a credit pack when they choose.
  • Interval top-up. Credits are granted weekly, monthly or yearly, usually as part of a plan.
  • Threshold top-up. When the balance falls below a set level, the system buys more automatically.

Lago distinguishes two kinds of threshold rule. A fixed rule adds a set amount. A target rule refills to a level, for example topping a balance that drops to 20 credits back up to 100. The difference matters to customers: "add 500" always charges the same, while "refill to 500" charges whatever it takes.

Auto-recharge needs guardrails:

Zero balance, expiry and refunds

Zero balance. Decide what happens before launch. Lago lists the options: the application can block new work, allow a defined grace or negative-balance amount, start postpaid overage, or require a successful top-up. For short actions, blocking with a clear top-up prompt is usually right. For long-running jobs, check the balance before starting and reserve enough credits, so a job does not fail halfway.

Expiry. Stripe frames the trade-off: if credits last forever, you carry an ongoing liability on your books, but if customers lose money to expired credits, some will leave for good. Lago recommends stating the expiry date at purchase or grant and reminding customers before it arrives. A common, customer-friendly pattern is to let promotional credits expire while purchased credits last much longer. Check with a lawyer or accountant, because some jurisdictions regulate expiry of prepaid value.

Refunds. Decide whether unused purchased credits are refundable, under what conditions and at what value. Record a refund as a negative ledger entry linked to the original payment, so the balance and the cash both reconcile.

Show all three policies on the purchase screen, not only in the terms.

Accounting for prepaid credits

Cash, wallet balance and revenue are three different numbers. Lago states it plainly: cash collection, wallet balance and recognized revenue are separate measures. A purchase brings in cash now, while the service is delivered later as credits are spent.

Under US accounting guidance, Deloitte summarizes the principle: on receiving a prepayment, a company recognizes a contract liability for its obligation to transfer goods or services in the future, and recognizes revenue as it delivers them. In practice, unspent purchased credits sit on the balance sheet as deferred revenue.

Unused credits create a further question called breakage. Deloitte explains that customers may not exercise all of their contractual rights, and the guidance sets out when expected breakage can be recognized as revenue, either in proportion to usage or when the chance of the customer using the rest becomes remote. It also notes that unclaimed property laws may require some amounts to be remitted to a government instead. Zenskar describes how finance teams estimate breakage by analysing historical cohort data on how many credits go unused, which means you need that usage history in a form finance can query.

Promotional credits are another case. Lago observes that promotional credits are not cash receipts, and how they are treated depends on the arrangement. The practical step is the same for all of this: give your accountant a clean ledger, your written expiry and refund policies and your consumption order, and agree on the treatment before your first large prepaid sale. These are judgment calls with real consequences, so check with an accountant rather than choosing a treatment yourself.

Before launch, run this test: create an account, grant promotional credits, buy a pack, spend across several action types, trigger an auto top-up, let a grant expire, issue a partial refund, then reconcile the ledger to the payment processor and the general ledger. If every number ties out, your credits system is ready.

FAQ

FAQ

Why use prepaid credits instead of monthly usage billing?

Credits collect cash before the service is used, which protects you when each action carries a real vendor cost. They also make abuse and unpaid bills much less likely for self-serve customers. The trade-offs are less predictable revenue and the need to explain the credit unit clearly.

Should credits expire?

Promotional credits commonly expire, which limits your liability and encourages use. Expiring purchased credits saves accounting complexity but can feel unfair and cost you customers, and some jurisdictions regulate it. Whatever you choose, state the date at purchase and remind customers before it arrives.

Which credits should be used first, free or paid?

Most products spend the credits that expire soonest first, which usually means promotional or included credits before purchased ones. The order changes the remaining paid balance, refund exposure and revenue timing. Write it in your terms and implement it explicitly.

How do I stop customers spending the same credits twice?

Check the balance and write the deduction in a single database transaction, and attach an idempotency key from the triggering action to every deduction. That prevents both race conditions between parallel requests and double charges from retries. Keep the ledger append-only so every correction is visible.

Is money from prepaid credits revenue when it is received?

Generally not under accrual accounting. Prepaid amounts are usually recorded as a liability, often called deferred revenue, and recognized as revenue when credits are used. Unused credits raise breakage and possibly unclaimed property questions, so agree on the treatment with an accountant.

Sources

Sources

  1. https://getlago.com/blog/credit-based-pricing
  2. https://getlago.com/blog/prepaid-credits
  3. https://stripe.com/resources/more/credits-pricing-models-for-scaling-businesses-explained
  4. https://docs.metronome.com/guides/customers-billing/optimize-customer-experience/prepaid-balance-thresholds
  5. https://dart.deloitte.com/USDART/home/codification/revenue/asc606-10/roadmap-revenue-recognition/chapter-8-step-5-determine-when/8-8-customers-unexercised-rights-breakage
  6. https://schematichq.com/blog/saas-auto-top-ups
  7. https://www.zenskar.com/finance-glossary/credit-breakage
About the author

About the author

Antonio Evans
Antonio Evans

Antonio Evans is the founder of Quanta Intelligence and a fractional CTO who builds HIPAA-ready AI systems for health and life-science companies. Before that he was technical co-founder of FriendsEAT for twenty years, CEO of Socialdraft, and a data engineer at IBM. Antonio lives with his dog Santino in Lisbon, Portugal.

All articles