🔌 Tài liệu Tích hợp API Đối tác (Partner API)

Cổng kết nối dành riêng cho các đại lý và đối tác: tự động nạp cước SIM vật lý theo ngày (từ 1 đến 30 ngày) hoặc trọn gói, trừ tiền trực tiếp vào số dư ví đại lý với chính sách chiết khấu riêng biệt.
Base URL: https://esim.vicstar.vn/api/v1
🚀 Quy trình đấu nối tự động trong 4 bước:
1. Lấy API Token

Đăng ký tài khoản, vào menu API đối tác để tạo mã Token Bearer.

2. Nạp tiền vào ví

Nạp tiền vào ví đại lý qua VietQR tự động để sẵn sàng gọi lệnh trừ tiền theo từng đơn.

3. Lấy bảng giá gói

Gọi GET /sim-plans để lấy ID gói và đơn giá ngày đã trừ chiết khấu.

4. Gửi lệnh nạp SIM

Gọi POST /sim-activations để nạp theo số ngày (1–30 ngày).

1. Xác thực (Authorization)

Mọi request gửi lên hệ thống bắt buộc phải gửi kèm Token trong HTTP Header:

Authorization: Bearer vicstar_live_xxxxxxxxxxxxxxxxxxxxxxxx
Content-Type: application/json
Accept: application/json

* Toàn bộ dữ liệu trả về ở định dạng JSON chuẩn. Token sai, bị khoá hoặc thiếu header sẽ nhận lỗi 401 Unauthorized.

2. Kiểm tra số dư ví đại lý

GET https://esim.vicstar.vn/api/v1/balance

Trả về số dư ví hiện tại của đối tác. Khuyến nghị hệ thống của bạn kiểm tra số dư trước khi kích hoạt gói để chủ động nạp thêm tiền khi ví sắp hết.

Response JSON mẫu
{
  "success": true,
  "balance": 2500000
}

3. Danh sách gói SIM vật lý & Đơn giá

GET https://esim.vicstar.vn/api/v1/sim-plans

Trả về danh sách các gói cước SIM vật lý đã được Quản trị viên cấp quyền tích hợp cho tài khoản đối tác của bạn. Giá trả về (price) đã tự động trừ chiết khấu riêng của tài khoản.

Hệ thống phân định rõ:
  • is_daily: true: Gói tính theo ngày. Cho phép nạp từ 1 đến 30 ngày (days: 1..30). Đơn giá ngày giảm dần theo số ngày nạp (càng nạp nhiều ngày đơn giá mỗi ngày càng rẻ).
  • is_daily: false: Gói trọn gói với số ngày cố định (validity_days).
Response JSON mẫu
{
  "success": true,
  "count": 2,
  "plans": [
    {
      "plan_id": 9,
      "name": "Nhật Bản Softbank 1GB/ngày",
      "country": "Nhật Bản",
      "operator": "Softbank",
      "data_amount": "1GB/ngày",
      "validity_days": 1,
      "is_daily": true,
      "price": 9000,
      "min_days": 1,
      "max_days": 30,
      "price_day_1": 18000,
      "price_day_30": 270000,
      "note": "Gói tính theo ngày: truyền tham số days (1-30). Đơn giá ngày giảm dần theo số ngày nạp."
    },
    {
      "plan_id": 15,
      "name": "Thái Lan TrueMove 15GB 8 ngày",
      "country": "Thái Lan",
      "operator": "TrueMove",
      "data_amount": "Tổng 15GB",
      "validity_days": 8,
      "is_daily": false,
      "price": 115000,
      "note": "Gói trọn gói: tính theo giá cố định của gói."
    }
  ]
}

4. Kích hoạt SIM vật lý theo ngày (1 – 30 ngày)

POST https://esim.vicstar.vn/api/v1/sim-activations

Nạp cước cho 1 số thẻ SIM (ICCID). Hệ thống sẽ tự động trừ số dư ví đại lý theo đơn giá đã chiết khấu, tự động gửi lệnh kích hoạt sang nhà mạng và tự động hoàn tiền 100% về ví trong tích tắc nếu thẻ SIM bị lỗi.

FieldKiểuBắt buộcMô tả chi tiết
plan_id int Có ID của gói cước SIM vật lý (lấy từ API danh sách gói cước).
iccid string Có Dãy 18 – 22 chữ số in trên phôi thẻ SIM vật lý.
days int Tùy chọn Số ngày nạp (từ 1 đến 30 ngày đối với gói có is_daily: true). Mặc định là 1 nếu không truyền.
partner_ref string Khuyến nghị Mã đơn hàng duy nhất phía đối tác để đối soát và chống nạp trùng 2 lần (Idempotency). Nếu gửi lại cùng mã này, hệ thống sẽ trả lại kết quả cũ mà không trừ tiền lần 2.
dry_run boolean Tùy chọn Chế độ chạy thử: truyền true để kiểm tra tính hợp lệ và xem trước số tiền cần trừ ví mà KHÔNG trừ tiền ví thật, KHÔNG gửi lệnh kích hoạt thật.
Request Body mẫu (Gói theo ngày)
{
  "plan_id": 9,
  "iccid": "8984040000000000001",
  "days": 7,
  "partner_ref": "MY-ACT-2026-001",
  "dry_run": false
}
Response mẫu (Thành công — 200 OK)
{
  "success": true,
  "activation_id": 105,
  "status": "pending",
  "partner_ref": "MY-ACT-2026-001",
  "days": 7,
  "fee": 79000,
  "balance": 2421000,
  "message": "Yêu cầu nạp SIM đã được gửi thành công tới nhà mạng."
}
Response mẫu khi bật dry_run = true (Không trừ tiền ví)
{
  "success": true,
  "dry_run": true,
  "plan_id": 9,
  "plan_name": "Nhật Bản Softbank 1GB/ngày",
  "is_daily": true,
  "iccid": "8984040000000000001",
  "days": 7,
  "fee": 79000,
  "balance": 2500000,
  "has_sufficient_balance": true,
  "message": "Dữ liệu hợp lệ. Số dư ví đủ (2.500.000đ >= 79.000đ). Sẵn sàng kích hoạt thật."
}

