Industry
Use Case
Favorite Feature
A consumer electronics manufacturer had successfully launched a portfolio of connected products spanning smart speakers, security cameras, fitness wearables, and connected kitchen appliances. Individual product lines drove strong hardware sales, but each operated in isolation with its own mobile app, cloud backend, and feature management system. The company struggled to monetize premium features (cloud video recording, AI analytics, cross-device automation, priority support) and lacked a business model for ecosystem-wide subscriptions that would reward customers for owning multiple product types.
Customers who owned, for example, both a smart speaker and a security camera system had to manage separate subscription accounts, inconsistent billing cycles, and no discount for loyalty. The technical infrastructure—with entitlements hardcoded in firmware or locked in product-specific backends—made it impossible to launch promotional campaigns or adjust pricing without pushing firmware updates to millions of devices.
The manufacturer needed a unified, cloud-based entitlement layer that could span all product categories, enable remote feature activation, support flexible subscription tiers, and provide a single management portal where customers could view all devices and subscriptions.
The company’s fragmented approach created three specific problems:
Subscription fragmentation: Customers with multiple product types juggled separate subscriptions with different billing dates, feature sets, and price points. A customer with a smart speaker subscription ($4.99/mo) plus a fitness tracker subscription ($9.99/mo) plus a camera subscription ($6.99/mo) paid $21.97/month for three separate accounts, with no ecosystem discount or unified management.
Inflexible feature management: Features were hardcoded into device firmware or managed via product-specific APIs with no central control. Launching a new feature across all products required coordinated firmware releases. Running a promotional campaign (e.g., “free video storage for 60 days”) required manual backend changes per product and generated support confusion.
No ecosystem incentive structure: There was no mechanism to detect customer ownership of multiple products or reward cross-product loyalty. A customer who invested in all five product categories received no benefit, creating a missed opportunity to increase lifetime value and reduce churn.
The manufacturer implemented a three-layer entitlement strategy using NetLicensing:
Layer 1: Subscription Tiers (Subscription Model) — recurring billing plans spanning the entire ecosystem:
Layer 2: Feature Packages (Multi-Feature Model) — granular capabilities activated independently:
Layer 3: Device Entitlements (Per-Device Licenses) — tracking which devices have which features active:
A typical customer might hold:
SMART_ECOSYSTEMConnected Product Ecosystem Platform2.0Unified licensing for smart home, wearables, and connected appliancesCLIENT (users authenticate with email or account ID)Create three modules for organizational clarity.
Module 1: Subscription Tiers
SMART_ECOSYSTEM, click New ModuleMOD_TIERSEcosystem Subscription TiersSubscriptionModule 2: Feature Packages
MOD_FEATURESPremium Feature PackagesMultiFeatureModule 3: Trial & Promotion
MOD_TRIALSFeature Trials & PromotionsTryAndBuyEssential Template (free, auto-assigned)
MOD_TIERS → New License TemplateLT_ESSENTIALEssential TierTIMEVOLUME1MONTH0.00 EURConnected Home Plus Template
LT_PLUSConnected Home Plus MonthlyTIMEVOLUME1MONTH12.99 EUR3 daysUltimate Ecosystem Template
LT_ULTIMATEUltimate Ecosystem MonthlyTIMEVOLUME1MONTH24.99 EUR7 daysEach feature is a separate feature license that can be purchased independently.
Cloud Services Package
MOD_FEATURES → New License TemplateLT_CLOUD_SERVICESCloud Services (Video Recording, Backup)FEATURE7.99 EURIntelligence Features Package
LT_INTELLIGENCEIntelligence Features (AI Analytics, Predictions)FEATURE5.99 EURAutomation & Integration Package
LT_AUTOMATIONAutomation & Integration (Cross-Device Routines)FEATURE6.99 EURPremium Content Package
LT_CONTENTPremium Content (Workouts, Recipes, Playlists)FEATURE4.99 EURProfessional Services Package
LT_PROFESSIONALProfessional Services (Priority Support, Installation)FEATURE9.99 EURUltimate Tier Trial (new device purchasers get 30-day trial)
MOD_TRIALS → New License TemplateLT_TRIAL_ULTIMATEUltimate Ecosystem 30-Day TrialTIMEVOLUME30DAY0.00 EURPremium Content Trial (seasonal promotion)
LT_TRIAL_CONTENTPremium Content 14-Day TrialTIMEVOLUME14DAY0.00 EURWhen a customer launches the connected ecosystem app for the first time, the mobile app backend calls NetLicensing to register the user account:
curl -X POST https://go.netlicensing.io/core/v2/rest/licensee \
-u "apiKey:<YOUR_API_KEY>" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "number=USR_user123@example.com&productNumber=SMART_ECOSYSTEM&licenseeSecret=user123@example.com&name=John%20Doe"
Response:
{
"licensee": {
"number": "USR_user123@example.com",
"productNumber": "SMART_ECOSYSTEM",
"active": true,
"name": "John Doe",
"licenseCount": 1
}
}
The Essential tier license is auto-created due to the automatic: true flag on the template.
When a user adds a device (e.g., a new smart camera) to their account, the mobile app stores the device’s serial number or model identifier and associates it with the customer’s licensee record. The backend maintains a mapping of devices to licensee:
Device association data (stored in app backend, not NetLicensing):
{
"licenseeNumber": "USR_user123@example.com",
"devices": [
{
"deviceId": "speaker_001",
"type": "smart-speaker",
"serialNumber": "SS-A1B2C3D4",
"addedDate": "2024-01-15"
},
{
"deviceId": "camera_002",
"type": "security-camera",
"serialNumber": "SC-X9Y8Z7W6",
"addedDate": "2024-04-19"
}
]
}
When the mobile app launches, it validates the customer’s entitlements by calling NetLicensing:
curl -X GET "https://go.netlicensing.io/core/v2/rest/licensee/USR_user123@example.com/validate?productNumber=SMART_ECOSYSTEM" \
-u "apiKey:<YOUR_API_KEY>"
Response:
{
"validationResult": {
"productModuleValidationResult": [
{
"productModule": "MOD_TIERS",
"valid": true,
"licensing": "Subscription",
"license": [
{
"number": "L_ESSENTIAL_001",
"licenseTemplateNumber": "LT_ESSENTIAL",
"active": true,
"expirationDate": "2024-05-19T00:00:00Z"
}
]
},
{
"productModule": "MOD_FEATURES",
"valid": false,
"licensing": "MultiFeature"
},
{
"productModule": "MOD_TRIALS",
"valid": false,
"licensing": "TryAndBuy"
}
]
}
}
The app parses this response and determines that the user has Essential tier (basic connectivity only, no cloud services). The UI hides premium features and displays upgrade prompts.
When a customer upgrades from Essential to Ultimate Ecosystem tier, the app backend creates a new Subscription license:
curl -X POST https://go.netlicensing.io/core/v2/rest/license \
-u "apiKey:<YOUR_API_KEY>" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "licenseTemplateNumber=LT_ULTIMATE&licenseeNumber=USR_user123@example.com&active=true&startDate=2024-04-19T00:00:00Z"
Response:
{
"license": {
"number": "L_ULTIMATE_001",
"licenseTemplateNumber": "LT_ULTIMATE",
"licenseeNumber": "USR_user123@example.com",
"active": true,
"startDate": "2024-04-19T00:00:00Z",
"expirationDate": "2024-05-19T00:00:00Z",
"timeVolume": "1",
"timeVolumePeriod": "MONTH"
}
}
If the customer purchases the Professional Services add-on independently:
curl -X POST https://go.netlicensing.io/core/v2/rest/license \
-u "apiKey:<YOUR_API_KEY>" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "licenseTemplateNumber=LT_PROFESSIONAL&licenseeNumber=USR_user123@example.com&active=true"
The next validation call shows both the subscription and the feature license.
When displaying a smart camera in the app, the client queries which features are available for that specific device type. The app determines:
Smart Speaker supports: Cloud Services, Intelligence, Automation, Premium Content Security Camera supports: Cloud Services, Intelligence, Professional Services Fitness Tracker supports: Intelligence, Premium Content
The app checks the validation response against the device’s supported features and enables/disables UI accordingly.
When a customer purchases a new device, the backend automatically grants a 30-day trial of the Ultimate tier:
curl -X POST https://go.netlicensing.io/core/v2/rest/license \
-u "apiKey:<YOUR_API_KEY>" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "licenseTemplateNumber=LT_TRIAL_ULTIMATE&licenseeNumber=USR_user123@example.com&active=true&startDate=2024-04-19T00:00:00Z"
This trial exists alongside the customer’s paid subscription. At trial expiry, the paid subscription remains active, but the temporary Ultimate-tier trial benefits expire.
To retain at-risk customers (those with 3+ devices but on Essential tier), marketing can trigger automatic trial grants via API:
# Bulk grant: All customers with 3+ devices get 14-day Premium Content trial
curl -X POST https://go.netlicensing.io/core/v2/rest/license \
-u "apiKey:<YOUR_API_KEY>" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "licenseTemplateNumber=LT_TRIAL_CONTENT&licenseeNumber=USR_user123@example.com&active=true&startDate=2024-04-19T00:00:00Z"
If a customer unlinks a device from their account, the backend updates local device metadata but does not change NetLicensing entitlements (since entitlements are account-level, not device-level).
If a customer cancels their account, the backend deactivates the licensee:
curl -X POST https://go.netlicensing.io/core/v2/rest/licensee/USR_user123@example.com \
-u "apiKey:<YOUR_API_KEY>" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "active=false"
All active licenses automatically become invalid.
The company built a unified “Manage Subscription” interface accessible from any product’s mobile app. The portal calls NetLicensing to fetch the user’s current entitlements and displays them side-by-side:
curl -X GET "https://go.netlicensing.io/core/v2/rest/licensee/USR_user123@example.com/validate?productNumber=SMART_ECOSYSTEM" \
-u "apiKey:<YOUR_API_KEY>"
The UI displays:
When a customer clicks “Upgrade Subscription” in the mobile app, the backend generates a shop token:
curl -X POST https://go.netlicensing.io/core/v2/rest/token \
-u "apiKey:<YOUR_API_KEY>" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "tokenType=SHOP&licenseeNumber=USR_user123@example.com&productNumber=SMART_ECOSYSTEM&productNumber=SMART_ECOSYSTEM&successUrl=https://app.example.com/subscription-activated&cancelUrl=https://app.example.com/upgrade-canceled"
Response:
{
"token": {
"number": "a1b2c3d4-e5f6-47ba-8d9e-f8a9b0c1d2e3",
"tokenType": "SHOP",
"licenseeNumber": "USR_user123@example.com",
"expiresIn": 86400
}
}
The app displays the NetLicensing shop URL in a web view:
https://go.netlicensing.io/shop/v2/?token=a1b2c3d4-e5f6-47ba-8d9e-f8a9b0c1d2e3
The manufacturer configured Stripe as the primary payment processor in the Management Console:
When the customer completes the Stripe payment in the shop, NetLicensing automatically creates the license and redirects to the success URL. The app immediately calls validate again to fetch the new entitlements:
curl -X GET "https://go.netlicensing.io/core/v2/rest/licensee/USR_user123@example.com/validate?productNumber=SMART_ECOSYSTEM" \
-u "apiKey:<YOUR_API_KEY>"
The validation response now includes the upgraded tier license. The app detects the change and immediately displays “Upgraded to Ultimate Ecosystem” confirmation.
Because this manufacturer has multiple mobile apps (one for smart speakers, one for cameras, etc.), each app calls the same validate endpoint and parses the response, filtering for features relevant to that product type:
App: SmartSpeaker
App: SecurityCamera
This ensures a unified entitlement across all apps and devices.
Mobile apps cache the validation response locally to function offline. The cache is refreshed each time the app connects to the internet. If a customer’s subscription expires while the app is offline, they continue to use premium features until the cache expires (typically 7 days) or they regain connectivity.
def validate_with_local_cache(licensee_number, cache_ttl_seconds=604800): # 7 days
cached = load_from_local_storage(f"entitlements_{licensee_number}")
if cached and (time.time() - cached["timestamp"]) < cache_ttl_seconds:
return cached["data"]
try:
response = requests.get(
f"https://go.netlicensing.io/core/v2/rest/licensee/{licensee_number}/validate",
auth=(api_key, "")
)
entitlements = response.json()
save_to_local_storage(f"entitlements_{licensee_number}", {
"data": entitlements,
"timestamp": time.time()
})
return entitlements
except requests.RequestException:
if cached:
return cached["data"]
raise
NetLicensing’s Subscription model automatically attempts renewal at the expiration date. If payment fails (e.g., expired credit card):
The backend monitors subscription status via GET license endpoints and sends proactive email reminders 3 days before grace period expiry.
When a trial license expires (e.g., 30-day Ultimate trial on new device purchase), the app detects this via validation and displays an upsell prompt:
"Your 30-day Ultimate trial expires tomorrow. Upgrade to Ultimate Ecosystem for $24.99/month to keep all features."
Clicking “Upgrade Now” generates a shop token and opens the purchase flow.
The backend monitors how many devices a customer owns. Customers with 4+ devices automatically receive a 20% discount on their subscription tier. This is implemented as a custom price override via the API:
# Create a discounted license for a loyal customer
curl -X POST https://go.netlicensing.io/core/v2/rest/license \
-u "apiKey:<YOUR_API_KEY>" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "licenseTemplateNumber=LT_ULTIMATE&licenseeNumber=USR_user123@example.com&active=true&startDate=2024-04-19T00:00:00Z&price=19.99"
During holiday seasons or product launches, the company activates time-limited feature trials for all users to drive engagement:
# Grant all customers 7-day Premium Content trial (holiday promotion)
# Executed for each active licensee
curl -X POST https://go.netlicensing.io/core/v2/rest/license \
-u "apiKey:<YOUR_API_KEY>" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "licenseTemplateNumber=LT_TRIAL_CONTENT&licenseeNumber=USR_user123@example.com&active=true&startDate=2024-04-19T00:00:00Z"
When the trial expires, customers who experienced premium content are prompted to purchase.
The company exports transaction logs monthly for financial reconciliation:
curl -X GET "https://go.netlicensing.io/core/v2/rest/transaction?licenseeNumber=USR_user123@example.com" \
-u "apiKey:<YOUR_API_KEY>"
All successful purchases create transaction records in NetLicensing, which are matched against Stripe receipts to ensure revenue accuracy.

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