Thứ 2 hàng tuần sản phẩm Cursor giảm giá 15% với gói 270k, 350k , 700k, chỉ 10 slot đầu tiên!

GenzShop Buyer API

API chính thức do GenzShop phát hành, dành cho đối tác bán sản phẩm tự động trên website, ứng dụng hoặc bot của mình.

Cách dùng rất nhanh

  1. Dùng API key được GenzShop cấp (liên hệ admin để nhận key).
  2. Lấy sản phẩm bằng GET /products.php.
  3. Xem số dư ví bằng GET /balance.php.
  4. Mua hàng bằng POST /purchase.php.
  5. Khi thành công, lấy dữ liệu trong deliveredAccounts để giao cho khách.

Cần nhớ

  • Địa chỉ endpoint phải kèm đuôi .php (ví dụ /products.php). Gọi thiếu .php sẽ trả về trang HTML 404 chứ không phải JSON.
  • Production bắt buộc gọi qua HTTPS — key nằm trong header nên phải đi qua kênh mã hóa. Gọi bằng HTTP thường sẽ bị từ chối (HTTPS_REQUIRED).
  • Mỗi đơn của khách phải có một idempotency_key riêng.
  • Nếu gửi lại cùng một đơn, giữ nguyên idempotency_key cũ — hệ thống trả lại đơn đã tạo kèm replay: true, không trừ tiền lần hai.
  • Khi mua, hệ thống trừ vào số dư ví (VND) của tài khoản gắn với key.
  • Nếu sản phẩm tạm hết hàng, lệnh mua trả về lỗi OUT_OF_STOCK.
  • Khi có lỗi, đọc errorCode để biết cách xử lý.

Base URL & Xác thực

Base URL:

https://genzshop.vn/api/partner/v1

Mọi request phải kèm header xác thực (khuyến nghị dùng X-API-Key):

X-API-Key: YOUR_API_KEY

Hoặc dùng chuẩn Bearer (tương đương):

Authorization: Bearer YOUR_API_KEY
Trên production, API chỉ nhận kết nối HTTPS.
GET /products.php

Lấy danh sách sản phẩm đang mở bán, kèm giá đại lý và tồn kho.

curl "https://genzshop.vn/api/partner/v1/products.php" \
  -H "X-API-Key: YOUR_API_KEY"

Phản hồi (rút gọn):

{
  "success": true,
  "walletCurrency": "VND",
  "products": [
    {
      "product_id": "CUR-0001",
      "name": "Cursor Pro 1 tháng",
      "description": "Tài khoản Cursor Pro dùng 1 tháng",
      "type": "cursor",
      "walletCurrency": "VND",
      "walletPricing": 120000,
      "walletPricingText": "120.000 VND",
      "available": 38
    }
  ]
}

Dùng product_id (chính là SKU) để mua. Nếu sản phẩm tạm hết hàng, lệnh mua sẽ trả về lỗi OUT_OF_STOCK.

GET /balance.php

Xem số dư ví hiện tại của tài khoản gắn với API key.

curl "https://genzshop.vn/api/partner/v1/balance.php" \
  -H "X-API-Key: YOUR_API_KEY"
{
  "success": true,
  "walletCurrency": "VND",
  "balance": 5000000,
  "balanceText": "5.000.000 VND"
}
POST /purchase.php

Mua hàng và nhận tài khoản ngay. Trừ số dư ví, trả về tài khoản trong deliveredAccounts.

curl -X POST "https://genzshop.vn/api/partner/v1/purchase.php" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "product_id": "CUR-0001",
    "quantity": 1,
    "idempotency_key": "don-khach-0001"
  }'

Tham số body:

Tham sốKiểuMô tả
product_idstringSKU sản phẩm, ví dụ CUR-0001 (bắt buộc)
quantityintegerSố lượng 1..1000 (bắt buộc)
idempotency_keystring8..128 ký tự [A-Za-z0-9._:-] (bắt buộc)
customer_emailstringEmail khách của bạn để đối soát (tùy chọn)

Phản hồi thành công:

{
  "success": true,
  "walletCurrency": "VND",
  "orderCode": "GZ260724CUR3F9A2B",
  "productType": "cursor",
  "quantity": 1,
  "amount": 120000,
  "amountText": "120.000 VND",
  "balance": 4880000,
  "balanceText": "4.880.000 VND",
  "deliveredAccounts": [
    {
      "productItemId": "1024",
      "user": "acc@example.com",
      "password": "example-password",
      "verifyEmail": "mail-phu@example.com"
    }
  ]
}

Nếu gửi lại cùng idempotency_key đã dùng, phản hồi giữ nguyên đơn cũ và có thêm "replay": truekhông trừ tiền lần nữa.

Lỗi & mã lỗi (errorCode)

Mọi lỗi đều trả JSON theo dạng cố định (HTTP status ≥ 400):

{
  "success": false,
  "errorCode": "INSUFFICIENT_BALANCE",
  "detail": "Số dư ví không đủ. Cần 120.000 VND, số dư hiện tại 50.000 VND."
}
HTTPerrorCodeÝ nghĩa
400INVALID_BODYBody không phải JSON hợp lệ
401MISSING_API_KEYThiếu header X-API-Key (hoặc Authorization: Bearer)
401INVALID_API_KEYKey sai hoặc đã bị thu hồi
402INSUFFICIENT_BALANCESố dư ví không đủ
403HTTPS_REQUIREDGọi qua HTTP ở production — phải dùng HTTPS
403IP_NOT_ALLOWEDIP không nằm trong allowlist của key
404PRODUCT_NOT_FOUNDKhông tìm thấy sản phẩm
405METHOD_NOT_ALLOWEDSai HTTP method cho endpoint
409PRODUCT_INACTIVESản phẩm hiện không mở bán
409OUT_OF_STOCKKhông đủ hàng trong kho
422INVALID_PRODUCT_IDThiếu hoặc sai định dạng product_id
422INVALID_QUANTITYSố lượng ngoài khoảng 1..1000
422INVALID_IDEMPOTENCY_KEYidempotency_key sai định dạng
422INVALID_CUSTOMER_EMAILcustomer_email không hợp lệ
429RATE_LIMITEDGọi quá nhanh (theo IP hoặc theo key), thử lại sau
500INTERNAL_ERRORLỗi hệ thống, không trừ tiền

Khi bị RATE_LIMITED theo giới hạn của key, phản hồi kèm header Retry-After, X-RateLimit-LimitX-RateLimit-Remaining — chờ đủ số giây trong Retry-After rồi gọi lại.

Zalo Telegram