Skip to main content

TS.43 Entitlement Configuration

OmniSEP implements GSMA TS.43 Service Entitlement Configuration, enabling mobile devices to query their service entitlements (VoWiFi, VoLTE, SMS, etc.) from the carrier network.

Overview

Request Flow

Initial Authentication (EAP-AKA)

Fast Re-Authentication (Token)

HTTP Interface

Endpoint

MethodPathContent-Type
GET/Query parameters
POST/application/json

Required Parameters

ParameterTypeDescription
terminal_idStringDevice IMEI (15 digits)
terminal_vendorStringDevice manufacturer (max 4 chars per RCC.14)
terminal_modelStringDevice model (max 10 chars per RCC.14)
terminal_sw_versionStringSoftware version (max 20 chars per RCC.14)
entitlement_versionStringProtocol version (e.g., "2.0")
appString/ListApplication ID(s) to query

Authentication Parameters

One of these authentication methods is required:

ParameterDescription
EAP_IDRoot NAI for EAP-AKA: 0<IMSI>@nai.epc.mnc<MNC>.mcc<MCC>.3gppnetwork.org
tokenAuthentication token from previous response
temporary_tokenTemporary token
operator_tokenOperator-issued token

Optional Parameters

ParameterTypeDescription
IMSIStringRequired with token for fast re-auth
app_nameStringApplication name
app_versionStringApplication version
notif_actionIntegerNotification action (0=disable, 1=GCM, 2=FCM)
notif_tokenStringPush notification token
versIntegerConfiguration version for change detection

Request Examples

GET with Token:

GET /?terminal_id=123456789012345&terminal_vendor=Goog&terminal_model=Pixel8&terminal_sw_version=14.0&entitlement_version=2.0&app=ap2004&token=abc123&IMSI=310410123456789

POST with EAP-AKA:

{
"terminal_id": "123456789012345",
"terminal_vendor": "Goog",
"terminal_model": "Pixel8",
"terminal_sw_version": "14.0",
"entitlement_version": "2.0",
"app": "[ap2003,ap2004]",
"EAP_ID": "0310410123456789@nai.epc.mnc410.mcc310.3gppnetwork.org"
}

Response Formats

Accept Header

Accept HeaderResponse Format
text/vnd.wap.connectivity-xmlXML (default)
application/jsonJSON
application/vnd.gsma.eap-relay.v1.0+jsonEAP relay JSON

XML Response

<?xml version="1.0"?>
<wap-provisioningdoc version="1.1">
<characteristic type="VERS">
<parm name="version" value="2"/>
<parm name="validity" value="86400"/>
</characteristic>
<characteristic type="TOKEN">
<parm name="token" value="eyJ0eXAi..."/>
<parm name="validity" value="86400"/>
</characteristic>
<characteristic type="APPLICATION">
<parm name="AppID" value="ap2004"/>
<characteristic type="ap2004">
<parm name="EntitlementStatus" value="1"/>
<parm name="AddrStatus" value="2"/>
<parm name="TC_Status" value="2"/>
<parm name="ProvStatus" value="1"/>
</characteristic>
</characteristic>
</wap-provisioningdoc>

JSON Response

{
"Vers": {
"version": "2",
"validity": "86400"
},
"Token": {
"token": "eyJ0eXAi...",
"validity": "86400"
},
"ap2004": {
"EntitlementStatus": "1",
"AddrStatus": "2",
"TC_Status": "2",
"ProvStatus": "1"
}
}

EAP Challenge Response

When EAP-AKA authentication is in progress:

{
"eap-relay-packet": "AQEALBcBAAAn..."
}

Application IDs

Supported Applications

App IDServiceReference
ap2003Voice-over-Cellular (VoLTE/VoNR)TS.43 Section 4
ap2004Voice-over-WiFi (VoWiFi)TS.43 Section 3
ap2005SMS-over-IPTS.43 Section 5
ap2006ODSA CompanionTS.43 Section 6
ap2009ODSA PrimaryTS.43 Section 6
ap2010Data Plan BoostTS.43 Section 7
ap2011Server Initiated RequestsTS.43 Section 8
ap2012Direct Carrier BillingTS.43 Section 9
ap2013Private User IdentityTS.43 Section 10
ap2014Phone Number InformationTS.43 Section 11
ap2016Satellite EntitlementTS.43 Section 12

