Skip to content
API list

Supported SimplifyTrip APIs

SimplifyTrip APIs are built on REST. Endpoints use predictable resource-oriented URLs, accept request payloads, return JSON, and use standard HTTP status codes.

You can use SimplifyTrip APIs in Test Mode without affecting real data. The API key used in authentication determines whether the request runs in LIVE_MODE or TEST_MODE.

Authentication

SimplifyTrip API uses API keys to authenticate requests. You can manage your API keys in API Keys Settings.

Test API keys start with pk_test_, live API keys start with pk_live_.

Test secret keys start with sk_test_, live secret keys start with sk_live_.

Keep keys secure. Do not expose API Key or Secret Key in public places such as GitHub or client-side code.

All API requests must be made over HTTPS.

Base URL

All current web services start with the base path below (BASE_URL):

Try with Swagger: SimplifyTrip Open API.

Requirements

  • Api Key and Secret Key

    Every request to SimplifyTrip API MUST include Api Key and Secret Key in headers.


_10
X-Api-Key: "pk_live_xxxxxxxxxxxxxxxxxx"
_10
Authorization: "Bearer sk_live_xxxxxxxxxxxxxxxxxx"

  • Content Type

    The request content type MUST be application/json.


_10
Content-Type: "application/json"

  • Internationalization

    Multilingual support is available. It’s not mandatory; English is the default. SimplifyTrip currently supports English (en) and Vietnamese (vi).


_10
X-Lang: "vi"

Product API

All endpoints require Authorization: Bearer <secretKey> and X-Api-Key: <publicKey>. Every POST also requires Content-Type: application/json and X-Signature, calculated from the complete request body using your checksumKey. Recalculate the signature whenever the body changes. See signature generation. GET requests do not require X-Signature. Data is scoped to your institution and the API key’s test/live mode.

Get product list API

Returns all products distributed by SimplifyTrip.

Query Parameters
typestring

eSIM | SIM | SIM_RECHARGE Product type to filter by. Leave empty to get all.

querystring

Search keyword by name, id, country, or region…

countryIdstring

Country ID

regionIdstring

Region ID

takenumber

Number of results returned per page

skipnumber

Starting offset for returned results.

Responses
200 OK
application/json
Success
total - requirednumber
take - requirednumber
skip - requirednumber
items - requiredobject[]Products returned for the requested page.
spustringProduct identifier (SPU).
createdAtstringCreation time in ISO 8601 format.
updatedAtstringLast update time in ISO 8601 format.
nameobjectLocalized product name.
vistringVietnamese value.
enstringEnglish value.
slugobjectLocalized product slug.
vistringVietnamese value.
enstringEnglish value.
metadataobjectLocalized product metadata.
vistringVietnamese value.
enstringEnglish value.
typestringProduct type: eSIM, SIM or SIM_RECHARGE.
thumbnailstringProduct thumbnail URL.
regionsobject[]Regions associated with the product.
idstringRegion identifier.
nameobjectLocalized region name.
vistringVietnamese value.
enstringEnglish value.
thumbnailstringRegion thumbnail URL.
countriesobject[]Countries associated with the product.
idstringCountry identifier.
nameobjectLocalized country name.
vistringVietnamese value.
enstringEnglish value.
mccstringCountry MCC value.
mcc3stringCountry MCC3 value.
continentstringContinent associated with the country.
thumbnailstringCountry thumbnail URL.
4xx/5xx Error
application/json
Error
timestamptimestamp
statusCodenumber
errorCodestring
messagestring
GET
/api/v1/products
Sample Request
Try it on Swagger
Nodejs
PHP
C#
Java
Go
Curl

_35
// Using axios
_35
import axios from 'axios';
_35
_35
const options = {
_35
method: 'GET',
_35
url: 'https://merchant.simplifytrip.com/api/v1/products?take=10&skip=1',
_35
headers: {
_35
accept: 'application/json',
_35
'content-type': 'application/json',
_35
authorization: 'Bearer sk_live_xxxxxxxxxxxxxxxxxx',
_35
'x-api-key': 'pk_live_xxxxxxxxxxxxxxxxxx',
_35
}
_35
};
_35
_35
axios
_35
.request(options)
_35
.then(res => console.log(res.data))
_35
.catch(err => console.error(err));
_35
_35
// Using fetch api
_35
const url = 'https://merchant.simplifytrip.com/api/v1/products?take=10&skip=1';
_35
const options = {
_35
method: 'GET',
_35
headers: {
_35
accept: 'application/json',
_35
'content-type': 'application/json',
_35
authorization: 'Bearer sk_live_xxxxxxxxxxxxxxxxxx',
_35
'x-api-key': 'pk_live_xxxxxxxxxxxxxxxxxx',
_35
}
_35
};
_35
_35
fetch(url, options)
_35
.then(res => res.json())
_35
.then(json => console.log(json))
_35
.catch(err => console.error(err));

Sample Response

_52
{
_52
"total": 100,
_52
"skip": 0,
_52
"take": 10,
_52
"items": [
_52
{
_52
"spu": "EHKXY",
_52
"createdAt": "2024-10-21T03:07:09.818Z",
_52
"updatedAt": "2024-10-21T03:07:09.818Z",
_52
"name": {
_52
"vi": "eSIM Hong Kong, Macau high-speed 4G, data-only",
_52
"en": "eSIM HongKong, Macao 4G high speed, data only"
_52
},
_52
"slug": {
_52
"vi": "esim-trung-quoc-hongkong-macao-4g-chi-co-data",
_52
"en": "esim-china-hongkong-macao-4g-data-only"
_52
},
_52
"metadata": {
_52
"vi": "<ul>\n <li><strong>Nhà cung cấp:</strong> BC</li>\n <li>Thời gian làm mới dung lượng: 00:00 - 24:00 (UTC+8)</li>\n <li>Quét mã QR trước chuyến bay và bật Chuyển vùng dữ liệu khi đến nơi.</li>\n <li>Hotspot: Hỗ trợ</li>\n <li><strong>Android:</strong> ❌ Không hỗ trợ TikTok</li>\n <li><strong>iOS:</strong> ❌ Không hỗ trợ TikTok</li>\n <li><strong>Phạm vi phủ sóng:</strong> Trung Quốc, Hongkong, Macao</li>\n <li><strong>Nhà mạng:</strong> CSL,\tChina Telecom HK(CSL),ChinaTelecom (4G/5G)</li>\n <li><strong>APN:</strong> CTExcel</li>\n <li>Tốc độ giảm còn 384kbps sau khi sử dụng hết dung lượng tốc độ cao trong ngày.</li>\n <li><strong>TikTok:</strong> Tắt Truy cập vị trí, Hoạt động trực tiếp và Cho phép theo dõi trước khi khởi hành. Nhà cung cấp không chịu trách nhiệm nếu chưa thực hiện các bước trên.</li>\n</ul>",
_52
"en": "<ul>\n <li><strong>Provider:</strong> BC</li>\n <li>Data refresh time: 00:00 - 24:00 (UTC+8)</li>\n <li>Scan the QR code before your flight and enable Data Roaming upon arrival.</li>\n <li>Hotspot: Supported</li>\n <li><strong>Android:</strong> ❌ TikTok not supported</li>\n <li><strong>iOS:</strong> ❌ TikTok not supported</li>\n <li><strong>Coverage:</strong> China, Hong Kong, Macau</li>\n <li><strong>Network operators:</strong> CSL, China Telecom HK (CSL), China Telecom (4G/5G)</li>\n <li><strong>APN:</strong> CTExcel</li>\n <li>Speed reduced to 384kbps after using the daily high-speed data limit.</li>\n <li><strong>TikTok:</strong> Turn off Location Access, Live Activities, and Allow Tracking before departure. The provider is not responsible if these steps are not followed.</li>\n</ul>"
_52
},
_52
"type": "eSIM",
_52
"thumbnail": "https://awssimplifytrip.s3.ap-southeast-1.amazonaws.com/esim/esim-hongkong-macao.jpg",
_52
"regions": [],
_52
"countries": [
_52
{
_52
"id": "HK",
_52
"name": {
_52
"vi": "Hong Kong",
_52
"en": "Hong Kong"
_52
},
_52
"thumbnail": "https://awssimplifytrip.s3.ap-southeast-1.amazonaws.com/flag/hongkong-flag.jpg",
_52
"mcc": "HK",
_52
"mcc3": "HKG",
_52
"continent": "Asia"
_52
},
_52
{
_52
"id": "MO",
_52
"name": {
_52
"vi": "Macau (China)",
_52
"en": "Macau (China)"
_52
},
_52
"thumbnail": "https://op-flow-public.oss-cn-hangzhou.aliyuncs.com/module/country/aomen.png",
_52
"mcc": "MO",
_52
"mcc3": "MAC",
_52
"continent": "Asia"
_52
}
_52
]
_52
},
_52
...
_52
]
_52
}

Get product details API

Get product detail by slug or SPU

Path Parameters
spu - requiredstring

Slug or SPU from list API

