Save deposit promotion choice
LivePUT
/api/v1/promotions/selectedPersist the member's deposit-bonus choice (or opt out) — the value must be in the latest deposit-options set, and the refreshed picker state is returned.
Options are time-sensitive (golden minute / first deposit of the day) — on 6003, refetch deposit-options to refresh the list before the member picks again.
Headers
| Field | Type | Required | Description |
|---|---|---|---|
| Authorization | string | Yes | Used — send Bearer <member access_token> |
| X-Api-Key | string | Yes | Agent API key (ak_…) from the bo screen |
| X-Timestamp | string | Yes | Signing time in unix milliseconds (±300s skew allowed) |
| X-Nonce | string | Yes | Unique per-request value (UUIDv4) for replay protection |
| X-Signature | string | Yes | hex(HMAC-SHA256(secret, canonical)) — see the Authentication page |
| X-Player-IP | string | — | The player's real IP (IPv4/IPv6) — recommended (used in login history) |
| X-Player-UA | string | — | The player's User-Agent (optional — recorded in login history) |
| X-Request-Id | string | — | Your correlation id — echoed back as request_uuid (recommended) |
| x-lang | string | — | th (default) or en — the language of message |
Request bodyapplication/json
| Field | Type | Required | Description |
|---|---|---|---|
| promotion_id | string | null | — | Promotion id from the deposit-options options list — send null (or omit) to opt out of the bonus. |
Request example
{
"promotion_id": "550e8400-e29b-41d4-a716-446655440111"
}Response
Fields in data
| Field | Type | Required | Description |
|---|---|---|---|
| mode | string | — | The refreshed picker mode (same meaning as deposit-options)forced | choose | none |
| options | object[] | — | Bonuses still selectable — same shape as options in deposit-options. |
| selected_id | string | null | — | The value just saved — null = no bonus. |
Response example
{
"success": true,
"code": 0,
"message": "สำเร็จ",
"data": {
"mode": "choose",
"options": [
{
"id": "550e8400-e29b-41d4-a716-446655440111",
"type": "FIRST_DEPOSIT",
"name": "ฝากแรกของวันรับเพิ่ม 10%",
"description": "โบนัส 10% สำหรับยอดฝากแรกที่สำเร็จของวัน",
"banner_url": "https://cdn.bestsystem.example/promotions/first-deposit-10.jpg",
"sort_order": 3,
"config": { "percentage": 10, "max_bonus_thb": 300, "min_deposit_thb": 100 },
"time_window": null,
"wager_mode": "TURNOVER",
"wager_multiplier": "3",
"withdraw_cap_thb": null,
"allowed_provider_ids": [],
"allowed_categories": [],
"ends_at": null,
"eligible": true,
"cashback_available_thb": null,
"cashback_claimed_today": false
}
],
"selected_id": "550e8400-e29b-41d4-a716-446655440111"
},
"request_uuid": "e4b0d2c8-7a15-4f39-b6e2-90c3d8a1f574"
}Possible error codes
| code | Name | HTTP | Message |
|---|---|---|---|
| 6003 | PROMOTION_NOT_ELIGIBLE | 422 | Not eligible for this promotionpromotion_id is not in the currently-selectable set — e.g. the golden-minute window closed, or today's first deposit already happened |
| 4001 | VALIDATION_ERROR | 400 | Validation errorpromotion_id is not a string (send null to opt out) |
| 1001 | UNAUTHORIZED | 401 | Unauthorized |
| 1007 | TOKEN_INVALID | 401 | Token invalid |