Industry
Use Case
Favorite Feature
A global automotive OEM had invested heavily in connected vehicle technology, equipping new models with embedded cellular modems, high-resolution in-cabin displays, and cloud-integrated infotainment systems. The hardware platform supported streaming entertainment, real-time navigation, remote vehicle control, concierge services, and advanced telematics—but the business model lagged behind the technology. Initial deployments bundled all connected services as complimentary trials (3–12 months), after which features stopped working entirely. This created customer frustration and missed revenue opportunities.
The manufacturer faced two critical challenges: customers expected clear upgrade paths rather than abrupt feature shutoffs, and dealerships had no tools to sell service subscriptions as an add-on revenue stream during delivery or service appointments. The OEM needed a system to manage subscription tiers, feature-based bundles, trial periods, and per-vehicle entitlements at scale across millions of vehicles globally.
The team selected NetLicensing to serve as the system of record for in-vehicle service entitlements. Each vehicle would be registered as a Licensee (using its Vehicle Identification Number as the unique identifier), and services would be modeled as License Templates within a combination of Subscription and Multi-Feature licensing models.
The manufacturer’s previous system relied on trial bundles hardcoded into each vehicle at manufacture time. When the trial expired, the infotainment system simply disabled features, offering no customer self-service to upgrade or extend access. This approach had three structural problems:
Additionally, the manufacturer lacked visibility into which vehicles had active entitlements, subscription status, or upcoming renewals. Manual license management (VINs, entitlements, trial extensions) was error-prone and didn’t scale to 2+ million vehicles on the road.
The OEM adopted two NetLicensing models working in tandem:
Subscription Model for time-bound recurring plans (monthly/annual tiers: Essential, Premium, Ultimate). This model automatically renews at the specified interval and can be configured with grace periods to allow ride-out of payment delays.
Multi-Feature Model for granular per-service activation. Instead of bundling all services into a single license, each service (streaming audio, premium maps, remote start, concierge, safety features) is its own feature license. This allows customers to:
The combination means a customer’s vehicle might have:
VEHICLESERVICESConnected Vehicle Services Platform1.0In-vehicle subscription and feature licensing for connected car servicesPREDEFINED (VIN is the licensee secret)Create two modules to organize licensing models.
Module 1: Subscription Plans
VEHICLESERVICES product, click New ModuleMOD_SUBSCRIPTIONSMonthly Subscription PlansSubscriptionModule 2: Feature Services
MOD_FEATURESPremium FeaturesMulti-FeatureCreate three subscription tiers in MOD_SUBSCRIPTIONS.
Essential Tier Template
MOD_SUBSCRIPTIONS → New License TemplateLT_ESSENTIALEssential Monthly SubscriptionTIMEVOLUME (Subscription model uses TIMEVOLUME internally)1MONTH9.99 EUREURBasic navigation, remote services (vehicle locator, remote start)Premium Tier Template
LT_PREMIUMPremium Monthly SubscriptionTIMEVOLUME1MONTH19.99 EUREURNavigation (real-time traffic, 3D maps), remote services, streaming entertainment, conciergeUltimate Tier Template
LT_ULTIMATEUltimate Monthly SubscriptionTIMEVOLUME1MONTH34.99 EUREURAll Premium features + advanced safety (emergency calling, roadside coordination), diagnostic data access7 days (allows ride-out if payment fails)Create individual feature templates in MOD_FEATURES. Each vehicle can hold these licenses independently of subscriptions.
Streaming Entertainment Feature
MOD_FEATURES → New License TemplateLT_STREAMINGPremium Streaming EntertainmentFEATURE7.99 EUR (one-time purchase option)Advanced Navigation Feature
LT_NAV_PREMIUMAdvanced Navigation PackageFEATURE4.99 EURReal-time traffic, 3D maps, parking availability, EV charging station finderConcierge Services Feature
LT_CONCIERGEConcierge ServicesFEATURE6.99 EURAdvanced Safety Features
LT_SAFETYAdvanced Safety PackageFEATURE9.99 EURAutomatic emergency calling, stolen vehicle assistance, roadside coordinationWhen a vehicle connects to the cloud platform (on ignition or infotainment startup), it calls the NetLicensing validation endpoint to determine which services are available. The validation response returns a list of all active licenses for that VIN.
When a vehicle first connects to the cloud platform, the manufacturing system (or dealership activation service) creates a Licensee record. With Licensee Auto-Create enabled, the first validation call will auto-create a Licensee if one doesn’t exist.
Optionally, licensees can be pre-created at manufacturing time via API:
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=VIN_1G1YY22G965118127&productNumber=VEHICLESERVICES&licenseeSecret=1G1YY22G965118127&name=Silver%20Sedan%20-%20Customer%20Test"
Response:
{
"licensee": {
"number": "VIN_1G1YY22G965118127",
"productNumber": "VEHICLESERVICES",
"active": true,
"licenseeSecret": "1G1YY22G965118127",
"name": "Silver Sedan - Customer Test",
"licenseCount": 0
}
}
When the vehicle’s infotainment system initializes, it calls the validation endpoint to fetch all active entitlements:
curl -X GET "https://go.netlicensing.io/core/v2/rest/licensee/VIN_1G1YY22G965118127/validate?productNumber=VEHICLESERVICES" \
-u "apiKey:<YOUR_API_KEY>"
Response (before any licenses):
{
"validationResult": {
"productModuleValidationResult": [
{
"productModule": "MOD_SUBSCRIPTIONS",
"valid": false,
"licensing": "Subscription"
},
{
"productModule": "MOD_FEATURES",
"valid": false,
"licensing": "MultiFeature"
}
]
}
}
When a customer purchases the Premium monthly subscription through the in-vehicle UI or dealership portal, the backend creates a 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_PREMIUM&licenseeNumber=VIN_1G1YY22G965118127&active=true&startDate=2024-04-19T00:00:00Z"
Response:
{
"license": {
"number": "L_PREMIUM_001",
"licenseTemplateNumber": "LT_PREMIUM",
"licenseeNumber": "VIN_1G1YY22G965118127",
"active": true,
"startDate": "2024-04-19T00:00:00Z",
"expirationDate": "2024-05-19T00:00:00Z",
"timeVolume": "1",
"timeVolumePeriod": "MONTH"
}
}
Next time the vehicle calls validate, the response now includes the active subscription:
curl -X GET "https://go.netlicensing.io/core/v2/rest/licensee/VIN_1G1YY22G965118127/validate?productNumber=VEHICLESERVICES" \
-u "apiKey:<YOUR_API_KEY>"
Response:
{
"validationResult": {
"productModuleValidationResult": [
{
"productModule": "MOD_SUBSCRIPTIONS",
"valid": true,
"licensing": "Subscription",
"license": [
{
"number": "L_PREMIUM_001",
"licenseTemplateNumber": "LT_PREMIUM",
"active": true,
"expirationDate": "2024-05-19T00:00:00Z",
"type": "TIMEVOLUME"
}
]
},
{
"productModule": "MOD_FEATURES",
"valid": false,
"licensing": "MultiFeature"
}
]
}
}
The infotainment system parses this response and enables all services bundled in the Premium tier: navigation, remote services, streaming, and concierge.
A customer can also add individual features. When they purchase the Advanced Navigation feature:
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_NAV_PREMIUM&licenseeNumber=VIN_1G1YY22G965118127&active=true"
The next validation call returns both the subscription and the feature license. The app can detect which specific features are active and display them independently.
For vehicles pre-provisioned at the factory or during dealer onboarding, licensees are created in bulk using the Management Console or API. The VIN serves as both the licensee number and licensee secret:
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=VIN_2T1FV1E18CC072014&productNumber=VEHICLESERVICES&licenseeSecret=2T1FV1E18CC072014&name=Red%20Truck%20-%20Customer%20Demo"
With licenseeAutoCreate=true on the product, the first validation call from a vehicle with an unknown VIN automatically creates a Licensee record. This simplifies fleet management—no pre-registration needed.
Dealerships can activate trial licenses for customers during vehicle delivery. This is a time-limited TIMEVOLUME license granting full access:
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=VIN_3G5DA03E08S587491&active=true&startDate=2024-04-19T00:00:00Z"
NetLicensing’s Subscription model automatically manages renewal dates, so trial periods naturally expire without manual intervention.
For warranty voids, unpaid accounts, or fraud cases, licenses can be deactivated in bulk:
curl -X POST https://go.netlicensing.io/core/v2/rest/license/L_PREMIUM_001 \
-u "apiKey:<YOUR_API_KEY>" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "active=false"
Customers access the shop through the vehicle’s touchscreen or the manufacturer’s mobile app. The app calls the backend to generate a shop token scoped to the specific VIN:
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=VIN_1G1YY22G965118127&productNumber=VEHICLESERVICES&successUrl=https://vehicle-cloud.example.com/license-complete&cancelUrl=https://vehicle-cloud.example.com/license-canceled"
Response:
{
"token": {
"number": "e8a8b2c1-4d5f-11eb-ae93-0242ac120002",
"tokenType": "SHOP",
"licenseeNumber": "VIN_1G1YY22G965118127",
"productNumber": "VEHICLESERVICES",
"created": "2024-04-19T10:00:00Z",
"expiresIn": 86400,
"successUrl": "https://vehicle-cloud.example.com/license-complete",
"cancelUrl": "https://vehicle-cloud.example.com/license-canceled"
}
}
The app constructs the shop URL:
https://go.netlicensing.io/shop/v2/?token=e8a8b2c1-4d5f-11eb-ae93-0242ac120002
This URL is either embedded in a web view within the infotainment system or sent to the customer’s phone via deep link.
NetLicensing supports Stripe and PayPal as payment processors. The manufacturer configures these in the Management Console under Settings > Payment Methods:
STRIPE_MAINStripeWhen a customer completes a purchase in the shop, NetLicensing automatically creates the license and redirects to the successUrl. The vehicle polls for the new license immediately:
curl -X GET "https://go.netlicensing.io/core/v2/rest/licensee/VIN_1G1YY22G965118127/validate?productNumber=VEHICLESERVICES" \
-u "apiKey:<YOUR_API_KEY>"
Within seconds, the validation response includes the new license. The infotainment system detects the change and enables the purchased services without requiring a restart.
A separate dealership web app integrates with NetLicensing to sell subscriptions at point of sale. When a salesperson processes a purchase, the backend creates a license and optionally emails a receipt:
curl -X POST https://go.netlicensing.io/core/v2/rest/license \
-u "apiKey:<DEALERSHIP_API_KEY>" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "licenseTemplateNumber=LT_PREMIUM&licenseeNumber=VIN_5TDJKRFH7LS123456&active=true&startDate=2024-04-19T00:00:00Z"
The dealership portal displays the vehicle’s current entitlements by querying NetLicensing’s GET license endpoints.
Vehicles may lose connectivity for extended periods (tunnels, rural areas, international travel). To prevent service interruption, the infotainment system caches the last successful validation response locally. NetLicensing’s grace period (configurable per license template, e.g., 7 days for subscriptions) allows the vehicle to continue using services even if validation is unavailable.
Implementation:
def validate_and_cache(vin):
try:
response = requests.get(
f"https://go.netlicensing.io/core/v2/rest/licensee/{vin}/validate",
auth=(api_key, "")
)
cache[vin] = {
"data": response.json(),
"timestamp": time.time()
}
return response.json()
except requests.RequestException:
cached = cache.get(vin)
if cached and (time.time() - cached["timestamp"]) < (7 * 86400): # 7 days
return cached["data"]
raise
When a customer sells their vehicle or trades it in, the OEM can transfer all active licenses to the new vehicle owner’s VIN:
curl -X POST https://go.netlicensing.io/core/v2/rest/licensee/VIN_OLD/transfer \
-u "apiKey:<YOUR_API_KEY>" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "targetLicenseeNumber=VIN_NEW"
This preserves the customer’s subscription and feature licenses while protecting against license sharing across multiple vehicles.
NetLicensing’s Subscription model automatically renews at the configured interval. If payment fails (e.g., expired credit card), the license enters grace period state. The vehicle can continue using services for the grace period duration (e.g., 7 days).
After grace period expiry, the license becomes inactive. The infotainment system detects this and displays a payment-required notification to the customer. The OEM’s backend monitors subscription status via the API and can send proactive email reminders.
All license changes (create, update, deactivate) are logged in NetLicensing. The OEM periodically exports transaction logs for compliance and financial reconciliation:
curl -X GET "https://go.netlicensing.io/core/v2/rest/transaction?licenseeNumber=VIN_1G1YY22G965118127" \
-u "apiKey:<YOUR_API_KEY>"
The infotainment system must gracefully handle validation failures (network errors, API timeouts, rate limiting). Recommended retry strategy:
def validate_with_retry(vin, max_retries=3):
for attempt in range(max_retries):
try:
response = requests.get(
f"https://go.netlicensing.io/core/v2/rest/licensee/{vin}/validate?productNumber=VEHICLESERVICES",
auth=(api_key, ""),
timeout=5
)
if response.status_code == 200:
return response.json()
elif response.status_code == 429: # Rate limited
time.sleep(2 ** attempt) # Exponential backoff
else:
raise Exception(f"Validation failed: {response.status_code}")
except requests.RequestException as e:
if attempt == max_retries - 1:
raise
time.sleep(1)
NetLicensing enforces API rate limits. For a fleet of millions of vehicles, the OEM should:

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