Responses
200 OK
application/json
Success
spustringProduct identifier (SPU).
createdAtstringCreation time in ISO 8601 format.
updatedAtstringLast update time in ISO 8601 format.
nameobjectLocalized name.
vistringVietnamese value.
enstringEnglish value.
slugobjectLocalized product slug.
vistringVietnamese value.
enstringEnglish value.
metadataobjectLocalized product metadata.
vistringVietnamese value.
enstringEnglish value.
typestringProduct type: eSIM, SIM or SIM_RECHARGE.
thumbnailstringThumbnail URL.
regionsobject[]Regions associated with the product.
idstringIdentifier.
nameobjectLocalized name.
vistringVietnamese value.
enstringEnglish value.
thumbnailstringThumbnail URL.
countriesobject[]Countries associated with the product.
idstringIdentifier.
nameobjectLocalized name.
vistringVietnamese value.
enstringEnglish value.
mccstringCountry MCC value.
mcc3stringCountry MCC3 value.
continentstringContinent associated with the country.
thumbnailstringThumbnail URL.
variationsobject[]Available product variations.
skustringVariation identifier (SKU).
nameobjectLocalized name.
vistringVietnamese value.
enstringEnglish value.
pricenumberVariation price.
priceFloornumberFloor price.
discountnumberDiscount value.
highFlowSizenumberHigh-speed data allowance.
daysnumberPackage validity in days.
packagestringPackage type, for example DAILY.
datastringData allowance description.
throttleSpeedstringSpeed after the high-speed allowance is used.
smsCallstringSMS and call information.
apnstringAccess point name (APN).
pointContactTypestringContact point type.
hotsPotbooleanWhether hotspot sharing is supported.
4xx/5xx Error
application/json
Error
timestamptimestamp
statusCodenumber
errorCodestring
messagestring
GET
/api/v1/products/:spu
Sample Request
Try it on Swagger
Nodejs
PHP
C#
Java
Go
Curl

_35
// Using axios
_35
import axios from 'axios';
_35
_35
const options = {
_35
method: 'GET',
_35
url: 'https://merchant.simplifytrip.com/api/v1/products/EHKXY',
_35
headers: {
_35
accept: 'application/json',
_35
'content-type': 'application/json',
_35
authorization: 'Bearer sk_live_xxxxxxxxxxxxxxxxxx',
_35
'x-api-key': 'pk_live_xxxxxxxxxxxxxxxxxx',
_35
}
_35
};
_35
_35
axios
_35
.request(options)
_35
.then(res => console.log(res.data))
_35
.catch(err => console.error(err));
_35
_35
// Using fetch api
_35
const url = 'https://merchant.simplifytrip.com/api/v1/products/EHKXY';
_35
const options = {
_35
method: 'GET',
_35
headers: {
_35
accept: 'application/json',
_35
'content-type': 'application/json',
_35
authorization: 'Bearer sk_live_xxxxxxxxxxxxxxxxxx',
_35
'x-api-key': 'pk_live_xxxxxxxxxxxxxxxxxx',
_35
}
_35
};
_35
_35
fetch(url, options)
_35
.then(res => res.json())
_35
.then(json => console.log(json))
_35
.catch(err => console.error(err));

Sample Response

_84
{
_84
"spu": "EHKXY",
_84
"createdAt": "2024-10-21T03:07:09.818Z",
_84
"updatedAt": "2024-10-21T03:07:09.818Z",
_84
"name": {
_84
"vi": "eSIM Hong Kong, Macau high-speed 4G, data-only",
_84
"en": "eSIM HongKong, Macao 4G high speed, data only"
_84
},
_84
"slug": {
_84
"vi": "esim-hongkong-macao-toc-do-cao-4g-data",
_84
"en": "esim-hongkong-macao-4g-high-speed-data-only"
_84
},
_84
"metadata": {
_84
"vi": "<ul>\n <li><strong>Nhà cung cấp:</strong> BC</li>\n <li>Thời gian làm mới dung lượng: 00:00 - 24:00 (UTC+8)</li>\n <li>Quét mã QR trước chuyến bay và bật Chuyển vùng dữ liệu khi đến nơi.</li>\n <li>Hotspot: Hỗ trợ</li>\n <li><strong>Android:</strong> ❌ Không hỗ trợ TikTok</li>\n <li><strong>iOS:</strong> ❌ Không hỗ trợ TikTok</li>\n <li><strong>Phạm vi phủ sóng:</strong> Trung Quốc, Hongkong, Macao</li>\n <li><strong>Nhà mạng:</strong> CSL,\tChina Telecom HK(CSL),ChinaTelecom (4G/5G)</li>\n <li><strong>APN:</strong> CTExcel</li>\n <li>Tốc độ giảm còn 384kbps sau khi sử dụng hết dung lượng tốc độ cao trong ngày.</li>\n <li><strong>TikTok:</strong> Tắt Truy cập vị trí, Hoạt động trực tiếp và Cho phép theo dõi trước khi khởi hành. Nhà cung cấp không chịu trách nhiệm nếu chưa thực hiện các bước trên.</li>\n</ul>",
_84
"en": "<ul>\n <li><strong>Provider:</strong> BC</li>\n <li>Data refresh time: 00:00 - 24:00 (UTC+8)</li>\n <li>Scan the QR code before your flight and enable Data Roaming upon arrival.</li>\n <li>Hotspot: Supported</li>\n <li><strong>Android:</strong> ❌ TikTok not supported</li>\n <li><strong>iOS:</strong> ❌ TikTok not supported</li>\n <li><strong>Coverage:</strong> China, Hong Kong, Macau</li>\n <li><strong>Network operators:</strong> CSL, China Telecom HK (CSL), China Telecom (4G/5G)</li>\n <li><strong>APN:</strong> CTExcel</li>\n <li>Speed reduced to 384kbps after using the daily high-speed data limit.</li>\n <li><strong>TikTok:</strong> Turn off Location Access, Live Activities, and Allow Tracking before departure. The provider is not responsible if these steps are not followed.</li>\n</ul>"
_84
},
_84
"type": "eSIM",
_84
"thumbnail": "https://awssimplifytrip.s3.ap-southeast-1.amazonaws.com/esim/esim-hongkong-macao.jpg",
_84
"regions": [],
_84
"countries": [
_84
{
_84
"id": "HK",
_84
"name": {
_84
"vi": "Hong Kong",
_84
"en": "Hong Kong"
_84
},
_84
"thumbnail": "https://awssimplifytrip.s3.ap-southeast-1.amazonaws.com/flag/hongkong-flag.jpg",
_84
"mcc": "HK",
_84
"mcc3": "HKG",
_84
"continent": "Asia"
_84
},
_84
{
_84
"id": "MO",
_84
"name": {
_84
"vi": "Macau (China)",
_84
"en": "Macau (China)"
_84
},
_84
"thumbnail": "https://op-flow-public.oss-cn-hangzhou.aliyuncs.com/module/country/aomen.png",
_84
"mcc": "MO",
_84
"mcc3": "MAC",
_84
"continent": "Asia"
_84
}
_84
],
_84
"variations": [
_84
{
_84
"sku": "EHKXY02GB05DPY",
_84
"name": {
_84
"vi": "eSIM Hong Kong, Macau high-speed 4G, data-only (2GB/day - 5 days)",
_84
"en": "eSIM for Hong Kong travel with unlimited 4G high-speed capacity, only data (2GB/day - 5 days)"
_84
},
_84
"price": 270000,
_84
"priceFloor": 270000,
_84
"discount": 0,
_84
"highFlowSize": 2097152,
_84
"days": 5,
_84
"package": "DAILY",
_84
"data": "2GB",
_84
"throttleSpeed": "128kpbs",
_84
"smsCall": "TikTok is not supported",
_84
"apn": "Auto",
_84
"pointContactType": null,
_84
"hotsPot": true
_84
},
_84
{
_84
"sku": "EHKXY02GB07DPY",
_84
"name": {
_84
"vi": "eSIM Hong Kong, Macau high-speed 4G, data-only (2GB/day - 7 days)",
_84
"en": "eSIM for Hong Kong travel with unlimited 4G high-speed capacity, only data (2GB/day - 7 days)"
_84
},
_84
"price": 356000,
_84
"priceFloor": 356000,
_84
"discount": 0,
_84
"highFlowSize": 2097152,
_84
"days": 7,
_84
"package": "DAILY",
_84
"data": "2GB",
_84
"throttleSpeed": "128kpbs",
_84
"smsCall": "TikTok is not supported",
_84
"apn": "Auto",
_84
"pointContactType": null,
_84
"hotsPot": true
_84
}
_84
]
_84
}

Get variation list API

Returns all products distributed by SimplifyTrip.

Query Parameters
typestring

eSIM | SIM | SIM_RECHARGE Product type to filter by. Leave empty to get all.

querystring

Search keyword by name, id, country, or region…

spustring

Product ID (SPU)

countryIdstring

Country ID

regionIdstring

Region ID

takenumber

Number of results returned per page

skipnumber

Starting offset for returned results.

Responses
200 OK
application/json
Success
total - requirednumber
take - requirednumber
skip - requirednumber
items - requiredobject[]Items returned for the requested page.
skustringVariation identifier (SKU).
nameobjectLocalized name.
vistringVietnamese value.
enstringEnglish value.
pricenumberVariation price.
priceFloornumberFloor price.
discountnumberDiscount value.
highFlowSizenumberHigh-speed data allowance.
daysnumberPackage validity in days.
packagestringPackage type, for example DAILY.
datastringData allowance description.
throttleSpeedstringSpeed after the high-speed allowance is used.
smsCallstringSMS and call information.
apnstringAccess point name (APN).
pointContactTypestringContact point type.
hotsPotbooleanWhether hotspot sharing is supported.
spustringProduct identifier (SPU).
4xx/5xx Error
application/json
Error
timestamptimestamp
statusCodenumber
errorCodestring
messagestring
GET
/api/v1/products/variations
Sample Request
Try it on Swagger
Nodejs
PHP
C#
Java
Go
Curl

