| id | Integer | Coupon distribution record ID (coupon_send_issuing_log.id) | [optional] |
| detailsId | Integer | User coupon detail table primary key (separate table per type). This field is 0 for task coupons | [optional] |
| couponType | String | Coupon type, enum values same as the `coupon_type` parameter | [optional] |
| name | String | Coupon display name (i18n translated) | [optional] |
| amount | String | Coupon denomination (formatted string with thousand separators). Meaning by type: point card = balance, interest rate boost coupon = rate percentage (e.g., '5%'), VIP trial card = VIP level number, position voucher = face value x leverage, others = face value | [optional] |
| originAmount | String | Original denomination (string with trailing zeros removed). Only returned for point card type, other types do not have this field | [optional] |
| currency | String | Denomination unit. Point card = 'POINT', interest rate boost coupon = 'APR', VIP trial card = 'VIP', Alpha cash coupon = base currency, others = uppercase currency symbol (e.g., 'USDT'/'GT') | [optional] |
| ruleNew | String | Coupon usage rule text (i18n translated). Only has value in the detail endpoint, fixed as empty string in the list endpoint | [optional] |
| status | StatusEnum | Coupon status. Regular coupon: NOT_ACTIVE (pending activation), ACTIVATED (activated), TO_BE_USED (to be used), EXPIRED (expired), RECYCLED (recycled), INVALID (invalidated), USED (used), UNKNOWN (unknown), LOCKED (locked, P2P only). Task coupon: TASK_START (task not started), TASK_WAIT (task in progress), TASK_DONE (task completed, processing), TASK_EXPIRED (task not completed, expired), TASK_NOT_STARTED_EXPIRED (not started, expired), TASK_RECEIVE_SUCCESS (reward claimed successfully), TASK_RECEIVE_FAIL (reward claim failed) | [optional] |
| jumpUrl | ListUserCouponsResponseDataJumpUrl | | [optional] |
| helpUrl | ListUserCouponsResponseDataHelpUrl | | [optional] |
| expireTime | Integer | Expiration time (Unix timestamp). Some types replace this with actual expiration time after activation/use. Point card type returns 0. Rules by type: cash=not_received_expired_timest; contract_bonus=uses expired_timest after activation/use; contract_bonus_new=always uses expired_timest; position_voucher/tradfi_position_voucher=uses expire_time after use; robot_bonus=not_received_expired_timest; commission_rebate=uses use_deadline after use; crypto_loan_interest=not_using_expired_timest; copy_trading=not_using_expired_timest; alpha_voucher=not_received_expired_timest; etf_voucher=not_using_expired_timest | [optional] |
| expireTimeOrderBy | Integer | Sorting expiration time (from the original expiration time of the distribution record, unaffected by activation) | [optional] |
| expireSecond | Integer | Seconds remaining until expiration, returns 0 if expired or point card type | [optional] |
| hasUsageHistory | Boolean | Whether there is a usage history. Fixed as true for point card type, determined by type for others | [optional] |
| hasProgress | Boolean | Whether to display a progress bar. Only true for commission_rebate, interest_voucher, and qualifying task coupons | [optional] |
| progressConfig | ListUserCouponsResponseDataProgressConfig | | [optional] |
| activationInfo | Object | Type-specific activation information. Types without specific fields return empty object {}. Fields by type: interest_voucher={supported_pairs (applicable trading pairs), transaction_type}; contract_bonus_new={received_expired_hour (valid hours after activation)}; contract_bonus={check_unified_account_mode, received_expired_days (valid days after activation), abtest}; commission_rebate={market (spot/margin/futures/alpha/etf/tradfi), market_name (market display name)}; robot_bonus={designated_bots (ENABLED = designated strategies only / DISABLED = unrestricted)}; position_voucher={symbols (applicable trading pairs, empty = unrestricted), leverage, need_user_funds (0 = no user funds required / 1 = user funds required), user_funds_amount, position_bonus (original face value)}; tradfi_position_voucher={symbols, leverage, position_bonus}; etf_voucher={currency_markets (ETF market list, comma-separated), amount (original face value)} | [optional] |
| isTaskCoupon | IsTaskCouponEnum | Whether it is a task coupon. `0` = regular coupon; `1` = task coupon | [optional] |
| upgradeToast | Boolean | Whether to prompt the user to upgrade the App (true when the app version is too old to support the coupon) | [optional] |
| fromTask | Boolean | [Detail endpoint only] Whether this regular coupon was obtained by completing a task (a sub-coupon automatically issued after task completion). Regular coupons may be true, task coupons are always false | [optional] |
| taskTitle | String | Task title. Task coupons have value; regular coupons return empty string (but task_title is not assigned when from_task=true) | [optional] |
| taskDesc | String | Task description. Task coupons have value; regular coupons return empty string | [optional] |
| taskStartAt | Integer | Task start timestamp (Unix). Task coupon: has value when in TASK_EXPIRED status, otherwise 0; regular coupon (from_task=true): start time of the source task | [optional] |
| taskExpireAt | Integer | Task validity expiration timestamp (Unix). Task coupon: claim validity deadline (0 means unlimited); regular coupon: fixed at 0 | [optional] |
| taskCompletedAt | Integer | Task completion timestamp (Unix). Task coupon: task completion time (0 means not completed); regular coupon (from_task=true): completion time of the source task | [optional] |
| extra | List<List<Object>> | [Detail endpoint only] Coupon detail attributes organized by display blocks. The frontend renders them as separate sections. Point card type always returns empty array []. Other types return a 2D array composed of blocks: block 1 = coupon name/source/status, block 2 = coupon core attributes, block 3 = time information. Each item contains: type (display type: string/timestamp/day/hour/status/btn), key (label text, i18n translated), value (string or integer, timestamp type is Unix timestamp) | [optional] |