VoWiFi (ap2004) Response Fields

FieldTypeValuesDescription
EntitlementStatusInteger0-3Service availability
AddrStatusInteger0-3E911 address verification status
TC_StatusInteger0-3Terms & Conditions status
ProvStatusInteger0-3Provisioning status
ServiceFlow_URLStringURLService flow URL
ServiceFlow_UserDataString-Data for service flow

Status Values:

ValueEntitlementStatusAddrStatus/TC_Status/ProvStatus
0DisabledNot Available
1EnabledAvailable
2IncompatibleNot Required
3ProvisioningIn Progress

VoLTE (ap2003) Response Fields

VoLTE uses an array of entries per access technology:

FieldTypeValuesDescription
AccessTypeInteger1=LTE, 2=NRRadio access technology
HomeRoamingNWTypeInteger1-3Network scope
EntitlementStatusInteger0-1Service availability
NetworkVoiceIRATCapabilityString-Voice capability (5G only)

HomeRoamingNWType Values:

ValueMeaning
1Home and Roaming
2Home Only
3Roaming Only

Error Responses

HTTP StatusMeaningDescription
400Bad RequestMissing required parameters
403ForbiddenAuthentication failed
406Not AcceptableUnsupported protocol version
511Network Authentication RequiredToken invalid or EAP-AKA required

Error Response Format

HTTP/1.1 400 Bad Request
Content-Type: text/plain

Bad Request: Missing parameters ["terminal_id"]

Custom Entitlements

Setting Custom Entitlements

Use the management API to set custom entitlements for specific subscribers:

POST /api/entitlements/{imsi}
Content-Type: application/json

{
"app_id": "ap2004",
"entitlement": {
"entitlement_status": 0,
"addr_status": 1,
"tc_status": 1,
"prov_status": 0,
"service_flow_url": "https://activate.example.com/vowifi",
"message_for_incompatible": "VoWiFi requires address verification"
}
}

Retrieving Entitlements

GET /api/entitlements/{imsi}

Returns all custom entitlements for the subscriber:

{
"imsi": "310410123456789",
"entitlements": {
"ap2004": {
"entitlement_status": 1,
"addr_status": 2,
"tc_status": 2,
"prov_status": 1
}
}
}

Activity Logging

All entitlement requests are logged for audit purposes.

Searching Activity

GET /api/activity?imsi=310410123456789&from=1704067200&to=1704153600&limit=100
ParameterTypeDescription
imsiStringFilter by subscriber IMSI
terminal_idStringFilter by device terminal ID
fromIntegerStart timestamp (Unix epoch)
toIntegerEnd timestamp (Unix epoch)
limitIntegerMaximum records to return
offsetIntegerPagination offset

Activity Record

{
"id": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2024-01-15T10:30:00Z",
"imsi": "310410123456789",
"terminal_id": "123456789012345",
"terminal_vendor": "Google",
"terminal_model": "Pixel8",
"app_ids": ["ap2003", "ap2004"],
"client_ip": "192.168.1.100",
"user_agent": "PRD-TS43 Goog/Pixel8 client-IMS-Entitlement/1.0 OS-Android/14.0",
"auth_method": "TOKEN",
"response_code": 200
}

Android Client Compatibility

OmniSEP is tested against the Android AOSP service_entitlement library.

User-Agent Format

Android devices use this User-Agent format:

PRD-TS43 term-<vendor>/<model> <client_ts43>/<app_version> OS-Android/<sw_version>

Example:

PRD-TS43 term-Google/Pixel8 client-IMS-Entitlement/1.0 OS-Android/14.0

Multiple App IDs

Android sends multiple app IDs in POST requests as a bracket-enclosed string:

{
"app": "[ap2003,ap2004]"
}

OmniSEP parses both formats:

  • "ap2003,ap2004" - Comma-separated
  • "[ap2003,ap2004]" - Bracket-enclosed (Android format)
  • ["ap2003", "ap2004"] - JSON array

Reference Specifications

SpecificationDescription
GSMA TS.43Service Entitlement Configuration
GSMA RCC.14IMS Device Configuration Guidelines
3GPP TS 33.220Generic Bootstrapping Architecture (GBA)
3GPP TS 29.273EPS AAA Interfaces (SWm)