_35
// Using axios
_35
import axios from 'axios';
_35
_35
const options = {
_35
method: 'GET',
_35
url: 'https://merchant.simplifytrip.com/api/v1/products/variations?take=10&skip=1',
_35
headers: {
_35
accept: 'application/json',
_35
'content-type': 'application/json',
_35
authorization: 'Bearer sk_live_xxxxxxxxxxxxxxxxxx',
_35
'x-api-key': 'pk_live_xxxxxxxxxxxxxxxxxx',
_35
}
_35
};
_35
_35
axios
_35
.request(options)
_35
.then(res => console.log(res.data))
_35
.catch(err => console.error(err));
_35
_35
// Using fetch api
_35
const url = 'https://merchant.simplifytrip.com/api/v1/products/variations?take=10&skip=1';
_35
const options = {
_35
method: 'GET',
_35
headers: {
_35
accept: 'application/json',
_35
'content-type': 'application/json',
_35
authorization: 'Bearer sk_live_xxxxxxxxxxxxxxxxxx',
_35
'x-api-key': 'pk_live_xxxxxxxxxxxxxxxxxx',
_35
}
_35
};
_35
_35
fetch(url, options)
_35
.then(res => res.json())
_35
.then(json => console.log(json))
_35
.catch(err => console.error(err));

Sample Response

_48
{
_48
"total": 100,
_48
"skip": 0,
_48
"take": 10,
_48
"items": [
_48
{
_48
"sku": "EHKXY02GB05DPY",
_48
"name": {
_48
"vi": "eSIM Hong Kong, Macau high-speed 4G, data-only (2GB/day - 5 days)",
_48
"en": "eSIM for Hong Kong travel with unlimited 4G high-speed capacity, only data (2GB/day - 5 days)"
_48
},
_48
"price": 270000,
_48
"priceFloor": 270000,
_48
"discount": 0,
_48
"highFlowSize": 2097152,
_48
"days": 5,
_48
"package": "DAILY",
_48
"data": "2GB",
_48
"throttleSpeed": "128kpbs",
_48
"smsCall": "TikTok is not supported",
_48
"apn": "Auto",
_48
"pointContactType": null,
_48
"hotsPot": true,
_48
"spu": "EHKXY"
_48
},
_48
{
_48
"sku": "EHKXY02GB07DPY",
_48
"name": {
_48
"vi": "eSIM Hong Kong, Macau high-speed 4G, data-only (2GB/day - 7 days)",
_48
"en": "eSIM for Hong Kong travel with unlimited 4G high-speed capacity, only data (2GB/day - 7 days)"
_48
},
_48
"price": 356000,
_48
"priceFloor": 356000,
_48
"discount": 0,
_48
"highFlowSize": 2097152,
_48
"days": 7,
_48
"package": "DAILY",
_48
"data": "2GB",
_48
"throttleSpeed": "128kpbs",
_48
"smsCall": "TikTok is not supported",
_48
"apn": "Auto",
_48
"pointContactType": null,
_48
"hotsPot": true,
_48
"spu": "EHKXY"
_48
},
_48
...
_48
]
_48
}

Get variation details API

Get variation detail by SKU

Path Parameters
sku - requiredstring
Responses
200 OK
application/json
Success
skustringVariation identifier (SKU).
nameobjectLocalized name.
vistringVietnamese value.
enstringEnglish value.
pricenumberVariation price.
priceFloornumberFloor price.
discountnumberDiscount value.
highFlowSizenumberHigh-speed data allowance.
daysnumberPackage validity in days.
packagestringPackage type, for example DAILY.
datastringData allowance description.
throttleSpeedstringSpeed after the high-speed allowance is used.
smsCallstringSMS and call information.
apnstringAccess point name (APN).
pointContactTypestringContact point type.
hotsPotbooleanWhether hotspot sharing is supported.
spustringProduct identifier (SPU).
4xx/5xx Error
application/json
Error
timestamptimestamp
statusCodenumber
errorCodestring
messagestring
GET
/api/v1/products/variation/:sku
Sample Request
Try it on Swagger
Nodejs
PHP
C#
Java
Go
Curl

_35
// Using axios
_35
import axios from 'axios';
_35
_35
const options = {
_35
method: 'GET',
_35
url: 'https://merchant.simplifytrip.com/api/v1/products/variation/EHKXY01GB01DPY',
_35
headers: {
_35
accept: 'application/json',
_35
'content-type': 'application/json',
_35
authorization: 'Bearer sk_live_xxxxxxxxxxxxxxxxxx',
_35
'x-api-key': 'pk_live_xxxxxxxxxxxxxxxxxx',
_35
}
_35
};
_35
_35
axios
_35
.request(options)
_35
.then(res => console.log(res.data))
_35
.catch(err => console.error(err));
_35
_35
// Using fetch api
_35
const url = 'https://merchant.simplifytrip.com/api/v1/products/variation/EHKXY01GB01DPY';
_35
const options = {
_35
method: 'GET',
_35
headers: {
_35
accept: 'application/json',
_35
'content-type': 'application/json',
_35
authorization: 'Bearer sk_live_xxxxxxxxxxxxxxxxxx',
_35
'x-api-key': 'pk_live_xxxxxxxxxxxxxxxxxx',
_35
}
_35
};
_35
_35
fetch(url, options)
_35
.then(res => res.json())
_35
.then(json => console.log(json))
_35
.catch(err => console.error(err));

Sample Response

_20
{
_20
"sku": "EHKXY02GB06DPY",
_20
"name": {
_20
"vi": "eSIM Hong Kong, Macau high-speed 4G, data-only (2GB/day - 6 days)",
_20
"en": "eSIM for Hong Kong travel with unlimited 4G high-speed capacity, only data (2GB/day - 6 days)"
_20
},
_20
"price": 313000,
_20
"priceFloor": 313000,
_20
"discount": 0,
_20
"highFlowSize": 2097152,
_20
"days": 6,
_20
"package": "DAILY",
_20
"data": "2GB",
_20
"throttleSpeed": "128kpbs",
_20
"smsCall": "TikTok is not supported",
_20
"apn": "Auto",
_20
"pointContactType": null,
_20
"hotsPot": true,
_20
"spu": "EHKXY"
_20
}

Country API

All endpoints require Authorization: Bearer <secretKey> and X-Api-Key: <publicKey>. Every POST also requires Content-Type: application/json and X-Signature, calculated from the complete request body using your checksumKey. Recalculate the signature whenever the body changes. See signature generation. GET requests do not require X-Signature. Data is scoped to your institution and the API key’s test/live mode.

Get country list API

Returns the list of countries with eSIM products provided by SimplifyTrip.

Query Parameters
querystring

Search keyword by name, id, …

takenumber

Number of results returned per page

skipnumber

Starting offset for returned results.

Responses
200 OK
application/json
Success
total - requirednumber
take - requirednumber
skip - requirednumber
items - requiredobject[]Items returned for the requested page.
nameobjectLocalized name.
vistringVietnamese value.
enstringEnglish value.
idstringIdentifier.
createdAtstringCreation time in ISO 8601 format.
updatedAtstringLast update time in ISO 8601 format.
continentstringContinent associated with the country.
thumbnailstringThumbnail URL.
mcc3stringCountry MCC3 value.
mccstringCountry MCC value.
4xx/5xx Error
application/json
Error
timestamptimestamp
statusCodenumber
errorCodestring
messagestring
GET
/api/v1/countries
Sample Request
Try it on Swagger
Nodejs
PHP
C#
Java
Go
Curl

_35
// Using axios
_35
import axios from 'axios';
_35
_35
const options = {
_35
method: 'GET',
_35
url: 'https://merchant.simplifytrip.com/api/v1/countries?take=10&skip=0',
_35
headers: {
_35
accept: 'application/json',
_35
'content-type': 'application/json',
_35
authorization: 'Bearer sk_live_xxxxxxxxxxxxxxxxxx',
_35
'x-api-key': 'pk_live_xxxxxxxxxxxxxxxxxx',
_35
}
_35
};
_35
_35
axios
_35
.request(options)
_35
.then(res => console.log(res.data))
_35
.catch(err => console.error(err));
_35
_35
// Using fetch api
_35
const url = 'https://merchant.simplifytrip.com/api/v1/countries?take=10&skip=0';
_35
const options = {
_35
method: 'GET',
_35
headers: {
_35
accept: 'application/json',
_35
'content-type': 'application/json',
_35
authorization: 'Bearer sk_live_xxxxxxxxxxxxxxxxxx',
_35
'x-api-key': 'pk_live_xxxxxxxxxxxxxxxxxx',
_35
}
_35
};
_35
_35
fetch(url, options)
_35
.then(res => res.json())
_35
.then(json => console.log(json))
_35
.catch(err => console.error(err));

Sample Response

_23
{
_23
"total": 100,
_23
"skip": 0,
_23
"take": 10,
_23
"items": [
_23
{
_23
{
_23
"name": {
_23
"vi": "Thailand",
_23
"en": "Thailand"
_23
},
_23
"id": "TH",
_23
"createdAt": "2025-02-08T07:47:23.630Z",
_23
"updatedAt": "2025-02-08T07:47:23.630Z",
_23
"continent": "Asia",
_23
"mcc": "TH",
_23
"mcc3": "THA",
_23
"thumbnail": "https://awssimplifytrip.s3.ap-southeast-1.amazonaws.com/flag/thailand-flag.jpg"
_23
},
_23
},
_23
...
_23
]
_23
}

