Packages
[pakete] [admin] [billing]
License packages are the core. They define price, term, feature scope and product selection per customer.
Who it is for
Admins (providers) who want to sell licenses to their customers on different terms.
Package types
Base package (package_type='base')
Main license. Exactly one base package per customer. Determines the base price + term.
Add-on package (package_type='addon')
Add-on module that can extend several base packages. E.g. "Premium support" or "Extended print profiles". A customer can have several add-ons at the same time.
Step by step: creating a package
1. Open the overview
Settings → Packages.
2. + Package
- Name (required)
- Description (optional, visible in the pricing section)
- Package type: base or add-on
- Status: active / inactive
3. Prices
- Monthly fee (
monthly_fee, net) - Setup fee (
setup_fee, one-off at contract start) - Recurring (
is_recurring, true/false): if false, one-off - Minimum term in months (
min_contract_months, default 1) - Cancellation notice in months (
cancellation_notice_months, default 1)
4. Billing intervals (for self-service packages)
"Intervals" tab: besides monthly you can define prepayment intervals from 2 to 120 months (e.g. quarterly, semi-annual, annual, 2 or 3 years). Each interval gets an optional discount — as a percentage or a flat amount.
5. Self-service
self_service: customers can register themselves via the/joinpageauto_activate: activate immediately on self-service registration (instead of manual activation)show_in_join_preview: show the package on the landing page preview cards
6. Restrictions
"Restrictions" tab → see Package restrictions.
7. Save
Save triggers the Stripe sync: licensio automatically creates Stripe product + price objects (in the provider's connected account). Stripe IDs are stored in license_packages.stripe_*.
Contract terms
Example configuration — a package the provider named "Basic" (a self-chosen package name you give your own customers, not a licensio plan), with a 12-month minimum term and 1 month cancellation notice:
- Customer starts on Jan 1 → cancellable at the earliest for Dec 31 with a cancellation by Nov 30 at the latest.
In the customer detail you see:
- Contract start (
contract_start_at) - Minimum term in months
- Cancellable at the earliest for
- Cancellation status (open / cancelled for X)
Stripe integration
Per package save the following is created in Stripe:
- Product (
stripe_product_id): represents the package - Price (
stripe_price_id): recurring subscription price - Setup price (
stripe_setup_price_id, optional): one-off setup fee asadd_invoice_itemsat subscription start
Stripe Tax calculated automatically:
- DE → DE: 19 % VAT
- DE → EU with VAT ID: reverse charge 0 %
- DE → EU without VAT ID: local rate
- DE → non-EU: 0 %
Frequently asked questions
Can I change prices afterwards? Stripe creates a new price in the product for price changes. Existing customers stay on the old price (grandfathering), new customers get the new one. If you want to migrate existing customers → Stripe subscription update.
How does the customer get to the package? Three ways:
- Invitation by the admin (mail with a registration token)
- Self-service via
/join(landing page section or direct link) - Manual assignment in the customer detail (e.g. package change)
What if the Stripe sync fails?
The package is saved in licensio, but stripe_product_id stays empty. In the UI you see a warning indicator. Saving again triggers a re-sync.
Add-ons at checkout?
In the customer detail you can assign add-ons (customer_packages table). They are billed as additional subscription items in Stripe.
Related
- Package restrictions: whitelist/blacklist + limits
- Invoicing: Stripe Connect setup
- Customers: package assignment per customer