Licensing & Monetization

The commercial engine your SaaS infrastructure needs.
Built into the control plane.

Licenses, Add-ons, Prices, Vouchers. Four primitives that turn your commercial contracts into infrastructure rules. Billing-provider agnostic by design. The only voucher system that can grant a feature flag.

The Problem

Your licensing service is quietly killing you.

At 50 customers, every B2B SaaS has the same conversation: "We need to let the AE grant a temporary Pro access." Then: "+2 extra seats for this deal." Then: "Turn on the beta dashboard for Acme for 6 months." Three tickets, three deploys, three ways to break production.

Hardcoded plans

if (plan === 'enterprise') scattered across your codebase. Every pricing change requires a deploy. Every negotiated contract becomes a code exception.

Coupons that only discount

Stripe Coupons give you -20%. They can't grant 500 extra API calls. They can't turn on a feature flag. So your team writes custom code for every negotiated deal.

Vendor lock-in

Your Stigg or Schematic entitlements are tied to Stripe. Migrating to Lago means rewriting your entire monetization stack. You're paying for lock-in, not flexibility.

The Kaiten Way

Four primitives. One unified model.

Kaiten's licensing model is built into the control plane — not bolted on. Every primitive versioned. Every change audited. Every operation queryable via SDK, API, or agent.

01

License

The Kaiten plan

The commercial contract as code. Types: DEVELOPMENT, TRIAL, PAID, COMMUNITY. Versioned automatically — edit a published License and Kaiten creates a new version, leaving existing customers on the old one. Attaches entitlements (boolean, numeric quota, JSON config) and prices.

license.name = "Pro"
license.version = 3
license.pricing_type = PAID
license.trial_period_days = 14

02

Add-on

Modular extensions

Mirror of License structure. Add-ons attach to a License at subscription time. Own entitlements, own prices. The override_behavior (ADD, OVERRIDE, MAX) decides how an add-on's quotas combine with the base license — e.g. "+5000 API calls" ADDs, "unlimited API calls" OVERRIDEs.

addon.name = "Extra Seats"
addon.compatible_licenses = [Pro, Enterprise]
addon.max_quantity = 100
entitlement.override_behavior = ADD

03

Price

6 billing models

Native Kaiten pricing: flat fee, usage-based, pay-in-advance, overage, tiered, graduated. Each Price can link to a provider price via billing_provider_id + external_id, or be declared natively. One License can have multiple Prices (monthly + annual).

price.billing_model = OVERAGE
price.included_units = 10_000
price.billing_period = MONTHLY
price.external_id = "price_xxx" (Stripe)
Unique to Kaiten

04

Voucher

Beyond coupons

Four types: PRICE (discount), ENTITLEMENT_BOOST (modify quotas), FLAG_GRANT (activate feature flag), COMPOSITE (combine all three). No competitor can grant a feature flag via a voucher code. Your Sales team negotiates entire deal packages in one instrument.

voucher.type = COMPOSITE
voucher.price_discount = 30%
voucher.entitlement_boost = { api_calls: x2 }
voucher.flag_grants = [white_label]
Voucher Types

The commercial instrument your Sales team always needed.

A Voucher in Kaiten can act on three dimensions simultaneously: price, entitlement limits, and feature flag access. One code replaces three tickets.

PRICE

Classic discount

Percentage or fixed amount off the price. Duration: one-time, repeating for N periods, or forever. Links to a provider coupon (stripe_coupon_id) or is declared natively.

Example

code: "WELCOME20"
discount: -20% FOREVER
ENTITLEMENT_BOOST

Modify quotas

Multiply, add, set, or unlimit an entitlement value for a duration. Perfect for onboarding: give 2x quotas for the first 3 months to reduce activation friction.

Example

code: "SUMMER_BOOST"
api_calls: MULTIPLY x2
duration: 3 months
FLAG_GRANT

Feature flag activation

