This document explains how licenses and subscriptions work when a bundle product is purchased and renewed.
What Happens on Purchase #
When a customer completes a purchase of a bundle product, the order processor:
- Creates a parent license for the bundle product itself. The parent license is not directly activated — it acts as the container and renewal anchor for the child licenses.
- Creates one child license per bundled product. Each child license:
- Uses that child product’s own License Type, Activation Limit, and Duration settings
- Is linked to the parent license internally
- Has its own unique license key that the customer can activate independently
- Creates one subscription, linked to the parent license. No individual subscriptions are created for child licenses.
- Fires extension hooks for each child license (e.g., Team Management seat setup runs automatically per child, using the child product’s own seat tier configuration).
Child License Settings #
Each child license inherits its settings from the child product’s own configuration — not from the bundle product:
| Setting | Source |
|---|---|
| License Type | Child product’s Licensing tab |
| Activation Limit | Child product’s Licensing tab |
| License Duration | Child product’s Licensing tab |
| Download access | Child product’s support/download settings |
This means each bundled product behaves exactly as it would if purchased individually, except that its renewal lifecycle is governed by the bundle subscription.
Subscription Behavior #
- One subscription per bundle — regardless of how many products are inside the bundle.
- The subscription is priced at the bundle’s WooCommerce product price.
- Billing period and interval are set on the bundle product’s Subscription Settings.
- Child licenses do not have individual subscriptions.
Renewal Behavior #
When the bundle subscription renewal payment succeeds:
- The parent license is renewed (expiration extended by the billing period).
- All non-cancelled child licenses are extended by the same billing period, in a single atomic transaction.
- If a child license was still active, its expiration is extended from its current expiration date.
- If a child license was already expired, it is extended from the renewal date.
- A single consolidated renewal email is sent to the customer, listing all renewed products with their new expiry dates.
Renewal is all-or-nothing: If any child license update fails (e.g., a database error), the entire renewal is rolled back. No licenses are partially extended. The subscription’s retry/dunning flow will attempt renewal again on the next cycle.
Cancelled Child Licenses #
If an admin manually cancels a child license (for example, to revoke access to one product within the bundle):
- That child license is excluded from future renewals.
- The remaining child licenses renew normally.
- To reinstate a cancelled child, an admin must manually reactivate it before the next renewal cycle.
Renewal Email #
The bundle renewal sends a single consolidated email to the customer. It lists all child products that were extended with their new expiration dates. Individual per-product renewal emails are not sent for bundle renewals.