Region API

All endpoints require Authorization: Bearer <secretKey> and X-Api-Key: <publicKey>. Every POST also requires Content-Type: application/json and X-Signature, calculated from the complete request body using your checksumKey. Recalculate the signature whenever the body changes. See signature generation. GET requests do not require X-Signature. Data is scoped to your institution and the API key’s test/live mode.

Get region list API

Returns the list of regions with eSIM products provided by SimplifyTrip.

Query Parameters
querystring

Search keyword by name, id, …

takenumber

Number of results returned per page

skipnumber

Starting offset for returned results.

Responses
200 OK
application/json
Success
total - requirednumber
take - requirednumber
skip - requirednumber
items - requiredobject[]Items returned for the requested page.
nameobjectLocalized name.
vistringVietnamese value.
enstringEnglish value.
idstringIdentifier.
thumbnailstringThumbnail URL.
createdAtstringCreation time in ISO 8601 format.
updatedAtstringLast update time in ISO 8601 format.
4xx/5xx Error
application/json
Error
timestamptimestamp
statusCodenumber
errorCodestring
messagestring
GET
/api/v1/regions
Sample Request
Try it on Swagger
Nodejs
PHP
C#
Java
Go
Curl

_35
// Using axios
_35
import axios from 'axios';
_35
_35
const options = {
_35
method: 'GET',
_35
url: 'https://merchant.simplifytrip.com/api/v1/regions?take=10&skip=0',
_35
headers: {
_35
accept: 'application/json',
_35
'content-type': 'application/json',
_35
authorization: 'Bearer sk_live_xxxxxxxxxxxxxxxxxx',
_35
'x-api-key': 'pk_live_xxxxxxxxxxxxxxxxxx',
_35
}
_35
};
_35
_35
axios
_35
.request(options)
_35
.then(res => console.log(res.data))
_35
.catch(err => console.error(err));
_35
_35
// Using fetch api
_35
const url = 'https://merchant.simplifytrip.com/api/v1/regions?take=10&skip=0';
_35
const options = {
_35
method: 'GET',
_35
headers: {
_35
accept: 'application/json',
_35
'content-type': 'application/json',
_35
authorization: 'Bearer sk_live_xxxxxxxxxxxxxxxxxx',
_35
'x-api-key': 'pk_live_xxxxxxxxxxxxxxxxxx',
_35
}
_35
};
_35
_35
fetch(url, options)
_35
.then(res => res.json())
_35
.then(json => console.log(json))
_35
.catch(err => console.error(err));

Sample Response

_18
{
_18
"total": 100,
_18
"skip": 0,
_18
"take": 10,
_18
"items": [
_18
{
_18
"name": {
_18
"vi": "Singapore - Malaysia - Indonesia",
_18
"en": "Singapore - Malaysia - Indonesia"
_18
},
_18
"id": "SIN-MYS-IDN",
_18
"thumbnail": "https://awssimplifytrip.s3.ap-southeast-1.amazonaws.com/flag/Sing-ma-ind-thai.jpg",
_18
"createdAt": "2024-10-21T02:53:46.527Z",
_18
"updatedAt": "2024-10-21T02:53:46.527Z"
_18
},
_18
...
_18
]
_18
}

Order API

All endpoints require Authorization: Bearer <secretKey> and X-Api-Key: <publicKey>. Every POST also requires Content-Type: application/json and X-Signature, calculated from the entire request body using checksumKey. Recalculate the signature whenever the body changes. See signature generation. GET requests do not require X-Signature. Data is scoped to the institution and the API key’s test/live mode.


Order and return flow

Create an eSIM or physical SIM order using POST /api/v1/orders; use /orders/recharge for data recharges. Save orderId, trackId, and each subOrderId. Look up GET /orders/:id or receive webhooks to track updates.

Order status is separate from return progress. Successfully delivered orders remain SUCCESS during and after returns. Track returns using returnStatus, hasPendingReturn, hasRefundingReturn, refundAmount, items[].quantityReturned, and returns[]. Only newly created physical SIM orders can be canceled; for successful orders, use the Return Request API.

statusstring

NEW, PROCESSING, CONFIRMED, DELIVERING, SUCCESS, ERROR, CANCELED.

items[].statusstring

Same values as the order status.

returnStatusstring

NONE: No returns; PARTIAL: partially returned; FULL: all remaining quantities have been returned.

hasPendingReturnboolean

There is a pending return request.

hasRefundingReturnboolean

There is a return request with a refund in progress.

Create order API

The payment account must be eligible for payment and able to cover the order. Physical SIM orders require the institution to have an address and phone number configured. Shipping information is taken from this profile.

Request Headers
X-Signature - requiredstring

HMAC_SHA256 signature of the entire request body using checksumKey. See signature generation.

Request Body
trackId - requiredstring

Required string, unique per institution and mode. Reusing an ID is rejected; after a timeout, look up the order before retrying.

items - requiredobject[]

Required array containing at least one item. All items must have the same product type (eSIM or SIM).

subTrackId - requiredstring

Required string, unique within the request.

sku - requiredstring

Required SKU of an active product, unique within the request.

quantity - requirednumber

Required integer from 1 to 500.

deliveryTypestring

Optional: WEBHOOK (default) or EMAIL. Email delivery of eSIMs requires both customer fields below.

customerEmailstring

Valid email address; required for eSIM delivery via EMAIL.

customerNamestring

Customer name; required for eSIM delivery via EMAIL.

Responses
201 Created
application/json
Success
successboolean

Confirms successful order creation; does not confirm completed delivery. success: true confirms order creation, not successful delivery. The initial status is PROCESSING for eSIMs and NEW for physical SIMs. The response does not include eSIM QR codes. Retrieve this data from the order details or delivery webhook.

orderIdstring

SimplifyTrip order ID.

trackIdstring

Your order reference.

statusstring

Processing status. See the endpoint’s flow and conditions.

itemsobject[]

List of items.

subOrderIdstring

SimplifyTrip item ID; use as orderItemId when requesting a return.

subTrackIdstring

Your item reference.

skustring

Product SKU.

quantitynumber

Quantity.

statusstring

Processing status. See the endpoint’s flow and conditions.

typestring

Product type: eSIM, SIM, or SIM_RECHARGE.

4xx/5xx Error
application/json
Error
timestampnumber
statusCodenumber
errorCodestring
messagestring
POST
/api/v1/orders
Sample Request
Try it on Swagger
Nodejs
PHP
C#
Java
Go
Curl

_24
import axios from "axios";
_24
_24
const response = await axios.request({
_24
method: "POST",
_24
url: "https://merchant.simplifytrip.com/api/v1/orders",
_24
headers: {
_24
"accept": "application/json",
_24
"authorization": "Bearer sk_live_xxxxxxxxxxxxxxxxxx",
_24
"x-api-key": "pk_live_xxxxxxxxxxxxxxxxxx",
_24
"content-type": "application/json",
_24
"x-signature": "REPLACE_WITH_SIGNATURE_FOR_THIS_BODY"
_24
},
_24
data: {
_24
"trackId": "partner-order-001",
_24
"items": [
_24
{
_24
"subTrackId": "partner-item-001",
_24
"sku": "E23XY06GB08DFX",
_24
"quantity": 2
_24
}
_24
]
_24
}
_24
});
_24
console.log(response.data);

Sample Response
Success
Error

_16
{
_16
"success": true,
_16
"orderId": "658441501843542",
_16
"trackId": "partner-order-001",
_16
"status": "PROCESSING",
_16
"items": [
_16
{
_16
"subOrderId": "6740ce7f9d04259159bc6401",
_16
"subTrackId": "partner-item-001",
_16
"sku": "E23XY06GB08DFX",
_16
"quantity": 2,
_16
"status": "PROCESSING",
_16
"type": "eSIM"
_16
}
_16
]
_16
}

SIM data recharge API

Send a unique trackId and exactly one item containing subTrackId, a SKU of type SIM_RECHARGE, and iccids with 1–50 unique ICCIDs. Quantity is calculated from the ICCIDs; do not send quantity. China Telecom plans support only one ICCID. A successful response has the same structure as order creation, with status: SUCCESS for the order and item, and type: SIM_RECHARGE.

Request Headers
X-Signature - requiredstring

HMAC_SHA256 signature of the entire request body using checksumKey. See signature generation.

Request Body
trackId - requiredstring

Order reference, unique per institution and mode.

items - requiredobject[]

Exactly one item.

subTrackId - requiredstring

Item reference.

sku - requiredstring

SKU of type SIM_RECHARGE.

iccids - requiredstring[]

1–50 unique ICCIDs; China Telecom plans allow only one ICCID.

In TEST_MODE, try the following ICCIDs:

89860012017201244064, 89860012017201244085, 89860012017201244086, 89860012017201244087, 89860012017201244088, 89860012017201244092, 89860012017201244093, 89860012017201244094, 89860012017201244095, 89860012017201244096

Responses
201 Created
application/json
Success
successboolean

Confirms successful order creation; does not confirm completed delivery.

orderIdstring

SimplifyTrip order ID.

trackIdstring

Your order reference.

statusstring

Processing status. See the endpoint’s flow and conditions.

itemsobject[]

List of items.

subOrderIdstring

SimplifyTrip item ID; use as orderItemId when requesting a return.

subTrackIdstring

Your item reference.

skustring

Product SKU.

quantitynumber

