Lucky wheel overview

Live
GET/api/v1/wheel

The member's wheel state — enabled flag, spins available, all prize segments, and recent results. One call renders the whole wheel page.

The wheel must be enabled at the agent level — a non-qualifying account/site gets enabled = false, spins_available = 0, and empty segments/recent (the image/config fields may be omitted in that case).

Spins are earned from cumulative deposits: every deposit_per_spin_thb deposited successfully = 1 spin.

Headers

FieldTypeRequiredDescription
AuthorizationstringYesUsed — send Bearer <member access_token>
X-Api-KeystringYesAgent API key (ak_…) from the bo screen
X-TimestampstringYesSigning time in unix milliseconds (±300s skew allowed)
X-NoncestringYesUnique per-request value (UUIDv4) for replay protection
X-SignaturestringYeshex(HMAC-SHA256(secret, canonical)) — see the Authentication page
X-Player-IPstring—The player's real IP (IPv4/IPv6) — recommended (used in login history)
X-Player-UAstring—The player's User-Agent (optional — recorded in login history)
X-Request-Idstring—Your correlation id — echoed back as request_uuid (recommended)
x-langstring—th (default) or en — the language of message

Response

Fields in data

FieldTypeRequiredDescription
enabledboolean—Whether the wheel is on — hide the wheel page when false (the wheel must be enabled at the agent level and the account must qualify).
wheel_image_urlstring | null—The agent's wheel face image (displayable URL)
pointer_image_urlstring | null—The wheel pointer image
spins_availablenumber—Spins the member has left
deposit_per_spin_thbstring—Cumulative deposit amount that earns 1 spin (THB) — show it as the earn rule.
wager_multiplierstring—Turnover multiplier applied to prizes (turnover = prize × multiplier)
segmentsobject[]—Prize segments ordered by slot_index — per-slot probabilities are never exposed.
└ slot_indexnumber—Slot position on the wheel (0-based, clockwise)
└ labelstring—Segment label, e.g. "20 บาท"
└ prize_amount_thbstring—Prize value of the slot (THB, string) — "0" is a no-win slot
recentobject[]—The member's recent spins (up to 10, newest first)
└ slot_indexnumber—Winning slot
└ labelstring—The slot's label at the time (snapshot)
└ prize_amount_thbstring—Prize won (THB, string)
└ spun_atstring (ISO 8601)—When the spin happened
Response example
{
  "success": true,
  "code": 0,
  "message": "Wheel fetched successfully",
  "data": {
    "enabled": true,
    "wheel_image_url": "https://cdn.bestsystem.example/wheel/luckybet888-wheel.png",
    "pointer_image_url": "https://cdn.bestsystem.example/wheel/luckybet888-pointer.png",
    "spins_available": 2,
    "deposit_per_spin_thb": "500",
    "wager_multiplier": "1",
    "segments": [
      { "slot_index": 0, "label": "5 บาท", "prize_amount_thb": "5" },
      { "slot_index": 1, "label": "เสียใจด้วย", "prize_amount_thb": "0" },
      { "slot_index": 2, "label": "10 บาท", "prize_amount_thb": "10" },
      { "slot_index": 3, "label": "20 บาท", "prize_amount_thb": "20" },
      { "slot_index": 4, "label": "เสียใจด้วย", "prize_amount_thb": "0" },
      { "slot_index": 5, "label": "50 บาท", "prize_amount_thb": "50" },
      { "slot_index": 6, "label": "100 บาท", "prize_amount_thb": "100" },
      { "slot_index": 7, "label": "500 บาท", "prize_amount_thb": "500" }
    ],
    "recent": [
      { "slot_index": 2, "label": "10 บาท", "prize_amount_thb": "10", "spun_at": "2026-07-04T13:22:10.000Z" }
    ]
  },
  "request_uuid": "3b7e0d9c-4f61-4a28-b5e3-8d2c6f1a9e07"
}

Possible error codes

codeNameHTTPMessage
6201WHEEL_NOT_ENABLED400The lucky wheel is not enabledToday a disabled wheel answers success with enabled = false instead — still handle this code, as spin uses it
6203WHEEL_NOT_ELIGIBLE400The lucky wheel is not available for this accountToday an ineligible account gets enabled = false with empty lists instead
1001UNAUTHORIZED401Unauthorized
1007TOKEN_INVALID401Token invalid