Skip to content
API list

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.