@base_url = https://api-testing.tongkhoesim.com
@key_id = tke_test_xxxxxxxxxxxxxxxx
@timestamp = 0
@nonce = 00000000-0000-0000-0000-000000000000
@signature = tu-tinh-bang-cong-thuc-o-trang-hmac-hoac-examples-sign
@idempotency_key = tu-sinh-mot-uuid-va-giu-nguyen-khi-goi-lai-dung-lenh-cu
# Tổng Kho eSIM — bộ gọi thử Open API /v1 (VS Code REST Client / JetBrains HTTP Client).
# Sinh TỰ ĐỘNG từ openapi.json — không sửa tay, chạy `pnpm --filter ./docs http` để sinh lại.
#
# {{signature}} KHÔNG thể sinh sẵn ở đây: chữ ký phụ thuộc timestamp/nonce mới mỗi lần gửi. Tự
# tính bằng snippet ở trang /hmac hoặc `node examples/sign.mjs` / `python examples/sign.py`
# ở gốc repo, rồi dán kết quả vào các biến @timestamp / @nonce / @signature bên trên (dùng đúng
# ba giá trị của CÙNG một lần ký — đổi timestamp mà giữ nguyên signature cũ là chữ ký sai).
# Chỉ dùng khoá tke_test_ hoặc tke_member_test_ trên host api-testing.tongkhoesim.com.
# Không có operation chỉ-live trong file này; không dùng khoá live.
### GET /v1/catalog/packages — Danh sách gói
GET {{base_url}}/v1/catalog/packages
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
### GET /v1/catalog/packages/{code} — Chi tiết một gói
GET {{base_url}}/v1/catalog/packages/{code}
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
### GET /v1/orders — Danh sách đơn (đối soát kéo)
GET {{base_url}}/v1/orders
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
### POST /v1/orders — Đặt đơn hàng (mua trực tiếp)
POST {{base_url}}/v1/orders
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
Idempotency-Key: {{idempotency_key}}
Content-Type: application/json
{
"external_ref": "po-1001",
"include": [
"lpa"
],
"invoice_buyer": {
"address": "
",
"email": "",
"full_name": "",
"legal_name": "",
"tax_code": "TKE-VN-30D-X3K9F"
},
"items": [
{
"package_code": "TKE-VN-30D-X3K9F",
"quantity": 2
}
]
}
### GET /v1/orders/{id} — Chi tiết đơn + eSIM
GET {{base_url}}/v1/orders/{id}
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
### POST /v1/orders/{id}/resend — Gửi lại email/QR của đơn
POST {{base_url}}/v1/orders/{id}/resend
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
### POST /v1/orders/bulk — Đặt lô nhiều dòng (mỗi dòng một đơn)
POST {{base_url}}/v1/orders/bulk
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
Idempotency-Key: {{idempotency_key}}
Content-Type: application/json
{
"external_ref": "batch-2026-001",
"items": [
{
"external_ref": "po-1001",
"package_code": "TKE-VN-30D-X3K9F",
"quantity": 5
}
]
}
### GET /v1/orders/bulk/{id} — Kết quả một lô đặt hàng
GET {{base_url}}/v1/orders/bulk/{id}
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
### GET /v1/esims — Danh sách eSIM (đối soát kéo)
GET {{base_url}}/v1/esims
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
### GET /v1/esims/{id} — Chi tiết một eSIM
GET {{base_url}}/v1/esims/{id}
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
### POST /v1/esims/{id}/cancel — Hủy eSIM chưa dùng
POST {{base_url}}/v1/esims/{id}/cancel
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
Idempotency-Key: {{idempotency_key}}
### POST /v1/esims/{id}/change-plan — Nạp thêm gói vào eSIM
POST {{base_url}}/v1/esims/{id}/change-plan
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
Idempotency-Key: {{idempotency_key}}
Content-Type: application/json
{
"package_code": "TKE-VN-7D-P4M2Q"
}
### GET /v1/esims/{id}/plan-options — Gói nạp hợp lệ cho eSIM này
GET {{base_url}}/v1/esims/{id}/plan-options
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
### GET /v1/esims/{id}/usage — Dung lượng đã dùng
GET {{base_url}}/v1/esims/{id}/usage
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
### GET /v1/wallet/balance — Số dư ví
GET {{base_url}}/v1/wallet/balance
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
### POST /v1/testmode/webhooks/fail-next — Mô phỏng lỗi webhook kế tiếp (chỉ test key)
POST {{base_url}}/v1/testmode/webhooks/fail-next
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
Content-Type: application/json
{
"count": 1
}
### POST /v1/testmode/webhooks/fire — Bắn thử webhook (chỉ test key)
POST {{base_url}}/v1/testmode/webhooks/fire
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
Content-Type: application/json
{
"data": {},
"event_type": "order.completed"
}
### GET /v1/webhooks — Danh sách webhook endpoint
GET {{base_url}}/v1/webhooks
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
### POST /v1/webhooks — Tạo webhook endpoint
POST {{base_url}}/v1/webhooks
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
Content-Type: application/json
{
"events": [
"order.completed"
],
"url": "https://partner.example.com/hooks/tke"
}
### GET /v1/webhooks/{id} — Chi tiết một webhook endpoint
GET {{base_url}}/v1/webhooks/{id}
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
### PUT /v1/webhooks/{id} — Sửa webhook endpoint
PUT {{base_url}}/v1/webhooks/{id}
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
Content-Type: application/json
{
"events": [
"order.completed"
],
"url": "https://partner.example.com/hooks/tke"
}
### DELETE /v1/webhooks/{id} — Gỡ webhook endpoint (ngừng nhận sự kiện mới)
DELETE {{base_url}}/v1/webhooks/{id}
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
### GET /v1/webhooks/deliveries — Log các lần gửi webhook
GET {{base_url}}/v1/webhooks/deliveries
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
### POST /v1/webhooks/deliveries/{id}/replay — Gửi lại một webhook
POST {{base_url}}/v1/webhooks/deliveries/{id}/replay
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
### POST /v1/testmode/esims/{id}/simulate — Mô phỏng vòng đời eSIM chế độ thử (chỉ test key)
POST {{base_url}}/v1/testmode/esims/{id}/simulate
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
Content-Type: application/json
{
"data_used_mb": 4096,
"expire_at": "2026-07-11T08:12:30Z",
"expire_now": true,
"provider_reject": true,
"status": "enabled",
"throttled": true
}
### POST /v1/testmode/reset — Đặt lại dữ liệu chế độ thử (chỉ test key)
POST {{base_url}}/v1/testmode/reset
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
Idempotency-Key: {{idempotency_key}}
Content-Type: application/json
{
"reason": "Reset test data"
}
### POST /v1/testmode/seed — Tạo dữ liệu mẫu chế độ thử (chỉ test key)
POST {{base_url}}/v1/testmode/seed
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}
Idempotency-Key: {{idempotency_key}}
### GET /v1/testmode/status — Tổng quan chế độ thử (chỉ test key)
GET {{base_url}}/v1/testmode/status
X-TKE-Key: {{key_id}}
X-TKE-Timestamp: {{timestamp}}
X-TKE-Nonce: {{nonce}}
X-TKE-Signature: {{signature}}