Industry
Use Case
Favorite Feature
A creative software company develops collaboration and design tools available across Windows, macOS, iOS, Android, and web. Their professional user base works across multiple devices daily—desktop workstations at the office, laptops at home, tablets for client presentations, and browsers for quick edits. Under their original per-device licensing model, users paying separately for each platform created friction and left money on the table, as users would simply abandon high-cost platforms rather than double-pay.
The vendor needed a licensing model that recognizes a user working across five devices as one paying customer, not five separate seats. They wanted to enforce fair concurrent usage limits (prevent one user from being logged in on 10 devices simultaneously) while permitting legitimate multi-device workflows. NetLicensing’s Floating model was the ideal fit: it tracks concurrent active sessions rather than binding licenses to specific devices or platforms.
The original licensing system treated each device as a separate entitlement. A professional user working on a desktop at the office, a laptop at home, an iPad for meetings, and a web app for quick edits was forced to purchase four separate licenses—creating customer friction, support escalations, and churn. The company had no visibility into which devices consumed the most licenses and couldn’t offer team-based floating pools. Without a unified entitlement system, on-device license validation was opaque, and users frequently encountered confusing “license locked” states when applications crashed without properly checking out their session.
Floating License Model — tracks active sessions rather than device bindings. Each user account (Licensee) is assigned a maximum concurrent session limit (e.g., 3 concurrent sessions). When a user launches the app on any device, the client checks out a session. If they exceed their session limit, they are prompted to check in a prior session or upgrade. When the app closes or times out, the session is automatically checked in and freed for reuse on another platform.
Concurrent Session Mechanics:
- User has Floating License with maxSessions=3
- Opens desktop app → session 1 active
- Opens mobile app → session 2 active
- Opens web browser → session 3 active
- Tries to open tablet app → Error: max sessions reached
Choose: (a) close another session, or (b) upgrade to maxSessions=5
Product & Module Setup:
PERSONAL_3SEATS — max 3 concurrent sessions, $9/monthPROFESSIONAL_5SEATS — max 5 concurrent sessions, $19/monthTEAM_10SEATS — max 10 concurrent sessions (team pool), $49/monthKey Parameters:
maxSessions — enforced concurrency cap per templatetimeVolume=1, timeVolumePeriod=MONTH — subscription billing cyclesessionTimeout=30 minutes — automatic check-in after idle/crashASCII Configuration Hierarchy:
Product: DesignStudio
└── Module: Multi-Device Access (Floating)
├── Template: PERSONAL_3SEATS (maxSessions=3)
├── Template: PROFESSIONAL_5SEATS (maxSessions=5)
└── Template: TEAM_10SEATS (maxSessions=10)
Each Licensee (user account) is assigned one of these templates, and all platform clients (desktop, mobile, web) use the same NetLicensing account.
Validation Trigger Points:
GET /licensee/{num}/validate with action=checkout to reserve a session slotaction=checkin immediately releases the slotHigh-Level Flow:
┌─────────────────┐
│ User opens app │
└────────┬────────┘
│
▼
┌────────────────────────────────────────┐
│ POST /licensee/{num}/validate │
│ action=checkout │
└────────┬───────────────────────────────┘
│
┌─────┴──────┐
│ │
▼ ▼
Valid Expired/
│ Limit Exceeded
│ │
▼ ▼
Grant Prompt user to
Access close another session
or upgrade
On app close:
POST /licensee/{num}/validate
action=checkin
The validation response includes a validUntil timestamp and the sessionId of the checked-out session. Client-side code stores this for periodic refresh calls. If the response indicates the session expired, the app gracefully exits and prompts the user to re-authenticate on the next launch.
Each user in the system maps to a single NetLicensing Licensee. The Licensee number is derived from the user’s account ID (e.g., USER_12345). When a user subscribes or upgrades, the backend assigns them a License based on their chosen tier template (PERSONAL_3SEATS, PROFESSIONAL_5SEATS, etc.).
For team licenses (TEAM_10SEATS), a single Licensee is created per team, and all team members authenticate under that shared Licensee account. The team administrator manages seat usage and invites members through the application’s own user management UI; NetLicensing tracks only the aggregate concurrent session count across all team members.
Auto-provisioning is applied: when a user signs up, a Licensee is automatically created and assigned a trial license (e.g., PERSONAL_3SEATS for 30 days). Manual intervention is only needed for enterprise or bulk team licenses negotiated outside the standard shop.
The application embeds a NetLicensing Shop integration for tier upgrades. When a user hits their session limit or their subscription is nearing expiration, the app displays an upgrade button that generates a shop token and opens the NetLicensing Shop in a modal or browser window.
Upgrade Flow:
1. App detects user at maxSessions limit or renewal date approaching
2. App calls POST /shop token endpoint with licenseeNumber
and targetTemplate (e.g., PROFESSIONAL_5SEATS)
3. NetLicensing returns one-time shop URL
4. User completes purchase via Stripe/PayPal
5. Shop redirects to app's success_url
6. App server receives webhook confirming new license
7. Next validation call reflects updated tier
This allows seamless in-app upgrades without forcing users to the vendor’s website.

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