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):
https://merchant.simplifytrip.com
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.
_10X-Api-Key: "pk_live_xxxxxxxxxxxxxxxxxx"_10Authorization: "Bearer sk_live_xxxxxxxxxxxxxxxxxx"
-
Content Type
The request content type MUST be
application/json.
_10Content-Type: "application/json"
-
Internationalization
Multilingual support is available. It’s not mandatory; English is the default. SimplifyTrip currently supports English (
en) and Vietnamese (vi).
_10X-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
type | |
|
query | | Search keyword by name, id, country, or region… |
countryId | | Country ID |
regionId | | Region ID |
take | | Number of results returned per page |
skip | | Starting offset for returned results. |
Responses
application/jsontotal - required | | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
take - required | | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
skip - required | | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
items - required | object[] | Products returned for the requested page. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
application/jsontimestamp | | |
statusCode | | |
errorCode | | |
message | |
/api/v1/productsSample Request
Try it on SwaggerSample 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 - required | | Slug or SPU from list API |
Responses
application/jsonspu | string | Product identifier (SPU). | |||||||||||||||||||||||||||||||||||||||||||||||||||
createdAt | string | Creation time in ISO 8601 format. | |||||||||||||||||||||||||||||||||||||||||||||||||||
updatedAt | string | Last update time in ISO 8601 format. | |||||||||||||||||||||||||||||||||||||||||||||||||||
name | object | Localized name. | |||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
slug | object | Localized product slug. | |||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
metadata | object | Localized product metadata. | |||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
type | string | Product type: eSIM, SIM or SIM_RECHARGE. | |||||||||||||||||||||||||||||||||||||||||||||||||||
thumbnail | string | Thumbnail URL. | |||||||||||||||||||||||||||||||||||||||||||||||||||
regions | object[] | Regions associated with the product. | |||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
countries | object[] | Countries associated with the product. | |||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
variations | object[] | Available product variations. | |||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
application/jsontimestamp | | |
statusCode | | |
errorCode | | |
message | |
/api/v1/products/:spuSample Request
Try it on SwaggerSample 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
type | |
|
query | | Search keyword by name, id, country, or region… |
spu | | Product ID (SPU) |
countryId | | Country ID |
regionId | | Region ID |
take | | Number of results returned per page |
skip | | Starting offset for returned results. |
Responses
application/jsontotal - required | | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
take - required | | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
skip - required | | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
items - required | object[] | Items returned for the requested page. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
application/jsontimestamp | | |
statusCode | | |
errorCode | | |
message | |
/api/v1/products/variationsSample Request
Try it on SwaggerSample 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 - required | |
Responses
application/jsonsku | string | Variation identifier (SKU). | ||||||
name | object | Localized name. | ||||||
| ||||||||
price | number | Variation price. | ||||||
priceFloor | number | Floor price. | ||||||
discount | number | Discount value. | ||||||
highFlowSize | number | High-speed data allowance. | ||||||
days | number | Package validity in days. | ||||||
package | string | Package type, for example DAILY. | ||||||
data | string | Data allowance description. | ||||||
throttleSpeed | string | Speed after the high-speed allowance is used. | ||||||
smsCall | string | SMS and call information. | ||||||
apn | string | Access point name (APN). | ||||||
pointContactType | string | Contact point type. | ||||||
hotsPot | boolean | Whether hotspot sharing is supported. | ||||||
spu | string | Product identifier (SPU). | ||||||
application/jsontimestamp | | |
statusCode | | |
errorCode | | |
message | |
/api/v1/products/variation/:skuSample Request
Try it on SwaggerSample 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
query | | Search keyword by name, id, … |
take | | Number of results returned per page |
skip | | Starting offset for returned results. |
Responses
application/jsontotal - required | | ||||||||||||||||||||||||||||||||||
take - required | | ||||||||||||||||||||||||||||||||||
skip - required | | ||||||||||||||||||||||||||||||||||
items - required | object[] | Items returned for the requested page. | |||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||
application/jsontimestamp | | |
statusCode | | |
errorCode | | |
message | |
/api/v1/countriesSample Request
Try it on SwaggerSample 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
query | | Search keyword by name, id, … |
take | | Number of results returned per page |
skip | | Starting offset for returned results. |
Responses
application/jsontotal - required | | |||||||||||||||||||||||||
take - required | | |||||||||||||||||||||||||
skip - required | | |||||||||||||||||||||||||
items - required | object[] | Items returned for the requested page. | ||||||||||||||||||||||||
| ||||||||||||||||||||||||||
application/jsontimestamp | | |
statusCode | | |
errorCode | | |
message | |
/api/v1/regionsSample Request
Try it on SwaggerSample 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.
status | string |
|
items[].status | string | Same values as the order status. |
returnStatus | string |
|
hasPendingReturn | boolean | There is a pending return request. |
hasRefundingReturn | boolean | 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 - required | string | HMAC_SHA256 signature of the entire request body using checksumKey. See signature generation. |
Request Body
trackId - required | string | Required string, unique per institution and mode. Reusing an ID is rejected; after a timeout, look up the order before retrying. | |||||||||
items - required | object[] | Required array containing at least one item. All items must have the same product type ( | |||||||||
| |||||||||||
deliveryType | string | Optional: | |||||||||
customerEmail | string | Valid email address; required for eSIM delivery via | |||||||||
customerName | string | Customer name; required for eSIM delivery via | |||||||||
Responses
application/jsonsuccess | boolean | Confirms successful order creation; does not confirm completed delivery.
| ||||||||||||||||||
orderId | string | SimplifyTrip order ID. | ||||||||||||||||||
trackId | string | Your order reference. | ||||||||||||||||||
status | string | Processing status. See the endpoint’s flow and conditions. | ||||||||||||||||||
items | object[] | List of items. | ||||||||||||||||||
| ||||||||||||||||||||
application/jsontimestamp | number | |
statusCode | number | |
errorCode | string | |
message | string |
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 - required | string | HMAC_SHA256 signature of the entire request body using checksumKey. See signature generation. |
Request Body
trackId - required | string | Order reference, unique per institution and mode. | |||||||||
items - required | object[] | Exactly one item. | |||||||||
| |||||||||||
Responses
application/jsonsuccess | boolean | Confirms successful order creation; does not confirm completed delivery. | ||||||||||||||||||
orderId | string | SimplifyTrip order ID. | ||||||||||||||||||
trackId | string | Your order reference. | ||||||||||||||||||
status | string | Processing status. See the endpoint’s flow and conditions. | ||||||||||||||||||
items | object[] | List of items. | ||||||||||||||||||
| ||||||||||||||||||||
application/jsontimestamp | number | |
statusCode | number | |
errorCode | string | |
message | string |
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 - required | string | HMAC_SHA256 signature of the entire request body using checksumKey. See signature generation. |
Request Body
orderId - required | string | SimplifyTrip order ID or trackId. |
reason | string | Cancellation reason (optional). |
Responses
application/jsonid | string | |||||||||||||||||||
trackId | string | Your order reference. | ||||||||||||||||||
createdAt | datetime | null | ISO timestamp; may be null if the event has not occurred. | ||||||||||||||||||
updatedAt | datetime | null | ISO timestamp; may be null if the event has not occurred. | ||||||||||||||||||
status | string | Processing status. See the endpoint’s flow and conditions. | ||||||||||||||||||
reason | string | Request/cancellation reason; may be null. | ||||||||||||||||||
items | object[] | List of items. | ||||||||||||||||||
| ||||||||||||||||||||
application/jsontimestamp | number | |
statusCode | number | |
errorCode | string | |
message | string |
Get order details API
Use the order ID or unique trackId.
Path Parameters
id - required | string | Order ID or unique trackId. |
Responses
application/jsonid | string | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
trackId | string | Your order reference. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
createdAt | datetime | null | ISO timestamp; may be null if the event has not occurred. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
confirmedAt | datetime | null | ISO timestamp; may be null if the event has not occurred. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
deliveringAt | datetime | null | ISO timestamp; may be null if the event has not occurred. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
canceledAt | datetime | null | ISO timestamp; may be null if the event has not occurred. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
succeededAt | datetime | null | ISO timestamp; may be null if the event has not occurred. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
status | string | Processing status. See the endpoint’s flow and conditions. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
returnStatus | string | NONE, PARTIAL, or FULL; separate from the order status. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
hasPendingReturn | boolean | There is a pending return request. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
hasRefundingReturn | boolean | There is a return request with a refund in progress. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
totalBeforeRefund | number | Total amount before returns (VND). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
total | number | Remaining total amount after returns (VND). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
refundAmount | number | Refund amount (VND); on the order, this is the sum of all completed refunds. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
error | string | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
shippingAddress | object | null | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
items | object[] | List of items. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
returns | object[] | Return history, newest first. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
application/jsontimestamp | number | |
statusCode | number | |
errorCode | string | |
message | string |
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
- Read the order details and select eligible items from a
SUCCESSorder. - Create a return with a new
returnTrackIdand explicititems. - A manual request starts at
REQUESTED; - Poll the return details or process
RETURN_ORDER_UPDATEwebhooks.REFUNDINGmeans processing;COMPLETEDmeans the return has completed. - Refresh order details to obtain cumulative returned quantities, refund amount and remaining total.
Return request statuses
| Waiting for review; may be canceled. |
| Refund processing; cannot be canceled. |
| Return completed. A positive refund creates a payment account credit transaction, processed asynchronously. |
| Rejected; inspect |
| 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 statusNONE. - To return everything, explicitly include all remaining eligible quantities/ICCIDs. The server calculates
FULLorPARTIALagainst 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 - required | string | HMAC_SHA256 signature of the complete request body using checksumKey. See signature generation. |
Request Body
returnTrackId - required | string | Required non-empty string, unique per institution and mode. It is separate from the original order’s | |||||||||
orderId - required | string | Required non-empty string: SimplifyTrip order ID or original order | |||||||||
reason | string | Optional string. | |||||||||
items - required | object[] | 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. | |||||||||
| |||||||||||
Responses
application/jsonid | string | SimplifyTrip return request ID. | ||||||||||||||||||||||||
returnTrackId | string | Your return tracking reference. | ||||||||||||||||||||||||
orderId | string | SimplifyTrip order ID. | ||||||||||||||||||||||||
orderTrackId | string | Original order tracking reference. | ||||||||||||||||||||||||
createdAt | datetime | null | ISO timestamp; may be null if the event has not occurred. | ||||||||||||||||||||||||
refundingAt | datetime | null | ISO timestamp; may be null if the event has not occurred. | ||||||||||||||||||||||||
completedAt | datetime | null | ISO timestamp; may be null if the event has not occurred. | ||||||||||||||||||||||||
canceledAt | datetime | null | ISO timestamp; may be null if the event has not occurred. | ||||||||||||||||||||||||
rejectedAt | datetime | null | ISO timestamp; may be null if the event has not occurred. | ||||||||||||||||||||||||
reason | string | Request or cancellation reason; may be null. | ||||||||||||||||||||||||
rejectionReason | string | Rejection reason; may be null. | ||||||||||||||||||||||||
status | string | Processing status. See the flow and conditions for this endpoint. | ||||||||||||||||||||||||
returnType | string | FULL or PARTIAL, calculated by the server against remaining eligible units. | ||||||||||||||||||||||||
refundFee | number | Base return fee (VND). | ||||||||||||||||||||||||
extraFee | number | Extra fee (VND). | ||||||||||||||||||||||||
extraFeeNote | string | Extra fee explanation; may be null. | ||||||||||||||||||||||||
refundAmount | number | Refund amount (VND); on an order, the cumulative amount of completed refunds. | ||||||||||||||||||||||||
items | object[] | Item list. | ||||||||||||||||||||||||
| ||||||||||||||||||||||||||
application/jsontimestamp | number | |
statusCode | number | |
errorCode | string | |
message | string |
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 - required | string | HMAC_SHA256 signature of the complete request body using checksumKey. See signature generation. |
Request Body
returnId - required | string | 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
application/jsonid | string | SimplifyTrip return request ID. | ||||||||||||||||||||||||
returnTrackId | string | Your return tracking reference. | ||||||||||||||||||||||||
orderId | string | SimplifyTrip order ID. | ||||||||||||||||||||||||
orderTrackId | string | Original order tracking reference. | ||||||||||||||||||||||||
createdAt | datetime | null | ISO timestamp; may be null if the event has not occurred. | ||||||||||||||||||||||||
refundingAt | datetime | null | ISO timestamp; may be null if the event has not occurred. | ||||||||||||||||||||||||
completedAt | datetime | null | ISO timestamp; may be null if the event has not occurred. | ||||||||||||||||||||||||
canceledAt | datetime | null | ISO timestamp; may be null if the event has not occurred. | ||||||||||||||||||||||||
rejectedAt | datetime | null | ISO timestamp; may be null if the event has not occurred. | ||||||||||||||||||||||||
reason | string | Request or cancellation reason; may be null. | ||||||||||||||||||||||||
rejectionReason | string | Rejection reason; may be null. | ||||||||||||||||||||||||
status | string | Processing status. See the flow and conditions for this endpoint. | ||||||||||||||||||||||||
returnType | string | FULL or PARTIAL, calculated by the server against remaining eligible units. | ||||||||||||||||||||||||
refundFee | number | Base return fee (VND). | ||||||||||||||||||||||||
extraFee | number | Extra fee (VND). | ||||||||||||||||||||||||
extraFeeNote | string | Extra fee explanation; may be null. | ||||||||||||||||||||||||
refundAmount | number | Refund amount (VND); on an order, the cumulative amount of completed refunds. | ||||||||||||||||||||||||
items | object[] | Item list. | ||||||||||||||||||||||||
| ||||||||||||||||||||||||||
application/jsontimestamp | number | |
statusCode | number | |
errorCode | string | |
message | string |
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 - required | string | The request’s returnId or returnTrackId. |
Responses
application/jsonid | string | SimplifyTrip return request ID. | ||||||||||||||||||||||||
returnTrackId | string | Your return tracking reference. | ||||||||||||||||||||||||
orderId | string | SimplifyTrip order ID. | ||||||||||||||||||||||||
orderTrackId | string | Original order tracking reference. | ||||||||||||||||||||||||
createdAt | datetime | null | ISO timestamp; may be null if the event has not occurred. | ||||||||||||||||||||||||
refundingAt | datetime | null | ISO timestamp; may be null if the event has not occurred. | ||||||||||||||||||||||||
completedAt | datetime | null | ISO timestamp; may be null if the event has not occurred. | ||||||||||||||||||||||||
canceledAt | datetime | null | ISO timestamp; may be null if the event has not occurred. | ||||||||||||||||||||||||
rejectedAt | datetime | null | ISO timestamp; may be null if the event has not occurred. | ||||||||||||||||||||||||
reason | string | Request or cancellation reason; may be null. | ||||||||||||||||||||||||
rejectionReason | string | Rejection reason; may be null. | ||||||||||||||||||||||||
status | string | Processing status. See the flow and conditions for this endpoint. | ||||||||||||||||||||||||
returnType | string | FULL or PARTIAL, calculated by the server against remaining eligible units. | ||||||||||||||||||||||||
refundFee | number | Base return fee (VND). | ||||||||||||||||||||||||
extraFee | number | Extra fee (VND). | ||||||||||||||||||||||||
extraFeeNote | string | Extra fee explanation; may be null. | ||||||||||||||||||||||||
refundAmount | number | Refund amount (VND); on an order, the cumulative amount of completed refunds. | ||||||||||||||||||||||||
items | object[] | Item list. | ||||||||||||||||||||||||
| ||||||||||||||||||||||||||
application/jsontimestamp | number | |
statusCode | number | |
errorCode | string | |
message | string |
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 - required | string |
|
X-Api-Key - required | string | 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
application/jsonThe 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.
id | string | Payment account code. |
type | TOP_UP | DEBIT |
|
balance | number | Current balance in VND. Spending on a |
status | ACTIVE | INACTIVE | Account activity status. |
isBlocked | boolean |
|
isDefault | boolean |
|
debtStatement | number | Outstanding statement debt in VND. Only present for |
currency | VND | Currency; currently always |
dueDate | string (YYYY-MM-DD) | The 5th of the current month in |
/api/v1/accountsSample Request
Try it on SwaggerSample Response
Example response during September 2026. Account codes and amounts are illustrative.
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 - required | |
Responses
application/jsoniccid | | |||||||||||||||||||||||||||||||
activityLogs | | |||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||
usageInfoList | | |||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||
simStatus | | |||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||
productInfo | | |||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||
orderInfo | | |||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||
application/jsontimestamp | | |
statusCode | | |
errorCode | | |
message | |
/api/v1/products/esim/:iccidSample Request
Try it on SwaggerSample 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 - required | |
Responses
application/jsoniccid | | |||||||||||||||||||||||||||||||
activityLogs | | |||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||
usageInfoList | | |||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||
simStatus | | |||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||
productInfo | | |||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||
orderInfo | | |||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||
application/jsontimestamp | | |
statusCode | | |
errorCode | | |
message | |
/api/v1/products/sim/:iccidSample Request
Try it on SwaggerSample 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}