--- name: autumn-concepts description: Understanding Autumn's billing objects before acting on them — what a plan version is and what active means, when a trial starts or ends billing, how entity- and seat-scoped subscriptions differ from the customer's own, what a customize diff actually changes, and how caps, overage, and top-ups behave. Load before versioning, editing, or drafting a plan, or when a customer's state does not match the plain reading of their plan. --- # Concepts Autumn is a database for your application billing state: features, plans, customers, subscriptions, purchases, balances, flags, and billing controls. It helps you iterate on pricing, manage credit access and usage, control overage, and keep billing behavior connected to product access. Autumn is a layer above Stripe; Stripe still handles subscription management, invoicing, and payment processing. Autumn provisions and updates Stripe subscriptions, schedules, invoices, and related billing objects for you. ## Object graph ```txt Organization - features[] -> Feature - plans[] -> Plan - customers[] -> Customer Configuration model: Feature - referenced by -> Plan Item - credit_system type: maps actions to credit costs (flat or tiered) Plan - items[] -> Plan Item - feature_id -> Feature - optional price -> usage_based or prepaid feature price - price -> base recurring or one-off price - versions[] -> parallel definitions of this plan; ONE is active - variants[] -> Plan (a derived plan storing only its differences) - licenses[] -> Plan (a seat plan this plan hands out per seat) - aliases -> old plan ids that still resolve after a rename Plan Item - feature_id -> Feature - optional price -> usage_based or prepaid feature price - pooled? -> entity grants combine into one shared customer balance Runtime model: Customer - subscriptions[] -> Subscription -> Plan (a specific version of it) - purchases[] -> Purchase -> Plan - balances[feature_id] -> Balance -> Feature - pooled balance: fed by entity grants, spent by any entity - rollover, expiry, usage windows live here - licenses[] -> CustomerLicense -> seats granted / in use / remaining - flags[feature_id] -> Flag -> Feature - billing_controls -> customer-level usage controls - entities[] -> Entity -> same runtime shape scoped under Customer Entity - belongs to -> Customer - subscriptions[] -> Subscription -> Plan - purchases[] -> Purchase -> Plan - balances[feature_id] -> Balance -> Feature - flags[feature_id] -> Flag -> Feature - license assignment -> holds one seat from the customer's pool From config to customer state: Plan + Customer --billing.attach--> Subscription or Purchase Plan + Customer + entity_id --billing.attach--> Entity-scoped Subscription or Purchase Parent plan's licenses --licenses.attach--> seat assigned to an Entity Subscription/Purchase -> Balance or Flag provisioning ``` Two relationships changed recently — worth stating plainly because older docs describe the old way: **Versions are groups of customers, not history.** A plan's versions used to be numbered steps in time, and the newest was always live. Now each version is a definition that some group of customers lives on, and exactly one is **active** — the one attach uses when no version is named. Which changes are edits and which are new versions, drafts, and how customers move: the plan definition below. **Plans connect to other plans.** A plan can have variants (an annual twin storing only its differences), and it can offer licenses (a small seat plan it hands out per seat). So plans form a graph, not a flat list. Use these definitions as the mental model when designing or changing Autumn pricing. Reason in terms of features, plans, plan items, customers/entities, and billing controls before writing any config or calling the API — most modeling mistakes come from conflating a feature with a plan item, or a plan-level price with a per-feature price. ## Definitions Load the matching definition when reasoning about that object. For defining a feature — the atomic unit Autumn gates, tracks, or bills, and its types, read `references/feature.md`. For defining a plan — the attachable package of items and pricing, read `references/plan.md`. For modeling plan items, or when you need concrete API request-body examples (included usage, prepaid, usage-based, tiers), read `references/plan-items.md`. For using customize, reading plan update previews, or representing a small diff from a base plan, read `references/customize.md`. For reasoning about free trials and when billing begins, read `references/trials.md`. For distinguishing a customer from an entity (seats, sub-accounts) and their runtime billing state, read `references/customer-entity.md`. For reasoning about billing controls — runtime caps, alerts, overage, and top-ups, read `references/billing-controls.md`. For reasoning about licenses — seat plans a parent plan hands out, seat pools, assigning and releasing seats, read `references/licenses.md`.