Tài liệu API BuffDi
API BuffDi cho bạn bán lại toàn bộ dịch vụ ngay trên panel hay website
của mình. Tất cả gói trong một endpoint, phân nhánh bằng tham số
action và luôn trả JSON, nên ghép vào hệ thống có sẵn gần
như không phải đổi kiến trúc.
https://api.buffdi.com/api/v2 Xác thực bằng API key
Mọi lệnh gọi đều kèm một API key truyền qua tham số
key. Bạn tạo và thu hồi key trong mục
Tích hợp API trong tài khoản.
Key chỉ hiện đầy đủ đúng một lần lúc tạo, hãy chép lại và cất nơi an toàn ngay.
Key gắn trực tiếp với tài khoản và ví của bạn. Khi bị thu hồi, key mất hiệu lực ngay lập tức.
Cách gọi API
- Phương thức:
POST. - Định dạng: phản hồi luôn là JSON.
- Lỗi: trả về
{ "error": "..." }. Luôn kiểm tra trườngerrortrước khi xử lý. - Đơn giá (
rate): là giá cho một đơn vị (1 like, 1 follow), tính theo VND. - Tiền tệ: VND.
- Idempotency: thêm
idempotency_keykhiaddđể chống tạo trùng nếu phải gửi lại. - Giới hạn tần suất: gửi quá nhanh sẽ nhận lỗi giới hạn.
POST Danh mục dịch vụ services
Lấy về danh mục đang mở bán, mỗi mục kèm đơn giá, khoảng số lượng cho phép và thông tin bảo hành.
Tham số
| Tham số | Bắt buộc | Mô tả |
|---|---|---|
key | Có | API key của bạn |
action | Có | services |
Ví dụ
curl https://api.buffdi.com/api/v2 \
-d key=YOUR_API_KEY \
-d action=services Phản hồi
[
{
"service": "a1b2c3d4-5e6f-7890-abcd-ef1234567890",
"name": "TikTok Followers",
"category": "Followers",
"rate": "30.0000000",
"min": 10,
"max": 100000,
"refill": true,
"cancel": false
}
] POST Kiểm tra số dư balance
Tham số
| Tham số | Bắt buộc | Mô tả |
|---|---|---|
key | Có | API key của bạn |
action | Có | balance |
Phản hồi
{ "balance": "1500000.0000", "currency": "VND" } POST Đặt đơn add
Đặt một đơn mới. Đơn vào hàng đợi và chạy tự động, tiền trừ thẳng từ ví của bạn.
Tham số
| Tham số | Bắt buộc | Mô tả |
|---|---|---|
key | Có | API key của bạn |
action | Có | add |
service | Có | ID dịch vụ (từ services) |
link | Có | Link công khai cần tăng tương tác |
quantity | Có | Số lượng (trong khoảng min và max) |
idempotency_key | Không | Chuỗi tùy chọn chống tạo trùng khi gửi lại |
Ví dụ
curl https://api.buffdi.com/api/v2 \
-d key=YOUR_API_KEY \
-d action=add \
-d service=a1b2c3d4-5e6f-7890-abcd-ef1234567890 \
-d link=https://www.tiktok.com/@user/video/123 \
-d quantity=1000 Phản hồi
{ "order": "BX-AB12CD" }
Gửi lại cùng một idempotency_key thì hệ thống trả về đúng đơn đã tạo trước đó, không nhân đôi đơn.
POST Tra cứu đơn status
Kiểm tra tiến độ đơn: dùng order cho một mã, hoặc
orders để tra nhiều đơn một lần (các mã cách nhau bằng dấu phẩy).
Tham số
| Tham số | Bắt buộc | Mô tả |
|---|---|---|
key | Có | API key của bạn |
action | Có | status |
order | Có* | Mã đơn (vd BX-AB12CD) |
orders | Có* | Nhiều mã đơn, cách nhau bằng dấu phẩy |
* Dùng order cho một đơn, hoặc orders cho nhiều đơn.
Phản hồi (một đơn)
{
"charge": "30000.0000",
"start_count": 1200,
"status": "In progress",
"remains": 400,
"currency": "VND"
} Trạng thái đơn hàng
| status | Ý nghĩa |
|---|---|
Pending | Đã nhận đơn, chưa bắt đầu |
In progress | Đang giao |
Processing | Đang xử lý |
Completed | Hoàn tất |
Partial | Giao một phần (phần còn lại được hoàn) |
Canceled | Đã hủy / hoàn tiền |
Hai action refill và cancel đang được hoàn thiện, sẽ mở trong bản cập nhật tới.
Danh sách lỗi
| error | Nguyên nhân |
|---|---|
Incorrect API key | Key sai, bị thu hồi, hoặc không đúng thương hiệu |
Invalid action | action không hợp lệ |
Service not found | Không tìm thấy dịch vụ |
Service temporarily unavailable | Dịch vụ tạm thời không khả dụng |
Invalid quantity | quantity không phải số hợp lệ |
Quantity must be between … | Số lượng ngoài khoảng cho phép |
Link is required | Thiếu link |
Insufficient balance | Số dư không đủ để tạo đơn |
Incorrect order ID | Mã đơn không tồn tại hoặc không thuộc tài khoản |
Rate limit exceeded, slow down | Gửi quá nhanh |
Code mẫu theo ngôn ngữ
Cùng một luồng cơ bản (lấy danh mục → đặt đơn → kiểm tra trạng thái) viết sẵn cho vài ngôn ngữ hay dùng. Sao chép rồi thay YOUR_API_KEY bằng key của bạn.
# Danh sách dịch vụ
curl https://api.buffdi.com/api/v2 -d key=YOUR_API_KEY -d action=services
# Tạo đơn
curl https://api.buffdi.com/api/v2 \
-d key=YOUR_API_KEY \
-d action=add \
-d service=a1b2c3d4-5e6f-7890-abcd-ef1234567890 \
-d link=https://www.tiktok.com/@user/video/123 \
-d quantity=1000
# Trạng thái đơn
curl https://api.buffdi.com/api/v2 -d key=YOUR_API_KEY -d action=status -d order=BX-AB12CD <?php
$api = new BuffDiApi('YOUR_API_KEY');
$services = $api->services();
$order = $api->add([
'service' => 'a1b2c3d4-5e6f-7890-abcd-ef1234567890',
'link' => 'https://www.tiktok.com/@user/video/123',
'quantity' => 1000,
]);
$status = $api->status($order->order);
class BuffDiApi {
private $key;
private $url = 'https://api.buffdi.com/api/v2';
public function __construct($key) { $this->key = $key; }
public function services() { return $this->connect(['action' => 'services']); }
public function balance() { return $this->connect(['action' => 'balance']); }
public function add($params) { return $this->connect(['action' => 'add'] + $params); }
public function status($order) { return $this->connect(['action' => 'status', 'order' => $order]); }
private function connect($data) {
$data['key'] = $this->key;
$ch = curl_init($this->url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query($data),
]);
$res = curl_exec($ch);
curl_close($ch);
return json_decode($res);
}
} import requests
ENDPOINT = "https://api.buffdi.com/api/v2"
KEY = "YOUR_API_KEY"
def call(params):
params["key"] = KEY
return requests.post(ENDPOINT, data=params).json()
services = call({"action": "services"})
order = call({
"action": "add",
"service": "a1b2c3d4-5e6f-7890-abcd-ef1234567890",
"link": "https://www.tiktok.com/@user/video/123",
"quantity": 1000,
})
status = call({"action": "status", "order": order["order"]}) const ENDPOINT = "https://api.buffdi.com/api/v2";
const KEY = "YOUR_API_KEY";
async function call(params) {
const body = new URLSearchParams({ ...params, key: KEY });
const res = await fetch(ENDPOINT, { method: "POST", body });
return res.json();
}
const services = await call({ action: "services" });
const order = await call({
action: "add",
service: "a1b2c3d4-5e6f-7890-abcd-ef1234567890",
link: "https://www.tiktok.com/@user/video/123",
quantity: 1000,
});
const status = await call({ action: "status", order: order.order }); package main
import (
"encoding/json"
"net/http"
"net/url"
)
const (
endpoint = "https://api.buffdi.com/api/v2"
apiKey = "YOUR_API_KEY"
)
func call(params url.Values) (any, error) {
params.Set("key", apiKey)
resp, err := http.PostForm(endpoint, params)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var out any
err = json.NewDecoder(resp.Body).Decode(&out)
return out, err
}
func main() {
call(url.Values{
"action": {"add"},
"service": {"a1b2c3d4-5e6f-7890-abcd-ef1234567890"},
"link": {"https://www.tiktok.com/@user/video/123"},
"quantity": {"1000"},
})
}