Unique to Kaiten. Temporarily turn on a feature flag for a customer — without reassigning them to a different plan. Ideal for beta access, Sales-negotiated early access, or support overrides.

Example

code: "BETA_DASH"
flag: new_dashboard = true
expires: 2026-12-31
COMPOSITE

Big deal combo

Combine the three. For enterprise negotiations: "-30% + quotas ×2 + white-label flag on for 12 months." One voucher code, full audit trail, clean lifecycle.

Example

code: "ACME_2026"
discount: -30% 12mo
quotas: x2
flag: white_label
Billing Adapter

Stripe, Lago, Chargebee. Or your own.

Kaiten doesn't replace your billing engine. It wraps it. The BillingAdapter Go interface speaks any provider — with a single canonical event model.

Handlers are provider-agnostic. A webhook from Stripe or Lago both become a NormalizedBillingEvent. Switching providers is a config change, not a code migration.

✓ Stripe (live H1) · Lago (live H1) · Chargebee (H2) · Recurly (H2) · Custom (SDK)

Your commercial team

Kaiten Licensing Model

Licenses · Add-ons · Prices · Vouchers

BillingAdapter interface
Stripe
Lago
Chargebee
Custom
@kaiten/react SDK

Ship your monetization UX in hours, not weeks.

Drop-in React components that know your Licenses, Add-ons, and Vouchers. Unlike Stigg or Schematic, our components know entitlements AND feature flags — combined in real time.

Stripe-like SDK for SaaS monetization.

Install once, render pre-styled or headless components. The SDK pulls licenses, addons, and prices directly from your Kaiten control plane — no duplicated config, no drift.

Your pricing page is always in sync with your license definitions. Changes in the Console propagate to the SDK via a signed token refresh, with a 15-minute TTL.

✓ React · Vue (H2) · Svelte (H2) · Angular (H3)

@kaiten/react
import { KaitenProvider, PricingTable, Paywall }
  from "@kaiten/react";

// 1. Wrap your app
<KaitenProvider
  publishableKey={process.env.KAITEN_PUBLISHABLE}
  accessToken={userSession.kaitenToken}
>

// 2. Drop in components
<PricingTable
  licenses={["standard", "pro", "enterprise"]}
  showAddons={true}
  allowVoucherCode={true}
/>

// 3. Gate features — knows entitlements
//    AND feature flags in one check
<Paywall
  entitlement="api-calls"
  flag="premium-support"
  fallback={<UpgradeCTA />}
>
  <YourPremiumComponent />
</Paywall>
Domain Events

Every change. Fully audited. Stream-ready.

The licensing model ships with 18 new domain events on top of Kaiten's existing 27. Every create, update, archival, redemption, and expiration is captured via the transactional outbox pattern and streamed through Debezium → RabbitMQ → Svix webhooks.

Event nameDescriptionType
LICENSE_PRICE_CREATIONNew price attached to a licensecreate
ADDON_CREATIONNew add-on publishedcreate
ADDON_ENTITLEMENT_ASSIGNMENTEntitlement attached to add-on with override behaviorassign
VOUCHER_CREATIONNew voucher code createdcreate
VOUCHER_REDEMPTIONVoucher redeemed against an instanceredeem
VOUCHER_EXPIRATIONVoucher reached expiry date or max redemptionslifecycle
INSTANCE_ADDON_ADDEDAdd-on attached to an instance (with quantity)subscribe
INSTANCE_VOUCHER_REDEEMEDVoucher applied to an instance's subscriptionredeem
PROMOTIONAL_GRANT_CREATEDDirect entitlement/flag grant without voucher codegrant
BILLING_PROVIDER_SYNCEDLicense/price/voucher synced to external providersync

Plus 8 more events for updates, archivals, revocations, and billing sync lifecycle. See the full API reference.

Stop hardcoding plans.
Start enforcing contracts.

The licensing model is included in every Kaiten tier — from Community (free) to Enterprise. No paywalls on the primitives that make your SaaS commercial.