Industry
Use Case
Favorite Feature
An e-learning platform offers professional certifications, technical bootcamps, and corporate training programs serving three distinct customer segments: individual learners, corporate HR departments, and educational institutions. The platform hosts hundreds of courses covering software development, data science, business skills, and compliance training, with some courses gated behind prerequisites and advanced certification tracks requiring foundational course completion.
The platform’s business model reflects its diverse customer base: individual learners pay per-course or subscribe monthly for catalog access; corporate clients purchase bulk licenses for employee cohorts with defined training windows; universities and colleges license campus-wide access covering thousands of students with semester-based renewals. Each segment has fundamentally different access patterns and administration needs, but the platform’s legacy entitlement system treated all as identical.
NetLicensing was implemented as the unified entitlement layer, allowing the platform to support four distinct licensing models (Feature, Subscription, Multi-Feature, Time-Volume) across a single codebase, eliminate manual license provisioning, and enforce prerequisite chains automatically.
The legacy system had no concept of different access models. All courses were purchased or subscribed to individually; there was no way to distinguish between “lifetime access to one course” and “full catalog access for 30 days.” This created several operational problems:
Manual Institutional Licensing: When a university wanted to provide access to 500 students, the platform’s operations team had to manually create 500 user accounts (or establish an LDAP sync), then manually enable courses per student or cohort. Semester changes required another round of manual provisioning.
No Cohort Management: Corporate clients enrolling 50 employees in a 12-week training program had no way to enforce a cohort-specific access window. Employees who joined late (week 3) still accessed week 1 materials; others accessed course content weeks after the program ended, preventing cohort-based discussions and community building.
No Prerequisite Enforcement: Learners could enroll in advanced courses without completing prerequisites. A learner could start “Advanced Data Science” without having completed “Data Science Fundamentals,” leading to confusion and high dropout rates.
Support Overhead: Institutional administrators had no self-service way to manage licenses. Every user addition, removal, or access change required contacting the vendor’s support team, creating a bottleneck that delayed semester launches and course updates.
Four NetLicensing models were deployed to serve the four access patterns:
Product and Module Structure:
Product: E-Learning Platform
├── Module: Individual Access (Feature + Subscription models)
│ ├── Template: Single Course Purchase (feature, perpetual)
│ └── Template: Monthly Subscription (subscription, timeVolume=1, timeVolumePeriod=MONTH)
├── Module: Institutional Licensing (Multi-Feature model)
│ ├── Template: University 100 Seats (quantity=100, timeVolume=12, timeVolumePeriod=MONTH)
│ ├── Template: University 500 Seats (quantity=500, timeVolume=12, timeVolumePeriod=MONTH)
│ └── Template: K12 District (quantity=2000, timeVolume=12, timeVolumePeriod=MONTH)
└── Module: Corporate Training (Time-Volume model)
└── Template: Cohort Training Program (quantity=1, timeVolume=12, timeVolumePeriod=WEEK)
Configuration Steps:
timeVolume=1, timeVolumePeriod=MONTH and automatic renewalquantity (e.g., 500 for a large university)validFrom and validUntil dates matching the training program calendarKey Parameters:
quantity — seat count for institutional and corporate cohort licensestimeVolume=1, timeVolumePeriod=MONTH for subscription auto-renewalvalidFrom and validUntil for cohort training programs to enforce access windowsIndividual Learner Purchases Course:
Learner clicks "Enroll in Python 101"
↓ Platform checks: does user have a Feature license for "Python 101"?
↓ No → show payment UI or subscription options
↓ Learner purchases one-time → POST /license {featurePython101}
↓ License created with perpetual validity
↓ User immediately sees Python 101 in their course list
↓ Can access for life (or until they delete account)
Subscriber Accesses Catalog:
Learner signs up for monthly subscription
↓ Platform: POST /licensee + POST /license {subscriptionMonthly}
↓ License created with validFrom=today, validUntil=today+30days, auto_renew=true
↓ Next month, license auto-renews (if payment succeeds)
↓ Learner sees all courses available during active subscription
↓ If payment fails, license expires → platform blocks access to all paid courses
University Enrolls Cohort:
University IT admin logs into Admin Portal
↓ Portal: "Your Institution" → "Manage Seats" → "Enroll New Cohort"
↓ Admin uploads CSV of 50 student emails
↓ Backend: for each email, POST /licensee {studentEmail, parent=university-licensee}
↓ NetLicensing creates 50 sub-licensees under the institution's parent licensee
↓ All 50 inherit the institution's Multi-Feature license (500 seats total)
↓ 50 students immediately see full course catalog
↓ Semester ends → admin runs "Deactivate Cohort" button
↓ Backend sets all 50 sub-licensees to active=false
↓ Students lose access automatically; no manual deletion needed
Corporate Cohort with Access Window:
Company enrolls 50 employees in 12-week "Leadership 201" program
↓ Platform: POST /licensee {parent=company-licensee}
↓ For each of 50 employees, POST /license {timeVolume=12, timeVolumePeriod=WEEK}
↓ All 50 licenses have identical: validFrom=2026-04-21, validUntil=2026-07-07
↓ Employees cannot access content before 2026-04-21
↓ After 2026-07-07, content is locked → see "Program Ended" message
↓ This creates a synchronized cohort experience; all learn together
Prerequisite Enforcement:
Learner attempts to enroll in "Advanced Data Science"
↓ Platform checks: GET /licensee/{id}/validate
↓ Response includes: licenseDataScienceFundamentals.completed=true/false
↓ If completed=false: show "You must complete Data Science Fundamentals first"
↓ If completed=true: grant access to Advanced course
Individual Learners: Each learner is a separate Licensee:
POST /licensee
{
"licenseeNumber": "user-john-smith-12345",
"productNumber": "elearning-platform",
"active": true
}
When they purchase a course or subscribe, licenses are assigned to this licensee. When they log in, the app validates licenseeNumber to determine which courses they can access.
Institutional Clients (Universities): The institution is a parent Licensee with quantity-based Multi-Feature license:
POST /licensee
{
"licenseeNumber": "harvard-university",
"productNumber": "elearning-platform",
"active": true
}
POST /license
{
"licenseeNumber": "harvard-university",
"licenseTemplateNumber": "university-1000-seats",
"quantity": 1000
}
Each enrolled student is a sub-licensee:
POST /licensee
{
"licenseeNumber": "harvard-student-jane-doe-2026",
"parentNumber": "harvard-university",
"productNumber": "elearning-platform"
}
The sub-licensee inherits the parent’s Multi-Feature license, so they can access all 1000 seats’ worth of resources. No individual license is assigned to each student; they share the institutional pool.
Corporate Training (Cohorts): Similar parent-child structure: the company is the parent, and each employee in a cohort is a sub-licensee with a Time-Volume license tied to the cohort’s dates.
The platform operates a self-service shop for individual learners and institutional administrators.
Individual Shop Flow:
Learner browses catalog → clicks "Enroll" for Python 101 (not yet purchased)
↓ Platform generates shop token: POST /token {licenseeNumber}
↓ Embeds shop iframe with available course licenses
↓ Learner selects "Python 101 Lifetime Access ($49)" → proceeds to Stripe payment
↓ Payment succeeds → NetLicensing webhook creates Feature license
↓ Frontend listens for webhook → reloads course catalog
↓ Python 101 now shows "Enrolled" instead of "Enroll" button
Institutional Shop Flow:
University admin logs in → clicks "Renew Campus License"
↓ Portal shows: "Current license: 500 seats, expires 2026-05-31"
↓ Admin clicks "Renew for next academic year" → shop modal opens
↓ Shows new Multi-Feature template: "1000 seats, academic year 2026–2027"
↓ Admin reviews and clicks "Purchase" → Stripe payment → webhook creates license
↓ New license activates on 2026-08-01; old license expires 2026-07-31
↓ No gap in access; seamless transition at semester boundary

Physical Security: Feature-Based Access Control with Time-Limited Permissions
A building management company implemented feature-based access control with time-limited permissions to manage resource gating and dynamic authorization across facilities.

AI/ML Platform: Token-Based Monetization with Inference Metering
Control API usage with Pay-per-Use or subscription models — charge per inference call, token consumed, or agent outcome