Tài liệu API v2 cho đại lý
API theo chuẩn chung của các panel SMM. Nếu phần mềm của bạn đã kết nối được với một panel khác, bạn thường chỉ cần đổi URL và khoá.
Bắt đầu
- Tạo tài khoản và nạp tiền vào ví.
- Vào Quản lý API để tạo khoá. Khoá chỉ hiện một lần, hãy lưu ngay. Có thể chọn quyền (chỉ đọc hoặc đặt đơn), đặt hạn mức yêu cầu mỗi ngày và giới hạn theo danh sách IP.
- Gửi yêu cầu POST tới endpoint dưới đây.
POST https://ducksmm.devlor.tech/api/v2- Nội dung gửi:
application/x-www-form-urlencodedhoặcapplication/json. Không nhận khoá trên URL. - Mọi yêu cầu đều có
keyvàaction. Kết quả luôn là JSON. - Tiền tệ: VND. Mã đơn là số nguyên tăng dần, ví dụ
10245. Mã chuỗi trên trang đơn hàng (ORDER_20261107_A1B2C3D4E5) cũng dùng được ở mọi tham sốorder,orders; kết quả trả lại đúng kiểu bạn đã gửi.
services
Trả về các dịch vụ đang bán, giá theo cấp của tài khoản bạn. Không cần thêm tham số.
[
{
"service": 101,
"id": 101,
"name": "Tăng like bài viết Facebook - Server 1",
"type": "Default",
"category": "Facebook - Like",
"rate": "20000.00",
"currency": "VND",
"price_unit": "per_1000",
"min": "100",
"max": "50000",
"step": "1",
"refill": true,
"cancel": true
}
]add
{
"order": 10245,
"order_code": "ORDER_20261107_A1B2C3D4E5",
"status": "Pending",
"charge": "20000.00",
"currency": "VND"
}order là mã bạn lưu để gọi các action sau. order_code là mã hiện trên website, dùng khi liên hệ hỗ trợ.
runs, interval (chạy nhỏ giọt) và comments trên các dịch vụ hiện có (hiện chưa có dịch vụ Custom Comments nào). Gửi kèm sẽ nhận lỗi 400 thay vì bị bỏ qua, nên đơn không bị giao sai.status
{
"charge": "20000.00",
"start_count": "1230",
"status": "In progress",
"remains": "600",
"currency": "VND"
}{
"10245": {
"charge": "20000.00",
"start_count": "1230",
"status": "Completed",
"remains": "0",
"currency": "VND"
},
"99999": { "error": "Incorrect order ID" }
}Trạng thái: Pending, In progress, Completed, Partial, Canceled. charge là số tiền thực trừ sau hoàn tiền.
refill và refill_status
{ "order": 10245, "refill": "cmabc123" }[
{ "order": 10245, "refill": "cmabc123" },
{ "order": 99999, "refill": { "error": "Incorrect order ID" } }
]Đơn phải hoàn thành, dịch vụ có bảo hành, còn trong thời hạn, cách lần trước đủ lâu. Tra kết quả bằng action=refill_status với refill (một mã) hoặc refills (nhiều mã):
{ "status": "In progress" }
[
{ "refill": "cmabc123", "status": "Completed" },
{ "refill": "cmabc456", "status": { "error": "Refill not found" } }
]Trạng thái: Pending, In progress, Completed, Rejected.
cancel
Huỷ đơn chưa được xử lý và trả lại tiền giữ. Tham số order hoặc orders như refill.
{ "order": 10245, "cancel": 1 }
[
{ "order": 10245, "cancel": 1 },
{ "order": 99999, "cancel": { "error": "Incorrect order ID" } }
]balance
{ "balance": "1250000", "currency": "VND" }Đây là số dư khả dụng, đã trừ tiền đang giữ cho các đơn chưa hoàn tất.
Ví dụ
Luôn lưu khoá ở phía máy chủ, không đặt trong mã chạy trên trình duyệt hay ứng dụng di động.
# Lấy danh sách dịch vụ
curl -X POST https://ducksmm.devlor.tech/api/v2 \
-d key=YOUR_API_KEY \
-d action=services
# Đặt đơn (gửi kèm idempotency_key để gửi lại an toàn)
curl -X POST https://ducksmm.devlor.tech/api/v2 \
-d key=YOUR_API_KEY \
-d action=add \
-d service=101 \
--data-urlencode "link=https://www.facebook.com/yourpage" \
-d quantity=1000 \
-d idempotency_key=my-order-0001
# Gửi JSON cũng được
curl -X POST https://ducksmm.devlor.tech/api/v2 \
-H "Content-Type: application/json" \
-d '{"key":"YOUR_API_KEY","action":"balance"}'<?php
function duck_api(array $params) {
$ch = curl_init('https://ducksmm.devlor.tech/api/v2');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query(
array_merge(['key' => getenv('DUCK_API_KEY')], $params)
),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$body = curl_exec($ch);
curl_close($ch);
$data = json_decode($body, true);
if (isset($data['error'])) {
throw new RuntimeException($data['error']);
}
return $data;
}
$order = duck_api([
'action' => 'add',
'service' => 101,
'link' => 'https://www.facebook.com/yourpage',
'quantity' => 1000,
'idempotency_key' => 'my-order-0001',
]);
echo $order['order'];import os
import requests
URL = "https://ducksmm.devlor.tech/api/v2"
KEY = os.environ["DUCK_API_KEY"]
def duck_api(**params):
res = requests.post(URL, data={"key": KEY, **params}, timeout=30)
data = res.json()
if isinstance(data, dict) and "error" in data:
raise RuntimeError(f"{res.status_code}: {data['error']}")
return data
order = duck_api(
action="add",
service=101,
link="https://www.facebook.com/yourpage",
quantity=1000,
idempotency_key="my-order-0001",
)
print(duck_api(action="status", order=order["order"]))Mã lỗi
Lỗi có dạng { "error": "..." } kèm mã HTTP tương ứng. Lỗi nghiệp vụ khác của đơn (hết hàng, sai bước số lượng, đơn không huỷ được...) có lời nhắn tiếng Việt và mã 400 hoặc 409.
Giới hạn
Danh sách services được lưu đệm tới 60 giây, không cần gọi liên tục. Nên gọi status theo lô bằng orders.
Cần hỗ trợ tích hợp? Liên hệ chúng tôi.