Product ability: Commercial Apps are the commercial operating system for your product. Ask
check/consume/stateinstead of scattering subscription, quota, seat, and trial logic across every endpoint. Payment providers still move money; Commercial owns commercial state.
Continue with Entitlements for check, consume, and state.
Commercial Apps are Cliodot’s commercial operating system for modern software — customers, plans, features, subscriptions, entitlements, usage, seats, licenses, renewals, invoices, and payment orchestration — so your product asks one place for commercial decisions instead of rebuilding billing logic in every service.
Whether you ship SaaS, an API, AI product, CRM, ERP, mobile app, or internal enterprise software, you eventually need subscriptions, feature limits, quotas, trials, upgrades, and renewals. That work is not what makes your product unique — yet teams rebuild it over and over.
Your product asks: can this customer do this?
↓
Commercial App evaluates plan, usage, seats, trial, payment, …
↓
allowed / denied + reason + remaining limitsYour application focuses on business value. Cliodot manages commercial logic.
The problem Commercial solves#
Without a Commercial App, teams invent tables for customers, plans, features, subscriptions, invoices, payments, usage, quotas, trials, seats, and licenses — then every endpoint grows its own commercial checks:
- Has the subscription expired?
- Is this feature on the plan?
- Is quota exhausted?
- Is the trial still active?
- Do they have an available seat?
That logic spreads across services. Pricing changes become risky. Consistency becomes nearly impossible.
The solution#
Centralize every commercial decision. Your backend asks Cliodot; Commercial evaluates subscription, plan, feature availability, usage, quotas, seats, trials, expiration, grace, payment state, and licenses — and returns a single decision your app follows.
Commercial is not a replacement for Stripe, Paystack, or other payment providers. It orchestrates commercial state while capabilities process money.
What the Commercial ability gives you#
| Ability | Meaning |
|---|---|
| Customers | Commercial identity for individuals, orgs, teams, tenants, workspaces |
| Plans | Offerings (Free → Enterprise) with pricing, features, quotas, intervals |
| Features | Product capabilities that can be enabled, disabled, or limited per plan |
| Entitlements | What a customer may use right now — limits, remaining, allow/deny |
| Usage metering | Record consumption (check / consume) and keep remaining allocations current |
| Subscriptions | Lifecycle: pending, trial, active, suspended, cancelled, expired, archived |
| Renewals | Auto-renew, platform or provider renewal modes, period end behavior |
| Seats | Purchased / assigned / available for B2B products |
| Licenses | Issue, validate, revoke license keys |
| Payments | Initiate/confirm via capability payment methods — invoice state stays in Commercial |
| Quotes & discounts | Preview pricing before subscribe / change-plan |
| Analytics | Revenue, MRR, churn, usage, and feature adoption from commercial events |
How a commercial decision works#
- Configure plans, features, and payment methods in the portal (not the runtime SDK).
- Create customers and subscribe them to a plan (charge through the configured capability when amount is due).
- At runtime, call
checkbefore an action andconsumewhen usage should increment. - Read
state/ subscription when you need the full commercial snapshot. - Initiate and confirm payments when charging an existing subscription or invoice; renewals follow
renewal_mode.
const result = await commercial.check({
customer: "acme-corp",
feature: "api_calls",
quantity: 1,
});
if (!result.allowed) {
throw new Error(result.reason);
}Portal vs SDK#
| In the portal | In the SDK (CommercialAppClient) |
|---|---|
| Create Commercial apps | check / consume / state |
| Features, plans, intervals | Catalog reads, customers, subscriptions |
| Capability payment methods + field mappings | subscribe, quote, initiatePayment / confirmPayment |
| Reporting currency / FX | Change-plan, seats, licenses, analytics |
Runtime client lives in the cliodot package. Base path: /commercial. Auth: x-cliodot-app-id + Bearer cak_…, or app secret.
Customer refs accept internal id or customer_key. Plan and feature refs accept id or key.
If an Identity Provider is linked to the Commercial App, present Identity credentials for runtime auth (same pattern as other Cliodot products).