%20(1).png)
Enterprise Pricing Strategy: Building One for AI Products
Learn how to build an enterprise pricing strategy for AI products with configurable contracts, usage limits, entitlements, and organization-level pricing.
An EMS decides what every customer is allowed to do at runtime. Here's how it works, how it differs from RBAC, and when to stop building it yourself.
.png)
An agent loops on a customer's account overnight. 15,000 LLM calls go out before the on-call rotation sees the alert, and the overage hits the next invoice. Every fast-growing AI company eventually has to answer the same post-mortem question: where in the request path did the decision to allow that next call live, and why didn't it stop?
Plan checks. Credit balances. Token quotas. The decision has to land in the request path, before the next billable action runs, on every request the application serves. An entitlement management system (EMS) is the runtime infrastructure that handles this at scale.
An entitlement management system defines, administers, and enforces what each customer can do inside your product. Entitlements are commercial allowances pulled from several sources: the active plan, any parent plan it inherits from, add-ons that increment or override plan limits, active trials, and promotional grants.
A customer's effective entitlements pull from all those sources, and the most generous value wins. For example, a promotional credit grant stacks on top of a plan allocation, and the larger of the two applies.
Billing captures the purchase decision. The EMS enforces what that purchase actually allows inside the product. A modern EMS works alongside the billing stack (Stripe, Zuora, Chargebee) instead of replacing it. For instance, Stripe handles payments, and Stigg handles what's allowed.
AI products raise the stakes. The application checks credit balances before the LLM call goes out, and the EMS aggregates token usage events as they come in.
A runaway agent session stops at the decision point. The overage never reaches the invoice. Enforcement runs synchronously, in the request path, and resolves immediately from the local cache.
An EMS checks entitlement rules every time a user, agent, or team tries to access a feature. The system returns a structured response with access status, current usage, the limit, and the denial reason if access is blocked.
The response uses the customer's plan, their usage against defined limits, and any credit balances they hold. In a modern EMS, these rules live in a centralized product catalog, where product teams update packaging without engineering involvement.
Five core components make up an EMS: a product catalog, metering, provisioning, feature gating, and enforcement.
This is the foundation everything else builds on. It defines your plans, features, add-ons, and pricing tiers. Every entitlement rule in the system traces back to it.
Without a centralized catalog, entitlement logic ends up hardcoded across services, duplicated in feature flag configs, and inconsistently applied between your web app, API, and mobile clients. Every pricing change becomes a multi-team coordination exercise instead of a catalog update.
Metering tracks consumption in real time and compares it against entitlement limits on every request. The EMS enforces the moment a customer crosses a threshold.
When the pricing model carries real marginal costs like AI tokens or compute time, delayed counting and synchronous enforcement are not interchangeable. Best-effort or delayed counting shows up as surprise blocks, inconsistent balances, and incorrect charges. A single agent looping on a customer's account can generate a 5-figure overage in an afternoon, before anyone in your on-call rotation sees the alert.
With synchronous enforcement, you can control usage accurately at scale. The check runs in the request path, the decision happens before the request goes out, and the overage never reaches the invoice.
When a customer upgrades, downgrades, or receives a promotional grant, that change needs to land everywhere your product checks entitlements: web app, API, mobile clients, and background workers.
Provisioning resolves from a cache close to the application, without adding latency to every request. There has to be a clear fallback if the upstream is unreachable.
Feature gating controls what users see inside your product based on their current entitlements. The implementation decision here has real product consequences. If you gate by hiding features entirely, you remove the upgrade signal from the user experience.
Locking features instead of hiding them helps users understand what their plan includes and what it does not. That choice is usually a product decision, but the infrastructure needs to support it either way, and run those checks at ultra-low latency.
At scale, those checks need to resolve in single-digit milliseconds on cache hit so the gate never adds perceptible latency to the request. For example, Stigg's P95 entitlement-check latency is under 100ms, with cache-hit reads served from a local Sidecar cache (in-memory or Redis). For the customer, these checks feel like they’re not happening.
Enforcement is where policy meets runtime. The EMS gives you three mechanisms to work with:
The architectural question worth thinking through is whether enforcement logic lives in your application code or in a dedicated layer. When enforcement is hardcoded in application code, every packaging change requires a deployment. When it sits in a dedicated layer, packaging ships through configuration without code, and engineering stays out of it.
| EMS component | Stigg’s answer |
|---|---|
| 1. Product catalog | A single source of truth for features, plans, add-ons, and prices. Features are typed and attached to plans via entitlements that define access limits, updated without engineering involvement. |
| 2. Metering | Usage enters as calculated totals or raw events that Stigg aggregates. Both paths evaluate against entitlements in near real-time and are idempotency-protected. |
| 3. Provisioning | The Sidecar runs as a Docker image alongside your application, caching entitlement data locally or in Redis, so access decisions resolve from local cache even if the Stigg API is unreachable. On a cache hit, reads are immediate. On a cache miss, the Sidecar fetches from Stigg's API, with a configurable timeout. |
| 4. Feature gating | Entitlement checks return a structured response with access status, denial reason, and usage data, so product teams can render paywalls or upgrade prompts without touching gating logic. |
| 5. Enforcement | Credits sit in blocks with their own expiry dates, cost basis, categories (paid vs. promotional), and a configurable burn priority. Hard limits deny access at threshold; soft limits allow overage with every event logged in an append-only ledger. Promotional entitlements adjust any customer's limits independently of their plan. |
Role-Based Access Control (RBAC) assigns permissions based on a user's role, and it's a Boolean system by design. You either have access, or you don't. That works well for internal permissions, but it was never built to handle the commercial layer of your product.
An EMS solves a different problem. Instead of asking "what role does this user have?", it asks "what did this customer pay for, and how much of it have they used?" RBAC has no way to express:
An EMS can model these limits and enforce them in real time. The two systems serve different purposes, and most products need both. RBAC manages internal access control, while the EMS handles plans, usage limits, and commercial entitlements.
An EMS controls what customers can access inside your product, while billing systems like Stripe or Zuora handle payment processing, invoice generation, and tax compliance. The two systems cover different ground:
| | EMS | Billing system |
|---|---|---|
| Primary question | What is this customer allowed to do? | Did this customer pay? |
| Handles | Feature access, usage limits, credit balances | Invoices, tax, payment processing |
| When it runs | Every time a customer accesses a feature | After the purchase decision |
| Changes required | Updating the product catalog | Engineering work on billing logic |
Separating these responsibilities is what lets you change pricing rules without touching billing infrastructure, and vice versa.
Most engineering teams start by building feature gating in-house. A few database tables, some feature flags, and a middleware layer. For a single-product company with a handful of plans and packaging that changes once a year, that's the right answer. A few tables and a middleware layer will hold for years.
At scale, you're dealing with:
The system that took a week to build now needs a dedicated team to maintain. A new pricing model means months of engineering work, and migrating to a new model can run even longer.
AI features push the system past its limits. AI carries real marginal costs tied to LLM tokens or compute time. The EMS has to meter consumption synchronously and enforce credit limits before the model call goes out, not after.
The main difference between a modern and legacy EMS is what they were built for. Legacy entitlement management tools (Thales EMS and similar) were designed for on-premises software licensing, with license key management and software distribution as their core use case.
AI products and modern SaaS require a different architecture entirely:
| | Legacy EMS | Modern EMS |
|---|---|---|
| Built for | On-premises software licensing | AI products and cloud-native SaaS |
| Core use case | License keys and software distribution | Real-time entitlements, credits, and usage enforcement |
| Pricing model support | Fixed licensing | Credits, usage-based, hybrid, and flat-rate in parallel |
| Selling motion | Single motion | Self-service, sales-led, and enterprise from one catalog |
| Provisioning | Manual | Real time |
| Tenancy | Per-license | Per-user, per-team, per-agent, per-product |
| Deployment | On-premises install | SaaS or self-hosted in your cloud (BYOC) |
Legacy tools were built for a world where pricing changed once a year and someone manually provisioned access. AI products iterate in weeks.
Pricing models shift, usage limits change, and new selling motions get layered on top of existing ones. The infrastructure underneath has to keep pace without engineering work on every change.
Building in-house is more viable than ever. Claude Code, Cursor, and Copilot have lowered the cost of shipping infrastructure that used to take a small team a year. AI companies in particular favor building because they know how.
The bar for buying has gone up: the case has to be so obvious that not buying feels irrational. A dedicated EMS clears that bar when the cost of getting entitlements wrong exceeds the cost of integration.
A dedicated entitlement management system typically:
Stigg is built for this layer. The product catalog is centralized, credits and usage entitlements are first-class primitives, and synchronous enforcement runs through a Sidecar deployed in your cloud. Integrations span billing, CPQ, CRM, and data warehouses.
If entitlements are eating away at engineering capacity, the architecture isn't scaling with the business. Explore how Stigg works.
Yes, an EMS can run without a billing integration. Many teams use an EMS purely for entitlement enforcement, provisioning, and feature gating while keeping their billing system completely separate. The two systems solve different problems and don't require direct integration to function.
An EMS handles free trials by defining a trial plan in the product catalog with its own entitlement rules, then automatically revoking or downgrading access when the trial period ends. This happens through the same provisioning layer that handles paid plan changes, with no manual intervention required.
Because an EMS sits between your product and your billing system, a billing migration doesn't have to disrupt entitlement enforcement. The product catalog, the enforcement layer, and the in-app experiences (portals, paywalls, upgrade flows) keep running while billing changes underneath. The EMS becomes the stable surface; billing is the swappable component.
A modern EMS supports flat-rate, usage-based, credit, and hybrid pricing models from a single product catalog. With Stigg, these can run in parallel: a self-serve free tier on credits, a hybrid plan combining seats with metered usage, and an enterprise contract on a custom commit, all driven by the same catalog.
A company should start evaluating a dedicated EMS when pricing changes consistently require engineering work, when the product supports more than two or three distinct pricing tiers, or when you introduce usage-based features that require real-time metering and enforcement. Waiting until the system breaks means rebuilding under pressure.