Example
A team plan costs $30/seat/month. Each seat gets 50 AI meeting summaries per month. If a team has 5 users, each user has their own balance of 50 summaries — they can’t use each other’s allocation.
Two ways to provision
Both approaches end in the same place: an entity holding a plan. They differ in where capacity comes from.
Different tiers per entity work in both modes — attach different plans to different entities, or offer more than one license plan under the same parent.
Entities are created with a
feature_id identifying their type (e.g. a non-consumable seats or workspaces feature). If you only need to count seats and bill for them, with no per-seat balances or identity, you don’t need entities at all — see per-seat pricing.Attaching plans directly
Create your plans as normal — no entity-specific configuration on the plan itself. Put plans that should replace each other on upgrade/downgrade in the samegroup.
- CLI
- Dashboard
autumn.config.ts
atmn push.Create the entity
Attach a plan to it
PassentityId to scope the attach to that entity:
entityId — the usual upgrade/downgrade logic applies.
Cancel an entity’s plan
Licenses
A license plan describes everything one entity gets. The parent plan offers a pool of them, and you assign one to an entity to hand it its own balance.granted size (included seats plus any paid seats), a usage count (seats currently assigned), and a remaining count. Assigning consumes a seat; releasing gives it back.
- CLI
- Dashboard
Create the feature each seat consumes, then a license plan holding what one seat gets. Link it from the parent plan via
licenses:autumn.config.ts
included: 1 means the Team plan comes with one free seat. Seats beyond that are paid at the license plan’s own price.Push changes with atmn push.Give the license plan its own
group. Attaching a plan replaces other plans in the same group, so a license plan sharing a group with its parent would knock the parent off.Buy seats
Seats are bought on the parent plan.quantity is the total number of seats, including the plan’s free included amount:
quantity: 5, the customer gets 5 seats and pays for 4. Attach again with a new quantity to change the count later — Autumn prorates the difference.
A priced license plan must be attached at the customer level before it can be assigned to entities. Buying seats with
licenseQuantities does this for you.Assign a license
Assigning is what provisions the entity’s individual balance — creating an entity on its own does not:feature_id is the entity type and is required only when the entity doesn’t exist yet — Autumn creates it for you. You can pass several entities in one call.
Assignment is idempotent. Re-assigning an entity that already holds an active license for the same plan succeeds without consuming another seat. If the pool has no seats left, the call errors — buy more seats first.
Release a license
The entity’s balance is removed and the seat returns to the pool, ready to reassign:quantity.
license_plan_id is optional, and only needed to disambiguate when an entity holds licenses from more than one plan.
Inspect seats
licenses.list returns each pool with its granted, usage, and remaining counts. licenses.list_assignments returns which entities currently hold one.
cURL
Checking and tracking per entity
Regardless of how the entity got its plan, passentity_id to check and track to operate on that entity’s balance:
Customer-level vs entity-level
When tracking at the customer level (without
entity_id), usage is deducted from the first-assigned entity to keep entity-level totals in sync with the customer-level total.