Skip to main content

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 /join page
  • auto_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 as add_invoice_items at 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:

  1. Invitation by the admin (mail with a registration token)
  2. Self-service via /join (landing page section or direct link)
  3. 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.