Industry
Use Case
Favorite Feature
SecureGate Solutions is a commercial building management company operating 12 multi-tenant office complexes across North America, serving over 250 corporate tenants. Their facilities host diverse amenities: secure entry points, reserved conference rooms, dedicated parking, gym facilities, and segmented network infrastructure. Before NetLicensing, SecureGate managed access control through a legacy badge system with static permission levels, unable to adapt to temporary needs, contractor access windows, or time-bound resource reservations.
The business model relies on tenant subscription tiers, with premium tiers including higher-tier amenity access, premium parking, and network bandwidth allocations. Temporary access for contractors, visitors, and event attendees required manual badge programming and administrative overhead. The core challenge was bridging the gap between SecureGate’s physical infrastructure and their SaaS tenant management platform, while maintaining security and audit compliance for multi-tenant facilities.
SecureGate chose NetLicensing because it offers a centralized entitlement engine supporting both feature-based and time-limited licensing models, enabling them to unify access control across physical and network layers with minimal infrastructure changes.
SecureGate faced four interconnected problems:
Static Access Levels: The legacy badge system assigned fixed permission sets (Level 1, 2, or 3) that couldn’t differentiate resource types. All Level 2 access holders received identical permissions regardless of their actual subscription tier or actual business need.
Manual Temporary Access Management: Granting a contractor 72-hour access to a building required manually programming their badge, setting a calendar reminder for revocation, and manually programming the badge again at expiration. Forgotten revocations became a security liability and compliance risk.
No Integration with Reservation Systems: Conference rooms and parking spaces were frequently double-booked because the access control system didn’t communicate with reservation calendars. Tenants could reserve a room, but the access control system wouldn’t grant entry to that specific room at the booked time.
Inability to Monetize Network Access Tiers: Premium tenants requested specialized network services (dedicated bandwidth, guest Wi-Fi provisioning, segment isolation) that the all-or-nothing network access policy couldn’t support. SecureGate had no way to offer tiered network services aligned with tenant subscriptions.
Additionally, SecureGate lacked complete audit trails for access entitlements, making compliance with security standards (SOC 2, ISO 27001) difficult and creating liability during security investigations.
SecureGate implemented a Multi-Feature licensing model combined with Rental licensing to support dynamic access control:
Multi-Feature Licensing: Different features represent different resource types—building entry, parking, conference rooms, gym, premium network bandwidth, guest Wi-Fi provisioning. Each tenant is assigned feature licenses matching their subscription tier. A Premium tier tenant receives features for all resources; a Basic tier tenant receives only building entry and standard network.
Rental Licensing: Temporary access (contractors, visitors, event attendees) is granted using Rental licenses with explicit time-volume constraints. A 3-day contractor pass is a Rental license with a 3-day (72-hour) time volume that counts down from first use. Upon expiration, the license automatically becomes invalid—no manual revocation needed.
Model mechanics:
licenseeNumber (e.g., TENANT-00123, CONTRACTOR-08456).https://go.netlicensing.io/.SECUREGATE-001SecureGate Access Control1.0Multi-tenant building access control and resource management systemPREDEFINED (SecureGate assigns licensee numbers from their internal database)Create three Product Modules to separate licensing concerns:
Module 1: Physical Access (Multi-Feature Model)
SECUREGATE-001 > Modules > New Module.PHYS-ACCESSPhysical Access ControlMultiFeatureManages feature-based access to physical resourcesModule 2: Temporary Access (Rental Model)
TEMP-ACCESSTemporary AccessRental1440 (days, about 2 days remaining warning)120 (minutes, less than 2 hours remaining warning)Time-limited access for contractors and visitorsModule 3: Network Bandwidth (Feature-based)
NETWORK-TIERNetwork Access TiersMultiFeatureNetwork bandwidth and services gatingTemplate 1: Basic Tenant License (Physical Access)
SECUREGATE-001 > Modules > PHYS-ACCESS > License Templates > New Template.BASIC-PHYSBasic Tenant - Physical AccessFEATUREBUILDING_ENTRY (core feature)STANDARD_PARKING (1 assigned space)CONF_ROOM_ACCESS (shared access, not reserved)0 (included in tenant subscription)Grants basic building and parking access for tenant employeesTemplate 2: Premium Tenant License (Physical Access)
PREMIUM-PHYSPremium Tenant - Physical AccessFEATUREBUILDING_ENTRYPREMIUM_PARKING (dedicated spaces)CONF_ROOM_PRIORITY (priority booking)GYM_ACCESS0 (included in premium subscription)Template 3: Contractor Temporary Access (Rental)
SECUREGATE-001 > Modules > TEMP-ACCESS > License Templates > New Template.CONTRACTOR-72HContractor - 72 Hour AccessTIMEVOLUME72 (hours)HOURBUILDING_ENTRY, PARKING0 (tenant-issued, no direct charge)Time-limited access for contractor projectsTemplate 4: Guest - Single Day (Rental)
GUEST-1DAYGuest - 24 Hour AccessTIMEVOLUME24 (hours)HOURBUILDING_ENTRY, PARKING, CONF_ROOM_ACCESS0Template 5: Premium Network Tier (Multi-Feature)
SECUREGATE-001 > Modules > NETWORK-TIER > License Templates > New Template.PREMIUM-NETWORKPremium Network TierFEATURESTANDARD_BANDWIDTH (included in all)PREMIUM_BANDWIDTH (100 Mbps dedicated)GUEST_WIFI_PROVISIONINGSEGMENT_ISOLATION0SecureGate integrates NetLicensing into three primary touchpoints:
NetLicensing API base URL: https://go.netlicensing.io/core/v2/rest/
All API calls require HTTP Basic Authentication using NetLicensing API credentials.
When SecureGate onboards a new tenant, the portal calls this endpoint to register the tenant as a Licensee:
curl -X POST "https://go.netlicensing.io/core/v2/rest/licensee" \
-H "Content-Type: application/x-www-form-urlencoded" \
-u "apikey:your-api-key" \
-d "licenseeNumber=TENANT-00312" \
-d "active=true" \
-d "name=Acme Corp - Suite 500"
Response:
{
"licensee": {
"number": "TENANT-00312",
"active": true,
"name": "Acme Corp - Suite 500",
"productNumber": "SECUREGATE-001",
"creationTime": "2026-04-19T10:30:00Z"
}
}
Upon tenant onboarding, SecureGate auto-assigns the appropriate physical access and network access licenses based on subscription tier:
curl -X POST "https://go.netlicensing.io/core/v2/rest/license" \
-H "Content-Type: application/x-www-form-urlencoded" \
-u "apikey:your-api-key" \
-d "licenseTemplateNumber=PREMIUM-PHYS" \
-d "licenseeNumber=TENANT-00312" \
-d "active=true"
Response:
{
"license": {
"number": "L-TENANT-00312-PHYS-001",
"active": true,
"licenseeNumber": "TENANT-00312",
"licenseTemplateNumber": "PREMIUM-PHYS",
"creationTime": "2026-04-19T10:31:00Z"
}
}
Repeat for network tier license:
curl -X POST "https://go.netlicensing.io/core/v2/rest/license" \
-H "Content-Type: application/x-www-form-urlencoded" \
-u "apikey:your-api-key" \
-d "licenseTemplateNumber=PREMIUM-NETWORK" \
-d "licenseeNumber=TENANT-00312" \
-d "active=true"
When a cardholder swipes at a building entrance, the access control reader calls the Validation API:
curl -X GET "https://go.netlicensing.io/core/v2/rest/licensee/TENANT-00312/validate" \
-u "apikey:your-api-key"
Response:
{
"validationResult": {
"valid": true,
"licenseeNumber": "TENANT-00312",
"productModuleValidations": [
{
"productModule": "PHYS-ACCESS",
"valid": true,
"features": ["BUILDING_ENTRY", "PREMIUM_PARKING", "CONF_ROOM_PRIORITY", "GYM_ACCESS"],
"licensing": "MultiFeature"
},
{
"productModule": "NETWORK-TIER",
"valid": true,
"features": ["STANDARD_BANDWIDTH", "PREMIUM_BANDWIDTH", "GUEST_WIFI_PROVISIONING", "SEGMENT_ISOLATION"],
"licensing": "MultiFeature"
},
{
"productModule": "TEMP-ACCESS",
"valid": false,
"features": [],
"licensing": "Rental"
}
]
}
}
The access control reader inspects the valid flag and feature list. If BUILDING_ENTRY is present and the overall result is valid, the reader unlocks the door. The access point logs the validation result (success/denial) and licensee number for audit purposes.
When a SecureGate tenant authorizes a contractor for 72-hour building access, the tenant portal issues a Rental license:
curl -X POST "https://go.netlicensing.io/core/v2/rest/licensee" \
-H "Content-Type: application/x-www-form-urlencoded" \
-u "apikey:your-api-key" \
-d "licenseeNumber=CONTRACTOR-08456" \
-d "active=true" \
-d "name=John Smith - ABC Contractors"
Then assign the temporary access license:
curl -X POST "https://go.netlicensing.io/core/v2/rest/license" \
-H "Content-Type: application/x-www-form-urlencoded" \
-u "apikey:your-api-key" \
-d "licenseTemplateNumber=CONTRACTOR-72H" \
-d "licenseeNumber=CONTRACTOR-08456" \
-d "active=true" \
-d "startDate=2026-04-20T08:00:00Z"
Response:
{
"license": {
"number": "L-CONTRACTOR-08456-TEMP-001",
"active": true,
"licenseeNumber": "CONTRACTOR-08456",
"licenseTemplateNumber": "CONTRACTOR-72H",
"startDate": "2026-04-20T08:00:00Z",
"creationTime": "2026-04-19T15:00:00Z"
}
}
The contractor can now access the building for 72 hours from the start date. After 72 hours, the license expires, and subsequent validation calls will return valid: false.
For UI feedback (e.g., displaying “Time remaining: 48 hours”), the portal queries:
curl -X GET "https://go.netlicensing.io/core/v2/rest/licensee/CONTRACTOR-08456/validate?productModuleNumber=TEMP-ACCESS" \
-u "apikey:your-api-key"
Response (while license is active):
{
"validationResult": {
"valid": true,
"licenseeNumber": "CONTRACTOR-08456",
"productModuleValidations": [
{
"productModule": "TEMP-ACCESS",
"valid": true,
"licensing": "Rental",
"timeVolumeRemaining": 48,
"timeVolumeUnit": "HOUR"
}
]
}
}
Network access points pull the same validation response and use the feature list to assign network policies:
# Pseudocode for network access point decision logic
def assign_network_policy(licensee_number):
validation = validate_licensee(licensee_number)
if not validation['valid']:
assign_policy('deny_all')
return
for module_result in validation['productModuleValidations']:
if module_result['productModule'] == 'NETWORK-TIER':
features = module_result['features']
if 'PREMIUM_BANDWIDTH' in features:
assign_vlan(200) # Premium VLAN
set_bandwidth_limit('1000 Mbps')
else:
assign_vlan(100) # Standard VLAN
set_bandwidth_limit('100 Mbps')
if 'GUEST_WIFI_PROVISIONING' in features:
enable_guest_ssid_creation()
if 'SEGMENT_ISOLATION' in features:
enable_network_isolation()
SecureGate’s tenant self-service portal allows authorized tenant administrators to provision temporary access for visitors without manual intervention:
def create_guest_access(guest_name, tenant_number, duration_hours, resources):
# Create licensee for guest
guest_licensee = create_licensee({
'licenseeNumber': f'GUEST-{uuid.uuid4()[:8].upper()}',
'name': guest_name,
'active': True
})
# Select appropriate template based on duration
if duration_hours == 24:
template = 'GUEST-1DAY'
elif duration_hours == 72:
template = 'CONTRACTOR-72H'
else:
template = 'CONTRACTOR-72H' # fallback
# Assign license
license = create_license({
'licenseTemplateNumber': template,
'licenseeNumber': guest_licensee['number'],
'active': True,
'startDate': datetime.utcnow().isoformat() + 'Z'
})
return {
'licensee_number': guest_licensee['number'],
'access_code': license['number'],
'expires_at': calculate_expiry(license, duration_hours)
}
GUEST-A8C2F9B2 or QR code) that the guest can use at entry readers.For permanent residents or dedicated contractors, SecureGate creates Licensees directly via the Management Console or API:
curl -X POST "https://go.netlicensing.io/core/v2/rest/licensee" \
-H "Content-Type: application/x-www-form-urlencoded" \
-u "apikey:your-api-key" \
-d "licenseeNumber=EMP-00847" \
-d "active=true" \
-d "name=Jane Doe - Facilities Manager" \
-d "custom_field_employee_id=847"
The custom_field_employee_id custom property maps the NetLicensing Licensee to SecureGate’s internal HR database, enabling sync and audit trail alignment.
SecureGate’s access control hardware stores a mapping table:
| Badge Swipe | Licensee Number | Reader Location | Timestamp | Allowed? |
|---|---|---|---|---|
| 5832 | TENANT-00312 | Building A Lobby | 2026-04-19 09:15:00 | Yes |
| 5832 | TENANT-00312 | Parking Gate 2 | 2026-04-19 09:20:00 | Yes |
| 4201 | CONTRACTOR-08456 | Building A Lobby | 2026-04-22 14:30:00 | No (expired) |
When a badge reader detects a swipe, it maps the badge to the licenseeNumber and calls the Validation API. Expired Rental licenses automatically return invalid status.
SecureGate does not use NetLicensing Shop for tenant access provisioning, as tenant relationships are B2B with direct contracts and invoicing.
Alternative flow (enterprise direct billing):
Monetized temporary access (optional):
For Ad-Hoc temporary access (beyond included limits), SecureGate could enable Shop-based provisioning:
curl -X POST "https://go.netlicensing.io/core/v2/rest/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-u "apikey:your-api-key" \
-d "tokenType=SHOP" \
-d "licenseeNumber=TENANT-00312"
Response:
{
"token": {
"number": "TOKEN-XYZ123",
"value": "https://shop.netlicensing.io/?token=TOKEN-XYZ123&utm_source=securegate",
"creationTime": "2026-04-19T11:00:00Z"
}
}
For now, SecureGate issues temporary access at no charge to existing tenants, as it’s bundled into their subscription.
Access readers operate in facilities where network connectivity may be intermittent (basement levels, outdoor gates). SecureGate implements local caching:
def validate_with_offline_fallback(licensee_number, reader_id):
try:
validation = validate_licensee_online(licensee_number)
cache_validation(licensee_number, validation, reader_id)
return validation
except NetworkError:
cached = get_cached_validation(licensee_number, reader_id)
if cached and cached['age_seconds'] < 14400: # 4 hours
return cached
else:
return {'valid': False, 'reason': 'offline_cache_expired'}
When a Licensee (e.g., tenant employee) transfers to a different office within SecureGate’s portfolio:
curl -X POST "https://go.netlicensing.io/core/v2/rest/license/L-OLD-LICENSE-NUM" \
-H "Content-Type: application/x-www-form-urlencoded" \
-u "apikey:your-api-key" \
-d "active=false"
SecureGate logs all validation calls and access decisions to an immutable audit log for SOC 2 compliance:
{
"timestamp": "2026-04-19T09:15:00Z",
"event": "access_attempt",
"reader_id": "LOBBY-A-01",
"licensee_number": "TENANT-00312",
"badge_swipe_id": "5832",
"validation_valid": true,
"features_checked": ["BUILDING_ENTRY"],
"access_granted": true,
"log_hash": "sha256:abc123def456"
}
Audit logs are immutable and retained for 7 years per regulatory requirements.
Access readers implement exponential backoff for transient API failures:
def validate_with_retry(licensee_number, max_retries=3):
for attempt in range(max_retries):
try:
return validate_licensee(licensee_number)
except requests.Timeout:
if attempt < max_retries - 1:
wait_time = 2 ** attempt # 1s, 2s, 4s
time.sleep(wait_time)
else:
# Last attempt failed; use offline cache or deny
return get_cached_validation(licensee_number) or {'valid': False}
except requests.ConnectionError:
# Network down; use offline cache
return get_cached_validation(licensee_number) or {'valid': False}
NetLicensing enforces rate limits (typically 100 req/sec per API key). SecureGate mitigates this by:
When a Contractor’s 72-hour rental access window expires, the access control system behavior:
valid: false.After integrating NetLicensing, SecureGate achieved:
Administrative overhead reduced 60%: Temporary access provisioning now requires 2 minutes (self-service portal) instead of 30 minutes of manual badge programming and calendar reminders. Automated expiration eliminated revocation tasks.
Security posture improved: Time-limited licenses automatically expire without manual revocation, eliminating forgotten-badge-removal incidents. Complete audit logs provide SOC 2 compliance evidence.
Conference room and amenity utilization optimized: Integration with reservation systems ensures access is granted only during booked time slots, eliminating unauthorized usage and double-booking conflicts.
Network tier monetization enabled: Premium tenants can now be offered tiered network services (premium bandwidth, guest Wi-Fi provisioning, segment isolation) through feature-based licensing, opening new revenue streams. SecureGate projects $150K/year in additional revenue from premium network tier adoption.
Feature-based access control reduced implementation complexity: Instead of building custom permission logic, SecureGate maps business features directly to NetLicensing features, reducing development effort by 40%.
Multi-facility expansion simplified: New facility onboarding requires only replicating the same NetLicensing Product configuration; no hardware-level changes. SecureGate plans to deploy to 8 additional facilities within 12 months.
Self-service tenant portal adoption: 85% of tenants now use the self-service portal for temporary access; support ticket volume for access requests dropped from 12/week to 2/week.
Audit compliance: Complete validation and access decision logs enable SecureGate to pass security audits in 2 weeks (previously 6 weeks of manual log collection).
SecureGate continues to expand access control capabilities by adding additional features (e.g., time-of-day restrictions, location-based access for hybrid work scenarios) as business requirements evolve, all within the same NetLicensing framework.

Internet Access Control
Managed connection points with ethernet and power sockets under controlled access.

Internet & Network Access Control: Time-Limited Access to Physical Connection Points
Manage time-limited or subscription-gated access to physical connection points, ethernet sockets, and shared network infrastructure