DEVELOPER API · V2 ← Cửa hàng
VNLIKE CUSTOMER API

API V2

Kết nối server-to-server để đồng bộ sản phẩm, kiểm tra số dư, tạo đơn hàng và nhận kết quả giao hàng từ VNLIKE.

V2 Recommended JSON / UTF-8 REST VND Decimal String Idempotency 60 req/min
BASE URL
https://vnlike.vn/api/v2

Header khuyến nghị:

Authorization: Bearer YOUR_API_KEY
Accept: application/json

Hoặc:

X-API-Key: YOUR_API_KEY

Không đặt API key trong URL hoặc JavaScript công khai. Hãy gọi API từ server/backend của bạn.

OpenAPI JSON →
TÀI KHOẢN CỦA BẠN

Quản lý API key

Đang kiểm tra đăng nhập...

TELEGRAM · TÀI KHOẢN CỦA BẠN

Liên kết VNLIKE với Telegram Bot

Nhận diện đúng tài khoản VNLIKE của bạn trên Telegram, dùng chung số dư và lịch sử đơn hàng. Không gửi API Key hoặc mật khẩu vào Telegram.

Đang kiểm tra liên kết Telegram...

DATA-DRIVEN

API tự đồng bộ gì?

Sản phẩm, gói, giá, tồn kho, Min/Max, trạng thái bán, thứ tự gói và trường khách nhập được đọc trực tiếp từ database VNLIKE.

Vì vậy khi Admin thay đổi các dữ liệu trên, đối tác gọi API lần tiếp theo sẽ nhận dữ liệu mới. Không cần sửa API.

Nếu VNLIKE thêm một loại xử lý hoàn toàn mới có quy trình nghiệp vụ riêng, API server sẽ được bổ sung handler cho loại đó. API V2 cũ vẫn được giữ tương thích.

GET /capabilities

Lấy sản phẩm

GET /products?page=1&limit=50
curl "https://vnlike.vn/api/v2/products?page=1&limit=50" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"

Chi tiết một sản phẩm

GET /products/96

Nếu requires_package=true, khi tạo đơn phải truyền package_id.

fields cho biết các trường khách cần gửi. Có thể gửi theo ID trường hoặc theo key.

Tạo đơn

Dùng POST JSON và bắt buộc một Idempotency-Key duy nhất cho đơn.

POST /orders
Authorization: Bearer YOUR_API_KEY
Idempotency-Key: reseller-order-20261009-0001
Content-Type: application/json
{
  "product_id": 96,
  "package_id": 10,
  "quantity": 1,
  "customer_fields": {}
}

Nếu mất mạng hoặc timeout, gửi lại đúng request với cùng Idempotency-Key. Hệ thống sẽ trả lại đơn cũ thay vì trừ tiền lần hai.

Sản phẩm cần thông tin khách

{
  "product_id": 104,
  "package_id": 21,
  "quantity": 1,
  "customer_fields": {
    "field_250674b57696": "customer@example.com",
    "field_2d3bfb1ea7e7": "PASSWORD"
  }
}

Theo dõi đơn

GET /orders/1234

API trả một trạng thái chung:

waiting
processing
completed
cancelled
refunded

Đồng thời vẫn trả payment_status, work_status và fulfillment_type.

Đơn Auto

{
  "fulfillment": {
    "type": "auto",
    "keys": [
      "ACCOUNT|PASSWORD"
    ]
  }
}

Admin giao tay / nâng cấp

{
  "fulfillment": {
    "type": "manual",
    "delivery_content": "Nội dung Admin đã giao"
  }
}

Thuê SMS

{
  "fulfillment": {
    "type": "sms",
    "sms": {
      "status": "waiting_otp",
      "number": "+123456789",
      "otp": null,
      "expires_at": "2026-10-09T14:30:00+07:00",
      "remaining_seconds": 420
    }
  }
}

Tra bằng Idempotency-Key

GET /orders?idempotency_key=reseller-order-20261009-0001

Lỗi API

HTTP 4xx/5xx trả application/problem+json.

{
  "type": "https://vnlike.vn/api/problems/insufficient-balance",
  "title": "Insufficient Balance",
  "status": 409,
  "detail": "Số dư ví không đủ để tạo đơn hàng.",
  "code": "INSUFFICIENT_BALANCE",
  "request_id": "req_abcd1234"
}
HTTP Ý nghĩa
200Thành công / replay đơn
201Tạo đơn mới thành công
400Request không hợp lệ
401API key sai / bị thu hồi
403Tài khoản bị khóa
404Không tìm thấy dữ liệu
409Số dư, kho hoặc Idempotency conflict
415Sai Content-Type
422Dữ liệu không hợp lệ
429Quá giới hạn request
500Lỗi server; retry cùng Idempotency-Key

Code mẫu

PHP · cURL

<?php

$apiKey = getenv('VNL_API_KEY');

$payload = [
    'product_id' => 96,
    'package_id' => 10,
    'quantity' => 1,
    'customer_fields' => []
];

$ch = curl_init(
    'https://vnlike.vn/api/v2/orders'
);

curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer '.$apiKey,
        'Idempotency-Key: '.bin2hex(random_bytes(16)),
        'Content-Type: application/json',
        'Accept: application/json'
    ],
    CURLOPT_POSTFIELDS => json_encode($payload)
]);

$response = curl_exec($ch);

if ($response === false) {
    throw new RuntimeException(
        curl_error($ch)
    );
}

$status = curl_getinfo(
    $ch,
    CURLINFO_HTTP_CODE
);

curl_close($ch);

$data = json_decode(
    $response,
    true,
    512,
    JSON_THROW_ON_ERROR
);

print_r($data);

Python

import os
import uuid
import requests

api_key = os.environ["VNL_API_KEY"]

response = requests.post(
    "https://vnlike.vn/api/v2/orders",
    headers={
        "Authorization": f"Bearer {api_key}",
        "Idempotency-Key": str(uuid.uuid4()),
        "Accept": "application/json",
    },
    json={
        "product_id": 96,
        "package_id": 10,
        "quantity": 1,
        "customer_fields": {},
    },
    timeout=30,
)

response.raise_for_status()

print(response.json())

Xác nhận thao tác