5. Tra cứu trạng thái đơn kích hoạt SIM

GET https://esim.vicstar.vn/api/v1/sim-activations/{ref}

Tra cứu kết quả xử lý của đơn nạp. Tham số {ref} có thể là partner_ref của phía bạn hoặc activation_id do hệ thống trả về.

Response JSON mẫu
{
  "success": true,
  "activation_id": 105,
  "iccid": "8984040000000000001",
  "status": "completed",
  "partner_ref": "MY-ACT-2026-001",
  "days": 7,
  "fee": 79000,
  "error": null,
  "created_at": "2026-10-05 01:15:00"
}

6. Tra cứu lưu lượng & Hạn dùng số thẻ ICCID

GET https://esim.vicstar.vn/api/v1/check-iccid?iccid=8984040000000000001

Kiểm tra thông tin tình trạng thẻ SIM, lưu lượng dữ liệu đã tiêu thụ, ngày bắt đầu và kết thúc sử dụng gói cước.

Response JSON mẫu
{
  "success": true,
  "found": true,
  "iccid": "8984040000000000001",
  "status_label": "Đang hoạt động (Active)",
  "plan_start": "2026-10-01 08:30:00",
  "plan_end": "2026-10-08 08:30:00",
  "data_used_label": "2.45 GB",
  "usage_history": []
}

7. Mã nguồn mẫu tích hợp

curl -X POST 'https://esim.vicstar.vn/api/v1/sim-activations' \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -d '{
    "plan_id": 9,
    "iccid": "8984040000000000001",
    "days": 7,
    "partner_ref": "REF-ORDER-001",
    "dry_run": false
  }'
<?php
$token = 'YOUR_API_TOKEN';
$data = [
    'plan_id'     => 9,
    'iccid'       => '8984040000000000001',
    'days'        => 7,
    'partner_ref' => 'REF-' . time(),
    'dry_run'     => false,
];

$ch = curl_init('https://esim.vicstar.vn/api/v1/sim-activations');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data),
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $token,
        'Content-Type: application/json',
        'Accept: application/json',
    ],
]);

$response = curl_exec($ch);
$resData = json_decode($response, true);
curl_close($ch);

if (!empty($resData['success'])) {
    echo "Kích hoạt thành công đơn: " . $resData['partner_ref'];
} else {
    echo "Lỗi: " . ($resData['error'] ?? 'Không rõ lỗi');
}
const axios = require('axios');

async function activateSim() {
  try {
    const res = await axios.post('https://esim.vicstar.vn/api/v1/sim-activations', {
      plan_id: 9,
      iccid: '8984040000000000001',
      days: 7,
      partner_ref: 'REF-' + Date.now(),
      dry_run: false
    }, {
      headers: {
        'Authorization': 'Bearer YOUR_API_TOKEN',
        'Content-Type': 'application/json',
        'Accept': 'application/json'
      }
    });

    console.log('Thành công:', res.data);
  } catch (err) {
    console.error('Lỗi gọi API:', err.response ? err.response.data : err.message);
  }
}

activateSim();

8. Bảng mã phản hồi & Xử lý lỗi

HTTP CodeÝ nghĩaGiải pháp xử lý
200 OK Thành công (success: true) Giao dịch đã được hệ thống tiếp nhận, tiền ví đã trừ thành công.
400 Bad Request Số dư ví không đủ hoặc tham số không hợp lệ Nạp thêm tiền vào ví đại lý hoặc kiểm tra lại trường error.
401 Unauthorized Thiếu Token hoặc Token không hợp lệ / bị thu hồi Kiểm tra lại header Authorization: Bearer {token}.
403 Forbidden Cổng API đang tạm đóng hoặc Token bị tạm khoá do lỗi domain Liên hệ với Quản trị viên Vicstar để mở quyền hoặc kiểm tra tên miền website.
404 Not Found Không tìm thấy mã gói cước hoặc mã đơn hàng Kiểm tra lại plan_id hoặc partner_ref.
422 Unprocessable Dữ liệu không hợp lệ (sai số thẻ ICCID, số ngày ngoài 1–30) Đảm bảo ICCID có 18–22 chữ số và số ngày nạp hợp lệ.
429 Too Many Requests Gửi lặp lại quá nhanh trong cùng 1 khoảng thời gian (Rate limit) Giãn cách thời gian gửi request tối thiểu 1 – 2 giây.
Za