Save deposit promotion choice

Live
PUT/api/v1/promotions/selected

Persist 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

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

Request bodyapplication/json

FieldTypeRequiredDescription
promotion_idstring | 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

FieldTypeRequiredDescription
modestring—The refreshed picker mode (same meaning as deposit-options)forced | choose | none
optionsobject[]—Bonuses still selectable — same shape as options in deposit-options.
selected_idstring | 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

codeNameHTTPMessage
6003PROMOTION_NOT_ELIGIBLE422Not 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
4001VALIDATION_ERROR400Validation errorpromotion_id is not a string (send null to opt out)
1001UNAUTHORIZED401Unauthorized
1007TOKEN_INVALID401Token invalid