{"openapi":"3.0.0","paths":{"/rewards":{"get":{"operationId":"RewardController_fetchRewards","summary":"Get all rewards available to purchase","parameters":[{"name":"coinId","required":true,"in":"query","schema":{"type":"string"}},{"name":"category","required":false,"in":"query","schema":{"type":"string"}},{"name":"brand","required":false,"in":"query","schema":{"type":"string"}},{"name":"contentLogic","required":false,"in":"query","schema":{"type":"string"}},{"name":"layoutStyle","required":false,"in":"query","schema":{"type":"string"}},{"name":"api-version","required":false,"in":"query","schema":{"type":"string"}},{"name":"giftCard","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"dedupeBrandsByDiscount","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"x-language","in":"header","description":"Language","required":true,"schema":{"type":"string"}},{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}},{"name":"rewardIds","required":false,"in":"query","schema":{"example":["reward-id-1","reward-id-2"],"type":"array","items":{"type":"string"}}},{"name":"country","required":false,"in":"query","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"List of rewards returned successfully","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"endDate":{"type":"string","format":"date-time"},"type":{"type":"string"},"brandId":{"type":"string"},"metadata":{"type":"object","properties":{"brandName":{"type":"string"},"brandLogoImage":{"type":"string"},"campaignCoverImage":{"type":"string"},"brandCategory":{"type":"array","items":{"type":"string"}},"campaignTitle":{"type":"string"},"campaignSubTitle":{"type":"string"},"campaignDetails":{"type":"string"},"termsAndConditions":{"type":"string"},"howToRedeem":{"type":"string"},"campaignAssets":{"type":"object","additionalProperties":{"type":"string"}}}},"availableQuantity":{"type":"number"},"flagAllowStudioEditPrice":{"type":"boolean"},"brandName":{"type":"string"},"organizationId":{"type":"string"},"price":{"type":"number"},"maxPrice":{"type":"number"},"minPrice":{"type":"number"}}},{"type":"object","properties":{"id":{"type":"string"},"brandId":{"type":"string"},"brandName":{"type":"string"},"organizationId":{"type":"string"},"metadata":{"type":"object","properties":{"campaignExpiryDate":{"type":"string","format":"date-time"},"brandName":{"type":"string"},"brandLogoImage":{"type":"string"},"campaignCoverImage":{"type":"string"},"campaignTitle":{"type":"string"},"campaignSubTitle":{"type":"string"},"brandCategory":{"type":"array","items":{"type":"string"}},"campaignDetails":{"type":"string"},"termsAndConditions":{"type":"string"},"howToRedeem":{"type":"string"},"campaignAssets":{"type":"object","additionalProperties":{"type":"string"}}}},"inventory":{"type":"object","properties":{"availableQuantity":{"type":"number"},"type":{"type":"string"}}},"price":{"type":"object","properties":{"amount":{"type":"number"},"coinId":{"type":"string"}}}}}]}}}}},"tags":["rewards"],"security":[{"bearer":[]}]}},"/rewards/metadata/brands":{"get":{"operationId":"RewardController_getBrandsMetadata","summary":"Get all unique brands with their metadata","parameters":[{"name":"giftCard","required":false,"in":"query","description":"Filter by gift card campaigns. true = only gift cards, false = exclude gift cards, undefined = all campaigns","schema":{"type":"boolean"}},{"name":"category","required":false,"in":"query","schema":{"type":"string"}},{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}},{"name":"x-game-uuid","in":"header","description":"Game UUID","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"List of brands with their metadata","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BrandMetadataDto"}}}}}},"tags":["rewards"],"security":[{"bearer":[]}]}},"/rewards/purchase":{"post":{"operationId":"RewardController_purchaseReward","summary":"Purchase a reward","parameters":[{"name":"x-idempotency-key","in":"header","description":"Idempotency Key","required":false,"schema":{"type":"string"}},{"name":"x-game-uuid","in":"header","description":"Game UUID","required":false,"schema":{"type":"string"}},{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurchaseRewardDto"}}}},"responses":{"200":{"description":"Reward purchased successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurchaseRewardResponseDto"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Code already requested for this offer, please wait some time before requesting a new code"},"statusCode":{"type":"number","example":400}}}}}},"404":{"description":"Campaign not found"}},"tags":["rewards"],"security":[{"bearer":[]}]}},"/rewards/fetch/{rewardId}":{"get":{"operationId":"RewardController_getReward","summary":"Get a reward","parameters":[{"name":"rewardId","required":true,"in":"path","schema":{"type":"string"}},{"name":"coinId","required":true,"in":"query","schema":{"type":"string"}},{"name":"version","required":false,"in":"query","schema":{"type":"string"}},{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}},{"name":"x-game-uuid","in":"header","description":"Game UUID","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Reward details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FetchRewardByIdDto"}}}}},"tags":["rewards"],"security":[{"bearer":[]}]}},"/rewards/{rewardId}/get-redirection-link":{"get":{"operationId":"RewardController_getOrCreateShortLink","summary":"Get or create a short link","parameters":[{"name":"rewardId","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-game-uuid","in":"header","description":"Game UUID","required":false,"schema":{"type":"string"}},{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Returns the shortened URL","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Internal server error"}},"tags":["rewards"],"security":[{"bearer":[]}]}},"/rewards/categories":{"get":{"operationId":"RewardController_getRewardCategories","summary":"Get rewards categories","parameters":[{"name":"api-version","required":false,"in":"query","schema":{"type":"string"}},{"name":"x-game-uuid","in":"header","description":"Game UUID","required":false,"schema":{"type":"string"}},{"name":"x-language","in":"header","description":"Language","required":true,"schema":{"type":"string"}},{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"List of reward categories","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CategoryMetadataDto"}}}}}},"tags":["rewards"],"security":[{"bearer":[]}]}},"/rewards/orders/{orderId}/verify":{"get":{"operationId":"RewardController_verifyRewardPurchase","summary":"Verify reward purchase","parameters":[{"name":"orderId","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Reward purchase verified","content":{"application/json":{"schema":{"type":"boolean"}}}}},"tags":["rewards"]}},"/rewards/search":{"get":{"operationId":"RewardController_search","summary":"Search for rewards, categories, brands","parameters":[{"name":"coinId","required":true,"in":"query","description":"Coin ID","schema":{"type":"string"}},{"name":"q","required":true,"in":"query","description":"Pass a query string to search for an item","schema":{"type":"string","minLength":1,"example":"shoes"}},{"name":"brand","required":false,"in":"query","description":"Filter by one or multiple brand names. We search based on **exact matches** only and ignore incorrect or non-existent matches.","schema":{"type":"array","items":{"type":"string"}},"style":"form"},{"name":"category","required":false,"in":"query","description":"Filter by one or multiple category names. We search based on **exact matches** only and ignore incorrect or non-existent matches.","schema":{"type":"array","items":{"type":"string"}},"style":"form"},{"name":"page","required":false,"in":"query","description":"The page number for paginated results. Starts from `1`.","schema":{"type":"integer","minimum":1,"example":1}},{"name":"sortBy","required":false,"in":"query","description":"Sorting order for the search results.","schema":{"enum":["relevance","price:low-high","price:high-low","newest","pricing-mode","discount-on-mrp","most-ordered"],"type":"string"}},{"name":"type","required":false,"in":"query","description":"Pass an optional item type to filter the search. If not provided, it defaults to null and all types except \"products\" are returned.","schema":{"type":"string","nullable":true,"enum":["brands","categories","rewards"]}},{"name":"x-language","in":"header","description":"Language","required":true,"schema":{"type":"string"}},{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Search results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponseDto"}}}}},"tags":["rewards"],"security":[{"bearer":[]}]}},"/coins/{coinId}/distribute":{"post":{"operationId":"CoinController_distributeCoin","summary":"Distribute coins to a player","parameters":[{"name":"coinId","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-game-uuid","required":false,"in":"header","description":"Game UUID","schema":{"type":"string"}},{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoinDistributionDto"}}}},"responses":{"201":{"description":"Coins distributed successfully"},"401":{"description":"Unauthorized - Invalid or missing API key"}},"tags":["coins"],"security":[{"bearer":[]}]}},"/coins/{coinId}/deduct":{"post":{"operationId":"CoinController_deductCoin","summary":"Deduct coins from a player","parameters":[{"name":"coinId","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-game-uuid","required":false,"in":"header","description":"Game UUID","schema":{"type":"string"}},{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoinDistributionDto"}}}},"responses":{"201":{"description":"Coins deducted successfully"},"400":{"description":"Bad Request - Insufficient balance"},"401":{"description":"Unauthorized - Invalid or missing API key"}},"tags":["coins"],"security":[{"bearer":[]}]}},"/coins":{"get":{"operationId":"CoinController_fetchCoins","summary":"Fetch coins for a game","parameters":[{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"List of coins returned successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CoinResponseDto"}}}}},"401":{"description":"Unauthorized - Invalid or missing API key"}},"tags":["coins"]}},"/player/request-otp":{"post":{"operationId":"PlayerController_signIn","summary":"Request OTP for sign-in","parameters":[{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignInDto"}}}},"responses":{"200":{"description":"OTP sent successfully"},"400":{"description":"Bad Request"}},"tags":["player"]}},"/player/resend-otp":{"post":{"operationId":"PlayerController_resendOTP","summary":"Resend OTP for sign-in","parameters":[{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignInDto"}}}},"responses":{"200":{"description":"OTP sent successfully"},"400":{"description":"Bad Request"}},"tags":["player"]}},"/player/login":{"post":{"operationId":"PlayerController_verifyOTP","summary":"Verify OTP and get access token","parameters":[{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyOtpDto"}}}},"responses":{"200":{"description":"OTP verified successfully","content":{"application/json":{"schema":{"type":"object","properties":{"access_token":{"type":"string"}}}}}},"401":{"description":"Unauthorized"}},"tags":["player"]}},"/player/profile":{"get":{"operationId":"PlayerController_profile","summary":"Get player profile","parameters":[{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Player profile fetched successfully"},"401":{"description":"Unauthorized"}},"tags":["player"],"security":[{"bearer":[]}]}},"/player":{"put":{"operationId":"PlayerController_updatePlayer","summary":"Update player profile","parameters":[{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePlayerDto"}}}},"responses":{"200":{"description":"Updated player profile successfully"},"401":{"description":"Unauthorized"}},"tags":["player"],"security":[{"bearer":[]}]}},"/player/funds":{"get":{"operationId":"PlayerController_getMyWallets","summary":"Get all wallets for the player","parameters":[{"name":"x-game-uuid","required":false,"in":"header","description":"Game UUID for player identification","schema":{"type":"string"}},{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"List of wallets returned successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WalletResponseDTO"}}}}}},"tags":["player"],"security":[{"bearer":[]}]}},"/player/orders":{"get":{"operationId":"PlayerController_fetchOrders","summary":"Fetch orders for the authenticated player","parameters":[{"name":"rewardId","required":false,"in":"query","description":"Reward ID","schema":{"type":"string"}},{"name":"api-version","required":false,"in":"query","schema":{"type":"string"}},{"name":"x-api-version","in":"header","description":"API Version","required":false,"schema":{"type":"string"}},{"name":"x-language","in":"header","description":"Language code","required":true,"schema":{"type":"string"}},{"name":"x-game-uuid","in":"header","description":"Game UUID","required":false,"schema":{"type":"string"}},{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Items per page (default: 10)","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","description":"Page number (default: 1)","schema":{"type":"number"}}],"responses":{"200":{"description":"List of orders","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FetchOrdersResponseDto"}}}}},"tags":["player"],"security":[{"bearer":[]}]}},"/player/orders/{orderId}":{"get":{"operationId":"PlayerController_fetchOrder","summary":"Fetch order by id for the authenticated player","parameters":[{"name":"orderId","required":true,"in":"path","schema":{"type":"string"}},{"name":"api-version","required":false,"in":"query","schema":{"type":"string"}},{"name":"x-api-version","in":"header","description":"API Version","required":false,"schema":{"type":"string"}},{"name":"x-language","in":"header","description":"Language code","required":true,"schema":{"type":"string"}},{"name":"x-game-uuid","in":"header","description":"Game UUID","required":false,"schema":{"type":"string"}},{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Order details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FetchOrdersResponseDto"}}}}},"tags":["player"],"security":[{"bearer":[]}]}},"/player/transactions":{"get":{"operationId":"PlayerController_fetchTransactions","summary":"Fetch transactions for the authenticated player","parameters":[{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Items per page (default: 10)","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","description":"Page number (default: 1)","schema":{"type":"number"}},{"name":"x-language","in":"header","description":"Language code","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"List of transactions"}},"tags":["player"],"security":[{"bearer":[]}]}},"/player/coins-history":{"get":{"operationId":"PlayerController_fetchCoinsHistory","summary":"Fetch coins history with summary and transactions","description":"Returns coin balance summary (current balance, lifetime earning, lifetime spends, savings) and paginated transaction history","parameters":[{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Items per page (default: 10)","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","description":"Page number (default: 1)","schema":{"type":"number"}}],"responses":{"200":{"description":"Coins history with summary and transactions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoinsHistoryResponseDto"}}}}},"tags":["player"],"security":[{"bearer":[]}]}},"/player/game":{"get":{"operationId":"PlayerController_getGameDetails","summary":"Get details of a current game using api-key","parameters":[{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Returns the details of the current game."}},"tags":["player"]}},"/player/create-with-uuid":{"post":{"operationId":"PlayerController_createWithUUID","summary":"Create or find player using third-party UUID","parameters":[{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePlayerWithUUIDDto"}}}},"responses":{"201":{"description":"Player created/found successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePlayerResponseDto"}}}},"400":{"description":"Bad Request"}},"tags":["player"]}},"/player/create-with-bulk-uuids":{"post":{"operationId":"PlayerController_createWithBulkUUIDs","summary":"Create or find players using third-party UUIDs","parameters":[{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"uuids":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"201":{"description":"Players created/found successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePlayerResponseDto"}}}},"400":{"description":"Bad Request"}},"tags":["player"]}},"/player/store-theme-config":{"get":{"operationId":"PlayerController_getStoreThemeAndConfig","summary":"Get store theme and config","parameters":[{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Store theme and config fetched successfully"}},"tags":["player"]}},"/player/login/federatedByStudio":{"post":{"operationId":"PlayerController_loginWithUuid","summary":"Login player using third-party UUID","parameters":[{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"uuid":{"type":"string"}}}}}},"responses":{"200":{"description":"Returns JWT token for the player"},"404":{"description":"Player not found"}},"tags":["player"]}},"/player/gcommerce/profile/details":{"get":{"operationId":"PlayerController_getPlayerProfile","summary":"Get player profile details","parameters":[{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}},{"name":"x-game-uuid","in":"header","description":"Game UUID","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Player profile details fetched successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlayerProfileResponseDto"}}}},"401":{"description":"Unauthorized"}},"tags":["player"],"security":[{"bearer":[]}]}},"/player/gcommerce/profile":{"patch":{"operationId":"PlayerController_updatePlayerProfile","summary":"Update player profile details","parameters":[{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}},{"name":"x-game-uuid","in":"header","description":"Game UUID","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlayerProfileDto"}}}},"responses":{"200":{"description":"Player profile updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlayerProfileResponseDto"}}}},"401":{"description":"Unauthorized"}},"tags":["player"],"security":[{"bearer":[]}]}},"/player/gcommerce/profile/upload":{"post":{"operationId":"PlayerController_uploadProfilePicture","summary":"Upload profile picture","parameters":[{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}},{"name":"x-game-uuid","in":"header","description":"Game UUID","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"201":{"description":"Profile picture uploaded successfully"},"400":{"description":"Bad request"},"413":{"description":"Payload too large"}},"tags":["player"],"security":[{"bearer":[]}]}},"/player/store-settings":{"get":{"operationId":"PlayerController_getStoreSettings","summary":"Get store settings","parameters":[{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Store settings retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioStoreSettingsDto"}}}}},"tags":["player","store-settings"]}},"/player/preferences":{"post":{"operationId":"PlayerController_savePreferences","summary":"Save or update player preferences","parameters":[{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePlayerPreferenceDto"}}}},"responses":{"200":{"description":"Player preferences saved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlayerPreferenceResponseDto"}}}},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"}},"tags":["player"],"security":[{"bearer":[]}]},"get":{"operationId":"PlayerController_getPreferences","summary":"Get player preferences","parameters":[{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Player preferences retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlayerPreferenceResponseDto"}}}},"401":{"description":"Unauthorized"},"404":{"description":"Preferences not found"}},"tags":["player"],"security":[{"bearer":[]}]}},"/player/preferences/check":{"get":{"operationId":"PlayerController_checkPreferences","summary":"Check if player preferences exist","parameters":[{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Preference check result","content":{"application/json":{"schema":{"type":"object","properties":{"hasSavedPreferences":{"type":"boolean"}}}}}},"401":{"description":"Unauthorized"}},"tags":["player"],"security":[{"bearer":[]}]}},"/player/preference-definitions":{"get":{"operationId":"PlayerController_getPreferenceDefinitions","summary":"Get all active preference definitions","parameters":[{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Preference definitions retrieved successfully"}},"tags":["player"]}},"/player/sdk-transactions":{"get":{"operationId":"PlayerController_fetchSdkTransactions","summary":"Fetch transactions for SDK sync","description":"Returns PURCHASE_DEBIT and REFUND_CREDIT transactions since the last synced checkpoint. Used by game SDKs to sync transaction state.","parameters":[{"name":"x-game-uuid","required":false,"in":"header","description":"Game UUID for player identification","schema":{"type":"string"}},{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"List of transactions since last sync","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SdkTransactionsResponseDto"}}}},"401":{"description":"Unauthorized"}},"tags":["player"],"security":[{"bearer":[]}]}},"/player/sdk-transactions/commit":{"post":{"operationId":"PlayerController_commitSdkSync","summary":"Commit SDK transaction sync checkpoint","description":"Updates the sync checkpoint after the SDK has processed transactions. Call this after successfully handling all fetched transactions.","parameters":[{"name":"x-game-uuid","required":false,"in":"header","description":"Game UUID for player identification","schema":{"type":"string"}},{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitSdkSyncDto"}}}},"responses":{"200":{"description":"Sync checkpoint updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitSdkSyncResponseDto"}}}},"400":{"description":"Invalid transaction ID"},"401":{"description":"Unauthorized"}},"tags":["player"],"security":[{"bearer":[]}]}},"/player/sdk-transactions/commit-by-ids":{"post":{"operationId":"PlayerController_commitSdkSyncByIds","summary":"Commit specific SDK transactions by IDs","description":"Marks specific transactions as committed by their IDs. Call this after successfully processing each transaction. Idempotent - already committed transactions are reported but not treated as errors.","parameters":[{"name":"x-game-uuid","required":false,"in":"header","description":"Game UUID for player identification","schema":{"type":"string"}},{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitSdkSyncByIdsDto"}}}},"responses":{"200":{"description":"Commit results with breakdown of each transaction ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitSdkSyncByIdsResponseDto"}}}},"400":{"description":"No transaction IDs provided"},"401":{"description":"Unauthorized"}},"tags":["player"],"security":[{"bearer":[]}]}},"/player/mark-store-visited":{"post":{"operationId":"PlayerController_markStoreVisited","summary":"Mark store as visited","description":"Records that the player has opened the PlaySuper store. This enables SDK transaction syncing for this player. Call this when opening the store.","parameters":[{"name":"x-game-uuid","required":false,"in":"header","description":"Game UUID for player identification","schema":{"type":"string"}},{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Store visit recorded successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkStoreVisitedResponseDto"}}}},"401":{"description":"Unauthorized"}},"tags":["player"],"security":[{"bearer":[]}]}},"/player/bonus":{"post":{"operationId":"PlayerController_claimBonus","summary":"Claim a daily source bonus","parameters":[{"name":"x-game-uuid","required":false,"in":"header","description":"Game UUID for player identification","schema":{"type":"string"}},{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimBonusDto"}}}},"responses":{"200":{"description":"Bonus claim result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimBonusResponseDto"}}}}},"tags":["player"],"security":[{"bearer":[]}]},"get":{"operationId":"PlayerController_getBonusStatus","summary":"Get today's bonus claim status","parameters":[{"name":"x-game-uuid","required":false,"in":"header","description":"Game UUID for player identification","schema":{"type":"string"}},{"name":"x-api-key","in":"header","description":"Game API Key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"List of bonuses claimed today","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BonusStatusResponseDto"}}}}},"tags":["player"],"security":[{"bearer":[]}]}},"/touchpoints":{"get":{"operationId":"TouchpointController_listTouchpoints","summary":"List all active touchpoints for a game with hydrated data","description":"Returns all active touchpoints for the game associated with the API key, with fully hydrated node data.","parameters":[{"name":"coinId","required":true,"in":"query","description":"Coin ID for pricing calculations on rewards/products","schema":{"example":"coin-uuid-123","type":"string"}},{"name":"x-api-key","in":"header","description":"Game API Key for authentication","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"List of active touchpoints with hydrated node data"},"401":{"description":"Unauthorized - Invalid API key"}},"tags":["touchpoints"],"security":[{"bearer":[]}]}},"/touchpoints/name/{name}":{"get":{"operationId":"TouchpointController_getTouchpointByName","summary":"Get touchpoint by name with hydrated data (runtime API)","description":"Retrieves a touchpoint by its unique name and hydrates STATIC/DYNAMIC nodes with reward and product data. This is the primary runtime API for games. Optionally pass Authorization header with player JWT for personalized data.","parameters":[{"name":"name","required":true,"in":"path","description":"Unique name identifier for the touchpoint","schema":{"example":"Main Store","type":"string"}},{"name":"coinId","required":true,"in":"query","description":"Coin ID for hydrating reward/product data","schema":{"example":"coin-uuid-123","type":"string"}},{"name":"x-api-key","in":"header","description":"Game API Key for authentication","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Touchpoint with hydrated nodes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TouchpointResponseDto"}}}},"404":{"description":"Touchpoint not found"}},"tags":["touchpoints"],"security":[{"bearer":[]}]}},"/touchpoints/{id}":{"get":{"operationId":"TouchpointController_getTouchpointById","summary":"Get touchpoint by ID with hydrated data (runtime API)","description":"Retrieves a touchpoint by UUID and hydrates STATIC/DYNAMIC nodes with reward and product data. Optionally pass Authorization header with player JWT for personalized data.","parameters":[{"name":"id","required":true,"in":"path","description":"Touchpoint UUID","schema":{"example":"uuid-xxxx-xxxx","type":"string"}},{"name":"coinId","required":true,"in":"query","description":"Coin ID for pricing calculations on rewards/products","schema":{"example":"coin-uuid-123","type":"string"}},{"name":"x-api-key","in":"header","description":"Game API Key for authentication","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Touchpoint with hydrated nodes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TouchpointResponseDto"}}}},"404":{"description":"Touchpoint not found"}},"tags":["touchpoints"],"security":[{"bearer":[]}]}}},"info":{"title":"Playsuper rewards documentation","description":"These APIs are related to playsuper-rewards for game-developers","version":"1.0","contact":{}},"tags":[],"servers":[],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{"BrandMetadataDto":{"type":"object","properties":{"brandName":{"type":"string"},"brandLogo":{"type":"string"},"rewardCount":{"type":"number"}},"required":["brandName","brandLogo","rewardCount"]},"PurchaseRewardDto":{"type":"object","properties":{"rewardId":{"type":"string"},"coinId":{"type":"string"},"isPrefillEnabled":{"type":"boolean"}},"required":["rewardId","coinId","isPrefillEnabled"]},"OrderMetadataDto":{"type":"object","properties":{"brandName":{"type":"string"},"howToRedeem":{"type":"string"},"brandCategory":{"type":"array","items":{"type":"string"}},"campaignTitle":{"type":"string"},"campaignDetails":{"type":"string"},"campaignSubTitle":{"type":"string"},"couponExpiryDateExists":{"type":"boolean"},"couponExpiryDate":{"format":"date-time","type":"string"},"campaignCoverImage":{"type":"string"},"termsAndConditions":{"type":"string"},"brandRedirectionLink":{"type":"string"},"brandLogoImage":{"type":"string"},"discountOffPercentage":{"type":"string"},"denomination":{"type":"string"}},"required":["brandName","howToRedeem","brandCategory","campaignTitle","campaignDetails","campaignSubTitle","couponExpiryDateExists","couponExpiryDate","campaignCoverImage","termsAndConditions","brandRedirectionLink","brandLogoImage","discountOffPercentage","denomination"]},"PurchaseRewardResponseDto":{"type":"object","properties":{"orderId":{"type":"string"},"orderType":{"type":"string"},"status":{"type":"string"},"totalAmount":{"type":"number"},"createdAt":{"format":"date-time","type":"string"},"couponCode":{"type":"string"},"pin":{"type":"string","description":"PIN code for the offer if applicable","example":"1234","nullable":true},"campaignName":{"type":"string"},"transactionId":{"type":"string"},"rewardId":{"type":"string"},"metadata":{"$ref":"#/components/schemas/OrderMetadataDto"},"playerPhone":{"type":"string","description":"Player phone number","example":"+917807493305","nullable":true}},"required":["orderId","orderType","status","totalAmount","createdAt","couponCode","campaignName","transactionId","rewardId","metadata"]},"RewardMetadataDto":{"type":"object","properties":{"brandName":{"type":"string"},"brandCategory":{"type":"array","items":{"type":"string"}},"campaignTitle":{"type":"string"},"campaignSubTitle":{"type":"string"},"campaignCoverImage":{"type":"string"},"campaignAssets":{"type":"object"},"campaignDetails":{"type":"string"},"brandLogoImage":{"type":"string"},"termsAndConditions":{"type":"string"},"howToRedeem":{"type":"string"},"brandRedirectionLink":{"type":"string"},"couponExpiryDateExists":{"type":"boolean","description":"Whether coupon has expiry date"},"couponExpiryDate":{"format":"date-time","type":"string","description":"Coupon expiry date if available"},"denomination":{"type":"string","description":"Denomination if available"},"discountOffPercentage":{"type":"string","description":"Discount off percentage if available"},"type":{"type":"string","description":"Underlying reward type (e.g. source/plugin)"},"rewardValue":{"type":"number","description":"Reward value if available"}},"required":["brandName","brandCategory","campaignTitle","campaignSubTitle","campaignCoverImage","campaignAssets","campaignDetails","brandLogoImage","termsAndConditions","howToRedeem","brandRedirectionLink"]},"FetchRewardByIdDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"startDate":{"format":"date-time","type":"string"},"endDate":{"format":"date-time","type":"string"},"price":{"type":"number"},"availableQuantity":{"type":"number"},"brandId":{"type":"string"},"brandName":{"type":"string"},"organizationId":{"type":"string"},"brandRedirectionLink":{"type":"string"},"metadata":{"description":"Metadata for the campaign","allOf":[{"$ref":"#/components/schemas/RewardMetadataDto"}]},"isActive":{"type":"boolean"}},"required":["id","name","startDate","endDate","price","availableQuantity","brandId","brandName","organizationId","brandRedirectionLink","metadata","isActive"]},"CategoryMetadataDto":{"type":"object","properties":{"name":{"type":"string"},"untranslatedName":{"type":"string"},"iconUrl":{"type":"string"}},"required":["name","untranslatedName","iconUrl"]},"SearchQueryDto":{"type":"object","properties":{"q":{"type":"string","example":"laptop","description":"Search query string"},"type":{"type":"string","description":"Search type","enum":["brands","categories","rewards","products"],"example":"rewards"},"brandName":{"example":["phonepe","amazon"],"description":"List of brands to filter by","type":"array","items":{"type":"string"}},"categoryName":{"example":["subscriptions","gadgets"],"description":"List of categories to filter by","type":"array","items":{"type":"string"}},"sortBy":{"type":"string","enum":["relevance","price:low-high","price:high-low","newest","pricing-mode","discount-on-mrp","most-ordered"],"example":"relevance","description":"Sort by field"},"minPrice":{"type":"number","example":100,"description":"Minimum price filter (inclusive)"},"maxPrice":{"type":"number","example":1000,"description":"Maximum price filter (inclusive)"},"minCoinDiscount":{"type":"number","example":100,"description":"Minimum coin discount value filter (inclusive). Filters products where coinSpread >= value"},"minDiscountOnMrp":{"type":"number","example":30,"description":"Minimum discount on MRP percentage (exclusive). Filters products where ((MRP - listingPrice) / MRP) * 100 > value"},"maxDiscountedListingPrice":{"type":"number","example":500,"description":"Maximum discounted listing price filter (inclusive). Filters products where discountedListingPrice <= value"},"pricingMode":{"type":"string","example":"COMP_BASED","description":"Pricing mode filter (COMP_BASED or COST_BASED)"},"sourceSubCategory":{"example":["T-Shirts","Hoodies"],"description":"List of source sub-categories to filter by","type":"array","items":{"type":"string"}},"dealBoost":{"type":"boolean","example":true,"description":"When true, sorts deal products (isDeal=true) first before other sort criteria"},"isDeal":{"type":"boolean","example":true,"description":"When true, filters to only show deal products (isDeal=true in ES)"}}},"FilterOptionDto":{"type":"object","properties":{"value":{"type":"string","example":"Nike"},"count":{"type":"number","example":25},"min":{"type":"number","example":100},"max":{"type":"number","example":500}},"required":["value","count","min","max"]},"FilterItemDto":{"type":"object","properties":{"type":{"type":"string","example":"multiselect","enum":["multiselect","singleselect","range"]},"options":{"example":[{"value":"Nike","count":25},{"value":"Adidas","count":18}],"type":"array","items":{"$ref":"#/components/schemas/FilterOptionDto"}}},"required":["type","options"]},"SearchFiltersDto":{"type":"object","properties":{"brandName":{"example":{"type":"multiselect","options":[{"value":"Nike","count":25},{"value":"Adidas","count":18}]},"allOf":[{"$ref":"#/components/schemas/FilterItemDto"}]},"categoryName":{"example":{"type":"multiselect","options":[{"value":"Subscriptions","count":15},{"value":"Gaming","count":10}]},"allOf":[{"$ref":"#/components/schemas/FilterItemDto"}]},"sortBy":{"example":{"type":"singleselect","options":[{"value":"price:low-high"},{"value":"price:high-low"},{"value":"newest"},{"value":"relevance"}]},"allOf":[{"$ref":"#/components/schemas/FilterItemDto"}]}}},"SearchBrandDto":{"type":"object","properties":{"name":{"type":"string","example":"Cashify"},"logo":{"type":"string","example":"https://playsuper-bucket.s3.amazonaws.com/integrations/1744465430739-vb5m25.jpg"}},"required":["name","logo"]},"SearchCategoryDto":{"type":"object","properties":{"name":{"type":"string","example":"Subscriptions"},"logo":{"type":"string","example":"https://playsuper-bucket.s3.amazonaws.com/integrations/1744465430739-vb5m25.jpg"}},"required":["name","logo"]},"SearchItemsDto":{"type":"object","properties":{"brands":{"type":"array","items":{"$ref":"#/components/schemas/SearchBrandDto"}},"categories":{"type":"array","items":{"$ref":"#/components/schemas/SearchCategoryDto"}},"rewards":{"example":[{"id":"456","name":"Reward 1","price":200,"brand":"Brand B","category":"Category Y"}],"type":"array","items":{"type":"string"}},"products":{"example":[{"id":"456","name":"Product 2","price":200,"brand":"Brand B","category":"Category Y"}],"type":"array","items":{"type":"string"}}}},"SearchResponseData":{"type":"object","properties":{"query":{"$ref":"#/components/schemas/SearchQueryDto"},"filters":{"$ref":"#/components/schemas/SearchFiltersDto"},"items":{"$ref":"#/components/schemas/SearchItemsDto"}},"required":["query","filters","items"]},"SearchPaginationDto":{"type":"object","properties":{"totalItems":{"type":"number","example":1},"totalPages":{"type":"number","example":10},"currentPage":{"type":"number","example":1},"pageSize":{"type":"number","example":10}},"required":["totalItems","totalPages","currentPage","pageSize"]},"SearchMetadataDto":{"type":"object","properties":{"pagination":{"$ref":"#/components/schemas/SearchPaginationDto"}},"required":["pagination"]},"SearchResponseDto":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/SearchResponseData"},"metadata":{"$ref":"#/components/schemas/SearchMetadataDto"}},"required":["result","metadata"]},"CoinDistributionDto":{"type":"object","properties":{"amount":{"type":"number","description":"The amount of coins to distribute","example":100}},"required":["amount"]},"CoinResponseDto":{"type":"object","properties":{"id":{"type":"string","example":"coin123","description":"Unique identifier of the coin"},"name":{"type":"string","example":"Gold Coin","description":"Name of the coin"},"url":{"type":"string","example":"https://example.com/coin.png","description":"URL of the coin image"}},"required":["id","name","url"]},"SignInDto":{"type":"object","properties":{"phone":{"type":"string","example":"+919327632577","description":"Phone number in E.164 format"},"consent":{"type":"boolean","example":"true","description":"Consent to terms and conditions"},"source":{"type":"string","example":"google.com","description":"Source of the request"},"userAgent":{"type":"string","example":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36","description":"User agent string"}},"required":["phone"]},"VerifyOtpDto":{"type":"object","properties":{"phone":{"type":"string","example":"+919327632577","description":"Phone number in E.164 format"},"otp":{"type":"string","example":"123456","description":"Six-digit OTP"}},"required":["phone","otp"]},"UpdatePlayerDto":{"type":"object","properties":{"name":{"type":"string","description":"name of the player","example":"abhishek bachan"},"username":{"type":"string","description":"username of the player","example":"cool dude 69"},"playerIdentifier":{"description":"identifiers of the player","example":["cool dude 69","googleplay1234"],"type":"array","items":{"type":"string"}}},"required":["name","username","playerIdentifier"]},"CoinResponseDTO":{"type":"object","properties":{"name":{"type":"string","description":"The name of the coin"},"convertionRate":{"type":"number","description":"The conversion rate of the coin"},"pictureUrl":{"type":"string","description":"The URL of the coin picture"},"expiry":{"format":"date-time","type":"string","description":"The expiry date of the coin"},"neverExpire":{"type":"boolean","description":"Flag indicating if the coin never expires"},"isOrgWide":{"type":"boolean","description":"Flag indicating if the coin is organization-wide"}},"required":["name","convertionRate","neverExpire","isOrgWide"]},"WalletResponseDTO":{"type":"object","properties":{"id":{"type":"string","description":"The wallet ID"},"playerId":{"type":"string","description":"The player ID associated with this wallet"},"coinId":{"type":"string","description":"The coin ID associated with this wallet"},"balance":{"type":"number","description":"The wallet balance"},"coin":{"description":"The coin associated with this wallet","allOf":[{"$ref":"#/components/schemas/CoinResponseDTO"}]}},"required":["id","playerId","coinId","balance","coin"]},"OrderResponseDto":{"type":"object","properties":{"id":{"type":"string"},"orderType":{"type":"string"},"status":{"type":"string"},"totalAmount":{"type":"number"},"createdAt":{"format":"date-time","type":"string"},"couponCode":{"type":"string"},"pin":{"type":"string","description":"PIN code for the offer if applicable","example":"1234","nullable":true},"campaignName":{"type":"string"},"transactionId":{"type":"string"},"rewardId":{"type":"string"},"metadata":{"$ref":"#/components/schemas/OrderMetadataDto"},"playerPhone":{"type":"string","description":"Player phone number","example":"+917807493305","nullable":true}},"required":["id","orderType","status","totalAmount","createdAt","couponCode","campaignName","transactionId","rewardId","metadata"]},"FetchOrdersResponseDto":{"type":"object","properties":{"orders":{"type":"array","items":{"$ref":"#/components/schemas/OrderResponseDto"}}},"required":["orders"]},"CoinsHistorySummaryDto":{"type":"object","properties":{"currentBalance":{"type":"number","description":"Current coin balance"},"lifetimeEarning":{"type":"number","description":"Total lifetime earnings (sum of CREDIT transactions)"},"lifetimeSpends":{"type":"number","description":"Total lifetime spends (sum of DEBIT transactions)"},"lifetimeSavingsInr":{"type":"number","description":"Lifetime savings in INR"},"coinsUsedForSavings":{"type":"number","description":"Coins used for savings calculation"},"coinPictureUrl":{"type":"string","description":"Coin picture URL"},"coinName":{"type":"string","description":"Coin name"},"conversionRate":{"type":"number","description":"Coin conversion rate (1 coin = X INR)"}},"required":["currentBalance","lifetimeEarning","lifetimeSpends","lifetimeSavingsInr","coinsUsedForSavings","coinName","conversionRate"]},"CoinsHistoryTransactionDto":{"type":"object","properties":{"id":{"type":"string","description":"Transaction ID"},"brandName":{"type":"string","description":"Brand name (e.g., Snitch, Mama Earth)"},"brandIconUrl":{"type":"string","description":"Brand icon URL"},"description":{"type":"string","description":"Transaction description (e.g., Mall order, Coupon redeemed)"},"transactionId":{"type":"string","description":"Display transaction ID (e.g., ID-PSBSTWA1283745)"},"amount":{"type":"number","description":"Transaction amount (positive for credit, use type to determine sign)"},"type":{"type":"string","description":"Transaction type","enum":["CREDIT","DEBIT"]},"source":{"type":"string","description":"Transaction source","enum":["GAME_CREDIT","GAME_DEBIT","PURCHASE_DEBIT","REFUND_CREDIT"]},"createdAt":{"format":"date-time","type":"string","description":"Transaction creation date"},"iconType":{"type":"string","description":"Icon type for the transaction (plus for credit, minus for debit)","enum":["plus","minus"]}},"required":["id","brandName","description","transactionId","amount","type","source","createdAt","iconType"]},"CoinsHistoryMetadataDto":{"type":"object","properties":{"total":{"type":"number","description":"Total number of transactions"},"page":{"type":"number","description":"Current page number"},"limit":{"type":"number","description":"Number of items per page"},"totalPages":{"type":"number","description":"Total number of pages"}},"required":["total","page","limit","totalPages"]},"CoinsHistoryResponseDto":{"type":"object","properties":{"summary":{"description":"Summary statistics for coins","allOf":[{"$ref":"#/components/schemas/CoinsHistorySummaryDto"}]},"transactions":{"description":"List of transactions","type":"array","items":{"$ref":"#/components/schemas/CoinsHistoryTransactionDto"}},"metadata":{"description":"Pagination metadata","allOf":[{"$ref":"#/components/schemas/CoinsHistoryMetadataDto"}]}},"required":["summary","transactions","metadata"]},"CreatePlayerWithUUIDDto":{"type":"object","properties":{"uuid":{"type":"string","description":"Third-party UUID for the player","example":"abc123-def456-ghi789"}},"required":["uuid"]},"CreatePlayerResponseDto":{"type":"object","properties":{"message":{"type":"string","description":"Success message"},"playerId":{"type":"string","description":"Player ID"}},"required":["message","playerId"]},"PlayerProfileResponseDto":{"type":"object","properties":{"firstName":{"type":"string","description":"First name of the player","example":"John"},"lastName":{"type":"string","description":"Last name of the player","example":"Doe"},"gender":{"type":"string","description":"Gender of the player","enum":["MALE","FEMALE","OTHER"],"example":"MALE"},"dateOfBirth":{"type":"string","description":"Date of birth of the player in ISO format","example":"1990-01-01"},"email":{"type":"string","description":"Email address of the player","example":"john.doe@example.com"},"phoneNumber":{"type":"string","description":"Phone number of the player","example":"+1234567890"},"profilePicUrl":{"type":"string","description":"Profile picture URL","example":"https://example.com/profile.jpg"},"playerId":{"type":"string","description":"Player ID"},"createdAt":{"format":"date-time","type":"string","description":"Creation date"},"updatedAt":{"format":"date-time","type":"string","description":"Last update date"}},"required":["firstName","lastName","gender","dateOfBirth","email","phoneNumber","profilePicUrl","playerId","createdAt","updatedAt"]},"PlayerProfileDto":{"type":"object","properties":{"firstName":{"type":"string","description":"First name of the player","example":"John"},"lastName":{"type":"string","description":"Last name of the player","example":"Doe"},"gender":{"type":"string","description":"Gender of the player","enum":["MALE","FEMALE","OTHER"],"example":"MALE"},"dateOfBirth":{"type":"string","description":"Date of birth of the player in ISO format","example":"1990-01-01"},"email":{"type":"string","description":"Email address of the player","example":"john.doe@example.com"},"phoneNumber":{"type":"string","description":"Phone number of the player","example":"+1234567890"}},"required":["firstName","lastName","gender","dateOfBirth","email","phoneNumber"]},"StudioStoreSettingsDto":{"type":"object","properties":{"rewardsEnabled":{"type":"boolean"},"gcommerceEnabled":{"type":"boolean"},"defaultLandingPage":{"type":"string","enum":["rewards","gcommerce"]},"storeVersion":{"type":"string","description":"Store version (e.g., \"2.0\" for v2 store)"}},"required":["rewardsEnabled","gcommerceEnabled","defaultLandingPage"]},"CreatePlayerPreferenceDto":{"type":"object","properties":{"preferences":{"type":"object","description":"Player preferences as JSON object","example":{"gender":"male","categories":["sports","electronics"],"ageGroup":"18-25"}}},"required":["preferences"]},"PlayerPreferenceResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Preference ID"},"playerId":{"type":"string","description":"Player ID"},"gameId":{"type":"string","description":"Game ID"},"preferences":{"type":"object","description":"Player preferences","example":{"gender":"male","categories":["sports"],"ageGroup":"18-25"}},"createdAt":{"format":"date-time","type":"string","description":"Creation timestamp"},"updatedAt":{"format":"date-time","type":"string","description":"Last update timestamp"}},"required":["id","playerId","gameId","preferences","createdAt","updatedAt"]},"SdkTransactionDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique transaction ID","example":"txn_abc123"},"amount":{"type":"number","description":"Transaction amount (positive for credit, negative for debit)","example":-100},"type":{"type":"string","description":"Transaction type: CREDIT or DEBIT","example":"DEBIT"},"source":{"type":"string","description":"Transaction source: PURCHASE_DEBIT or REFUND_CREDIT","example":"PURCHASE_DEBIT"},"coinId":{"type":"string","description":"Coin ID associated with this transaction"},"coinName":{"type":"string","description":"Coin name for display","example":"Gold Coins"},"description":{"type":"string","description":"Human-readable description","example":"Purchase: Amazon Gift Card"},"createdAt":{"type":"string","description":"ISO 8601 timestamp when transaction was created","example":"2026-03-17T10:30:00.000Z"}},"required":["id","amount","type","source","coinId","coinName","createdAt"]},"SdkTransactionsResponseDto":{"type":"object","properties":{"transactions":{"description":"List of transactions since last sync","type":"array","items":{"$ref":"#/components/schemas/SdkTransactionDto"}},"lastSyncedTransactionId":{"type":"string","description":"Last synced transaction ID (checkpoint before this fetch), null if first sync","example":"txn_xyz789","nullable":true},"hasVisitedStore":{"type":"boolean","description":"Whether the player has visited the store. If false, no transactions will be returned until player opens store.","example":true}},"required":["transactions","hasVisitedStore"]},"CommitSdkSyncDto":{"type":"object","properties":{"lastProcessedTransactionId":{"type":"string","description":"Transaction ID of the last transaction processed by the SDK. All transactions up to and including this one will be marked as synced.","example":"txn_abc123"}},"required":["lastProcessedTransactionId"]},"CommitSdkSyncResponseDto":{"type":"object","properties":{"success":{"type":"boolean","description":"Whether the commit was successful"},"newCheckpoint":{"type":"string","description":"The new checkpoint transaction ID","example":"txn_abc123"}},"required":["success","newCheckpoint"]},"CommitSdkSyncByIdsDto":{"type":"object","properties":{"transactionIds":{"description":"Array of transaction IDs to mark as committed. Each ID should be committed only after the game has successfully processed that transaction.","example":["txn_abc123","txn_def456","txn_ghi789"],"type":"array","items":{"type":"string"}}},"required":["transactionIds"]},"CommitSdkSyncByIdsResponseDto":{"type":"object","properties":{"success":{"type":"boolean","description":"Whether the overall operation was successful"},"committed":{"description":"Transaction IDs that were successfully committed","example":["txn_abc123","txn_def456"],"type":"array","items":{"type":"string"}},"alreadyCommitted":{"description":"Transaction IDs that were already committed (idempotent - not an error)","example":[],"type":"array","items":{"type":"string"}},"notFound":{"description":"Transaction IDs that were not found or do not belong to this player","example":[],"type":"array","items":{"type":"string"}},"failed":{"description":"Transaction IDs that failed to commit due to internal error","example":[],"type":"array","items":{"type":"string"}}},"required":["success","committed","alreadyCommitted","notFound","failed"]},"MarkStoreVisitedResponseDto":{"type":"object","properties":{"success":{"type":"boolean","description":"Whether the operation was successful"},"alreadyVisited":{"type":"boolean","description":"Whether the player had already visited the store before","example":false}},"required":["success","alreadyVisited"]},"ClaimBonusDto":{"type":"object","properties":{"source":{"type":"string","example":"game_notification","description":"The source (utm_content) the player came from"}},"required":["source"]},"ClaimBonusResponseDto":{"type":"object","properties":{"claimed":{"type":"boolean","example":true},"amount":{"type":"number","example":10},"alreadyClaimed":{"type":"boolean","example":false}},"required":["claimed","amount","alreadyClaimed"]},"BonusStatusItemDto":{"type":"object","properties":{"source":{"type":"string","example":"game_notification"},"amount":{"type":"number","example":10},"claimedAt":{"type":"string","example":"2026-04-10T08:23:15.000Z"},"timezone":{"type":"string","example":"Asia/Kolkata","description":"IANA timezone for bonus reset"}},"required":["source","amount","claimedAt","timezone"]},"BonusStatusResponseDto":{"type":"object","properties":{"bonuses":{"type":"array","items":{"$ref":"#/components/schemas/BonusStatusItemDto"}}},"required":["bonuses"]},"NodeDataType":{"type":"string","enum":["ASSET","STATIC","DYNAMIC"]},"BackgroundDto":{"type":"object","properties":{"color":{"type":"string","example":"#1A1A2E"},"gradient":{"type":"string","example":"linear-gradient(180deg, transparent 0%, rgba(0,0,0,0.7) 100%)"},"images":{"example":["https://cdn.example.com/bg.png"],"type":"array","items":{"type":"string"}},"opacity":{"type":"number","example":0.9}}},"OverlayDto":{"type":"object","properties":{"color":{"type":"string","example":"#1A1A2E"},"gradient":{"type":"string","example":"linear-gradient(180deg, transparent 0%, rgba(0,0,0,0.7) 100%)"},"images":{"example":["https://cdn.example.com/bg.png"],"type":"array","items":{"type":"string"}},"opacity":{"type":"number","example":0.9}}},"TextItemDto":{"type":"object","properties":{"text":{"type":"string","example":"Welcome!"},"color":{"type":"string","example":"#FFFFFF"},"fontSize":{"type":"number","example":24},"fontWeight":{"type":"string","example":"bold"},"icon":{"type":"string","example":"https://cdn.example.com/icon.png"}},"required":["text"]},"BadgeDto":{"type":"object","properties":{"text":{"type":"string","example":"HOT"},"backgroundImage":{"type":"string","example":"https://cdn.example.com/badge-bg.png"},"icon":{"type":"string","example":"https://cdn.example.com/fire.png"},"style":{"type":"object"}}},"CtaDto":{"type":"object","properties":{"text":{"type":"string","example":"Shop Now"},"action":{"type":"string","example":"navigate:/deals"},"backgroundImage":{"type":"string","example":"https://cdn.example.com/cta-bg.png"},"frontImage":{"type":"string","example":"https://cdn.example.com/cta-front.png"},"style":{"type":"object"}}},"DynamicConfigFiltersDto":{"type":"object","properties":{"brand":{"description":"Filter by brand name(s)","example":["Nike","Adidas"],"type":"array","items":{"type":"string"}},"category":{"description":"Filter by category name(s)","example":["Electronics","Fashion"],"type":"array","items":{"type":"string"}},"q":{"type":"string","description":"Search query string","example":"gaming headphones"},"contentLogic":{"type":"string","description":"Content logic filter (rewards only)","example":"coupon"},"layoutStyle":{"type":"string","description":"Layout style filter (rewards only)","example":"card"},"giftCard":{"type":"boolean","description":"Filter for gift cards only (rewards only)","example":true},"sourceSubCategory":{"description":"Filter by source sub-categories (products only)","example":["T-Shirts","Hoodies"],"type":"array","items":{"type":"string"}},"maxDiscountedListingPrice":{"type":"number","description":"Maximum discounted listing price (products only)","example":500},"minCoinDiscount":{"type":"number","description":"Minimum coin discount value (products only)","example":10},"minDiscountOnMrp":{"type":"number","description":"Minimum discount on MRP percentage (products only)","example":20},"minPrice":{"type":"number","description":"Minimum price filter (products only)","example":100},"maxPrice":{"type":"number","description":"Maximum price filter (products only)","example":1000},"pricingMode":{"type":"string","description":"Pricing mode: COMP_BASED or COST_BASED (products only)","example":"COMP_BASED"},"dealBoost":{"type":"boolean","description":"When true, sorts deal products first (products only)","example":true},"cipeEnabled":{"type":"boolean","description":"When true, rewards are returned in CIPE rank order using cipeRankedIds","example":true},"cipeRankedIds":{"description":"Ordered list of reward/campaign IDs from the CIPE worker","type":"array","items":{"type":"string"}},"cipeUpdatedAt":{"type":"string","description":"ISO timestamp of when the CIPE subset was last updated","example":"2026-03-17T04:00:00Z"}}},"DynamicConfigDto":{"type":"object","properties":{"source":{"type":"string","example":"rewards","enum":["rewards","products"]},"limit":{"type":"number","example":10,"description":"Max items to fetch (capped at 10)"},"sortBy":{"type":"string","example":"newest","enum":["relevance","newest","price:low-high","price:high-low","expiresAt"],"description":"Sort field"},"sortOrder":{"type":"string","example":"asc","enum":["asc","desc"]},"filters":{"$ref":"#/components/schemas/DynamicConfigFiltersDto"},"ctaUrlPrefix":{"type":"string","example":"/rewards/","description":"URL prefix for CTA. The rewardId/productId will be appended. E.g., /rewards/ + {id} = /rewards/abc123"}},"required":["source"]},"TouchpointNodeResponseDto":{"type":"object","properties":{"id":{"type":"string"},"dataType":{"$ref":"#/components/schemas/NodeDataType"},"background":{"$ref":"#/components/schemas/BackgroundDto"},"images":{"type":"array","items":{"type":"string"}},"overlay":{"$ref":"#/components/schemas/OverlayDto"},"additionalAssets":{"type":"array","items":{"type":"string"}},"title":{"type":"array","items":{"$ref":"#/components/schemas/TextItemDto"}},"subtitle":{"type":"array","items":{"$ref":"#/components/schemas/TextItemDto"}},"badge":{"$ref":"#/components/schemas/BadgeDto"},"cta":{"$ref":"#/components/schemas/CtaDto"},"rewardId":{"type":"string"},"productId":{"type":"string"},"dynamicConfig":{"$ref":"#/components/schemas/DynamicConfigDto"},"staticConfig":{"type":"object","description":"Static selection configuration for child nodes"},"data":{"oneOf":[{"$ref":"#/components/schemas/HydratedRewardDto"},{"$ref":"#/components/schemas/HydratedProductDto"}]},"countdownSeconds":{"type":"number","description":"Seconds remaining until countdown ends. 0 if expired, null if source not found.","example":3600},"countdownEndsAt":{"type":"string","description":"ISO date string when countdown ends. Useful for client-side timer sync.","example":"2026-04-19T23:59:59.000Z"},"layoutHint":{"type":"string"},"styleHint":{"type":"object"},"displayOrder":{"type":"number"},"nodes":{"type":"array","items":{"$ref":"#/components/schemas/TouchpointNodeResponseDto"}},"popup":{"$ref":"#/components/schemas/TouchpointNodeResponseDto"}},"required":["id","dataType","displayOrder"]},"TouchpointResponseDto":{"type":"object","properties":{"id":{"type":"string"},"gameId":{"type":"string"},"name":{"type":"string","description":"Unique name for this touchpoint within the game"},"nodes":{"type":"array","items":{"$ref":"#/components/schemas/TouchpointNodeResponseDto"}},"updatedAt":{"format":"date-time","type":"string","description":"Last update timestamp"}},"required":["id","gameId","name","nodes","updatedAt"]}}}}