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.