Docs
Query Profiles

Query Profiles

Query allocated eSIM profiles and order status

Query Profiles

Query the status of your allocated eSIM profiles and orders.

Query All Allocated Profiles

Endpoint: POST /api/v1/open/esim/query

Request Parameters

NameTypeRequiredDescriptionExample
orderNoStringOptionalPlatform order numberORD20240101123456
iccidStringOptionaleSIM ICCID8901234567890123456
startTimeStringOptionalQuery start time (UTC)2024-01-01 00:00:00
endTimeStringOptionalQuery end time (UTC)2024-01-31 23:59:59
pageSizeIntegerOptionalResults per page (max 100)20
pageNoIntegerOptionalPage number1

At least one filter parameter is required: orderNo, iccid, or time period (startTime + endTime).

Example Request - Query by Order Number

curl --location --request POST 'https://your-api-domain.com/api/v1/open/esim/query' \
--header 'RT-AccessCode: YOUR_ACCESS_CODE' \
--header 'RT-SecretKey: YOUR_SECRET_KEY' \
--header 'Content-Type: application/json' \
--data '{
    "orderNo": "ORD20240101123456"
}'

Example Request - Query by ICCID

curl --location --request POST 'https://your-api-domain.com/api/v1/open/esim/query' \
--header 'RT-AccessCode: YOUR_ACCESS_CODE' \
--header 'RT-SecretKey: YOUR_SECRET_KEY' \
--header 'Content-Type: application/json' \
--data '{
    "iccid": "8901234567890123456"
}'

Example Request - Query by Time Period

curl --location --request POST 'https://your-api-domain.com/api/v1/open/esim/query' \
--header 'RT-AccessCode: YOUR_ACCESS_CODE' \
--header 'RT-SecretKey: YOUR_SECRET_KEY' \
--header 'Content-Type: application/json' \
--data '{
    "startTime": "2024-01-01 00:00:00",
    "endTime": "2024-01-31 23:59:59",
    "pageSize": 50,
    "pageNo": 1
}'

Response Parameters

NameTypeDescription
successBooleantrue = succeeded, false = failed
errorCodeStringError code when failed
errorMsgStringError message
obj.esimListArrayList of eSIM profiles
obj.totalIntegerTotal number of results
obj.pageNoIntegerCurrent page number
obj.pageSizeIntegerResults per page

eSIM Object

FieldTypeDescriptionExample
orderNoStringOrder numberORD20240101123456
iccidStringeSIM ICCID8901234567890123456
esimTranNoStringeSIM transaction numberESIM123456
packageCodeStringPackage codeTH_1_7
packageNameStringPackage nameThailand 1GB 7 Days
smdpAddressStringSM-DP+ server addresssmdp.example.com
matchIdStringActivation codeXXXX-XXXX-XXXX-XXXX
profileStatusStringCurrent statusACTIVATED
usedVolumeLongUsed data in bytes524288000
totalVolumeLongTotal data in bytes1073741824
expiredTimeStringExpiry date (UTC)2024-02-07 00:00:00
createTimeStringOrder creation time2024-01-01 12:00:00
qrCodeStringBase64 QR code imagedata:image/png;base64,...
appleInstallUrlStringApple direct install URLhttps://esimsetup.apple.com/...

Example Success Response

{
    "errorCode": null,
    "errorMsg": null,
    "success": true,
    "obj": {
        "esimList": [
            {
                "orderNo": "ORD20240101123456",
                "iccid": "8901234567890123456",
                "esimTranNo": "ESIM123456",
                "packageCode": "TH_1_7",
                "packageName": "Thailand 1GB 7 Days",
                "smdpAddress": "smdp.example.com",
                "matchId": "XXXX-XXXX-XXXX-XXXX",
                "profileStatus": "ACTIVATED",
                "usedVolume": 524288000,
                "totalVolume": 1073741824,
                "expiredTime": "2024-02-07 00:00:00",
                "createTime": "2024-01-01 12:00:00",
                "qrCode": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...",
                "appleInstallUrl": "https://esimsetup.apple.com/esim_qrcode_provisioning?carddata=..."
            }
        ],
        "total": 1,
        "pageNo": 1,
        "pageSize": 20
    }
}

Profile Status Values

StatusDescription
GOT_RESOURCEProfile allocated, ready for download
ACTIVATEDProfile downloaded and activated
IN_USEProfile is actively being used
USED_UPData exhausted
EXPIREDProfile validity expired
CANCELLEDProfile cancelled
SUSPENDEDProfile temporarily suspended
REVOKEDProfile permanently revoked

Calculating Data Usage

Data values are in bytes. To convert:

// Convert bytes to human readable
function formatBytes(bytes) {
    if (bytes === 0) return '0 B';
    const k = 1024;
    const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
    const i = Math.floor(Math.log(bytes) / Math.log(k));
    return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
}
 
// Calculate remaining data percentage
const usedVolume = 524288000;  // 500 MB
const totalVolume = 1073741824; // 1 GB
const remainingPercent = ((totalVolume - usedVolume) / totalVolume * 100).toFixed(1);
// Result: 51.2%

Pagination

For large result sets, use pagination:

# Get first page
curl --location --request POST 'https://your-api-domain.com/api/v1/open/esim/query' \
--header 'RT-AccessCode: YOUR_ACCESS_CODE' \
--header 'RT-SecretKey: YOUR_SECRET_KEY' \
--header 'Content-Type: application/json' \
--data '{
    "startTime": "2024-01-01 00:00:00",
    "endTime": "2024-12-31 23:59:59",
    "pageSize": 100,
    "pageNo": 1
}'
 
# Get second page
curl --location --request POST 'https://your-api-domain.com/api/v1/open/esim/query' \
--header 'RT-AccessCode: YOUR_ACCESS_CODE' \
--header 'RT-SecretKey: YOUR_SECRET_KEY' \
--header 'Content-Type: application/json' \
--data '{
    "startTime": "2024-01-01 00:00:00",
    "endTime": "2024-12-31 23:59:59",
    "pageSize": 100,
    "pageNo": 2
}'