Được cấp quyền đại lý
Chủ shop gán cấp CTV / Đại lý / VIP cho tài khoản BEOMAM của bạn.
Đồng bộ giá bán theo cấp đại lý, đặt đơn trực tiếp bằng API Key, theo dõi kết quả và giao dịch ví trên một nền tảng.
https://beomempo.duckdns.org/api/reseller/v1Chỉ gửi API Key qua HTTPS và giữ khóa ở máy chủ đại lý. Webhook chỉ gửi sự kiện khi BEOMAM bật worker sau kiểm thử. Các API Key bên dưới chỉ là ví dụ.
Chủ shop gán cấp CTV / Đại lý / VIP cho tài khoản BEOMAM của bạn.
Chủ shop cấp Key riêng. Mỗi Key dùng ví và bảng giá của chính đại lý được cấp.
Gọi /services để nhận giá, sau đó tạo client_ref duy nhất khi mua.
GET /services theo đúng tài khoản API Key, bao gồm cấp giá và điều chỉnh riêng nếu đã cấu hình.Mọi endpoint giao dịch đều yêu cầu Bearer token qua header Authorization. Mã khóa bắt đầu bằng bm_live_ và được cấp tại Web Admin, chỉ hiển thị một lần.
Authorization: Bearer bm_live_YOUR_API_KEY
Content-Type: application/json
Không gắn API Key lên JavaScript trình duyệt, ứng dụng public, URL hoặc log. Nên gọi API từ backend của chính đại lý.
BEOMAM hiện có các cấp CTV, Đại lý, VIP và hỗ trợ quy tắc giá theo sản phẩm hoặc tài khoản. API tự lấy giá hiệu lực cho người sở hữu Key — không sử dụng giá vốn nhà cung cấp.
Giá có thể thay đổi. Trước mỗi lần mua cần lấy lại unit_price_vnd và gửi tổng tiền dự kiến qua expected_total_vnd. Khi giá thay đổi, API từ chối đơn với RESELLER_PRICE_CHANGED_REFRESH_QUOTE thay vì âm thầm tính giá khác.
/servicesTrả danh mục sản phẩm đại lý được phép mua, cùng mức giá hiệu lực theo API Key.
curl -sS 'https://beomempo.duckdns.org/api/reseller/v1/services?limit=100&offset=0' \
-H 'Authorization: Bearer bm_live_YOUR_API_KEY'
{
"success": true,
"data": [{
"id": 123,
"sku": "BM-000123",
"name": "Sản phẩm mẫu",
"type": "api",
"unit_price_vnd": 10000,
"min_quantity": 1,
"max_quantity": 50,
"input_required": false,
"input_label": null,
"flat_price": false
}],
"limit": 100,
"offset": 0
}
Các giá trị ID và giá trong ví dụ chỉ minh họa, không phải sản phẩm đang mở bán. Tham số limit từ 1 đến 100, offset từ 0 đến 100000.
/walletKiểm tra số dư ví BEOMAM gắn với tài khoản API Key.
curl -sS 'https://beomempo.duckdns.org/api/reseller/v1/wallet' \
-H 'Authorization: Bearer bm_live_YOUR_API_KEY'
{ "success": true, "data": { "balance_vnd": 100000, "currency": "VND" } }
/wallet/transactionsLấy các bút toán ví gần nhất của đại lý (tối đa 100 bản ghi một lần).
curl -sS 'https://beomempo.duckdns.org/api/reseller/v1/wallet/transactions?limit=30' \
-H 'Authorization: Bearer bm_live_YOUR_API_KEY'
{
"success": true,
"data": [{
"type": "api_item_refund",
"amount_vnd": 10000,
"balance_after_vnd": 90000,
"reference_type": "api_order_item",
"reference_id": "456",
"created_at": "2026-10-16T01:00:00+00:00"
}]
}
Ví dụ chỉ minh họa cấu trúc. Giá trị thực phụ thuộc lịch sử bút toán trên tài khoản đại lý.
/ordersĐặt mua sản phẩm bằng mã đơn riêng client_ref. Thành công trả HTTP 201. API Key dùng số dư tài khoản đại lý hiện hữu.
/servicesaccounts, selectedShift hoặc prefix tùy dịch vụ)curl -sS -X POST 'https://beomempo.duckdns.org/api/reseller/v1/orders' \
-H 'Authorization: Bearer bm_live_YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"client_ref": "reseller-order-100001",
"product_id": 123,
"quantity": 1,
"expected_total_vnd": 10000,
"customer_inputs": [],
"api_options": {"accounts": ["example_user"]}
}'
user|pass hoặc ca chạy selectedShift. Chỉ dùng các trường được phép cho từng loại dịch vụ. Ví dụ trên không phải đơn có thể đặt thật.{
"success": true,
"replayed": false,
"data": {
"order_id": "BM-EXAMPLE-ORDER",
"status": "processing",
"payment_status": "paid",
"quantity": 1,
"charged_vnd": 10000,
"refunded_vnd": 0,
"delivery": null,
"phone": null,
"code": null,
"created_at": "2026-10-16T01:00:00+00:00"
}
}
Trạng thái và dữ liệu thực tế có thể khác theo kết quả đơn. Với hàng API, đơn được dispatch sau khi tạo; việc nhà cung cấp tiếp nhận hoặc hoàn tiền được phản ánh khi kiểm tra lại.
/orders/{client_ref}Tra cứu đơn theo đúng mã client_ref đã dùng lúc đặt. Không truyền mã đơn nguồn nhà cung cấp.
curl -sS 'https://beomempo.duckdns.org/api/reseller/v1/orders/reseller-order-100001' \
-H 'Authorization: Bearer bm_live_YOUR_API_KEY'
Trả thông tin data gồm trạng thái đơn, payment_status, charged_vnd, refunded_vnd, delivery, phone, code, created_at và dispatch_state.
Bot hoặc website đại lý có thể đăng ký một địa chỉ HTTPS công khai. BEOMAM gửi order.updated mỗi khi trạng thái/kết quả/số tiền hoàn trong API thay đổi. Đại lý không cần liên tục hỏi kết quả. Trường hợp webhook chưa bật hoặc bị lỗi, vẫn có thể gọi GET /orders/{client_ref}.
Không có webhook nhận đơn mua. Webhook chỉ gửi kết quả về hệ thống đại lý, không phát sinh giao dịch tài chính mới.
curl -sS -X PUT 'https://beomempo.duckdns.org/api/reseller/v1/webhook' \
-H 'Authorization: Bearer bm_live_YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"url":"https://your-bot.example.com/beomam-events"}'
Webhook URL phải là domain HTTPS công khai, cổng 443. BEOMAM trả secret chỉ một lần khi đăng ký. Lưu vào máy chủ đại lý để xác minh HMAC. Cập nhật URL hoặc Secret qua PUT sẽ xoay Secret; nếu đã thiết lập webhook trước đó, phải lưu Secret mới.
{"success":true,"enabled":true,"url":"https://your-bot.example.com/beomam-events","secret":"GENERATED_ONCE"}
{
"event": "order.updated",
"client_ref": "reseller-order-100001",
"at": "2026-10-16T06:00:00+00:00",
"data": {
"order_id": "BM-EXAMPLE-ORDER",
"status": "completed",
"payment_status": "paid",
"quantity": 1,
"charged_vnd": 10000,
"refunded_vnd": 0,
"delivery": "Kết quả mẫu",
"phone": null,
"code": null,
"created_at": "2026-10-16T05:00:00+00:00"
}
}
Headers: X-Event, X-Delivery-Id, X-Signature: sha256=... (HMAC SHA256 của raw request body với Secret). Trả HTTP 2xx trong 5 giây; nếu lỗi BEOMAM thử lại tối đa 10 lượt. Đại lý phải chống trùng theo X-Delivery-Id, không giả định callback luôn theo thứ tự.
import hashlib, hmac
def verify(secret, body: bytes, signature: str) -> bool:
digest = hmac.new(secret.encode(), body, hashlib.sha256).hexdigest()
return hmac.compare_digest("sha256=" + digest, signature or "")
Quản lý: GET /webhook xem cấu hình (không lộ Secret), DELETE /webhook tắt, POST /webhook/test xếp hàng sự kiện ping, GET /webhook/deliveries xem kết quả gửi gần nhất. Chỉ gửi cho đơn tạo sau khi đăng ký webhook. Webhook của shop cần được bật bởi Admin sau khi kiểm thử.
| HTTP | Tình huống | Cách xử lý |
|---|---|---|
| 400 | Dữ liệu không hợp lệ / sản phẩm chưa sẵn sàng | Kiểm tra tham số, số lượng và lựa chọn dịch vụ |
| 401 | Thiếu hoặc sai API Key; key không còn hoạt động | Kiểm tra Bearer token, liên hệ chủ shop |
| 402 | INSUFFICIENT_BALANCE | Nạp thêm ví theo cơ chế BEOMAM hiện có |
| 403 | Tài khoản bị vô hiệu hóa | Liên hệ hỗ trợ |
| 404 | Không tìm thấy đơn/sản phẩm | Kiểm tra client_ref hoặc product_id |
| 409 | Đơn trùng khác nội dung, giá đổi hoặc trạng thái xung đột | Kiểm tra dữ liệu và báo giá, không tự tạo trùng |
| 422 | Không qua được xác thực dữ liệu đầu vào | Đối chiếu cấu trúc JSON |
| 429 | Đặt đơn quá nhanh (tối thiểu 2 giây giữa lệnh tạo mới cùng Key) | Giãn nhịp gửi |
BEOMAM sử dụng mã lỗi FastAPI trong trường detail; đây là các mã lỗi do BEOMAM định nghĩa, không phải mã lỗi trực tiếp của Dealer V2 nhà cung cấp.
client_ref và cùng nội dung đơn sẽ nhận lại kết quả cũ với replayed=true; không mua/thu tiền hai lần. Nếu đổi nội dung mà dùng lại mã cũ, API trả 409.Không tạo mã đơn mới để thử lại khi request bị timeout sau khi gửi. Hãy dùng GET /orders/{client_ref} để kiểm tra hoặc gửi lại chính xác cùng mã và cùng nội dung theo hướng dẫn an toàn.
Đơn có thể bị hủy nhưng không được hoàn tiền. Trường refunded_vnd phản ánh khoản hoàn đã ghi nhận trong ví BEOMAM; không suy ra hoàn tiền chỉ từ trạng thái cancelled. Đại lý phải tự thực hiện chính sách hoàn đối với khách cuối của mình.
BEOMAM xử lý hoàn tiền dựa trên cấu hình và cơ chế đối soát đang chạy. Tài liệu này không cam kết nhà cung cấp hoàn trong mọi trường hợp đơn lỗi.
Không. Key sử dụng ví của tài khoản BEOMAM được cấp quyền.
Giá hiệu lực theo cấp/điều chỉnh riêng của đại lý, qua API GET /services.
Chưa. Super Admin cấp và thu hồi tại Web Admin theo quyền hạn hiện tại.
Có trong bản mở rộng mới: đăng ký tại PUT /webhook, dùng chữ ký HMAC-SHA256 và xử lý thông báo trùng. Chỉ sử dụng sau khi BEOMAM triển khai bản backend mới và bật dịch vụ webhook.
Liên hệ quản trị viên của BEOMAM SHOP bằng kênh hỗ trợ chính thức đã được cung cấp khi nhận API Key.