@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}}