%20(1).png)
Pricing and Packaging for AI Products: A 7-Step Guide
Pricing and packaging for AI products: a 7-step guide to choosing models, setting credits, defining limits, and testing plans.
See how tiered volume pricing works in AI products and how engineers handle metering, credits, concurrent thresholds, wallets, and request-time limits.
%20(1).png)
An AI agent crosses its monthly usage threshold halfway through a long-running workflow. Dozens of requests are still consuming tokens, but the price, budget, and access rules may have changed.
Engineering has to resolve the tier, check whether more usage is allowed, reserve the right amount, and charge the wallet before the next request runs.
Tiered volume pricing applies one unit price to all usage in a billing period. In AI products, enforcing that rule becomes a real-time infrastructure problem.
Tiered volume pricing sets a unit price according to which usage band a customer's total consumption falls into during a billing period. Once usage crosses a threshold, the new rate typically applies retroactively to everything consumed in that period.
Here's a simple three-tier structure using inference requests as the billable unit:
A customer who sends 150,000 inference requests in a month falls into the second tier. Under a pure volume model, the lower rate applies to the customer’s entire monthly usage, so all 150,000 requests are billed at $0.008 each. The total bill comes to $1,200.
Throughout this piece, "unit" refers to whatever your product meters, whether that's inference requests, generated minutes, documents processed, agent actions, or a normalized credit. The mechanics stay the same regardless of which unit you choose.
These models get confused constantly, and the distinction matters because they produce different bills for the same usage.
Volume pricing creates what's usually called a pricing cliff. A customer who uses 100,001 requests instead of 100,000 can end up paying less overall, because every unit is repriced to the cheaper rate.
Cross the earlier three-tier table by one unit, and the bill drops from $1,000 (100,000 × $0.010) to $800.01 (100,001 × $0.008).
That behavior does not make volume pricing a poor choice. It does mean product, finance, and engineering need to model the threshold effect deliberately, before a customer raises it in a billing dispute.
Volume pricing isn't new. Cloud infrastructure and API vendors have run tiered models for years. What's different for AI products is where the decision has to happen and how much can change underneath it mid-request.
A billing system can calculate the final tier at the end of the month without much trouble. Your product can't wait that long. Every individual request needs an answer about what it costs and whether it's allowed, in real time, while the monthly total is still moving.
A single agent action can trigger a lightweight model call, a larger inference, a retry, a tool invocation, or several of these in sequence.
Two customers may each run 10 agent actions while consuming very different amounts of compute, which makes a flat per-action price an approximation of cost as opposed to a direct measure.
Usage doesn't arrive from a single thread. Multiple workers, users, or agents acting on the same account can generate usage events at once. A cached usage counter read a few hundred milliseconds ago may already be stale by the time the next request needs a decision.
A single user's usage is rarely the unit that matters for enterprise customers. Usage typically needs to roll up across users, teams, departments, workspaces, agents, and parent-child organization structures, and a tier threshold might apply at any one of those levels depending on the contract.
For AI products, a usage decision goes beyond determining what to charge. It may involve stopping the request, applying an overage rate, drawing down prepaid credits, requiring approval, or moving the customer to a more restrictive limit. A billing system built only to produce invoices does not make those decisions.
Tiered volume pricing isn't the right model for every AI product. Whether it fits depends on how predictable your unit costs are and how much pricing cliff risk your customers can tolerate.
Good fits:
Cases that need caution:
If more than one or two items from the caution list apply to your product, graduated pricing or package pricing is usually a safer starting point than a pure volume model.
Designing volume tiers for AI usage comes down to six decisions: the billable unit, the aggregation scope, the measurement window, threshold behavior, price versus access control, and the unit economics behind it all.
Start by deciding whether you're billing on the raw infrastructure unit or a customer-facing abstraction of it.
Raw tokens can map to credits. GPU seconds can map to generation credits, and a few tool calls can group into one agent action. Costs across different models can convert into a shared credit currency.
The raw unit is what your infrastructure actually consumes. The commercial unit is what your customer sees on an invoice and on your pricing page, and those two things don't have to be the same thing.
Before you build anything, figure out what a tier threshold actually applies to.
Per-user, per-workspace, per-organization, per-product, per-wallet, and per-billing-account are all reasonable choices. The view of a customer changes depending on which one you use.
Does the tier reset monthly? Annually? On a rolling window, a contract period, or against a prepaid balance that never resets on a calendar at all?
Prepaid and subscription-period models behave very differently right at the threshold boundary, so this is worth nailing down early rather than discovering it later.
The exact moment a customer crosses a threshold is where most of the implementation bugs end up living.
Does the new rate apply immediately, or get applied retroactively at period end? What happens to requests that are already in flight when the crossing happens? Do reservations count toward the threshold before they're finalized? And if a request fails or gets refunded after it was already counted, how does that get unwound?
A customer can qualify for a lower unit price while still being capped by a hard budget, a credit balance, or a plan entitlement limit. Price and access are related, but they're not the same lever, and it's easy to end up with pricing logic nobody can reason about later if you conflate the two.
Before you ship a tier structure, model it against your real model mix, retry rates, tool costs, and infrastructure overhead, with enough margin buffer to survive a bad month. This is a sanity check to make sure the tiers you've designed remain profitable at the usage levels customers are likely to reach.
This is where tiered pricing for an AI product stops being a spreadsheet problem and becomes a systems problem. The request flow looks roughly like this:
AI request → entitlement and budget check → usage reservation → model or agent execution → actual usage recorded → credit ledger updated → billing data exported
Seven components typically show up in a working version of this pipeline:
A single request touching tiered pricing typically moves through nine steps:
Steps 3 and 7 are especially important here. Reserving usage before the work runs, then reconciling the reservation against actual consumption afterward, is what keeps concurrent requests from all reading a stale counter and approving usage the account can't actually cover.
Here's a simplified example of what steps 2 through 7 might look like in code, with an idempotency key so a retried request doesn't get double-counted:
async function handleAIRequest(customerId: string, estimatedUnits: number, idempotencyKey: string) {
const entitlement = await resolveEntitlement(customerId);
const reservation = await reserveUsage({
customerId,
units: estimatedUnits,
idempotencyKey,
});
if (!reservation.allowed) {
return { status: "denied", reason: reservation.reason };
}
const result = await runModelOrAgent(customerId);
const actualUnits = result.unitsConsumed;
await finalizeUsage({
reservationId: reservation.id,
actualUnits,
idempotencyKey,
});
return { status: "completed", result };
}
The reservation step is what makes this safe under concurrency. Without it, two requests that both check "does this customer have budget left" against the same stale read can both get approved, even if approving both would put the account over its limit.
These scenarios are for illustration only and don't describe any specific company's pricing.
A customer starts the month on one model, then adds faster and more expensive models as usage grows. The API still presents a single customer-facing token price, with lower per-unit rates applied as total account usage reaches each tier.
The hard part is normalization. If different models convert into billable tokens in inconsistent ways, the customer may see unpredictable prices and the account may enter the wrong tier.
Picture a workspace running hundreds of agent workflows. One task may involve an LLM call, a browser action, and several tool executions. Instead of pricing each action separately, the platform converts them into credits and applies volume pricing to the workspace’s total monthly credit use.
That model stays clear for customers only while the conversion rates remain accurate. When model or tool costs change, stale rates can drain wallets too quickly or push workspaces into a new pricing tier too soon.
An enterprise customer wants the benefit of its combined purchasing volume, but it does not want every department spending from one unrestricted pool. Total agent actions across the organization determine the unit price. Each department keeps its own budget, and each agent still has an action limit.
This creates two different control paths. Crossing an organization-wide pricing tier changes the rate. Hitting a department budget should block or restrict usage. Engineering must keep those events separate, even when both happen on the same account at nearly the same time.
Some of the same mistakes show up across most in-house tiered pricing builds:
For a product with one plan, one usage metric, and limited concurrency, a database table, a counter, and a middleware check is a completely reasonable choice. It's fast to build, easy to understand, and doesn't need a dedicated system to justify its existence.
The complications appear as a few specific conditions stack up:
Respect the decision to build in-house. For a team with one product, a few plans, and limited usage complexity, the simple version was often the right choice.
The better question is whether the system still fits the product today. As new pricing models, shared wallets, real-time limits, and enterprise controls accumulate, the infrastructure may need a fresh review.
Tiered volume pricing is a commercial model. Something still has to enforce its rules while usage is happening. That system is separate from the one that calculates the final invoice.
For teams that do not want to build and maintain this control layer in-house, Stigg provides the runtime infrastructure needed to meter usage, resolve tiers, manage credits, and enforce limits before the next request runs.
Without request-time enforcement, AI usage can cross a pricing tier, drain a wallet, or exceed an access limit before the system catches up. Stigg resolves those decisions before the next request runs.
Explore the Stigg Docs to see how its architecture supports real-time metering, credits, entitlements, and usage enforcement.
Yes, customers should see their current usage, remaining allowance, and the next pricing threshold. Real-time visibility helps teams predict costs before an agent or workflow crosses into another tier.
Yes, one customer can have separate tier schedules for tokens, agent actions, document processing, or other metered features. Each metric should remain separate unless the commercial agreement intentionally combines them into one credit pool.
Yes. Credits are commonly used to normalize several underlying usage types (tokens from different models, GPU time, tool calls) into one commercial unit, and volume tiers are then applied to total credit consumption rather than to each raw usage type separately.
Generally, no. Most billing systems calculate charges based on usage that already occurred, on a cycle that runs after the fact.
Deciding whether a specific request is allowed to happen at all, before it's counted or billed, is request-path enforcement, and that typically requires infrastructure built specifically for that purpose.