Quantity.

statusstring

Processing status. See the endpoint’s flow and conditions.

typestring

Product type: eSIM, SIM, or SIM_RECHARGE.

4xx/5xx Error
application/json
Error
timestampnumber
statusCodenumber
errorCodestring
messagestring
POST
/api/v1/orders/recharge
Sample Request
Try it on Swagger
Nodejs
PHP
C#
Java
Go
Curl

_26
import axios from "axios";
_26
_26
const response = await axios.request({
_26
method: "POST",
_26
url: "https://merchant.simplifytrip.com/api/v1/orders/recharge",
_26
headers: {
_26
"accept": "application/json",
_26
"authorization": "Bearer sk_live_xxxxxxxxxxxxxxxxxx",
_26
"x-api-key": "pk_live_xxxxxxxxxxxxxxxxxx",
_26
"content-type": "application/json",
_26
"x-signature": "REPLACE_WITH_SIGNATURE_FOR_THIS_BODY"
_26
},
_26
data: {
_26
"trackId": "partner-recharge-001",
_26
"items": [
_26
{
_26
"subTrackId": "partner-recharge-item-001",
_26
"sku": "REPLACE_WITH_RECHARGE_SKU",
_26
"iccids": [
_26
"8985200000000000001"
_26
]
_26
}
_26
]
_26
}
_26
});
_26
console.log(response.data);

Sample Response
Success
Error

_16
{
_16
"success": true,
_16
"orderId": "658441501843542",
_16
"trackId": "partner-recharge-001",
_16
"status": "SUCCESS",
_16
"items": [
_16
{
_16
"subOrderId": "6740ce7f9d04259159bc6401",
_16
"subTrackId": "partner-recharge-item-001",
_16
"sku": "REPLACE_WITH_RECHARGE_SKU",
_16
"quantity": 1,
_16
"status": "SUCCESS",
_16
"type": "SIM_RECHARGE"
_16
}
_16
]
_16
}

Cancel order API

Only physical SIM orders with order status NEW, where all items are of type SIM and have status NEW, can be canceled. orderId is the SimplifyTrip order ID or trackId. reason is optional. Cancellation changes the order and items to CANCELED and refunds the full order amount to the payment account. Ineligible orders return 404.

Request Headers
X-Signature - requiredstring

HMAC_SHA256 signature of the entire request body using checksumKey. See signature generation.

Request Body
orderId - requiredstring

SimplifyTrip order ID or trackId.

reasonstring

Cancellation reason (optional).

Responses
201 Created
application/json
Success
idstring
trackIdstring

Your order reference.

createdAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

updatedAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

statusstring

Processing status. See the endpoint’s flow and conditions.

reasonstring

Request/cancellation reason; may be null.

itemsobject[]

List of items.

idstring
subTrackIdstring

Your item reference.

skustring

Product SKU.

quantitynumber

Quantity.

typestring

Product type: SIM_RECHARGE.

statusstring

Processing status. See the endpoint’s flow and conditions.

4xx/5xx Error
application/json
Error
timestampnumber
statusCodenumber
errorCodestring
messagestring
POST
/api/v1/orders/cancel
Sample Request
Try it on Swagger
Nodejs
PHP
C#
Java
Go
Curl

_18
import axios from "axios";
_18
_18
const response = await axios.request({
_18
method: "POST",
_18
url: "https://merchant.simplifytrip.com/api/v1/orders/cancel",
_18
headers: {
_18
"accept": "application/json",
_18
"authorization": "Bearer sk_live_xxxxxxxxxxxxxxxxxx",
_18
"x-api-key": "pk_live_xxxxxxxxxxxxxxxxxx",
_18
"content-type": "application/json",
_18
"x-signature": "REPLACE_WITH_SIGNATURE_FOR_THIS_BODY"
_18
},
_18
data: {
_18
"orderId": "658441501843542",
_18
"reason": "Customer canceled"
_18
}
_18
});
_18
console.log(response.data);

Sample Response
Success
Error

_18
{
_18
"id": "658441501843542",
_18
"trackId": "partner-order-001",
_18
"createdAt": "2026-09-12T07:00:00.000Z",
_18
"updatedAt": "2026-09-12T07:01:00.000Z",
_18
"status": "CANCELED",
_18
"reason": "Customer canceled",
_18
"items": [
_18
{
_18
"id": "6740ce7f9d04259159bc6401",
_18
"subTrackId": "partner-item-001",
_18
"sku": "REPLACE_WITH_PHYSICAL_SIM_SKU",
_18
"quantity": 2,
_18
"type": "SIM",
_18
"status": "CANCELED"
_18
}
_18
]
_18
}

Get order details API

Use the order ID or unique trackId.

Path Parameters
id - requiredstring

Order ID or unique trackId.

Responses
200 OK
application/json
Success
idstring
trackIdstring

Your order reference.

createdAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

confirmedAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

deliveringAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

canceledAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

succeededAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

statusstring

Processing status. See the endpoint’s flow and conditions.

returnStatusstring

NONE, PARTIAL, or FULL; separate from the order status.

hasPendingReturnboolean

There is a pending return request.

hasRefundingReturnboolean

There is a return request with a refund in progress.

totalBeforeRefundnumber

Total amount before returns (VND).

totalnumber

Remaining total amount after returns (VND).

refundAmountnumber

Refund amount (VND); on the order, this is the sum of all completed refunds.

errorstring
shippingAddressobject | null
itemsobject[]

List of items.

idstring
subTrackIdstring

Your item reference.

statusstring

Processing status. See the endpoint’s flow and conditions.

quantitynumber

Quantity.

quantityReturnednumber

Quantity successfully returned.

iccidsstring[]

List of ICCIDs.

pricenumber

Unit price (VND).

typestring

Product type: eSIM, SIM, or SIM_RECHARGE.

spustring
skustring
eSims>object[]

eSIM activation information.

iccidstring
planAPNstring
smdpAddressstring
pinstring
pukstring
activationCodestring
qrCodeContentstring
qrCodeImgstring
returnStatusstring

