.jpg)
Consumption Pricing: How It Works + Implementation Guide
Learn how consumption pricing works, the infrastructure it requires, and how engineering teams implement usage-based pricing.
Learn about how entitlement management solutions work for AI-native products, where in-house systems fall short, and how to decide between build and buy.
%2520(1).png)
Your team didn’t sign up to build a credits system, but now every plan change, usage limit, and AI feature gate lives in your codebase.
Pricing decisions that should take a config change end up requiring a deploy, and the logic only gets harder to untangle as plans multiply. Entitlement management solutions move that logic out of your application and into a dedicated layer.
This guide covers what production-ready entitlement systems actually need to handle, where in-house approaches fail, and how to decide whether it’s still worth building yourself.
Entitlement management solutions define and enforce what a customer or agent is allowed to do and how much of it they can do.
They sit between your product and billing system, controlling access at runtime before any usage is invoiced.
In practice, these solutions manage limits and rules such as:
When a request comes in, the entitlement layer resolves all of that into a single decision and returns it synchronously, before the request is allowed to proceed.
Billing systems calculate charges and process payments after usage happens. Entitlement management solutions run upstream of that.
RBAC controls user permissions within a team. Entitlement management solutions control what a customer is allowed to use based on their plan.
Both systems work together. RBAC handles internal access. Entitlement management solutions handle plan-based limits and commercial access rules.
Early on, a few tables and conditionals are usually enough to handle entitlement logic. That setup works when you have one or two plans and stable rules.
Variation makes it complicated, however. A single customer might be on a base plan, with an add-on that extends one feature, a trial that unlocks another, and a promotion that overrides a limit temporarily.
Every request has to resolve all of that into one decision before the user gets a response.
Once that complexity accumulates, entitlement management solutions need to handle:
Each case is manageable alone. Together, though, they require every service, every request, and every retry to resolve consistently across the entire system.
Entitlement resolution is how the system decides what a customer is allowed to do at any given moment. That decision rarely comes from a single source.
A customer’s effective limits are usually built from multiple inputs:
The system has to evaluate all of these together and resolve them into a single value per feature. When sources conflict, the most generous value wins.
The structure of that response matters. A proper entitlement check returns more than yes or no. It returns structured data that the rest of the stack can use, which is what Stigg's getEntitlement returns out of the box:
That response drives both sides of the system. On the backend, it determines whether a request is allowed, throttled, or blocked. On the frontend, the same data controls what the user sees, whether that’s a locked feature, a usage meter, or an upgrade prompt.
For entitlement checks to run in the request path without slowing it down, they have to resolve locally rather than calling an external service on every request.
Stigg handles this with a Sidecar that runs alongside your application. It caches entitlement data in Redis, so most access decisions resolve from local cache instantly. If the data isn’t in cache, it falls back to Stigg’s API, typically around 100ms, with a configurable timeout.
This setup lets you enforce entitlements per request without adding noticeable latency or pushing this logic deeper into your application code.
Feature gating is where entitlement logic gets enforced in the product. It determines what a customer can access based on their resolved entitlement state.
There is a practical difference between hiding a feature and gating it:
Hiding removes the feature entirely. The system never evaluates access because the feature isn’t exposed.
Gating surfaces the feature and evaluates access at runtime. The customer sees what’s available and what requires an upgrade.
In a well-built system, gating decisions are driven by an entitlements layer, the record of what each customer is allowed to access based on their plan, add-ons, trials, and promotional overrides. Entitlements are what make feature gating measured rather than binary.
From an implementation standpoint, gating has to work across both layers:
Both layers need to resolve against the same source of truth. If they drift, you get inconsistent behavior. For example, the UI shows a feature as available, but the backend rejects the request, or the backend allows access, but the UI blocks it.
Credits are a form of entitlement common in AI and usage-based products. Instead of billing after usage, customers prepay and consume from a balance over time.
A credit system is a stateful resource. Every deduction has to reconcile against a balance, an expiry, and a burn order.
A production-ready credit system needs to handle:
The challenge is making sure every deduction resolves the same way under retries, concurrency, and partial failures. This is where most in-house builds break.
It’s common to start with a counter, then hit reconciliation problems the first time finance asks where a missing credit went or a customer disputes a charge. By that point, you need an append-only ledger with real-time deductions.
Stigg runs that ledger in the entitlements layer, with configurable expiry, category-aware burn order, and per-feature depletion behavior, so these rules don't have to live in application code.
Building entitlement management solutions in-house is more viable than ever, with better tooling allowing AI teams to move faster and making a strong case for owning this layer early on.
The real question should focus on the long-term cost, especially as the system begins to handle pricing changes, edge cases, and enforcement across multiple services, where maintaining consistency and reliability becomes an ongoing effort.
As the product evolves, what started as a few conditionals turns into a system that spans multiple services, products, and pricing models. You start to see patterns like:
At that scale, the system should no longer live in your application, where every change is a deploy.
Webflow ran into this as they scaled pricing and packaging. With Stigg, they shipped localization add-ons, bandwidth add-ons, and usage-based pricing without engineering bottlenecks holding up each packaging change.
This is a good example of how this buys you the ability to run packaging experiments without pulling engineers off the roadmap.
Entitlement definitions live in Stigg's product catalog, so packaging updates happen through configuration instead of code.
A capable entitlement management solution handles in-request-path checks, multi-source resolution, configuration-driven pricing, and credits with expiry and an auditable ledger, all layered on top of your existing billing stack.
The difference between a system that works early and one that holds up at scale comes down to latency, persistent caching, fallback behavior, and clean separation between rules and application code. The questions that matter:
If every check requires a remote call, you either add latency or end up bypassing enforcement under load.
Architecture that scales uses local caching or a sidecar that resolves entitlements without leaving the service, with persistent caching and fallback options for when the upstream is unreachable.
Entitlements rarely come from one place. Base plans, add-ons, trials, and promotions all need to resolve into a single value per feature. If the system only reads from one source, it breaks as soon as you introduce overrides.
If entitlement definitions live in code, every pricing change turns into an engineering task. A working system separates configuration from application logic, usually through a product catalog.
Credits need to support expiry, burn order, and an auditable ledger. Without an append-only ledger, finance and reconciliation break as soon as usage scales.
Entitlements and billing solve different problems. The entitlement system should layer on top of what you already have, whether that's Stripe, Zuora, Chargebee, or something custom.
Stigg is the usage runtime for AI products. Entitlements, credits, usage limits, and spend governance are enforced synchronously in the request path. It integrates across your revenue stack, from billing and CPQ to CRM and data warehouses, so pricing, packaging, and entitlements resolve from the same source regardless of which system is reading them.
If entitlement logic is still embedded in your application, it shows up everywhere. Pricing changes require deploys. New plans touch multiple services, and edge cases pile up in code instead of being handled by a system.
That’s an ownership problem. It’s also when teams start looking at entitlement management solutions.
Stigg handles that layer between your product and billing:
If you’re spending time debugging entitlement mismatches or coordinating pricing changes across services, your infrastructure isn’t doing its job. See how Stigg moves pricing logic out of your codebase.
Entitlement management solutions handle real-time access control by resolving a customer's plan, add-ons, trials, and overrides in the request path. The system returns a single decision per feature that determines whether each request is allowed, throttled, or blocked.
Yes, entitlement management solutions can support multi-product pricing by resolving entitlements across different products, plans, and add-ons. They centralize rules so each product doesn’t need its own logic.
Entitlement management solutions prevent inconsistent behavior by using a single source of truth for the entitlement state. Both backend enforcement and frontend rendering rely on the same resolved data.
No, entitlement management solutions do not replace billing systems; they run alongside billing tools. Entitlement management solutions control access and usage in the product, while billing systems handle invoicing, payments, and revenue reporting.
Engineering teams should stop building entitlement systems in-house when logic starts spreading across services, pricing changes require deploys, and edge cases become harder to manage than the core product.