eSIM TECH Platform API
The eSIM TECH Platform API provides programmatic access to subscriber management, prepaid packages, tariffs, statistics, and real-time charging. All requests and responses use JSON over HTTPS.
All calls use a single POST endpoint. The operation name is the top-level JSON key.
Include your API token as a URL query parameter: ?token=YOUR_TOKEN
All responses include a status.code field. Code 0 = success.
1. Reseller
Manage reseller accounts, balances, eSIM status, sponsors, and steering lists.
listResellerAccount
Retrieve the list of accounts for one or all resellers. Omit resellerId to return all accounts across all resellers.
| Parameter | Presence | Description |
|---|---|---|
| resellerId | Optional | The ID of the reseller |
{
"listResellerAccount": { }
}
{
"listResellerAccount": {
"resellerId": 123
}
}
{
"status": { "code": 0, "msg": "OK" },
"listResellerAccount": {
"reseller": [{
"id": 1,
"name": "Example Reseller",
"account": [{
"id": 4,
"name": "Main Account",
"balance": 10925.29,
"packageOnly": false,
"steeringListId": 1
}, {
"id": 151,
"name": "Package Only Account",
"balance": 0.0,
"packageOnly": true
}]
}]
}
}
modifyAccountBalance
Adapt or set the balance of an account. Use a negative amount to decrease. Balance cannot go below zero. Transactions are logged and visible in the Account → Transaction tab.
- Adapt: amount is added/subtracted from current balance
- Set: balance is replaced with the provided amount (set
setBalance: true)
| Parameter | Presence | Description |
|---|---|---|
| accountId | Required | The ID of the account to modify |
| amount | Required | Amount to add (negative to subtract) |
| setBalance | Optional | true = set to this amount; false (default) = adapt balance |
| description | Optional | Reason for this balance adjustment |
{
"modifyAccountBalance": {
"accountId": 132,
"amount": -123.25,
"description": "Credit adjustment"
}
}
{
"modifyAccountBalance": {
"accountId": 132,
"amount": 500.00,
"setBalance": true,
"description": "Monthly top-up"
}
}
{ "status": { "code": 0, "msg": "OK" } }
modifyResellerBalance
Adapt or set the balance of a reseller. Same logic as modifyAccountBalance but operates at reseller level. Requires a transaction type (e.g. "Wire").
| Parameter | Presence | Description |
|---|---|---|
| resellerId | Required | The ID of the reseller |
| type | Required | Transaction type (e.g. "Wire") |
| amount | Required | Amount to add/set |
| setBalance | Optional | If true, balance is set to the amount |
| description | Optional | Reason for the adjustment |
{
"modifyResellerBalance": {
"resellerId": 1,
"type": "Wire",
"amount": 123.45,
"description": "Wire transfer received"
}
}
getResellerInfo
Retrieve detailed information about a reseller. If id is omitted, the reseller linked to the current API token is returned.
{ "getResellerInfo": { "id": 111 } }
{
"status": { "code": 0, "msg": "OK" },
"getResellerInfo": {
"id": 1,
"name": "Example Reseller",
"parentId": -1,
"balance": "8870.59",
"trafficInfo": {
"relayGy": true, "relayCallSms": false,
"relayLU": false, "relayVoIP": false
},
"chargingInfo": {
"mobilePlan": { "id": 1, "name": "Default Mobile Plan" },
"voipPlan": { "id": 1, "name": "Default VoIP Plan" },
"voipFree": false
},
"contactInfo": {
"contactName": "Admin",
"city": "Amsterdam",
"country": "Netherlands"
}
}
}
esimStatusPerAccount
Retrieve eSIM status counts per account. Provide either accountId for a single account or resellerId for all accounts under a reseller.
- Free — eSIM available, not yet assigned to a user
- Affected — eSIM has been assigned to a user
{ "esimStatusPerAccount": { "accountId": 222 } }
{
"status": { "code": 0, "msg": "OK" },
"esimStatusPerAccount": {
"account": [{
"id": 222,
"name": "My Account",
"sponsor": [{
"id": 101,
"name": "Sponsor A",
"esim": {
"status": [
{ "statusNum": 0, "statusStr": "Free", "count": 100 },
{ "statusNum": 2, "statusStr": "Affected", "count": 10 }
]
}
}]
}]
}
}
listSponsor
List the sponsors configured for a reseller. The request value is the reseller ID (numeric).
{ "listSponsor": 12 }
{
"status": { "code": 0, "msg": "OK" },
"listSponsor": {
"sponsor": [
{ "id": 1, "prefix": 11122, "name": "SP01" },
{ "id": 2, "prefix": 33322, "name": "SP02" }
]
}
}
listSteeringList
List steering lists configured for a reseller. The request value is the reseller ID (numeric).
{ "listSteeringList": 12 }
{
"status": { "code": 0, "msg": "OK" },
"listSteeringList": [
{ "id": 1, "resellerId": 12, "name": "Steering list 1" },
{ "id": 2, "resellerId": 12, "name": "Steering list 2" }
]
}
2. Subscriber
Look up, update, and manage subscribers. Most write operations accept multiple subscriber identifiers (subscriberId, IMSI, ICCID, MSISDN, multiIMSI, activationCode).
subscriberId, imsi, iccid, msisdn, multiImsi, or activationCode. Use subscriberId whenever possible for best performance.getSingleSubscriber
Look up a specific subscriber by IMSI, ICCID, MSISDN, activation code, or internal subscriber ID. Returns current state only — historical identifiers (old MSISDNs etc.) are not searched.
| Parameter | Presence | Description |
|---|---|---|
| imsi | Optional | Exact IMSI |
| iccid | Optional | Exact ICCID |
| msisdn | Optional | Currently active MSISDN (exact) |
| subscriberId | Optional | Internal subscriber ID |
| activationCode | Optional | eSIM activation code |
| withSimInfo | Optional | Include eSIM details (default: true) |
| onlySubsInfo | Optional | Return basic info only, no history (default: false) |
| withGzCounter | Optional | Include Green Zone counter (default: false) |
{
"getSingleSubscriber": {
"imsi": "248029018000011",
"withGzCounter": true
}
}
{
"getSingleSubscriber": {
"activationCode": "K2-1JL8YT-14S7I6K",
"withSimInfo": true,
"onlySubsInfo": false
}
}
{
"status": { "code": 0, "msg": "OK" },
"getSingleSubscriber": {
"subscriberId": 21046,
"accountId": 37,
"resellerId": 10,
"account": "Main Account",
"reseller": "Example Reseller",
"prepaid": true,
"balance": 0.0,
"activationDate": "2024-03-10T20:29:41",
"lastUsageDate": "2024-06-01T15:35:34",
"allowedMoc": true, "allowedMtc": true,
"allowedData": true, "allowedMosms": true,
"useAccountForCharging": true,
"imsiList": [{ "imsi": "248029018000011", "iccid": "893720401717000011" }],
"sim": {
"esim": true,
"status": "FREE",
"smdpServer": "smdp.esimtech.io",
"activationCode": "K2-1JL8YT-14S7I6K",
"pin1": "0561", "pin2": "1736", "puk2": "50913387"
},
"networkInfo": {
"lastMcc": 222, "lastMnc": 99,
"lastRat": "4G - LTE"
}
}
}
networkInfo is null if the subscriber has not yet been active on the network.listSubscriber
Search subscribers by prefix. At least one search parameter must be provided.
| Parameter | Presence | Description |
|---|---|---|
| imsiPrefix | Optional | Min 10 digits |
| iccidPrefix | Optional | Min 13 digits |
| msisdnPrefix | Optional | Min 7 digits |
| accountId | Optional | Return all subscribers in this account |
| activationCode | Optional | Exact eSIM activation code |
{ "listSubscriber": { "imsiPrefix": "9999900000" } }
affectSubscriberRealPhoneNumber
Assign a real phone number (MSISDN) to a subscriber.
| Parameter | Presence | Description |
|---|---|---|
| subscriber | Required | Subscriber identifier |
| phoneNumber | Required | The MSISDN to assign |
{
"affectSubscriberRealPhoneNumber": {
"subscriber": { "subscriberId": 1000 },
"phoneNumber": "31612345678"
}
}
affectSubscriberFakePhoneNumber
Assign a virtual (fake) phone number to a subscriber for internal routing purposes.
| Parameter | Presence | Description |
|---|---|---|
| subscriber | Required | Subscriber identifier |
| phoneNumber | Required | The fake MSISDN to assign |
{
"affectSubscriberFakePhoneNumber": {
"subscriber": { "subscriberId": 1000 },
"phoneNumber": "99901234567"
}
}
getSimProviderStatus
Retrieve the SIM provider status for a subscriber, including SM-DP+ provisioning state.
{
"getSimProviderStatus": {
"subscriber": { "subscriberId": 1000 }
}
}
modifySubscriberBalance
Adapt or set the balance of an individual subscriber. Works the same as account-level balance management.
| Parameter | Presence | Description |
|---|---|---|
| subscriber | Required | Subscriber identifier |
| amount | Required | Amount to add (negative to subtract) |
| setBalance | Optional | If true, sets balance instead of adapting |
| description | Optional | Reason for adjustment |
{
"modifySubscriberBalance": {
"subscriber": { "subscriberId": 1000 },
"amount": 50.00,
"description": "Manual top-up"
}
}
hlrSetBitrate
Set the bitrate (throttling) limit for a subscriber at the HLR level. Value in kbit/s.
| Parameter | Presence | Description |
|---|---|---|
| subscriber | Required | Subscriber identifier |
| bitrate | Required | Throttle limit in kbit/s (0 = no limit) |
{
"hlrSetBitrate": {
"subscriber": { "subscriberId": 1000 },
"bitrate": 256
}
}
hlrGetBitrate
Retrieve the current HLR bitrate setting for a subscriber.
{
"hlrGetBitrate": {
"subscriber": { "subscriberId": 1000 }
}
}
moveSubscriberRangeToAccount
Bulk-move a range of subscribers to a different account. Useful for account restructuring.
| Parameter | Presence | Description |
|---|---|---|
| fromAccountId | Required | Source account |
| toAccountId | Required | Destination account |
| imsiStart | Required | First IMSI of the range |
| imsiEnd | Required | Last IMSI of the range |
{
"moveSubscriberRangeToAccount": {
"fromAccountId": 10,
"toAccountId": 20,
"imsiStart": "248029018000001",
"imsiEnd": "248029018000100"
}
}
modifySubscriberContactInfo
Update the contact information (email, phone, company) for a subscriber.
| Parameter | Presence | Description |
|---|---|---|
| subscriber | Required | Subscriber identifier |
| Optional | New email address | |
| phone | Optional | New phone number |
| company | Optional | Company name |
{
"modifySubscriberContactInfo": {
"subscriber": { "subscriberId": 1000 },
"email": "user@example.com",
"company": "ACME Corp"
}
}
modifySubscriberStatus
Change the operational status of a subscriber. Only ACTIVE subscribers can use data, calls, and SMS.
Valid status values: ACTIVE · INACTIVE · DISCONNECTED · SUSPENDED · END_OF_LIFE
Note: END_OF_LIFE is final and cannot be reversed via API. The following operations are blocked in this state: status change, package assignment, phone number assignment, throttling, traffic restrictions, steering push, and SMS.
| Parameter | Presence | Description |
|---|---|---|
| subscriber | Required | Subscriber identifier |
| newStatus | Required | Target status |
{
"modifySubscriberStatus": {
"subscriber": { "subscriberId": 1000 },
"newStatus": "ACTIVE"
}
}
setSubscriberTrafficRestrictions
Configure allowed traffic types for a subscriber. SMS-MT (inbound SMS) is always allowed and cannot be restricted.
| Parameter | Presence | Description |
|---|---|---|
| subscriber | Required | Subscriber identifier |
| dataAllowed | Required | Allow data traffic |
| mocAllowed | Required | Allow mobile-originated calls |
| mtcAllowed | Required | Allow mobile-terminated calls |
| smsMoAllowed | Required | Allow mobile-originated SMS |
{
"setSubscriberTrafficRestrictions": {
"subscriber": { "subscriberId": 1000 },
"dataAllowed": true,
"mocAllowed": false,
"mtcAllowed": false,
"smsMoAllowed": true
}
}
modifySubscriberSteeringList
Update the network steering list assigned to a subscriber.
| Parameter | Presence | Description |
|---|---|---|
| subscriber | Required | Subscriber identifier |
| steeringListId | Required | ID of the steering list to assign |
{
"modifySubscriberSteeringList": {
"subscriber": { "subscriberId": 1000 },
"steeringListId": 3
}
}
pushSteeringToSubs
Push the current steering configuration to the subscriber's device immediately.
{
"pushSteeringToSubs": {
"subscriber": { "subscriberId": 1000 }
}
}
cleanSubscriberAllPackages
Remove all active prepaid packages from a subscriber. Use with caution — this action is immediate and cannot be undone.
{
"cleanSubscriberAllPackages": {
"subscriberId": 1000
}
}
resetSubsGzCounter
Reset the Green Zone (GZ) data counter for a subscriber. The counter tracks usage within the designated green zone.
{
"resetSubsGzCounter": { "subscriberId": 1000 }
}
getSubscriberLocation
Get the last known location of a subscriber based on the last serving cell tower. Returns latitude, longitude, accuracy in meters (50% confidence radius), and timestamp (UTC).
Returns no location if the subscriber has never been active, or if location data was not received during last usage.
{
"getSubscriberLocation": { "subscriberId": 1000 }
}
{
"status": { "code": 0, "msg": "OK" },
"subscriberLocation": {
"latitude": 52.3702,
"longitude": 4.8952,
"accuracy": 250,
"dateTime": "2024-10-15T12:00:00"
}
}
getSubscriberLocationByCellId
Look up location from a raw cell tower ID. Useful when you have network-level data but no subscriber context. cellId is optional but significantly improves accuracy.
| Parameter | Presence | Description |
|---|---|---|
| radioType | Required | 2G, 3G, 4G, 5G, or NB-IoT |
| mcc | Required | Mobile Country Code |
| mnc | Required | Mobile Network Code |
| lac | Required | Location Area Code |
| cellId | Optional | Cell tower ID (improves precision) |
{
"getSubscriberLocationByCellId": {
"radioType": "4G",
"mcc": 204, "mnc": 4,
"lac": 9830, "cellId": 79131751
}
}
changeSimStatus
Change the physical/eSIM card status (distinct from subscriber status). Used to lock, unlock, or deactivate the SIM itself.
| Parameter | Presence | Description |
|---|---|---|
| subscriber | Required | Subscriber identifier |
| newStatus | Required | New SIM status |
{
"changeSimStatus": {
"subscriber": { "subscriberId": 1000 },
"newStatus": "LOCKED"
}
}
3. Subscriber Prepaid Packages
Assign, modify, pause, and delete data/voice/SMS packages on subscribers.
affectPackageToSubscriber
Assign a one-time prepaid package to a subscriber. The package is consumed until exhausted or expired.
| Parameter | Presence | Description |
|---|---|---|
| subscriber | Required | Subscriber identifier |
| packageTemplateId | Required | ID of the package template to assign |
| startDate | Optional | Activation date (ISO 8601). Defaults to now. |
{
"affectPackageToSubscriber": {
"subscriber": { "subscriberId": 1000 },
"packageTemplateId": 42,
"startDate": "2024-06-01T00:00:00"
}
}
affectRecurringPackageToSubscriber
Assign a recurring (auto-renewing) prepaid package. The package automatically renews at the end of each billing period.
| Parameter | Presence | Description |
|---|---|---|
| subscriber | Required | Subscriber identifier |
| packageTemplateId | Required | ID of the recurring package template |
| startDate | Optional | First activation date (ISO 8601) |
{
"affectRecurringPackageToSubscriber": {
"subscriber": { "subscriberId": 1000 },
"packageTemplateId": 77
}
}
listSubscriberPrepaidPackages
List all active and pending prepaid packages for a subscriber.
{
"listSubscriberPrepaidPackages": {
"subscriber": { "subscriberId": 1000 }
}
}
modifySubscriberPrepaidPackageLimits
Update the volume or time limits on an existing subscriber package.
| Parameter | Presence | Description |
|---|---|---|
| subscriberPackageId | Required | ID of the subscriber's package instance |
| newVolumeMb | Optional | New data volume limit in MB |
| newDurationDays | Optional | New duration in days |
{
"modifySubscriberPrepaidPackageLimits": {
"subscriberPackageId": 5500,
"newVolumeMb": 10240
}
}
modifySubscriberPrepaidPackageExpDate
Change the expiry date of a subscriber's prepaid package.
| Parameter | Presence | Description |
|---|---|---|
| subscriberPackageId | Required | Package instance ID |
| newExpDate | Required | New expiry date (ISO 8601) |
{
"modifySubscriberPrepaidPackageExpDate": {
"subscriberPackageId": 5500,
"newExpDate": "2025-12-31T23:59:59"
}
}
modifySubscriberPrepaidPackageStatus
Activate or deactivate a specific subscriber package instance.
| Parameter | Presence | Description |
|---|---|---|
| subscriberPackageId | Required | Package instance ID |
| newStatus | Required | ACTIVE or INACTIVE |
{
"modifySubscriberPrepaidPackageStatus": {
"subscriberPackageId": 5500,
"newStatus": "ACTIVE"
}
}
stopResumeSubsRecurringPackage
Pause or resume automatic renewal of a recurring package. Stopping prevents the next renewal cycle; resuming re-enables it.
| Parameter | Presence | Description |
|---|---|---|
| subscriberPackageId | Required | Package instance ID |
| stop | Required | true to stop renewal; false to resume |
{
"stopResumeSubsRecurringPackage": {
"subscriberPackageId": 5500,
"stop": true
}
}
deleteSubscriberPackage
Permanently remove a package from a subscriber. This cannot be undone.
{
"deleteSubscriberPackage": {
"subscriberPackageId": 5500
}
}
modifySubscriberPrepaidPackageActivePeriod
Adjust the active period window of a prepaid package (when consumption counting starts/stops).
| Parameter | Presence | Description |
|---|---|---|
| subscriberPackageId | Required | Package instance ID |
| newStartDate | Optional | New start date (ISO 8601) |
| newEndDate | Optional | New end date (ISO 8601) |
{
"modifySubscriberPrepaidPackageActivePeriod": {
"subscriberPackageId": 5500,
"newStartDate": "2024-07-01T00:00:00",
"newEndDate": "2024-07-31T23:59:59"
}
}
modifySubscriberMobilePlan
Change the mobile charging plan assigned to a subscriber.
| Parameter | Presence | Description |
|---|---|---|
| subscriber | Required | Subscriber identifier |
| mobilePlanId | Required | New mobile plan ID |
{
"modifySubscriberMobilePlan": {
"subscriber": { "subscriberId": 1000 },
"mobilePlanId": 5
}
}
modifySubscriberVoipPlan
Change the VoIP charging plan assigned to a subscriber.
| Parameter | Presence | Description |
|---|---|---|
| subscriber | Required | Subscriber identifier |
| voipPlanId | Required | New VoIP plan ID |
{
"modifySubscriberVoipPlan": {
"subscriber": { "subscriberId": 1000 },
"voipPlanId": 3
}
}
4. Prepaid Package Templates
Create and manage the package templates that define data, voice, and SMS packages available for assignment.
listPrepaidPackageTemplate
Retrieve available prepaid package templates for a reseller.
| Parameter | Presence | Description |
|---|---|---|
| resellerId | Optional | Filter by reseller. Defaults to token owner. |
{ "listPrepaidPackageTemplate": { "resellerId": 1 } }
listLocationZoneElement
List all operators (TADIG codes) available within a specific location zone.
| Parameter | Presence | Description |
|---|---|---|
| locationZoneId | Required | ID of the location zone |
{ "listLocationZoneElement": { "locationZoneId": 46 } }
listDestinationListPrefix
List dial prefixes in a destination list (used for voice/SMS tariff routing).
| Parameter | Presence | Description |
|---|---|---|
| destinationListId | Required | ID of the destination list |
{ "listDestinationListPrefix": { "destinationListId": 12 } }
listDetailedLocationZone
List all location zones with full TADIG operator details for a network profile.
| Parameter | Presence | Description |
|---|---|---|
| networkProfileId | Required | Network profile ID |
{ "listDetailedLocationZone": { "networkProfileId": 79 } }
listDetailedDestinationList
List destination lists with full prefix details for a network profile.
| Parameter | Presence | Description |
|---|---|---|
| networkProfileId | Required | Network profile ID |
{ "listDetailedDestinationList": { "networkProfileId": 79 } }
createPrepaidPackageTemplate
Create a new prepaid package template. Defines the data volume, validity, throttling, and location zones for the package.
| Parameter | Presence | Description |
|---|---|---|
| networkProfileId | Required | Network profile that owns this template |
| name | Required | Display name of the package |
| volumeMb | Optional | Data allowance in MB (0 = unlimited) |
| validityDays | Optional | Package validity in days |
| locationZoneId | Optional | Restrict usage to this location zone |
| throttlingKbs | Optional | Speed cap in kbit/s after exhaustion |
{
"createPrepaidPackageTemplate": {
"networkProfileId": 79,
"name": "Europe 10GB / 30 days",
"volumeMb": 10240,
"validityDays": 30,
"locationZoneId": 46,
"throttlingKbs": 128
}
}
modifyPPTCore
Modify the core properties of an existing package template (name, volume, validity).
| Parameter | Presence | Description |
|---|---|---|
| packageTemplateId | Required | Template ID to modify |
| name | Optional | New template name |
| volumeMb | Optional | New data allowance in MB |
| validityDays | Optional | New validity period in days |
{
"modifyPPTCore": {
"packageTemplateId": 42,
"name": "Europe 15GB / 30 days",
"volumeMb": 15360
}
}
modifyPPTRecurring
Modify the recurring billing settings of a package template.
| Parameter | Presence | Description |
|---|---|---|
| packageTemplateId | Required | Template ID |
| isRecurring | Required | Enable or disable auto-renewal |
| recurringDays | Optional | Renewal interval in days |
{
"modifyPPTRecurring": {
"packageTemplateId": 42,
"isRecurring": true,
"recurringDays": 30
}
}
modifyPPTThrottling
Update the post-exhaustion throttling configuration for a package template.
| Parameter | Presence | Description |
|---|---|---|
| packageTemplateId | Required | Template ID |
| throttlingKbs | Required | Post-exhaustion speed cap in kbit/s (0 = block) |
{
"modifyPPTThrottling": {
"packageTemplateId": 42,
"throttlingKbs": 64
}
}
5. Tariff
Retrieve tariff information at reseller, subscriber, and VoIP level.
listResellerTariff
List all tariff plans available to a reseller.
{ "listResellerTariff": { "resellerId": 1 } }
listSubscriberTariff
List tariff plans applicable to a specific subscriber.
{ "listSubscriberTariff": { "subscriberId": 1000 } }
listTariffRule
Retrieve the individual charging rules within a tariff plan.
| Parameter | Presence | Description |
|---|---|---|
| tariffId | Required | Tariff plan ID |
{ "listTariffRule": { "tariffId": 5 } }
getCustomerTariff
Get the effective tariff for a subscriber, accounting for account and reseller-level overrides.
{ "getCustomerTariff": { "subscriberId": 1000 } }
listSubscriberVoipTariff
List VoIP tariff plans available to a subscriber.
{ "listSubscriberVoipTariff": { "subscriberId": 1000 } }
listVoipTariffRule
Retrieve the charging rules within a VoIP tariff plan.
| Parameter | Presence | Description |
|---|---|---|
| voipTariffId | Required | VoIP tariff plan ID |
{ "listVoipTariffRule": { "voipTariffId": 3 } }
6. Statistics
Query subscriber usage, network events, and activity periods.
getSubscriberActivePeriod
Retrieve the periods during which a subscriber was active (had network sessions).
| Parameter | Presence | Description |
|---|---|---|
| subscriber | Required | Subscriber identifier |
| fromDate | Optional | Start of query window (ISO 8601) |
| toDate | Optional | End of query window (ISO 8601) |
{
"getSubscriberActivePeriod": {
"subscriber": { "subscriberId": 1000 },
"fromDate": "2024-01-01T00:00:00",
"toDate": "2024-03-31T23:59:59"
}
}
subscriberUsageOverPeriod
Get data, voice, and SMS usage totals for a subscriber over a specified period.
| Parameter | Presence | Description |
|---|---|---|
| subscriber | Required | Subscriber identifier |
| fromDate | Required | Period start (ISO 8601) |
| toDate | Required | Period end (ISO 8601) |
{
"subscriberUsageOverPeriod": {
"subscriber": { "subscriberId": 1000 },
"fromDate": "2024-06-01T00:00:00",
"toDate": "2024-06-30T23:59:59"
}
}
subscriberNetworkEventsOverPeriod
Retrieve detailed network events (attach, detach, handover, location updates) for a subscriber in a time window.
| Parameter | Presence | Description |
|---|---|---|
| subscriber | Required | Subscriber identifier |
| fromDate | Required | Period start (ISO 8601) |
| toDate | Required | Period end (ISO 8601) |
| eventTypes | Optional | Filter by event type array |
{
"subscriberNetworkEventsOverPeriod": {
"subscriber": { "subscriberId": 1000 },
"fromDate": "2024-06-01T00:00:00",
"toDate": "2024-06-01T23:59:59"
}
}
7. SMS
Send mobile-terminated SMS to subscribers.
sendMtSms
Send an SMS to a subscriber (mobile-terminated). The sender address and message text are configurable.
| Parameter | Presence | Description |
|---|---|---|
| subscriber | Required | Subscriber identifier |
| sender | Required | Sender address (number or alphanumeric) |
| message | Required | SMS text content |
{
"sendMtSms": {
"subscriber": { "subscriberId": 1000 },
"sender": "eSIMTECH",
"message": "Your data package has been activated."
}
}
8. Network Profile
Manage network profiles and create location zones for operator-level routing.
listNetworkProfile
List network profiles. Filter by resellerId, sponsorId, both, or neither (returns all).
| Parameter | Presence | Description |
|---|---|---|
| resellerId | Optional | Filter by reseller |
| sponsorId | Optional | Filter by sponsor |
{
"listNetworkProfile": {
"resellerId": 10,
"sponsorId": 108
}
}
{
"status": { "code": 0, "msg": "OK" },
"listNetworkProfile": [{
"id": 105,
"name": "Europe Standard Profile",
"sponsorId": 108,
"sponsorName": "SP05",
"resellerId": 10,
"resellerName": "Example Reseller",
"allowedListId": 162
}]
}
createLocationZone
Create a new location zone within a network profile. A location zone is a named group of mobile network operators (identified by TADIG code) used to define geographic coverage for package templates.
Before creating, the platform validates:
- The zone name does not already exist for this reseller
- All provided TADIG codes exist in the system
- No existing zone has the identical operator set (to prevent duplicates)
- All operators are present in the reseller tariff, provided by the sponsor, and within cost limits
| Parameter | Presence | Description |
|---|---|---|
| networkProfileId | Required | Owning network profile |
| locationZoneName | Required | Display name for the new zone |
| tadigList | Required | Array of TADIG operator codes |
{
"createLocationZone": {
"networkProfileId": 79,
"locationZoneName": "Benelux",
"tadigList": [ "NLMTN", "BELVOO", "LUXMT" ]
}
}
{
"status": { "code": 0, "msg": "OK" },
"createLocationZone": {
"newLZ": { "Id": 1924, "name": "Benelux" }
}
}
{
"status": { "code": 10001, "msg": "Unknown TADIG, see list in this answer" },
"createLocationZone": { "invalidTadigs": [ "AZER1" ] }
}
{
"status": { "code": 10002, "msg": "LZ with same operator already exist" },
"createLocationZone": {
"existingLZ": { "Id": 1923, "name": "Existing Benelux Zone" }
}
}
{
"status": { "code": 10003, "msg": "Some operator(s) not allowed in reseller tariff" },
"createLocationZone": { "invalidTadigs": [ "JPNKD" ] }
}
Error Codes
All responses include a status.code field. Code 0 indicates success.
| Code | Identifier | Description |
|---|---|---|
| 0 | OK | Request successful |
| 1 | UNKNOWN_REQUEST | The operation name in the request body is not recognised |
| 2 | INVALID_REQUEST | Request body is malformed or missing required fields |
| 3 | UNEXPECTED_ERROR | Internal server error — contact support if this persists |
| 4 | DB_DUPLICATE_ENTRY | A record with the same unique key already exists |
| 5 | DB_DATA_INCONSISTENCY | Data integrity issue detected in the database |
| 6 | DB_NOT_FOUND | The referenced record does not exist |
| 7 | DB_ERROR | Generic database error |
| 8 | NO_API_ACCOUNT_FOR_RESELLER | No API account is configured for this reseller |
| 9 | SRC_IP_NOT_AUTHORISED | The client IP address is not on the allowlist |
| 10 | INVALID_RESELLER | The provided reseller ID is invalid or inaccessible |
| 11 | RESOURCE_NOT_VISIBLE | The resource exists but is not visible to the current API token |
| 12 | RESOURCE_READ_ONLY | The resource cannot be modified |
| 13 | SMS_API_ERROR | Error communicating with the SMS delivery service |
| 14 | OPERATION_IMPOSSIBLE | The requested operation is not allowed in the current state |
| 15 | HLR_API_ERROR | Error communicating with the HLR |
| 16 | STEERING_API_ERROR | Error communicating with the steering service |
| 17 | SUBS_END_OF_LIFE | Subscriber is in END_OF_LIFE state — operation not permitted |
| 18 | TIMEOUT | Upstream service did not respond in time |
| 100 | TRAFFIC_CONTROL_LIMIT_EXCEEDED | API rate limit exceeded — slow down request frequency |
| 10001 | UNKNOWN_TADIG | One or more TADIG codes in createLocationZone are not recognised |
| 10002 | LZ_DUPLICATE_OPERATORS | A location zone with the identical operator set already exists |
| 10003 | OPERATOR_NOT_IN_TARIFF | Operator(s) not present in the reseller tariff |
| 10004 | OPERATOR_NOT_AVAILABLE | Operator(s) not provided by sponsor or exceed cost limits |