NONE | REFUNDING | REFUNDED`

returnsobject[]

Return history, newest first.

idstring
trackIdstring

Your order reference.

orderIdstring

SimplifyTrip order ID.

orderTrackIdstring

Original order reference.

createdAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

rejectedAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

completedAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

canceledAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

statusstring

Processing status. See the endpoint’s flow and conditions.

reasonstring

Request/cancellation reason; may be null.

rejectionReasonstring

Rejection reason; may be null.

returnTypestring

FULL or PARTIAL, calculated by the server based on the remaining eligible quantity.

refundFeenumber

Base refund fee (VND).

extraFeenumber

Additional fee (VND).

extraFeeNotestring

Additional fee note; may be null.

refundAmountnumber

Refund amount (VND); on the order, this is the sum of all completed refunds.

itemsobject[]

List of items.

idstring
orderItemIdstring

Item ID from the original order.

subOrderTrackIdstring

Item reference from the original order.

spustring

Product code (spu in the return-request API).

skustring

SKU (sku in the return-request API).

productTypestring

Product type (type in the return-request API).

returnTypestring

FULL or PARTIAL, calculated by the server based on the remaining eligible quantity.

iccidsstring[]

List of ICCIDs. This array is empty for physical SIM returns.

originalPricenumber

Original unit price (VND).

quantitynumber

Quantity.

4xx/5xx Error
application/json
Error
timestampnumber
statusCodenumber
errorCodestring
messagestring
GET
/api/v1/orders/:id
Sample Request
Try it on Swagger
Nodejs
PHP
C#
Java
Go
Curl

_12
import axios from "axios";
_12
_12
const response = await axios.request({
_12
method: "GET",
_12
url: "https://merchant.simplifytrip.com/api/v1/orders/658441501843542",
_12
headers: {
_12
"accept": "application/json",
_12
"authorization": "Bearer sk_live_xxxxxxxxxxxxxxxxxx",
_12
"x-api-key": "pk_live_xxxxxxxxxxxxxxxxxx"
_12
}
_12
});
_12
console.log(response.data);

Sample Response
Success
Error

_90
{
_90
"id": "658441501843542",
_90
"trackId": "partner-order-001",
_90
"createdAt": "2026-09-12T07:00:00.000Z",
_90
"confirmedAt": null,
_90
"deliveringAt": null,
_90
"canceledAt": null,
_90
"succeededAt": "2026-09-12T07:00:10.000Z",
_90
"status": "SUCCESS",
_90
"returnStatus": "NONE",
_90
"hasPendingReturn": false,
_90
"hasRefundingReturn": false,
_90
"totalBeforeRefund": 200000,
_90
"total": 200000,
_90
"refundAmount": 0,
_90
"error": null,
_90
"shippingAddress": null,
_90
"items": [
_90
{
_90
"id": "6740ce7f9d04259159bc6401",
_90
"subTrackId": "partner-item-001",
_90
"status": "SUCCESS",
_90
"quantity": 2,
_90
"quantityReturned": 0,
_90
"iccids": [],
_90
"price": 100000,
_90
"type": "eSIM",
_90
"spu": "example-product",
_90
"sku": "E23XY06GB08DFX",
_90
"eSims": [
_90
{
_90
"iccid": "8985200000000000001",
_90
"planAPN": "internet",
_90
"smdpAddress": "example.smdp.com",
_90
"pin": "",
_90
"puk": "",
_90
"activationCode": "EXAMPLE-1",
_90
"qrCodeContent": "LPA:1$example.smdp.com$EXAMPLE-1",
_90
"qrCodeImg": "https://example.com/qr-1.png",
_90
"returnStatus": "NONE"
_90
},
_90
{
_90
"iccid": "8985200000000000002",
_90
"planAPN": "internet",
_90
"smdpAddress": "example.smdp.com",
_90
"pin": "",
_90
"puk": "",
_90
"activationCode": "EXAMPLE-2",
_90
"qrCodeContent": "LPA:1$example.smdp.com$EXAMPLE-2",
_90
"qrCodeImg": "https://example.com/qr-2.png",
_90
"returnStatus": "NONE"
_90
}
_90
]
_90
}
_90
],
_90
"returns": [
_90
{
_90
"id": "6aa577e10a519efcfb0e8755",
_90
"returnTrackId": "partner-return-id",
_90
"orderId": "658441501843542",
_90
"orderTrackId": "partner-order-001",
_90
"createdAt": "2026-09-12T16:03:45.714Z",
_90
"completedAt": null,
_90
"canceledAt": null,
_90
"rejectedAt": null,
_90
"reason": "string",
_90
"rejectionReason": null,
_90
"status": "REQUESTED",
_90
"returnType": "PARTIAL",
_90
"refundFee": 15000,
_90
"extraFee": 0,
_90
"extraFeeNote": null,
_90
"refundAmount": 85000,
_90
"items": [
_90
{
_90
"subOrderId": "6aa51f9be25063893dc033fd",
_90
"subOrderTrackId": "11",
_90
"spu": "example-product",
_90
"sku": "E23XY06GB08DFX",
_90
"type": "eSIM",
_90
"returnType": "PARTIAL",
_90
"iccids": [
_90
"8985200000000000001"
_90
],
_90
"quantity": 1
_90
}
_90
]
_90
}
_90
]
_90
}

Errors and HTTP status

Successful GET requests return HTTP 200. POST requests currently return HTTP 201. Handle all successful 2xx responses. Validation errors or duplicate references may return 400; missing products/orders or orders ineligible for cancellation return 404; product, shipping, or payment account condition errors return 422; a busy system may return 503.

Return request API

All endpoints require Authorization: Bearer <secretKey> and X-Api-Key: <publicKey>. Every POST also requires Content-Type: application/json and X-Signature, calculated from the complete request body using your checksumKey. Recalculate the signature whenever the body changes. See signature generation. GET requests do not require X-Signature. Data is scoped to your institution and the API key’s test/live mode.


Return flow

  1. Read the order details and select eligible items from a SUCCESS order.
  2. Create a return with a new returnTrackId and explicit items.
  3. A manual request starts at REQUESTED;
  4. Poll the return details or process RETURN_ORDER_UPDATE webhooks. REFUNDING means processing; COMPLETED means the return has completed.
  5. Refresh order details to obtain cumulative returned quantities, refund amount and remaining total.

Return request statuses

REQUESTED

Waiting for review; may be canceled.

REFUNDING

Refund processing; cannot be canceled.

COMPLETED

Return completed. A positive refund creates a payment account credit transaction, processed asynchronously.

REJECTED

Rejected; inspect rejectionReason.

CANCELED

Canceled while awaiting review.


Eligibility

  • Order and selected items must be SUCCESS, within 6 months of order creation, and belong to the same institution/mode.
  • Only one pending or refunding request may exist for an order at a time. A new request can be created once the previous request has reached the COMPLETED or CANCELED/REJECTED status.
  • Exclude quantities and ICCIDs already reserved or returned by requests other than CANCELED/REJECTED. eSIMs must also have return status NONE.
  • To return everything, explicitly include all remaining eligible quantities/ICCIDs. The server calculates FULL or PARTIAL against the remaining eligible units.

Fees and processing

The current base fee is 15,000 VND per returned eSIM or physical SIM; SIM recharge has no base return fee. Each item’s initial refund is max(unit price × returned quantity − return fee, 0). The request sums these amounts; an order with a non-positive total has request-level refund fee and amount set to zero. Review may add extraFee with extraFeeNote; use the API’s final refundAmount for reconciliation.

The example returns one of two eSIMs priced at 100,000 VND each: base fee 15,000 VND, refund 85,000 VND.

Create return request API

Request Headers
X-Signature - requiredstring

HMAC_SHA256 signature of the complete request body using checksumKey. See signature generation.

Request Body
returnTrackId - requiredstring

Required non-empty string, unique per institution and mode. It is separate from the original order’s trackId.

orderId - requiredstring

Required non-empty string: SimplifyTrip order ID or original order trackId.

reasonstring

Optional string.

items - requiredobject[]

Required array with at least one item. Include each order item once; do not submit both its ID and its tracking reference as separate entries.

subOrderId - requiredstring

Required: subOrderId from creation, items[].id from order details, or the item’s subTrackId. Prefer the SimplifyTrip item ID.

quantitynumber

For physical SIM: positive integer, no more than the remaining eligible quantity.

iccidsstring[]

For eSIM or SIM_RECHARGE: non-empty array of unique ICCID strings belonging to the item and still eligible. The server derives quantity from this array. For physical SIM, send quantity instead.

Responses
201 Created
application/json
Success
idstring

SimplifyTrip return request ID.

returnTrackIdstring

Your return tracking reference.

orderIdstring

SimplifyTrip order ID.

orderTrackIdstring

Original order tracking reference.

createdAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

refundingAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

completedAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

canceledAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

rejectedAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

reasonstring

Request or cancellation reason; may be null.

rejectionReasonstring

Rejection reason; may be null.

statusstring

Processing status. See the flow and conditions for this endpoint.

returnTypestring

FULL or PARTIAL, calculated by the server against remaining eligible units.

refundFeenumber

Base return fee (VND).

extraFeenumber

Extra fee (VND).

extraFeeNotestring

Extra fee explanation; may be null.

refundAmountnumber

Refund amount (VND); on an order, the cumulative amount of completed refunds.

itemsobject[]

Item list.

subOrderIdstring

Original order item ID.

subOrderTrackIdstring

Original order item tracking reference.

spustring

Product ID.

skustring

Product SKU.

typestring

Product type: eSIM, SIM or SIM_RECHARGE.

returnTypestring

FULL or PARTIAL, calculated by the server against remaining eligible units.

iccidsstring[]

ICCID list. Empty for physical SIM returns.

quantitynumber

Quantity.

4xx/5xx Error
application/json
Error
timestampnumber
statusCodenumber
errorCodestring
messagestring
POST
/api/v1/return-requests
Sample Request
Try it on Swagger
Nodejs
PHP
C#
Java
Go
Curl

_27
import axios from "axios";
_27
_27
const response = await axios.request({
_27
method: "POST",
_27
url: "https://merchant.simplifytrip.com/api/v1/return-requests",
_27
headers: {
_27
"accept": "application/json",
_27
"authorization": "Bearer sk_live_xxxxxxxxxxxxxxxxxx",
_27
"x-api-key": "pk_live_xxxxxxxxxxxxxxxxxx",
_27
"content-type": "application/json",
_27
"x-signature": "REPLACE_WITH_SIGNATURE_FOR_THIS_BODY"
_27
},
_27
data: {
_27
"returnTrackId": "partner-return-001",
_27
"orderId": "658441501843542",
_27
"reason": "Customer requested a return",
_27
"items": [
_27
{
_27
"subOrderId": "6740ce7f9d04259159bc6401",
_27
"iccids": [
_27
"8985200000000000001"
_27
]
_27
}
_27
]
_27
}
_27
});
_27
console.log(response.data);

Physical SIM body
SIM

_10
{
_10
"returnTrackId": "partner-return-sim-001",
_10
"orderId": "658441501843542",
_10
"items": [
_10
{
_10
"subOrderId": "6740ce7f9d04259159bc6401",
_10
"quantity": 1
_10
}
_10
]
_10
}

Sample Response
Success
Error

_33
{
_33
"id": "6741ae68e65369e169a70757",
_33
"returnTrackId": "partner-return-001",
_33
"orderId": "658441501843542",
_33
"orderTrackId": "partner-order-001",
_33
"createdAt": "2026-09-12T08:00:00.000Z",
_33
"refundingAt": null,
_33
"completedAt": null,
_33
"canceledAt": null,
_33
"rejectedAt": null,
_33
"reason": "Customer requested a return",
_33
"rejectionReason": null,
_33
"status": "REQUESTED",
_33
"returnType": "PARTIAL",
_33
"refundFee": 15000,
_33
"extraFee": 0,
_33
"extraFeeNote": null,
_33
"refundAmount": 85000,
_33
"items": [
_33
{
_33
"subOrderId": "6740ce7f9d04259159bc6401",
_33
"subOrderTrackId": "partner-item-001",
_33
"spu": "example-product",
_33
"sku": "E23XY06GB08DFX",
_33
"type": "eSIM",
_33
"returnType": "PARTIAL",
_33
"iccids": [
_33
"8985200000000000001"
_33
],
_33
"quantity": 1
_33
}
_33
]
_33
}

Cancel refund request API

Send required string returnId, containing either the SimplifyTrip return ID or your returnTrackId. Only REQUESTED can be canceled. This endpoint also requires a signature of the cancel body.

Request Headers
X-Signature - requiredstring

HMAC_SHA256 signature of the complete request body using checksumKey. See signature generation.

Request Body
returnId - requiredstring

SimplifyTrip return ID or your returnTrackId.

Returns the same response schema with status: CANCELED and canceledAt populated. It clears the order’s pending/refunding flags and releases the selected eSIMs for later requests. It does not cancel the original order or complete a refund.

Responses
201 Created
application/json
Success
idstring

SimplifyTrip return request ID.

returnTrackIdstring

Your return tracking reference.

orderIdstring

SimplifyTrip order ID.

orderTrackIdstring

Original order tracking reference.

createdAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

refundingAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

completedAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

canceledAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

rejectedAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

reasonstring

Request or cancellation reason; may be null.

rejectionReasonstring

Rejection reason; may be null.

statusstring

Processing status. See the flow and conditions for this endpoint.

returnTypestring

FULL or PARTIAL, calculated by the server against remaining eligible units.

refundFeenumber

Base return fee (VND).

extraFeenumber

Extra fee (VND).

extraFeeNotestring

Extra fee explanation; may be null.

refundAmountnumber

Refund amount (VND); on an order, the cumulative amount of completed refunds.

itemsobject[]

Item list.

subOrderIdstring

Original order item ID.

subOrderTrackIdstring

Original order item tracking reference.

spustring

Product ID.

skustring

Product SKU.

typestring

Product type: eSIM, SIM or SIM_RECHARGE.

returnTypestring

FULL or PARTIAL, calculated by the server against remaining eligible units.

iccidsstring[]

ICCID list. Empty for physical SIM returns.

quantitynumber

Quantity.

4xx/5xx Error
application/json
Error
timestampnumber
statusCodenumber
errorCodestring
messagestring
POST
/api/v1/return-requests/cancel
Sample Request
Try it on Swagger
Nodejs
PHP
C#
Java
Go
Curl

_17
import axios from "axios";
_17
_17
const response = await axios.request({
_17
method: "POST",
_17
url: "https://merchant.simplifytrip.com/api/v1/return-requests/cancel",
_17
headers: {
_17
"accept": "application/json",
_17
"authorization": "Bearer sk_live_xxxxxxxxxxxxxxxxxx",
_17
"x-api-key": "pk_live_xxxxxxxxxxxxxxxxxx",
_17
"content-type": "application/json",
_17
"x-signature": "REPLACE_WITH_SIGNATURE_FOR_THIS_BODY"
_17
},
_17
data: {
_17
"returnId": "6741ae68e65369e169a70757"
_17
}
_17
});
_17
console.log(response.data);

Sample Response
Success
Error

_33
{
_33
"id": "6741ae68e65369e169a70757",
_33
"returnTrackId": "partner-return-001",
_33
"orderId": "658441501843542",
_33
"orderTrackId": "partner-order-001",
_33
"createdAt": "2026-09-12T08:00:00.000Z",
_33
"refundingAt": null,
_33
"completedAt": null,
_33
"canceledAt": "2026-09-12T08:01:00.000Z",
_33
"rejectedAt": null,
_33
"reason": "Customer requested a return",
_33
"rejectionReason": null,
_33
"status": "CANCELED",
_33
"returnType": "PARTIAL",
_33
"refundFee": 15000,
_33
"extraFee": 0,
_33
"extraFeeNote": null,
_33
"refundAmount": 85000,
_33
"items": [
_33
{
_33
"subOrderId": "6740ce7f9d04259159bc6401",
_33
"subOrderTrackId": "partner-item-001",
_33
"spu": "example-product",
_33
"sku": "E23XY06GB08DFX",
_33
"type": "eSIM",
_33
"returnType": "PARTIAL",
_33
"iccids": [
_33
"8985200000000000001"
_33
],
_33
"quantity": 1
_33
}
_33
]
_33
}

Get refund request details API

Use returnId or returnTrackId. Returns the same schema as creation, with the latest status, fees and timestamps. After a create timeout or duplicate-reference error, query this endpoint using the existing reference before deciding to create another request.

Path Parameters
id - requiredstring

The request’s returnId or returnTrackId.

Responses
200 OK
application/json
Success
idstring

SimplifyTrip return request ID.

returnTrackIdstring

Your return tracking reference.

orderIdstring

SimplifyTrip order ID.

orderTrackIdstring

Original order tracking reference.

createdAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

refundingAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

completedAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

canceledAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

rejectedAtdatetime | null

ISO timestamp; may be null if the event has not occurred.

reasonstring

Request or cancellation reason; may be null.

rejectionReasonstring

Rejection reason; may be null.

statusstring

Processing status. See the flow and conditions for this endpoint.

returnTypestring

FULL or PARTIAL, calculated by the server against remaining eligible units.

refundFeenumber

Base return fee (VND).

extraFeenumber

Extra fee (VND).

extraFeeNotestring

Extra fee explanation; may be null.

refundAmountnumber

Refund amount (VND); on an order, the cumulative amount of completed refunds.

itemsobject[]

Item list.

subOrderIdstring

Original order item ID.

subOrderTrackIdstring

Original order item tracking reference.

spustring

Product ID.

skustring

Product SKU.

typestring

Product type: eSIM, SIM or SIM_RECHARGE.

returnTypestring

FULL or PARTIAL, calculated by the server against remaining eligible units.

iccidsstring[]

ICCID list. Empty for physical SIM returns.

quantitynumber

Quantity.

4xx/5xx Error
application/json
Error
timestampnumber
statusCodenumber
errorCodestring
messagestring
GET
/api/v1/return-requests/:id
Sample Request
Try it on Swagger
Nodejs
PHP
C#
Java
Go
Curl

_12
import axios from "axios";
_12
_12
const response = await axios.request({
_12
method: "GET",
_12
url: "https://merchant.simplifytrip.com/api/v1/return-requests/6741ae68e65369e169a70757",
_12
headers: {
_12
"accept": "application/json",
_12
"authorization": "Bearer sk_live_xxxxxxxxxxxxxxxxxx",
_12
"x-api-key": "pk_live_xxxxxxxxxxxxxxxxxx"
_12
}
_12
});
_12
console.log(response.data);

Sample Response
Success
Error

_33
{
_33
"id": "6741ae68e65369e169a70757",
_33
"returnTrackId": "partner-return-001",
_33
"orderId": "658441501843542",
_33
"orderTrackId": "partner-order-001",
_33
"createdAt": "2026-09-12T08:00:00.000Z",
_33
"refundingAt": null,
_33
"completedAt": null,
_33
"canceledAt": null,
_33
"rejectedAt": null,
_33
"reason": "Customer requested a return",
_33
"rejectionReason": null,
_33
"status": "REQUESTED",
_33
"returnType": "PARTIAL",
_33
"refundFee": 15000,
_33
"extraFee": 0,
_33
"extraFeeNote": null,
_33
"refundAmount": 85000,
_33
"items": [
_33
{
_33
"subOrderId": "6740ce7f9d04259159bc6401",
_33
"subOrderTrackId": "partner-item-001",
_33
"spu": "example-product",
_33
"sku": "E23XY06GB08DFX",
_33
"type": "eSIM",
_33
"returnType": "PARTIAL",
_33
"iccids": [
_33
"8985200000000000001"
_33
],
_33
"quantity": 1
_33
}
_33
]
_33
}

Errors and HTTP status

GET succeeds with HTTP 200; POST currently uses HTTP 201. Validation, duplicate returnTrackId, duplicate items, expired/fully returned orders, an existing active request, unavailable quantities/ICCIDs or canceling a non-REQUESTED request return 400. A missing or non-SUCCESS order and a missing return request return 404.

Payment Accounts API

List payment accounts

Retrieve payment accounts for the institution identified by the API key. Results are filtered by the key’s TEST_MODE or LIVE_MODE and sorted by id in ascending order.

Request Headers
Authorization - requiredstring

Bearer <secretKey> for the API key in use.

X-Api-Key - requiredstring

The public key matching the secret key.

This endpoint does not require X-Signature. See API Keys for authentication setup.

Request Parameters

No path parameters, query parameters or request body are required. Do not send an institution ID or mode; both are determined by the API key. This endpoint is not paginated.

Responses
200 OK
application/json
Success

The response is a direct Account[] array, without a data or items wrapper. If no accounts match, it returns []. The list includes inactive or blocked accounts; check status and isBlocked when displaying account state.

idstring

Payment account code.

typeTOP_UP | DEBIT

TOP_UP: prepaid account. DEBIT: account used for purchases on credit.

balancenumber

Current balance in VND. Spending on a DEBIT account is recorded as a negative balance.

statusACTIVE | INACTIVE

Account activity status.

isBlockedboolean

true if the account is blocked.

isDefaultboolean

true if this is the default account used for payments.

debtStatementnumber

Outstanding statement debt in VND. Only present for DEBIT; omitted for TOP_UP. This is separate from the current balance.

currencyVND

Currency; currently always VND.

dueDatestring (YYYY-MM-DD)

The 5th of the current month in Asia/Ho_Chi_Minh, matching the monthly statement payment deadline. Only present for DEBIT; omitted for TOP_UP. The date does not roll forward to next month after the 5th has passed.

GET
/api/v1/accounts
Sample Request
Try it on Swagger
Nodejs
PHP
C#
Java
Go
Curl

_11
import axios from "axios";
_11
_11
const response = await axios.get("https://merchant.simplifytrip.com/api/v1/accounts", {
_11
headers: {
_11
"accept": "application/json",
_11
"content-type": "application/json",
_11
"authorization": "Bearer sk_live_xxxxxxxxxxxxxxxxxx",
_11
"x-api-key": "pk_live_xxxxxxxxxxxxxxxxxx"
_11
}
_11
});
_11
console.log(response.data);

Sample Response

Example response during September 2026. Account codes and amounts are illustrative.

Success
Empty

_22
[
_22
{
_22
"id": "account-001",
_22
"type": "TOP_UP",
_22
"balance": 2500000,
_22
"status": "ACTIVE",
_22
"isBlocked": false,
_22
"isDefault": true,
_22
"currency": "VND"
_22
},
_22
{
_22
"id": "account-002",
_22
"type": "DEBIT",
_22
"balance": -1200000,
_22
"status": "ACTIVE",
_22
"isBlocked": false,
_22
"isDefault": false,
_22
"debtStatement": 1000000,
_22
"dueDate": "2026-09-05",
_22
"currency": "VND"
_22
}
_22
]

Information retrieval API

All endpoints require Authorization: Bearer <secretKey> and X-Api-Key: <publicKey>. Every POST also requires Content-Type: application/json and X-Signature, calculated from the complete request body using your checksumKey. Recalculate the signature whenever the body changes. See signature generation. GET requests do not require X-Signature. Data is scoped to your institution and the API key’s test/live mode.

API to retrieve the status of purchased eSIM via ICCID

This API retrieves eSIM information, including status, activity history, data usage, etc.

Path Parameters
iccid - requiredstring
Responses
200 OK
application/json
Success
iccidstring
activityLogsobject[]
eidstring
recordTimedatetime
statusstring

NOT_DOWNLOADED | DOWNLOADED | INSTALLED | ENABLED | DISABLED | DELETED

usageInfoListobject[]
usedDatedatetime
usageAmtnumber

in Bytes

simStatusobject
planStartTimedatetime
planEndTimedatetime
remainingDaysnumber
usedTrafficnumber

Total used capacity, in Bytes

planStatusstring

UNUSED | IN_USE | EXPIRED | UNAVAILABLE

productInfoobject
skustring
spustring
typeeSIM
packagestring

FIXED | DAILY

daysnumber
datastring
apnstring
hotsPotboolean
throttleSpeedstring
smsCallstring
orderInfoobject
orderIdstring
trackIdstring
subOrderIdstring
subTrackIdstring
purchaseDatedatetime
4xx/5xx Error
application/json
Error
timestamptimestamp
statusCodenumber
errorCodestring
messagestring
GET
/api/v1/products/esim/:iccid
Sample Request
Try it on Swagger
Nodejs
PHP
C#
Java
Go
Curl

_35
// Using axios
_35
import axios from 'axios';
_35
_35
const options = {
_35
method: 'GET',
_35
url: 'https://merchant.simplifytrip.com/api/v1/products/esim/89812003916820412483',
_35
headers: {
_35
accept: 'application/json',
_35
'content-type': 'application/json',
_35
authorization: 'Bearer sk_live_xxxxxxxxxxxxxxxxxx',
_35
'x-api-key': 'pk_live_xxxxxxxxxxxxxxxxxx',
_35
}
_35
};
_35
_35
axios
_35
.request(options)
_35
.then(res => console.log(res.data))
_35
.catch(err => console.error(err));
_35
_35
// Using fetch api
_35
const url = 'https://merchant.simplifytrip.com/api/v1/products/esim/89812003916820412483';
_35
const options = {
_35
method: 'GET',
_35
headers: {
_35
accept: 'application/json',
_35
'content-type': 'application/json',
_35
authorization: 'Bearer sk_live_xxxxxxxxxxxxxxxxxx',
_35
'x-api-key': 'pk_live_xxxxxxxxxxxxxxxxxx',
_35
}
_35
};
_35
_35
fetch(url, options)
_35
.then(res => res.json())
_35
.then(json => console.log(json))
_35
.catch(err => console.error(err));

Sample Response

_42
{
_42
"activityLogs": [
_42
{
_42
"eid": null,
_42
"recordTime": "2025-05-13 22:42:42",
_42
"status": "NOT_DOWNLOADED"
_42
}
_42
],
_42
"usageInfoList": [],
_42
"simStatus": {
_42
"planStartTime": null,
_42
"planEndTime": null,
_42
"remainingDays": 1,
_42
"usedTraffic": 0,
_42
"planStatus": "UNUSED"
_42
},
_42
"iccid": "89812003916820447472",
_42
"orderInfo": {
_42
"orderId": "481989189736539",
_42
"trackId": "2f01814f-d3da-40ae-afd1-79cbd8f789e3",
_42
"subOrderId": "68235a3f02fe66336899c820",
_42
"subTrackId": "18824662-0ba2-4fe5-a22f-b7475755335f",
_42
"purchaseDate": "2025-05-13T14:42:07.069Z"
_42
},
_42
"productInfo": {
_42
"sku": "E23XY06GB08DFX",
_42
"spu": "E23XY",
_42
"name": {
_42
"vi": "eSIM Ấn Độ 06GB tốc độ cao 4G, chỉ có data (6GB - 8 ngày ) ",
_42
"en": "4G high-speed India travel eSIM, data only (6GB - 8 days ) "
_42
},
_42
"type": "eSIM",
_42
"package": "FIXED",
_42
"days": 8,
_42
"data": "6GB",
_42
"apn": "internet",
_42
"hotsPot": true,
_42
"throttleSpeed": "Stop",
_42
"pointContactType": null,
_42
"smsCall": "No"
_42
}
_42
}

API to retrieve SIM card status after data is recharged via ICCID

This API retrieves SIM card information, including status, activity history, data usage, etc.

Path Parameters
iccid - requiredstring
Responses
200 OK
application/json
Success
iccidstring
activityLogsobject[]
eidstring
recordTimedatetime
statusstring

NOT_DOWNLOADED | DOWNLOADED | INSTALLED | ENABLED | DISABLED | DELETED

usageInfoListobject[]
usedDatedatetime
usageAmtnumber

in Bytes

simStatusobject
planStartTimedatetime
planEndTimedatetime
remainingDaysnumber
usedTrafficnumber

Total used capacity, in Bytes

planStatusstring

UNUSED | IN_USE | EXPIRED | UNAVAILABLE

productInfoobject
skustring
spustring
typeSIM_RECHARGE
packagestring

FIXED | DAILY

daysnumber
datastring
apnstring
hotsPotboolean
throttleSpeedstring
smsCallstring
orderInfoobject
orderIdstring
trackIdstring
subOrderIdstring
subTrackIdstring
purchaseDatedatetime
4xx/5xx Error
application/json
Error
timestamptimestamp
statusCodenumber
errorCodestring
messagestring
GET
/api/v1/products/sim/:iccid
Sample Request
Try it on Swagger
Nodejs
PHP
C#
Java
Go
Curl

_35
// Using axios
_35
import axios from 'axios';
_35
_35
const options = {
_35
method: 'GET',
_35
url: 'https://merchant.simplifytrip.com/api/v1/products/sim/89812003916820412483',
_35
headers: {
_35
accept: 'application/json',
_35
'content-type': 'application/json',
_35
authorization: 'Bearer sk_live_xxxxxxxxxxxxxxxxxx',
_35
'x-api-key': 'pk_live_xxxxxxxxxxxxxxxxxx',
_35
}
_35
};
_35
_35
axios
_35
.request(options)
_35
.then(res => console.log(res.data))
_35
.catch(err => console.error(err));
_35
_35
// Using fetch api
_35
const url = 'https://merchant.simplifytrip.com/api/v1/products/sim/89812003916820412483';
_35
const options = {
_35
method: 'GET',
_35
headers: {
_35
accept: 'application/json',
_35
'content-type': 'application/json',
_35
authorization: 'Bearer sk_live_xxxxxxxxxxxxxxxxxx',
_35
'x-api-key': 'pk_live_xxxxxxxxxxxxxxxxxx',
_35
}
_35
};
_35
_35
fetch(url, options)
_35
.then(res => res.json())
_35
.then(json => console.log(json))
_35
.catch(err => console.error(err));

Sample Response

_42
{
_42
"activityLogs": [
_42
{
_42
"eid": null,
_42
"recordTime": "2025-05-13 22:42:42",
_42
"status": "NOT_DOWNLOADED"
_42
}
_42
],
_42
"usageInfoList": [],
_42
"simStatus": {
_42
"planStartTime": null,
_42
"planEndTime": null,
_42
"remainingDays": 1,
_42
"usedTraffic": 0,
_42
"planStatus": "UNUSED"
_42
},
_42
"iccid": "89812003916820447472",
_42
"orderInfo": {
_42
"orderId": "481989189736539",
_42
"trackId": "2f01814f-d3da-40ae-afd1-79cbd8f789e3",
_42
"subOrderId": "68235a3f02fe66336899c820",
_42
"subTrackId": "18824662-0ba2-4fe5-a22f-b7475755335f",
_42
"purchaseDate": "2025-05-13T14:42:07.069Z"
_42
},
_42
"productInfo": {
_42
"sku": "E23XY06GB08DFX",
_42
"spu": "E23XY",
_42
"name": {
_42
"vi": "eSIM Ấn Độ 06GB tốc độ cao 4G, chỉ có data (6GB - 8 ngày ) ",
_42
"en": "4G high-speed India travel eSIM, data only (6GB - 8 days ) "
_42
},
_42
"type": "eSIM",
_42
"package": "FIXED",
_42
"days": 8,
_42
"data": "6GB",
_42
"apn": "internet",
_42
"hotsPot": true,
_42
"throttleSpeed": "Stop",
_42
"pointContactType": null,
_42
"smsCall": "No"
_42
}
_42
}