{
  "openapi": "3.0.0",
  "info": {
    "version": "1.10.0",
    "title": "GameLayer API Specification",
    "description": "This is the API specification for GameLayer's gamification and rewards platform.\n\n# Authentication\n\nYou authenticate to the GameLayer API by providing your secret API key in the request\nheader ```api-key```\n\nThe API key will be provided when you sign up for a GameLayer account.\n\nIn case the account ID does not match with the API key, HTTP status 401,\nNot Authorized will be the response.\n\n# Errors\n\nThe API uses standard HTTP status codes to indicate the success or failure of an API call.\nThe body of the response will be JSON in the following format:\n\n```\n{\n    \"error\": \"Player 'player-520' exists for account 'docs-for-devs'\",\n    \"errorCode\": 22\n}\n```\n\n# Dual (Virtual) Currency System\n\nGameLayer uses two distinct virtual currencies:\n\n| Currency | Behavior | Purpose |\n|----------|----------|---------|\n| **Points** | Accumulate over time. Never decrease through player actions. | Progression and ranking — points determine level advancement and leaderboard position. |\n| **Credits** | Spendable balance. Increase when earned, decrease when redeemed. | Economy — credits are spent on prizes, mystery boxes, and raffle tickets. |\n\nBoth currencies can be awarded by events, missions, achievements, levels, streaks, quizzes, and surveys.\n\n# Requirements and Eligibility\n\nMost elements support a **requirement** block that acts as a prerequisite gate. A player must satisfy all specified conditions to be eligible:\n\n- **Tags** — player must have all listed tags.\n- **Missions** — player must have completed all listed missions.\n- **Achievements** — player must have completed all listed achievements.\n- **Level** — player must have reached at least the specified level (by ordinal).\n- **Category** — player must belong to the specified category.\n\nRequirements are checked at the time of interaction (event completion, prize redemption, etc.). If a player does not meet the requirements, the element is hidden from listing or the action is denied.\n\n# Periods and Refresh Cycles\n\nMany elements operate on a **period** that determines how often they reset:\n\n| Period | Resets |\n|--------|--------|\n| `daily` | Once per day |\n| `weekly` | Once per week |\n| `monthly` | Once per month |\n| `all-time` | Never resets |\n\nWhen a period resets, completion counts and progress for that element start fresh.\n\n# Refresh Offset\n\nEach player has a configurable `refreshOffset` (e.g., `UTC+02:00`) that determines when their daily/weekly/monthly periods roll over. This ensures fair timing regardless of the player's timezone. The valid range is `UTC-12:00` to `UTC+14:00`. If no refreshOffset has been provided, refresh will happen at `UTC+00:00`.\n\n# The Progression Cascade\n\nWhen your application calls `POST /events/{id}/complete`, a single action can cascade through multiple elements automatically:\n\n1. **Event completes** — awards points, credits, and achievement steps.\n2. **Rules evaluate** — matching rules apply point multipliers.\n3. **Missions progress** — missions with this event in their objectives update. Completed missions grant their reward.\n4. **Streaks update** — if a completed mission is linked to a streak, the streak count increments or resets if the streak was not hit within its period.\n5. **Achievements advance** — steps from events, missions, and streaks are applied. Completed achievements grant their reward and may chain to other achievements.\n6. **Levels check** — if accumulated points, credits, or achievements meet the next level's objectives, the player levels up. Multiple level ups can occur in a single cascade if the player jumps multiple levels at once.\n7. **Leaderboards update** — player and team scores are updated.\n\nThe response includes a **progress** object summarizing everything that happened.\n",
    "termsOfService": "https://www.gamelayer.co/",
    "license": {
      "name": "Proprietary",
      "url": "https://www.gamelayer.co/terms"
    },
    "contact": {
      "name": "GameLayer API Team",
      "email": "api@gamelayer.co"
    }
  },
  "servers": [
    {
      "url": "https://api.dev.gamelayer.co/api/v0"
    },
    {
      "url": "https://api.gamelayer.co/api/v0"
    }
  ],
  "security": [
    {
      "api_key": []
    }
  ],
  "tags": [
    {
      "name": "Achievements",
      "x-displayName": "Achievements",
      "description": "Achievements are step-based milestones that players accumulate progress toward over time. Unlike missions, achievements have no period — they are always-on and progress is never reset.\n\nEach achievement requires a set number of **steps** to complete. Steps are incremented automatically when players complete other elements — events, missions, quizzes, surveys, or other achievements. When the step target is reached, the achievement completes and grants its configured reward (points, credits, and/or steps toward other achievements).\n\n**Achievement chaining**: An achievement's reward can include steps toward other achievements. For example, completing \"Bronze Collector\" could grant 1 step toward \"Silver Collector\".\n\nAchievements support **requirements** (tags, missions, achievements, level, category) that gate eligibility. Requirements are checked when the achievement is first unlocked.\n"
    },
    {
      "name": "Analytics",
      "x-displayName": "Analytics",
      "description": "Analytics endpoints provide aggregate metrics on player interactions with gamification elements. Track completion counts for missions, achievements, events, levels, and other elements over time. Use the active players endpoint to query how many unique players have been active within a given date range. Analytics data helps identify engagement patterns and measure the effectiveness of your gamification configuration.\n"
    },
    {
      "name": "Events",
      "x-displayName": "Events",
      "description": "Events are the fundamental building blocks of GameLayer. An event represents a discrete player action that your application reports via `POST /events/{id}/complete`.\n\nWhen an event completes, GameLayer awards the configured reward (points, credits, achievement steps) and triggers the **progression cascade**: missions progress toward their objectives, streaks update, achievements advance, levels are checked, leaderboard scores update, and rules evaluate for point multipliers.\n\n**Key properties**:\n- **Reward**: Points, credits, and/or achievement steps awarded on completion.\n- **Count limit**: Optionally cap completions per player per period (daily/weekly/monthly/all-time).\n- **Count parameter**: Pass a `count` value to register multiple completions in a single call.\n- **Mode**: `increment` (add to count) or `set` (set count to a specific value, adjusting rewards accordingly).\n- **Tags**: Dynamic context tags can be passed at completion time.\n"
    },
    {
      "name": "Journal",
      "x-displayName": "Journal",
      "description": "The journal provides a complete audit trail of all point and credit\ntransactions for each player. Every time points or credits are earned\nor spent through gamification elements — missions, achievements, events,\nprizes, and more — a journal entry is recorded. Use the journal to query\na player's transaction history within a date range, or retrieve an\naggregated summary of earned and spent totals.      \n"
    },
    {
      "name": "Leaderboards",
      "x-displayName": "Leaderboards",
      "description": "Leaderboards provide competitive rankings comparing players or teams based on accumulated points or credits.\n\n**Key properties**:\n- **Element**: `player` (individual ranking), `team` (team aggregate scores), or `teammembers` (players ranked within a specific team).\n- **Rank by**: `total` (sum of scores) or `average` (average per team member — useful for fair team comparison regardless of team size).\n- **Units**: `points` or `credits` — which currency drives the score.\n- **Driven by**: Optional list of mission IDs. When set, only completions of those missions contribute to the leaderboard. When empty, all point/credit activity counts.\n- **Period**: `daily`, `weekly`, `monthly`, or `all-time`. Scores reset each period.\n\nScores update automatically as players earn points or credits. Rankings are computed dynamically with proper tie handling. Leaderboards support requirements for eligibility gating.\n"
    },
    {
      "name": "Levels",
      "x-displayName": "Levels",
      "description": "Levels represent a player's progression tier, forming an ordered ladder that players advance through sequentially.\n\nEach level has an **ordinal** (position in the ladder, starting at 0) and **objectives** defining what the player must accumulate to reach it — points, credits, and/or specific achievements. A player must complete level N before reaching level N+1.\n\nAs players earn points and credits through events, missions, and other elements, the platform automatically checks whether they qualify for the next level. When a level is reached, its configured reward (points, credits, achievement steps) is granted.\n\nLevels can be used in requirements to gate access to other elements (e.g., \"must be level 3 to access premium missions\").\n"
    },
    {
      "name": "Missions",
      "x-displayName": "Missions",
      "description": "Missions are goal-based challenges that require players to complete one or more objectives within a time period.\n\n**Lifecycle**: `available` → `started` (first relevant event completed) → `completed` (all objectives met).\n\n**Key properties**:\n- **Objectives**: Events with target counts (e.g., \"complete event X 5 times\"). Can also be driven by other missions, a quiz, or a survey.\n- **Period**: `daily`, `weekly`, `monthly`, or `all-time`. Progress resets each period.\n- **Count limit**: Cap how many times a player can complete the mission per period (default: once).\n- **Time to complete**: Optional time limit (in seconds) from when the mission starts.\n- **Reward**: Points, credits, and/or achievement steps awarded on completion.\n- **Requirement**: Prerequisites (tags, missions, achievements, level, category) the player must meet to be eligible.\n\nMission progress updates automatically as players complete events. When all objectives are met, the mission completes and grants its reward. Completed missions can drive streaks and contribute to leaderboard scores via the `drivenBy` mechanism.\n"
    },
    {
      "name": "MysteryBoxes",
      "x-displayName": "Mystery Boxes",
      "description": "Mystery boxes are credit-based containers that award one randomly selected prize from a pool.\n\nA mystery box holds multiple prizes, each with a quantity allocation that determines its selection probability — prizes with higher allocations have proportionally higher chances. The player pays the mystery box’s credit cost (not the individual prize cost). Total stock is computed from the sum of all prize allocations.\n\n**Key properties**:\n- **Credits**: Cost to open the mystery box.\n- **Prizes**: Pool of prizes with quantity allocations determining selection probability.\n- **Count limit**: Cap on openings per player per period.\n- **Requirement**: Prerequisites the player must meet to be eligible.\n"
    },
    {
      "name": "Players",
      "x-displayName": "Players",
      "description": "Players are the user entities in GameLayer. Each player has a unique ID, a dual-currency balance (points and credits), an optional level, team assignment, category, and tags.\n\n**Dual currency system**:\n- **Points**: Accumulate over time and never decrease through player actions. Used for progression (level advancement) and leaderboard ranking.\n- **Credits**: A spendable balance that increases when earned and decreases when redeemed on prizes, mystery boxes, or raffle tickets.\n\nPlayers can be created, updated (including upsert), and deleted via the API. Each player has a configurable `refreshOffset` (e.g., `UTC+02:00`) that determines when their daily/weekly/monthly periods roll over, ensuring fair timing across timezones.\n\nPlayer progress endpoints provide views into started/completed missions, achievements, levels, streaks, redeemed prizes, and leaderboard rankings.\n"
    },
    {
      "name": "Prizes",
      "x-displayName": "Prizes",
      "description": "Prizes are items in a reward shop that players redeem using credits.\n\nWhen a player claims a prize, the platform verifies sufficient credits, requirement eligibility, and stock availability. Redemption outcomes:\n- `REDEEMED` — success, credits deducted and prize granted.\n- `NOT_ENOUGH_CREDITS` — insufficient credit balance.\n- `OUT_OF_STOCK` — no stock remaining.\n- `COUNT_EXCEEDED` — player has reached their redemption limit for this period.\n- `VOUCHER_INVALID` — voucher code is invalid or has already been used.\n\n**Key properties**:\n- **Credits**: Cost to redeem the prize.\n- **Stock**: Optional finite stock. When all units are redeemed, the prize shows as out of stock.\n- **Count limit**: Cap how many times a player can redeem per period.\n- **Period**: `daily`, `weekly`, `monthly`, or `all-time` for count limit tracking.\n- **Requirement**: Prerequisites the player must meet.\n\n**Voucher codes**: Prizes support voucher codes that allow players to claim a prize by providing a valid code, bypassing the normal eligibility, credit, stock, and claim count checks. Only location checks still apply. Voucher codes can be managed via the voucher endpoints (add, query, delete) and used during prize claims by including a `voucherCode` in the claim request.\n"
    },
    {
      "name": "Quizzes",
      "x-displayName": "Quizzes",
      "description": "Quizzes are scored assessments where players answer questions and receive rewards for passing.\n\n**Types**:\n- `basic` — all questions answered before scoring. Results available after submission.\n- `immediate` — scored question-by-question with immediate feedback.\n\n**Flow**: Start quiz → receive questions → submit answers → platform scores against correct answers → pass/fail determined by required pass rate.\n\n**Key properties**:\n- **Questions**: Each has a type (`single` or `multi`), text, optional image, weighted score, and answer choices with correct answers marked.\n- **Required pass rate**: Percentage of maximum score needed to pass (0–100).\n- **Timing**: Optional time limit in seconds from when the player starts.\n- **Shuffle**: Optionally randomize question order per player.\n- **Reward**: Points, credits, and/or achievement steps — awarded only if the quiz is passed.\n\nQuizzes can drive missions — when a player passes the quiz, the linked mission is automatically completed.\n"
    },
    {
      "name": "Raffles",
      "x-displayName": "Raffles",
      "description": "Raffles are ticket-based prize draws. Players spend credits to purchase tickets, and winners are selected at a scheduled draw time.\n\nEach ticket purchase is one entry into the draw. Players can purchase multiple tickets (up to the configured count limit) to increase their chances. At the configured draw time, winners are selected and prizes are distributed.\n\n**Key properties**:\n- **Credits**: Cost per ticket.\n- **Draw time**: Scheduled date and time for the prize draw.\n- **Prizes**: Pool of prizes available in the draw.\n- **Count limit**: Maximum tickets a player can purchase per period.\n- **Active window**: Date range during which tickets can be purchased.\n- **Requirement**: Prerequisites the player must meet.\n"
    },
    {
      "name": "Rules",
      "x-displayName": "Rules",
      "description": "Rules are condition-action automations that modify reward calculations. They evaluate player state and apply bonuses (e.g., point multipliers) when conditions are met.\n\nRules are evaluated automatically whenever a player earns points (e.g., on event completion). Each rule has a **condition** (e.g., \"player created within N days\"), an **action** (e.g., \"multiply earned points by 2x\"), and a **priority** (lower number = higher priority, default: 100). If `breakOnEval` is true, no further rules are evaluated after this one matches.\n\n**Available conditions**: Player created within date range, start date range, player created before a date.\n**Available actions**: Multiply earned points by a given factor. Multiple rules can stack multipliers.\n"
    },
    {
      "name": "Streaks",
      "x-displayName": "Streaks",
      "description": "Streaks reward players for **consecutive** mission completions across periods. They track how many periods in a row a player completes a specific mission.\n\nA streak is linked to one mission and a period (`daily`, `weekly`, or `monthly` — `all-time` is not supported). Each period, if the player completes the linked mission, their streak count increments and they earn the streak reward. If they miss a period, the streak resets to zero.\n\n**Key properties**:\n- **Objectives**: Mission ID(s) driving the streak (currently limited to one mission).\n- **Period**: `daily`, `weekly`, or `monthly`.\n- **Count limit**: Optional maximum streak count (e.g., \"7-day streak\"). A streak is complete when the count limit is reached. NOTE! This is the only way to complete a streak — there is no \"infinite\" streak type.\n- **Reward**: Points, credits, and/or achievement steps awarded per streak increment.\n"
    },
    {
      "name": "Surveys",
      "x-displayName": "Surveys",
      "description": "Surveys collect player feedback through questions with no correct answers and no scoring.\n\nUnlike quizzes, completing a survey **always** triggers the configured reward — there is no pass/fail. Responses are aggregated across all players and queryable via the result endpoint.\n\n**Key properties**:\n- **Questions**: Each has a type (`single` or `multi`), text, optional image, and answer choices (no correct answers).\n- **Shuffle**: Optionally randomize question order.\n- **Reward**: Points, credits, and/or achievement steps — always awarded on completion.\n\nSurveys can drive missions, just like quizzes. Completing the survey auto-completes the linked mission.\n"
    },
    {
      "name": "Teams",
      "x-displayName": "Teams",
      "description": "Teams are groups of players that can compete together and aggregate scores. A player belongs to at most one team.\n\nWhen a player earns points or credits, those scores also accumulate on their team. Teams can participate in team leaderboards (using `element: team` or `element: teammembers`) and have their own level progression.\n\n**Key properties**:\n- **Category**: Segment teams into groups.\n- **Tags**: Label teams for filtering and requirement matching.\n- **Level**: Teams can be assigned to levels, similar to players.\n- **Points / Credits**: Aggregated from team members' activity.\n"
    }
  ],
  "paths": {
    "/achievements/{id}": {
      "get": {
        "description": "Retrieves the achievement with the specified ID within the given account.\n\nAchievements are step-based milestones with no period — progress is never reset. Steps are incremented when players complete other elements (events, missions, quizzes, surveys, or other achievements). When the step target is reached, the achievement completes. An achievement's reward can include steps toward other achievements (chaining).\n",
        "operationId": "getAchievement",
        "summary": "Retrieves the specified achievement data within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/AchievementId"
          },
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Language"
          }
        ],
        "responses": {
          "200": {
            "description": "Achievement retrieved succesfully\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetAchievementResponse"
                },
                "examples": {
                  "Get Achievement": {
                    "$ref": "#/components/examples/GetAchievement"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Achievement not found or no elements matching the language filter.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Achievements"
        ]
      }
    },
    "/achievements": {
      "get": {
        "description": "Retrieves achievements based on provided query within the given account\n",
        "operationId": "getAllAchievements",
        "summary": "Retrieves all achievements within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Player"
          },
          {
            "$ref": "#/components/parameters/Category"
          },
          {
            "$ref": "#/components/parameters/Tags"
          },
          {
            "$ref": "#/components/parameters/Availability"
          },
          {
            "$ref": "#/components/parameters/Sort"
          },
          {
            "$ref": "#/components/parameters/Order"
          },
          {
            "$ref": "#/components/parameters/Language"
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Skip"
          }
        ],
        "responses": {
          "200": {
            "description": "Achievements retrieved succesfully\n",
            "headers": {
              "X-Total-Count": {
                "$ref": "#/components/headers/X-Total-Count"
              },
              "X-Limit-Count": {
                "$ref": "#/components/headers/X-Limit-Count"
              },
              "X-Skip-Count": {
                "$ref": "#/components/headers/X-Skip-Count"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GetAchievementResponse"
                  }
                },
                "examples": {
                  "Get Achievements": {
                    "$ref": "#/components/examples/GetAchievements"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Some elements are missing translations for the given language filter.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Achievements"
        ]
      }
    },
    "/analytics": {
      "get": {
        "description": "Retrieves analytics for the given account.\n",
        "operationId": "getAnalytics",
        "summary": "Retrieves analytics for the given account.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Account"
          }
        ],
        "responses": {
          "200": {
            "description": "Analytics retrieved succesfully\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "players": {
                      "type": "integer",
                      "description": "Players in the account"
                    },
                    "missions": {
                      "type": "integer",
                      "description": "Completed missions"
                    },
                    "points": {
                      "type": "integer",
                      "description": "Points gained"
                    },
                    "credits": {
                      "type": "integer",
                      "description": "Credits gained"
                    },
                    "achievements": {
                      "type": "integer",
                      "description": "Completed achievements"
                    },
                    "levelUps": {
                      "type": "integer",
                      "description": "Level ups"
                    },
                    "prizeDraws": {
                      "type": "integer",
                      "description": "Prizes drawn"
                    },
                    "mysteryBoxes": {
                      "type": "integer",
                      "description": "Mystery boxes drawn"
                    },
                    "prizes": {
                      "type": "integer",
                      "description": "Redeemed prizes"
                    },
                    "apiCalls": {
                      "type": "integer",
                      "description": "API calls completed"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Account not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Analytics"
        ]
      }
    },
    "/analytics/activeplayers": {
      "get": {
        "description": "Retrieves active players for given account for given period.\nOnly the date part of query parameters will be used and is required.\nDate is given in format YYYY-MM-DD. Example: 2022-09-01\n",
        "operationId": "getActivePlayers",
        "summary": "Retrieves active players for given account for given period.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          }
        ],
        "responses": {
          "200": {
            "description": "Active player data retrieved succesfully\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "activePlayers": {
                      "type": "integer",
                      "description": "Active players for the given period."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request. Check start and end date in request."
          }
        },
        "tags": [
          "Analytics"
        ]
      }
    },
    "/events/{id}/complete": {
      "post": {
        "description": "Completes the defined event for the specified player within the given account. This is the primary integration endpoint — it triggers the full **progression cascade**:\n\n1. The event's configured reward (points, credits, achievement steps) is awarded.\n2. Rules are evaluated and point multipliers applied if conditions match.\n3. Missions with this event in their objectives have progress updated; completed missions grant their rewards.\n4. Streaks linked to completed missions are incremented (or reset if a period was missed).\n5. Achievements receiving steps are advanced; completed achievements grant their rewards and may chain.\n6. Level objectives are checked; the player levels up if thresholds are met.\n7. Leaderboard scores are updated for the player and their team.\n\nThe response includes a **progress** object summarizing all completed missions, started missions, completed/unlocked achievements, level changes, streak updates, and triggered rules.\n\n**Parameters**:\n- `count` — number of completions to register (default: 1). Useful for batch actions (e.g., \"walked 5000 steps\").\n- `tags` — optional tags passed at completion time for dynamic context and requirement matching.\n\nIf a language property is provided in the body, the response will contain\ntranslated elements. In case no translations are found for the language,\ndefault texts will be used in the response.\n",
        "operationId": "completeEvent",
        "summary": "Completes the specified event for the specified player within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/EventId"
          }
        ],
        "requestBody": {
          "description": "Event completion details",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CompleteEventRequest"
              },
              "examples": {
                "Complete Event": {
                  "$ref": "#/components/examples/CompleteEvent"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Event completed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompleteEventResponse"
                },
                "examples": {
                  "Post Complete Event Response": {
                    "$ref": "#/components/examples/CompletedEvent"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request. Check request data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Needed element not found (player, event).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Player is currently being processed by another request. The client should\nwait and retry after the duration indicated by the `Retry-After` header (in seconds).\nThis happens when concurrent requests attempt to complete events for the same player simultaneously.\n",
            "headers": {
              "Retry-After": {
                "description": "Number of seconds to wait before retrying the request.",
                "schema": {
                  "type": "integer",
                  "example": 1
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "error": "Player 'player-123' is currently being processed. Please retry shortly.",
                  "errorCode": 24
                }
              }
            }
          }
        },
        "tags": [
          "Events"
        ]
      }
    },
    "/events/{id}": {
      "get": {
        "description": "Retrieves the event with the specified ID within the given account\n",
        "operationId": "getEvent",
        "summary": "Retrieves the specified event data within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/EventId"
          },
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Language"
          }
        ],
        "responses": {
          "200": {
            "description": "Event retrieved succesfully\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetEventResponse"
                },
                "examples": {
                  "Get Event": {
                    "$ref": "#/components/examples/GetEvent"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Event not found or no elements matching the language filter.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Events"
        ]
      }
    },
    "/events": {
      "get": {
        "description": "Retrieves events specified by given query within the given account.\n",
        "operationId": "getAllEvents",
        "summary": "Retrieves all events within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Skip"
          },
          {
            "$ref": "#/components/parameters/Category"
          },
          {
            "$ref": "#/components/parameters/Availability"
          },
          {
            "$ref": "#/components/parameters/Sort"
          },
          {
            "$ref": "#/components/parameters/Order"
          },
          {
            "$ref": "#/components/parameters/Language"
          }
        ],
        "responses": {
          "200": {
            "description": "Events retrieved succesfully\n",
            "headers": {
              "X-Total-Count": {
                "$ref": "#/components/headers/X-Total-Count"
              },
              "X-Limit-Count": {
                "$ref": "#/components/headers/X-Limit-Count"
              },
              "X-Skip-Count": {
                "$ref": "#/components/headers/X-Skip-Count"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GetEventResponse"
                  }
                },
                "examples": {
                  "Get Events": {
                    "$ref": "#/components/examples/GetEvents"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Some elements are missing translations for the given language filter.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Events"
        ]
      }
    },
    "/journal": {
      "get": {
        "description": "Retrieves journal entries for a specific player within the given date range. Journal entries\nrecord all point and credit transactions (earned and spent) across gamification elements such\nas missions, achievements, events, and prizes.\n\nResults are paginated and sortable. Use `skip` and `limit` for pagination.\n",
        "operationId": "getPlayerJournal",
        "summary": "Retrieves journal entries for a player within a date range",
        "parameters": [
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "name": "player",
            "in": "query",
            "required": true,
            "description": "ID of the player to use for the query",
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          },
          {
            "name": "elementType",
            "in": "query",
            "required": false,
            "description": "Filter entries by the type of gamification element that generated the entry.\nExamples: `mission`, `achievement`, `event`, `prize`\n",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "action",
            "in": "query",
            "required": false,
            "description": "Filter entries by action type. Allowed values are:\n- `earn` - entries where points or credits were earned\n- `spend` - entries where points or credits were spent\n",
            "schema": {
              "type": "string",
              "enum": [
                "earn",
                "spend"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Skip"
          },
          {
            "$ref": "#/components/parameters/Sort"
          },
          {
            "$ref": "#/components/parameters/Order"
          }
        ],
        "responses": {
          "200": {
            "description": "Journal entries retrieved successfully\n",
            "headers": {
              "X-Total-Count": {
                "$ref": "#/components/headers/X-Total-Count"
              },
              "X-Limit-Count": {
                "$ref": "#/components/headers/X-Limit-Count"
              },
              "X-Skip-Count": {
                "$ref": "#/components/headers/X-Skip-Count"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetJournalEntriesResponse"
                },
                "examples": {
                  "Get Journal Entries": {
                    "$ref": "#/components/examples/GetJournalEntries"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Required parameters are missing. Parameters `account`, `player`, `startDate`, and `endDate` are required.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Journal"
        ]
      }
    },
    "/journal/summary": {
      "get": {
        "description": "Retrieves an aggregated summary of a player's journal entries within the given date range.\nThe summary groups entries by action type (`earn` and `spend`) and provides totals for\npoints, credits, and the number of transactions in each category.\n",
        "operationId": "getPlayerJournalSummary",
        "summary": "Retrieves an aggregated journal summary for a player within a date range",
        "parameters": [
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "name": "player",
            "in": "query",
            "required": true,
            "description": "ID of the player to use for the query",
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/StartDate"
          },
          {
            "$ref": "#/components/parameters/EndDate"
          }
        ],
        "responses": {
          "200": {
            "description": "Journal summary retrieved successfully\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetJournalSummaryResponse"
                },
                "examples": {
                  "Get Journal Summary": {
                    "$ref": "#/components/examples/GetJournalSummary"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Required parameters are missing. Parameters `account`, `player`, `startDate`, and `endDate` are required.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Journal"
        ]
      }
    },
    "/leaderboards/{id}": {
      "get": {
        "description": "Retrieves ranked score data for the specified leaderboard. Scores update automatically as players earn points or credits. Rankings are computed dynamically with proper tie handling.\n\nThe leaderboard's `element` type determines what is ranked: `player` (individuals), `team` (team aggregates), or `teammembers` (players within a specific team — requires the `team` parameter). For team leaderboards, `rankBy` controls scoring: `total` (sum of member scores) or `average` (average per member for fair comparison).\n\nIf the leaderboard has a `drivenBy` configuration, only completions of the specified missions contribute to scores. Otherwise, all point/credit activity counts.\n\nIf the leaderboard contains a partition, the partition value to query must be provided as a parameter.\n",
        "operationId": "getLeaderboard",
        "summary": "Retrieves player score data for the specified leaderboard within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/LeaderboardId"
          },
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Skip"
          },
          {
            "$ref": "#/components/parameters/Category"
          },
          {
            "$ref": "#/components/parameters/TeamLeaderboard"
          },
          {
            "$ref": "#/components/parameters/Rankby"
          },
          {
            "$ref": "#/components/parameters/Language"
          }
        ],
        "responses": {
          "200": {
            "description": "Leaderboard retrieved successfully\n",
            "headers": {
              "X-Total-Count": {
                "$ref": "#/components/headers/X-Total-Count"
              },
              "X-Limit-Count": {
                "$ref": "#/components/headers/X-Limit-Count"
              },
              "X-Skip-Count": {
                "$ref": "#/components/headers/X-Skip-Count"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LeaderboardScoresResponse"
                },
                "examples": {
                  "Get Leaderboard": {
                    "$ref": "#/components/examples/GetLeaderboardWithScores"
                  },
                  "Get Leaderboard Members vs Members": {
                    "$ref": "#/components/examples/GetLeaderboardsMemberVsMembers"
                  },
                  "Get Leaderboard for Team": {
                    "$ref": "#/components/examples/GetLeaderboardsForTeams"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Leaderboard not found or no elements matching the language filter.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Leaderboards"
        ]
      }
    },
    "/leaderboards": {
      "get": {
        "description": "Retrieves all of the leaderboards within the given account\n",
        "operationId": "getAllLeaderboards",
        "summary": "Retrieves all leaderboards within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Player"
          },
          {
            "$ref": "#/components/parameters/Category"
          },
          {
            "$ref": "#/components/parameters/Availability"
          },
          {
            "$ref": "#/components/parameters/Sort"
          },
          {
            "$ref": "#/components/parameters/Order"
          },
          {
            "$ref": "#/components/parameters/Language"
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Skip"
          }
        ],
        "responses": {
          "200": {
            "description": "Leaderboards retrieved succesfully\n",
            "headers": {
              "X-Total-Count": {
                "$ref": "#/components/headers/X-Total-Count"
              },
              "X-Limit-Count": {
                "$ref": "#/components/headers/X-Limit-Count"
              },
              "X-Skip-Count": {
                "$ref": "#/components/headers/X-Skip-Count"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GetLeaderboardResponse"
                  }
                },
                "examples": {
                  "Get Leaderboards": {
                    "$ref": "#/components/examples/GetLeaderboards"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Some elements are missing translations for the given language filter.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Leaderboards"
        ]
      }
    },
    "/levels/{id}": {
      "get": {
        "description": "Retrieves the level with the specified ID within the given account.\n\nLevels form an ordered ladder defined by ordinal positions (starting at 0). Each level has objectives (points, credits, and/or achievements) that a player must accumulate to reach it. Advancement is sequential — a player must complete level N before reaching level N+1. Reaching a level grants its configured reward.\n",
        "operationId": "getLevel",
        "summary": "Retrieves the specified level data within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/LevelId"
          },
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Language"
          }
        ],
        "responses": {
          "200": {
            "description": "Level retrieved succesfully\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetLevelResponse"
                },
                "examples": {
                  "Get Level": {
                    "$ref": "#/components/examples/GetLevel"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Level not found or no elements matching the language filter.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Levels"
        ]
      }
    },
    "/levels": {
      "get": {
        "description": "Retrieves all of the levels within the given account\n",
        "operationId": "getAllLevels",
        "summary": "Retrieves all levels within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Category"
          },
          {
            "$ref": "#/components/parameters/Availability"
          },
          {
            "$ref": "#/components/parameters/Sort"
          },
          {
            "$ref": "#/components/parameters/Order"
          },
          {
            "$ref": "#/components/parameters/Language"
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Skip"
          }
        ],
        "responses": {
          "200": {
            "description": "Levels retrieved succesfully\n",
            "headers": {
              "X-Total-Count": {
                "$ref": "#/components/headers/X-Total-Count"
              },
              "X-Limit-Count": {
                "$ref": "#/components/headers/X-Limit-Count"
              },
              "X-Skip-Count": {
                "$ref": "#/components/headers/X-Skip-Count"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GetLevelResponse"
                  }
                },
                "examples": {
                  "Get Levels": {
                    "$ref": "#/components/examples/GetLevels"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Some elements are missing translations for the given language filter.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Levels"
        ]
      }
    },
    "/missions/{id}": {
      "get": {
        "description": "Retrieves the mission with the specified ID within the given account.\n\nMissions follow the lifecycle: `available` → `started` (first relevant event completed) → `completed` (all objectives met). The response includes the mission's objectives (events with target counts), period, count limit, reward, and requirement configuration. Use the player-specific mission progress endpoint to see a player's current objective counts.\n",
        "operationId": "getMission",
        "summary": "Retrieves the specified mission data within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/MissionId"
          },
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Language"
          }
        ],
        "responses": {
          "200": {
            "description": "Mission retrieved succesfully\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetMissionResponse"
                },
                "examples": {
                  "Get Mission": {
                    "$ref": "#/components/examples/GetMission"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Mission not found or no elements matching the language filter.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Missions"
        ]
      }
    },
    "/missions": {
      "get": {
        "description": "Retrieves all the missions within the given account. **By default, the `timeframe` parameter is set to `current`**, which returns only missions whose active window includes the current date. Use `timeframe=all` to include expired and upcoming missions, or `timeframe=upcoming`/`timeframe=expired` for specific windows.\n\nWhen the `player` parameter is provided, results are filtered based on the player's eligibility (requirements and tags).\n\nResults are sorted by active start date.\n",
        "operationId": "getAllMissions",
        "summary": "Retrieves all missions within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Skip"
          },
          {
            "$ref": "#/components/parameters/Category"
          },
          {
            "$ref": "#/components/parameters/Tags"
          },
          {
            "$ref": "#/components/parameters/Player"
          },
          {
            "$ref": "#/components/parameters/Timeframe"
          },
          {
            "$ref": "#/components/parameters/Availability"
          },
          {
            "$ref": "#/components/parameters/Sort"
          },
          {
            "$ref": "#/components/parameters/Order"
          },
          {
            "$ref": "#/components/parameters/Language"
          },
          {
            "$ref": "#/components/parameters/Lat"
          },
          {
            "$ref": "#/components/parameters/Lon"
          },
          {
            "$ref": "#/components/parameters/LocationFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Missions retrieved successfully\n",
            "headers": {
              "X-Total-Count": {
                "$ref": "#/components/headers/X-Total-Count"
              },
              "X-Limit-Count": {
                "$ref": "#/components/headers/X-Limit-Count"
              },
              "X-Skip-Count": {
                "$ref": "#/components/headers/X-Skip-Count"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GetMissionResponse"
                  }
                },
                "examples": {
                  "Get Missions": {
                    "$ref": "#/components/examples/GetMissions"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Some elements are missing translations for the given language filter.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Missions"
        ]
      }
    },
    "/mysteryboxes/{id}": {
      "get": {
        "description": "Retrieves the mystery box with the specified ID within the given account\n",
        "operationId": "getMysteryBox",
        "summary": "Retrieves the specified mystery box data within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/MysteryBoxId"
          },
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Player"
          },
          {
            "$ref": "#/components/parameters/Language"
          }
        ],
        "responses": {
          "200": {
            "description": "Mystery box retrieved succesfully\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetMysteryBoxResponse"
                },
                "examples": {
                  "Get Mystery Box": {
                    "$ref": "#/components/examples/GetMysteryBox"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Mystery box not found, player not found or no elements \nmatching the language filter.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "MysteryBoxes"
        ]
      }
    },
    "/mysteryboxes/{id}/claim": {
      "post": {
        "description": "Claims a mystery box within the given account for the given player. The player pays the mystery box's credit cost and receives one randomly selected prize from the pool. Each prize's selection probability is proportional to its quantity allocation within the box.\n\n**Redemption outcomes** (returned in the response):\n- `REDEEMED` — success. Credits are deducted and a random prize is awarded.\n- `NOT_ENOUGH_CREDITS` — the player's credit balance is less than the mystery box cost.\n- `OUT_OF_STOCK` — all prizes in the mystery box have been claimed.\n- `COUNT_EXCEEDED` — the player has reached their redemption limit for this period.\n\nIf a language property is provided in the body, the response will contain\ntranslated elements. In case no translations are found for the language,\ndefault texts will be used in the response.\n",
        "operationId": "claimMysteryBox",
        "summary": "Claims a mystery box within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/MysteryBoxId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RedeemMysteryBoxRequest"
              },
              "examples": {
                "Claim Mystery Box": {
                  "value": {
                    "account": "gamelayer-test",
                    "player": "player-1"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Mystery box redeemed succesfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RedeemMysteryBoxResponse"
                },
                "examples": {
                  "Claim Mystery Box Response": {
                    "$ref": "#/components/examples/RedeemMysteryBox"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Mysterybox or player not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "MysteryBoxes"
        ]
      }
    },
    "/mysteryboxes": {
      "get": {
        "description": "Retrieves all the mystery boxes within the given account. If a player name is specified in the \nparameters, only those mystery boxes the player can currently afford will be returned.\nBy default, the response will contain all available mystery boxes at the time of the request. \nThat includes mystery boxes that have been explicitly set as available and have stock available, \nif applicable\n",
        "operationId": "getAllMysteryBoxes",
        "summary": "Retrieves all mystery boxes within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Skip"
          },
          {
            "$ref": "#/components/parameters/Category"
          },
          {
            "$ref": "#/components/parameters/Tags"
          },
          {
            "$ref": "#/components/parameters/Player"
          },
          {
            "$ref": "#/components/parameters/Availability"
          },
          {
            "$ref": "#/components/parameters/Sort"
          },
          {
            "$ref": "#/components/parameters/Order"
          },
          {
            "$ref": "#/components/parameters/Timeframe"
          },
          {
            "$ref": "#/components/parameters/Stock"
          },
          {
            "$ref": "#/components/parameters/Language"
          },
          {
            "$ref": "#/components/parameters/Lat"
          },
          {
            "$ref": "#/components/parameters/Lon"
          },
          {
            "$ref": "#/components/parameters/LocationFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Mystery boxes retrieved successfully",
            "headers": {
              "X-Total-Count": {
                "$ref": "#/components/headers/X-Total-Count"
              },
              "X-Limit-Count": {
                "$ref": "#/components/headers/X-Limit-Count"
              },
              "X-Skip-Count": {
                "$ref": "#/components/headers/X-Skip-Count"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GetMysteryBoxResponse"
                  }
                },
                "examples": {
                  "Get Mystery Boxes": {
                    "$ref": "#/components/examples/GetMysteryBoxes"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Some elements are missing translations for the given language filter.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "MysteryBoxes"
        ]
      }
    },
    "/players/{player}": {
      "get": {
        "description": "Retrieves the basic data of the player with the specified ID within the given account.\n\nThe response includes the player's dual-currency balances (points and credits), current level, team assignment, category, tags, and refresh offset. Points accumulate over time and drive level advancement and leaderboard ranking. Credits are a spendable balance used for prizes, mystery boxes, and raffle tickets. The `refreshOffset` (e.g., `UTC+02:00`) determines when the player's daily/weekly/monthly periods roll over.\n",
        "operationId": "getPlayer",
        "summary": "Retrieves the specified player data within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/PlayerId"
          },
          {
            "$ref": "#/components/parameters/Account"
          }
        ],
        "responses": {
          "200": {
            "description": "Player retrieved succesfully\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerResponse"
                },
                "examples": {
                  "Get Player": {
                    "$ref": "#/components/examples/GetPlayer"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Player not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Players"
        ]
      },
      "patch": {
        "description": "Updates a player within the given account (partial update). Partial data update allows you to specify\nonly certain field to be updated, i.e. if a field is not present in the request, it will not be modified\non the updated document\n",
        "operationId": "updatePlayer",
        "summary": "Updates a player within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/PlayerId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePlayerRequest"
              },
              "examples": {
                "Update Player": {
                  "$ref": "#/components/examples/UpdatePlayer"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Player updated successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerResponse"
                },
                "examples": {
                  "Get Player": {
                    "$ref": "#/components/examples/GetPlayer"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. Check request data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Player or team not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Players"
        ]
      },
      "delete": {
        "description": "Deletes the specified player from the given account\n",
        "operationId": "deletePlayer",
        "summary": "Deletes a player within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/PlayerId"
          },
          {
            "$ref": "#/components/parameters/Account"
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeletePlayerRequest"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Player deleted successfully"
          },
          "404": {
            "description": "Player not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Players"
        ]
      }
    },
    "/players/{player}/achievements": {
      "get": {
        "description": "Retrieves the unlocked and/or granted achievements for player with the \nspecified ID within the given account\n",
        "operationId": "getPlayerAchievements",
        "summary": "Retrieves the player's achievements within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/PlayerId"
          },
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Skip"
          },
          {
            "$ref": "#/components/parameters/Completion"
          },
          {
            "$ref": "#/components/parameters/Order"
          },
          {
            "$ref": "#/components/parameters/Language"
          }
        ],
        "responses": {
          "200": {
            "description": "Player achievements retrieved succesfully\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerAchievementsResponse"
                },
                "examples": {
                  "Get Player Achievements": {
                    "$ref": "#/components/examples/GetPlayerAchievements"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Player not found or some elements are missing translations \nfor the given language filter.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Players"
        ]
      }
    },
    "/players/{player}/events": {
      "get": {
        "description": "Retrieves the completed event actions for player with the specified ID within the given account\n",
        "operationId": "getPlayerEvents",
        "summary": "Retrieves the player's events within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/PlayerId"
          },
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Skip"
          },
          {
            "$ref": "#/components/parameters/Completion"
          },
          {
            "$ref": "#/components/parameters/Order"
          },
          {
            "$ref": "#/components/parameters/Language"
          }
        ],
        "responses": {
          "200": {
            "description": "Player events retrieved succesfully\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerEventsResponse"
                },
                "examples": {
                  "Get Player Events": {
                    "$ref": "#/components/examples/GetPlayerEvents"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Player not found or some elements are missing translations for the given language filter.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Players"
        ]
      }
    },
    "/players/{player}/levels": {
      "get": {
        "description": "Retrieves the completed level actions for player with the specified ID within the given account\n",
        "operationId": "getPlayerLevels",
        "summary": "Retrieves the player's levels within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/PlayerId"
          },
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Skip"
          },
          {
            "$ref": "#/components/parameters/Completion"
          },
          {
            "$ref": "#/components/parameters/Order"
          },
          {
            "$ref": "#/components/parameters/Language"
          }
        ],
        "responses": {
          "200": {
            "description": "Player levels retrieved succesfully\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerLevelsResponse"
                },
                "examples": {
                  "Get Player Levels": {
                    "$ref": "#/components/examples/GetPlayerLevels"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Player not found or some elements are missing translations for the given language filter.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Players"
        ]
      }
    },
    "/players/{player}/missions": {
      "get": {
        "description": "Retrieves the started and/or completed missions for player with the specified \nID within the given account\n",
        "operationId": "getPlayerMissions",
        "summary": "Retrieves the player's missions within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/PlayerId"
          },
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Skip"
          },
          {
            "$ref": "#/components/parameters/Completion"
          },
          {
            "$ref": "#/components/parameters/Order"
          },
          {
            "$ref": "#/components/parameters/Language"
          }
        ],
        "responses": {
          "200": {
            "description": "Player missions retrieved succesfully\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerMissionsResponse"
                },
                "examples": {
                  "Get Player Missions": {
                    "$ref": "#/components/examples/GetPlayerMissions"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Player not found or some elements are missing translations \nfor the given language filter.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Players"
        ]
      }
    },
    "/players/{player}/missions/{id}": {
      "get": {
        "description": "Retrieves the mission progress for a given player and mission with the specified \nID within the given account.\n",
        "operationId": "getPlayerMissionProgress",
        "summary": "Retrieves the player's mission progress",
        "parameters": [
          {
            "$ref": "#/components/parameters/PlayerId"
          },
          {
            "$ref": "#/components/parameters/MissionId"
          },
          {
            "$ref": "#/components/parameters/Account"
          }
        ],
        "responses": {
          "200": {
            "description": "Progress retrieved succesfully\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerMissionProgressResponse"
                },
                "examples": {
                  "Get Player Mission Progress - Started Mission": {
                    "$ref": "#/components/examples/GetPlayerMissionProgressStarted"
                  },
                  "Get Player Mission Progress - Completed Mission": {
                    "$ref": "#/components/examples/GetPlayerMissionProgressCompleted"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Player or mission not found.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Players"
        ]
      }
    },
    "/players/{player}/prizes": {
      "get": {
        "description": "Retrieves the redeemed prizes for player with the specified ID within the given account\n",
        "operationId": "getPlayerPrizes",
        "summary": "Retrieves the player's prizes within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/PlayerId"
          },
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Skip"
          },
          {
            "$ref": "#/components/parameters/Completion"
          },
          {
            "$ref": "#/components/parameters/Order"
          },
          {
            "$ref": "#/components/parameters/Language"
          }
        ],
        "responses": {
          "200": {
            "description": "Player prizes retrieved succesfully\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerPrizesResponse"
                },
                "examples": {
                  "Get Player Prize": {
                    "$ref": "#/components/examples/GetPlayerPrizes"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Player not found or some elements are missing translations \nfor the given language filter\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Players"
        ]
      }
    },
    "/players/{player}/ranking": {
      "get": {
        "description": "Retrieves the given leaderboard ranking data for player with the specified ID within the given account\n",
        "operationId": "getPlayerRanking",
        "summary": "Retrieves the player's ranking within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/PlayerId"
          },
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Language"
          }
        ],
        "responses": {
          "200": {
            "description": "Player ranking retrieved succesfully\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerRankingsResponse"
                },
                "examples": {
                  "Get Player Ranking": {
                    "$ref": "#/components/examples/GetPlayerRanking"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Player not found or some elements are missing translations \nfor the given language filter.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Players"
        ]
      }
    },
    "/players/{player}/streaks": {
      "get": {
        "description": "Retrieves active and/or completed streaks for player with the specified \nID within the given account\n",
        "operationId": "getPlayerStreaks",
        "summary": "Retrieves the player's streaks within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/PlayerId"
          },
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Skip"
          },
          {
            "$ref": "#/components/parameters/Completion"
          },
          {
            "$ref": "#/components/parameters/Order"
          },
          {
            "$ref": "#/components/parameters/Language"
          }
        ],
        "responses": {
          "200": {
            "description": "Player streaks retrieved succesfully\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerStreaksResponse"
                },
                "examples": {
                  "Get Player Streaks": {
                    "$ref": "#/components/examples/GetPlayerStreaks"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Player not found or some elements are missing translations \nfor the given language filter.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Players"
        ]
      }
    },
    "/players": {
      "get": {
        "description": "Retrieves all players within the given account.\n",
        "operationId": "getAllPlayers",
        "summary": "Retrieves all players within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Skip"
          },
          {
            "$ref": "#/components/parameters/Category"
          },
          {
            "$ref": "#/components/parameters/Tags"
          },
          {
            "$ref": "#/components/parameters/Level"
          },
          {
            "$ref": "#/components/parameters/Team"
          },
          {
            "$ref": "#/components/parameters/RefreshOffset"
          },
          {
            "$ref": "#/components/parameters/Sort"
          },
          {
            "$ref": "#/components/parameters/Order"
          }
        ],
        "responses": {
          "200": {
            "description": "Players retrieved successfully",
            "headers": {
              "X-Total-Count": {
                "$ref": "#/components/headers/X-Total-Count"
              },
              "X-Limit-Count": {
                "$ref": "#/components/headers/X-Limit-Count"
              },
              "X-Skip-Count": {
                "$ref": "#/components/headers/X-Skip-Count"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PlayerResponse"
                  }
                },
                "examples": {
                  "Get Missions": {
                    "$ref": "#/components/examples/GetPlayers"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Account not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Players"
        ]
      },
      "post": {
        "description": "Creates a player within the given account\n",
        "operationId": "createPlayer",
        "summary": "Creates a player within the given account",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePlayerRequest"
              },
              "example": {
                "account": "gamelayer-test",
                "player": "player-1",
                "name": "Player One"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Player created successfully created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatePlayerResponse"
                },
                "examples": {
                  "Create Player Response": {
                    "$ref": "#/components/examples/CreatePlayer"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. Check request data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Required element (team) not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Player is not created. Player already exists.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Players"
        ]
      }
    },
    "/players/batch": {
      "post": {
        "description": "Creates multiple players in a single request. Silently skips players that\nalready exist for the given account. Returns which players were created\nand which already existed.\n",
        "operationId": "createPlayersBatch",
        "summary": "Batch-create up to 1000 players",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "account",
                  "players"
                ],
                "properties": {
                  "account": {
                    "type": "string",
                    "description": "Account ID shared by all players in the batch"
                  },
                  "players": {
                    "type": "array",
                    "maxItems": 1000,
                    "minItems": 1,
                    "description": "Array of player objects to create",
                    "items": {
                      "type": "object",
                      "required": [
                        "player",
                        "name"
                      ],
                      "properties": {
                        "player": {
                          "type": "string",
                          "description": "Unique player ID"
                        },
                        "name": {
                          "type": "string",
                          "description": "Player display name"
                        },
                        "category": {
                          "type": "string",
                          "description": "Player category"
                        },
                        "tags": {
                          "oneOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            }
                          ],
                          "description": "Tags as comma-separated string or array"
                        },
                        "imgUrl": {
                          "type": "string",
                          "description": "Player image URL"
                        },
                        "team": {
                          "type": "string",
                          "description": "Team ID to assign the player to"
                        },
                        "points": {
                          "type": "number",
                          "default": 0,
                          "description": "Initial points"
                        },
                        "credits": {
                          "type": "number",
                          "default": 0,
                          "description": "Initial credits"
                        },
                        "refreshOffset": {
                          "type": "string",
                          "description": "UTC offset for timezone-aware refresh (e.g. UTC+02:00)"
                        }
                      }
                    }
                  }
                }
              },
              "example": {
                "account": "my-account",
                "players": [
                  {
                    "player": "player-1",
                    "name": "Player One",
                    "category": "sales",
                    "tags": [
                      "vip"
                    ]
                  },
                  {
                    "player": "player-2",
                    "name": "Player Two",
                    "points": 100
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Batch processed successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "created": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Player IDs that were newly created"
                    },
                    "existing": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Player IDs that already existed (skipped)"
                    }
                  }
                },
                "example": {
                  "created": [
                    "player-1"
                  ],
                  "existing": [
                    "player-2"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Validation error. Possible reasons:\n- Missing or empty players array\n- Players array exceeds 1000 items\n- A player entry is missing required fields (player, name)\n- Invalid refreshOffset value\n- Account player limit exceeded\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Account not found or team not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Players"
        ]
      }
    },
    "/players/batch-delete": {
      "post": {
        "description": "Deletes multiple players in a single request. Players that do not exist are\nsilently ignored — the response reports how many were actually deleted versus\nhow many were requested.\n\nWhen `hardDelete` is set to `true`, all related player data is cascade-deleted\nacross all collections (events, missions, achievements, streaks, levels, prizes,\nclaims, quizzes, leaderboard scores, and journal entries). Without `hardDelete`,\nonly the player documents are removed and related data is left intact.\n",
        "operationId": "deletePlayersBatch",
        "summary": "Batch-delete up to 1000 players",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "account",
                  "players"
                ],
                "properties": {
                  "account": {
                    "type": "string",
                    "description": "Account ID"
                  },
                  "players": {
                    "type": "array",
                    "maxItems": 1000,
                    "minItems": 1,
                    "description": "Array of player ID strings to delete",
                    "items": {
                      "type": "string"
                    }
                  },
                  "hardDelete": {
                    "type": "boolean",
                    "default": false,
                    "description": "When true, cascade-deletes all related player records across all\ncollections (events, missions, achievements, streaks, levels,\nprizes, claims, quizzes, leaderboard scores, journal entries).\nWhen false, only the player documents are removed.\n"
                  }
                }
              },
              "example": {
                "account": "my-account",
                "players": [
                  "player-1",
                  "player-2",
                  "player-3"
                ],
                "hardDelete": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Batch delete processed successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "deleted": {
                      "type": "integer",
                      "description": "Number of players actually deleted"
                    },
                    "requested": {
                      "type": "integer",
                      "description": "Total number of player IDs in the request"
                    }
                  }
                },
                "example": {
                  "deleted": 2,
                  "requested": 3
                }
              }
            }
          },
          "400": {
            "description": "Validation error. Possible reasons:\n- Missing or empty players array\n- Players array exceeds 1000 items\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Account not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Players"
        ]
      }
    },
    "/prizes/{id}": {
      "get": {
        "description": "Retrieves the prize with the specified ID within the given account\n",
        "operationId": "getPrize",
        "summary": "Retrieves the specified prize data within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/PrizeId"
          },
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Language"
          }
        ],
        "responses": {
          "200": {
            "description": "Prize retrieved succesfully\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetPrizeResponse"
                },
                "examples": {
                  "Get Prize": {
                    "$ref": "#/components/examples/GetPrize"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Prize not found or no elements matching the language filter.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Prizes"
        ]
      }
    },
    "/prizes/{id}/claim": {
      "post": {
        "description": "Claims a prize within the given account for the given player. The platform verifies that the player has sufficient credits, meets any requirement prerequisites, and that stock is available.\n\n**Redemption outcomes** (returned in the response):\n- `REDEEMED` — success. Credits are deducted and the prize is granted.\n- `NOT_ENOUGH_CREDITS` — the player's credit balance is less than the prize cost.\n- `OUT_OF_STOCK` — no stock remaining for this prize.\n- `COUNT_EXCEEDED` — the player has reached their redemption limit for this period.\n- `VOUCHER_INVALID` — the voucher code is invalid or has already been used.\n- `VOUCHER_REQUIRED` — the prize requires a voucher code but none was provided.\n\n**Voucher code redemption**: If a `voucherCode` is provided in the request body, the credit cost is waived — no credits are deducted. All other checks (stock limits, claim count limits, location) are still enforced. Single-use codes are marked as used after a successful claim and cannot be reused. Multi-use codes remain active and can be used by multiple players.\n\n**Enforce voucher code**: If `useVouchers` is enabled on the prize, a valid voucher code must always be provided. Requests without a voucher code will be rejected with `VOUCHER_REQUIRED`.\n\nIf a language property is provided in the body, the response will contain\ntranslated elements. In case no translations are found for the language,\ndefault texts will be used in the response.\n",
        "operationId": "claimPrize",
        "summary": "Claims a prize within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/PrizeId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClaimPrizeRequest"
              },
              "examples": {
                "Redeem Prize": {
                  "value": {
                    "account": "gamelayer-test",
                    "player": "player-1"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Prize claimed succesfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClaimPrizeResponse"
                },
                "examples": {
                  "Redeem Prize Response": {
                    "$ref": "#/components/examples/ClaimPrize"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Prize or player not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Prizes"
        ]
      }
    },
    "/prizes/{id}/vouchers": {
      "post": {
        "description": "Adds voucher codes to the specified prize. Voucher codes allow players to claim a prize by providing a valid code,\nbypassing the credit check. Requirements, stock limits, and claim count limits are still enforced. Only the credit\ncost is waived.\n\nCodes can be **single-use** (default) or **multi-use**. Single-use codes are marked as used after a successful claim\nand cannot be reused. Multi-use codes remain active and can be used by multiple players.\n\nDuplicate codes (codes that already exist for this prize) are silently skipped. The response indicates how many\ncodes were inserted and how many were duplicates.\n",
        "operationId": "addVoucherCodes",
        "summary": "Add voucher codes to a prize",
        "parameters": [
          {
            "$ref": "#/components/parameters/PrizeId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddVoucherCodesRequest"
              },
              "examples": {
                "Add Single-Use Codes": {
                  "value": {
                    "account": "gamelayer-test",
                    "codes": [
                      "VOUCHER-001",
                      "VOUCHER-002",
                      "VOUCHER-003"
                    ]
                  }
                },
                "Add Multi-Use Code": {
                  "value": {
                    "account": "gamelayer-test",
                    "codes": [
                      "RESTAURANT-PROMO"
                    ],
                    "useType": "multi"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Voucher codes added successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherInsertResponse"
                },
                "examples": {
                  "Add Voucher Codes Response": {
                    "value": {
                      "inserted": 3,
                      "duplicates": 0
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request — codes array is missing or empty.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Prize not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Prizes"
        ]
      },
      "get": {
        "description": "Retrieves voucher codes for the specified prize. Supports filtering by status and pagination.\n",
        "operationId": "getVoucherCodes",
        "summary": "Retrieve voucher codes for a prize",
        "parameters": [
          {
            "$ref": "#/components/parameters/PrizeId"
          },
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "Filter voucher codes by status:\n- `active` — only unused voucher codes\n- `used` — only used voucher codes\n- `all` — all voucher codes regardless of status\n",
            "schema": {
              "type": "string",
              "enum": [
                "active",
                "used",
                "all"
              ],
              "default": "all"
            }
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Skip"
          }
        ],
        "responses": {
          "200": {
            "description": "Voucher codes retrieved successfully",
            "headers": {
              "X-Total-Count": {
                "$ref": "#/components/headers/X-Total-Count"
              },
              "X-Limit-Count": {
                "$ref": "#/components/headers/X-Limit-Count"
              },
              "X-Skip-Count": {
                "$ref": "#/components/headers/X-Skip-Count"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherCodeResponse"
                  }
                },
                "examples": {
                  "Get Voucher Codes": {
                    "value": [
                      {
                        "code": "VOUCHER-001",
                        "account": "gamelayer-test",
                        "prizeId": "cup-coffee",
                        "useType": "single",
                        "usedBy": null,
                        "usedAt": null,
                        "createdAt": "2026-03-10T12:00:00.000Z"
                      },
                      {
                        "code": "VOUCHER-002",
                        "account": "gamelayer-test",
                        "prizeId": "cup-coffee",
                        "useType": "single",
                        "usedBy": "player-1",
                        "usedAt": "2026-03-11T09:30:00.000Z",
                        "createdAt": "2026-03-10T12:00:00.000Z"
                      },
                      {
                        "code": "RESTAURANT-PROMO",
                        "account": "gamelayer-test",
                        "prizeId": "cup-coffee",
                        "useType": "multi",
                        "usedBy": null,
                        "usedAt": null,
                        "createdAt": "2026-03-10T12:00:00.000Z"
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "tags": [
          "Prizes"
        ]
      },
      "delete": {
        "description": "Deletes voucher codes from the specified prize. If a `codes` array is provided in the request body, only those\nspecific codes are deleted. If no `codes` array is provided, all voucher codes for the prize are deleted.\n",
        "operationId": "deleteVoucherCodes",
        "summary": "Delete voucher codes from a prize",
        "parameters": [
          {
            "$ref": "#/components/parameters/PrizeId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeleteVoucherCodesRequest"
              },
              "examples": {
                "Delete Specific Codes": {
                  "value": {
                    "account": "gamelayer-test",
                    "codes": [
                      "VOUCHER-001",
                      "VOUCHER-002"
                    ]
                  }
                },
                "Delete All Codes": {
                  "value": {
                    "account": "gamelayer-test"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Voucher codes deleted successfully"
          }
        },
        "tags": [
          "Prizes"
        ]
      }
    },
    "/prizes": {
      "get": {
        "description": "Retrieves all the prizes within the given account. If a player name is specified in the\nparameters, only those prizes the player can currently afford will be returned. By default,\nthe response will contain all available prizes at the time of the request. That includes prizes\nthat have been explicitly set as available and have stock available, if applicable.\n\nMission prizes are excluded by default. Use the `missionPrize` query parameter to include or filter for mission prizes.\n",
        "operationId": "getAllPrizes",
        "summary": "Retrieves all prizes within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Player"
          },
          {
            "$ref": "#/components/parameters/Category"
          },
          {
            "$ref": "#/components/parameters/Tags"
          },
          {
            "$ref": "#/components/parameters/Availability"
          },
          {
            "$ref": "#/components/parameters/Sort"
          },
          {
            "$ref": "#/components/parameters/Order"
          },
          {
            "$ref": "#/components/parameters/Timeframe"
          },
          {
            "$ref": "#/components/parameters/Stock"
          },
          {
            "$ref": "#/components/parameters/Language"
          },
          {
            "$ref": "#/components/parameters/Lat"
          },
          {
            "$ref": "#/components/parameters/Lon"
          },
          {
            "$ref": "#/components/parameters/LocationFilter"
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Skip"
          },
          {
            "name": "missionPrize",
            "in": "query",
            "required": false,
            "description": "Filter by mission prize status. Default excludes mission prizes. Use 'true' to query only mission prizes, 'all' to include all.",
            "schema": {
              "type": "string",
              "enum": [
                true,
                false,
                "all"
              ],
              "default": "false"
            }
          },
          {
            "name": "useVouchers",
            "in": "query",
            "required": false,
            "description": "Filter by voucher enforcement. Use 'true' to return only prizes that require a voucher code, 'false' to exclude them. Omit to return all.",
            "schema": {
              "type": "string",
              "enum": [
                true,
                false
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Prizes retrieved successfully",
            "headers": {
              "X-Total-Count": {
                "$ref": "#/components/headers/X-Total-Count"
              },
              "X-Limit-Count": {
                "$ref": "#/components/headers/X-Limit-Count"
              },
              "X-Skip-Count": {
                "$ref": "#/components/headers/X-Skip-Count"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GetPrizeResponse"
                  }
                },
                "examples": {
                  "Get Prizes": {
                    "$ref": "#/components/examples/GetPrizes"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Some elements are missing translations for the given language filter.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Prizes"
        ]
      }
    },
    "/quizzes/{id}": {
      "get": {
        "description": "Retrieves quiz with specified ID within the given account.\n\nQuizzes have two types: `basic` (all questions scored after submission) and `immediate` (scored question-by-question with instant feedback). The response includes the quiz configuration, questions count, maximum score, required pass rate, and timing constraints. Use the start endpoint to begin a quiz attempt.\n",
        "operationId": "getQuiz",
        "summary": "Retrieves quiz with specified ID within the given account.",
        "parameters": [
          {
            "$ref": "#/components/parameters/QuizId"
          },
          {
            "$ref": "#/components/parameters/Account"
          }
        ],
        "responses": {
          "200": {
            "description": "Quiz retrieved succesfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuizResponse"
                },
                "examples": {
                  "Get Quiz By ID": {
                    "$ref": "#/components/examples/GetQuizById"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Quiz not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Quizzes"
        ]
      }
    },
    "/quizzes": {
      "get": {
        "description": "Retrieves all the quizzes within the given account. If a player name is specified in the \nparameters, only those quizzes the player is eligible for will be returned.\nBy default, the response will contain all available quizzes at the time of the request. \nThat includes quizzes that have been explicitly set as available.\n",
        "operationId": "getAllQuizzes",
        "summary": "Retrieves all quizzes within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/Player"
          },
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Skip"
          },
          {
            "$ref": "#/components/parameters/Category"
          },
          {
            "$ref": "#/components/parameters/Tags"
          },
          {
            "$ref": "#/components/parameters/Availability"
          },
          {
            "$ref": "#/components/parameters/Sort"
          },
          {
            "$ref": "#/components/parameters/Order"
          }
        ],
        "responses": {
          "200": {
            "description": "Quizzes retrieved successfully",
            "headers": {
              "X-Total-Count": {
                "$ref": "#/components/headers/X-Total-Count"
              },
              "X-Limit-Count": {
                "$ref": "#/components/headers/X-Limit-Count"
              },
              "X-Skip-Count": {
                "$ref": "#/components/headers/X-Skip-Count"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/QuizResponse"
                  }
                },
                "examples": {
                  "Get Quizzes": {
                    "$ref": "#/components/examples/GetQuizzes"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Account not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Quizzes"
        ]
      }
    },
    "/quizzes/{id}/result": {
      "get": {
        "description": "Retrieves results for the quiz with specified ID within the given account for a player.\n",
        "operationId": "getQuizResult",
        "summary": "Retrieves quiz results with specified ID within the given account for a player.",
        "parameters": [
          {
            "$ref": "#/components/parameters/QuizId"
          },
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/QuizPlayer"
          }
        ],
        "responses": {
          "200": {
            "description": "Quiz results retrieved succesfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetQuizResultResponse"
                },
                "examples": {
                  "Get Quiz Result": {
                    "$ref": "#/components/examples/GetQuizResults"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Quiz or player not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Quizzes"
        ]
      }
    },
    "/quizzes/{id}/start": {
      "post": {
        "description": "Starts given quiz with specified ID within the given account for the given player. This begins the quiz attempt and starts the timer (if the quiz has a time limit configured). The response returns the quiz questions with their answer choices.\n\nIf a quiz is already started and active for the player, no action will be taken\n(i.e. no quiz re-start). Current quiz questions for the player will be returned\nin the response. Questions may be shuffled if the quiz has shuffle enabled.\n",
        "operationId": "startQuiz",
        "summary": "Starts given quiz with specified ID within the given account for the given player.",
        "parameters": [
          {
            "$ref": "#/components/parameters/QuizId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "player",
                  "account"
                ],
                "properties": {
                  "account": {
                    "$ref": "#/components/schemas/AccountId"
                  },
                  "player": {
                    "$ref": "#/components/schemas/Player-PlayerId"
                  }
                }
              },
              "examples": {
                "Start Quiz": {
                  "$ref": "#/components/examples/StartQuiz"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Quiz started.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StartQuizResponse"
                },
                "examples": {
                  "Get Quiz Result": {
                    "$ref": "#/components/examples/StartQuizResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Quiz has not been started or answers are missing/invalid",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Quiz or player not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Quizzes"
        ]
      }
    },
    "/quizzes/{id}/complete": {
      "post": {
        "description": "Completes given quiz with specified ID within the given account for the given player. Submits the player's answers for scoring. The platform scores responses against correct answers and determines pass/fail based on the required pass rate.\n\nThe response includes the player's score, maximum possible score, pass/fail status, and the configured pass/fail message. If the player passes, the quiz's reward (points, credits, achievement steps) is granted. If the quiz drives a mission, the linked mission is also completed on pass.\n",
        "operationId": "completeQuizz",
        "summary": "Completes given quiz with specified ID within the given account for the given player.",
        "parameters": [
          {
            "$ref": "#/components/parameters/QuizId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CompleteQuizRequestBody"
              },
              "examples": {
                "Complete Quiz": {
                  "$ref": "#/components/examples/CompleteQuiz"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Quiz completed.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompleteQuizResponse"
                },
                "examples": {
                  "Get Quiz Result": {
                    "$ref": "#/components/examples/CompleteQuizResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request data or quiz not started in time.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Quiz or player not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Quizzes"
        ]
      }
    },
    "/raffles/{id}": {
      "get": {
        "description": "Retrieves the raffle ticket with the specified ID within the given account\n",
        "operationId": "getRaffle",
        "summary": "Retrieves the specified raffle ticket within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/RaffleId"
          },
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Language"
          }
        ],
        "responses": {
          "200": {
            "description": "Raffle ticket retrieved succesfully\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetRaffleResponse"
                },
                "examples": {
                  "Get Raffle": {
                    "$ref": "#/components/examples/GetRaffle"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Raffle not found or no elements matching the language filter.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Raffles"
        ]
      }
    },
    "/raffles": {
      "get": {
        "description": "Retrieves all the raffles within the given account. If a player name is specified in the \nparameters, only those raffles the player can currently afford will be returned.\nBy default, the response will contain all available raffles at the time of the request. \nThat includes raffles that have been explicitly set as available and have stock available, \nif applicable\n",
        "operationId": "getAllRaffles",
        "summary": "Retrieves all raffles within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Player"
          },
          {
            "$ref": "#/components/parameters/Category"
          },
          {
            "$ref": "#/components/parameters/Tags"
          },
          {
            "$ref": "#/components/parameters/Availability"
          },
          {
            "$ref": "#/components/parameters/Sort"
          },
          {
            "$ref": "#/components/parameters/Order"
          },
          {
            "$ref": "#/components/parameters/Timeframe"
          },
          {
            "$ref": "#/components/parameters/Stock"
          },
          {
            "$ref": "#/components/parameters/Language"
          },
          {
            "$ref": "#/components/parameters/Lat"
          },
          {
            "$ref": "#/components/parameters/Lon"
          },
          {
            "$ref": "#/components/parameters/LocationFilter"
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Skip"
          }
        ],
        "responses": {
          "200": {
            "description": "Raffles retrieved successfully",
            "headers": {
              "X-Total-Count": {
                "$ref": "#/components/headers/X-Total-Count"
              },
              "X-Limit-Count": {
                "$ref": "#/components/headers/X-Limit-Count"
              },
              "X-Skip-Count": {
                "$ref": "#/components/headers/X-Skip-Count"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GetRaffleResponse"
                  }
                },
                "examples": {
                  "Get Raffles": {
                    "$ref": "#/components/examples/GetRaffles"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Some elements are missing translations for the given language filter.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Raffles"
        ]
      }
    },
    "/raffles/{id}/claim": {
      "post": {
        "description": "Purchases a raffle ticket within the given account for the given player. Each purchase is one entry into the prize draw. The player can buy multiple tickets (up to the configured count limit) to increase their chances. Winners are selected at the scheduled draw time.\n\n**Redemption outcomes** (returned in the response):\n- `REDEEMED` — success. Credits are deducted and a ticket is issued.\n- `NOT_ENOUGH_CREDITS` — the player's credit balance is less than the ticket cost.\n- `COUNT_EXCEEDED` — the player has reached their ticket purchase limit for this period.\n\nIf a language property is provided in the body, the response will contain\ntranslated elements. In case no translations are found for the language,\ndefault texts will be used in the response.\n",
        "operationId": "claimRaffle",
        "summary": "Claims a raffle ticket within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/RaffleId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RedeemRaffleRequest"
              },
              "examples": {
                "Claim Raffle Ticket": {
                  "value": {
                    "account": "gamelayer-test",
                    "player": "player-1"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Raffle ticket claimed succesfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RedeemRaffleResponse"
                },
                "examples": {
                  "Claim Raffle Ticket Response": {
                    "$ref": "#/components/examples/RedeemRaffle"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Raffle or player not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Raffles"
        ]
      }
    },
    "/rules/{id}": {
      "get": {
        "description": "Retrieves information of given rule ID.\n\nRules are condition-action automations evaluated whenever a player earns points. Each rule has a condition (e.g., \"player created within N days\"), an action (e.g., \"multiply earned points by 2x\"), and a priority (lower = higher priority, default: 100). Rules are processed in priority order; if `breakOnEval` is true, evaluation stops after this rule matches.\n",
        "operationId": "getRule",
        "summary": "Retrieves the specified rule data within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/RuleId"
          },
          {
            "$ref": "#/components/parameters/Account"
          }
        ],
        "responses": {
          "200": {
            "description": "Rule retrieved succesfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                },
                "examples": {
                  "Get Rule": {
                    "$ref": "#/components/examples/GetRuleById"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Rule not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Rules"
        ]
      },
      "patch": {
        "description": "Updates a rule within the given account (partial update). Partial data update allows you to specify\nonly certain field to be updated, i.e. if a field is not present in the request, it will not be modified\non the updated document\n",
        "operationId": "updateRule",
        "summary": "Updates a rule within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/RuleId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Rule updated successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "Bad request. Check request data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Rule not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Rules"
        ]
      }
    },
    "/rules": {
      "get": {
        "description": "Retrieves all rules within the given account.\n",
        "operationId": "getAllRules",
        "summary": "Retrieves all rules within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Sort"
          },
          {
            "$ref": "#/components/parameters/Order"
          }
        ],
        "responses": {
          "200": {
            "description": "Rules retrieved successfully",
            "headers": {
              "X-Total-Count": {
                "$ref": "#/components/headers/X-Total-Count"
              },
              "X-Limit-Count": {
                "$ref": "#/components/headers/X-Limit-Count"
              },
              "X-Skip-Count": {
                "$ref": "#/components/headers/X-Skip-Count"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "404": {
            "description": "Account not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Rules"
        ]
      }
    },
    "/surveys/{id}": {
      "get": {
        "description": "Retrieves a survey with specified ID within the given account.\n\nUnlike quizzes, surveys have no correct answers and no scoring. Completing a survey always grants the configured reward. The response includes the survey's questions and answer choices.\n",
        "operationId": "getSurvey",
        "summary": "Retrieves a survey with specified ID within the given account.",
        "parameters": [
          {
            "$ref": "#/components/parameters/SurveyId"
          },
          {
            "$ref": "#/components/parameters/Account"
          }
        ],
        "responses": {
          "200": {
            "description": "Survey retrieved succesfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Survey"
                },
                "examples": {
                  "Get Survey": {
                    "$ref": "#/components/examples/GetSurvey"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Survey not found.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Surveys"
        ]
      }
    },
    "/surveys": {
      "get": {
        "description": "Retrieves all surveys within the given account. If a player name is specified in the \nparameters, only those surveys the player is eligible for will be returned.\nBy default, the response will contain all available surveys at the time of the request. \nThat includes surveys that have been explicitly set as available.\n",
        "operationId": "getAllSurveys",
        "summary": "Retrieves all surveys within the given account.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Player"
          },
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Skip"
          },
          {
            "$ref": "#/components/parameters/Category"
          },
          {
            "$ref": "#/components/parameters/Tags"
          },
          {
            "$ref": "#/components/parameters/Availability"
          },
          {
            "$ref": "#/components/parameters/Sort"
          },
          {
            "$ref": "#/components/parameters/Order"
          }
        ],
        "responses": {
          "200": {
            "description": "Surveys retrieved succesfully.\n",
            "headers": {
              "X-Total-Count": {
                "$ref": "#/components/headers/X-Total-Count"
              },
              "X-Limit-Count": {
                "$ref": "#/components/headers/X-Limit-Count"
              },
              "X-Skip-Count": {
                "$ref": "#/components/headers/X-Skip-Count"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Surveys"
                  }
                },
                "examples": {
                  "Get surveys": {
                    "$ref": "#/components/examples/GetSurveys"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Account not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Surveys"
        ]
      }
    },
    "/surveys/{id}/result": {
      "get": {
        "description": "Retrieves results for the survey with specified ID within the given account. If player is provided,\nplayer details with player answers will be provided.\n",
        "operationId": "getSurveyResult",
        "summary": "Retrieves survey results with specified ID within the given account for a player.",
        "parameters": [
          {
            "$ref": "#/components/parameters/SurveyId"
          },
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/SurveyPlayer"
          }
        ],
        "responses": {
          "200": {
            "description": "Survey results retrieved succesfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetSurveyResultResponse"
                },
                "examples": {
                  "Get Survey Result": {
                    "$ref": "#/components/examples/GetSurveyResultResponse"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Survey or player not found.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Surveys"
        ]
      }
    },
    "/surveys/{id}/complete": {
      "post": {
        "description": "Completes given survey with specified ID within the given account for the given player. Submits the player's answers. Since surveys have no scoring, the configured reward (points, credits, achievement steps) is always granted on completion.\n\nResponses are aggregated across all players and can be queried via the survey result endpoint. If the survey drives a mission, the linked mission is also completed.\n",
        "operationId": "completeSurvey",
        "summary": "Completes given survey with specified ID within the given account for the given player.",
        "parameters": [
          {
            "$ref": "#/components/parameters/SurveyId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CompleteSurveyRequest"
              },
              "examples": {
                "Complete Survey": {
                  "$ref": "#/components/examples/CompleteSurveyRequest"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "API response to survey completed request.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompleteSurveyResponse"
                },
                "examples": {
                  "Complete Survey": {
                    "$ref": "#/components/examples/CompleteSurveyResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Survey or player not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Surveys"
        ]
      }
    },
    "/streaks/{id}": {
      "get": {
        "description": "Retrieves the streak with the specified ID within the given account.\n\nStreaks track consecutive mission completions across periods (daily, weekly, or monthly). Each period, if the player completes the linked mission, the streak count increments and the streak reward is granted. If a period passes without the mission being completed, the streak resets to zero. The `all-time` period is not supported for streaks. Streak objectives are currently limited to one mission.\n",
        "operationId": "getStreak",
        "summary": "Retrieves the specified streak data within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/StreakId"
          },
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Language"
          }
        ],
        "responses": {
          "200": {
            "description": "Streak retrieved succesfully\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetStreakResponse"
                },
                "examples": {
                  "Get Streak": {
                    "$ref": "#/components/examples/GetStreak"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Streak not found or no elements matching the language filter.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Streaks"
        ]
      }
    },
    "/streaks": {
      "get": {
        "description": "Retrieves all the streaks within the given account. By default, the request returns \nall active streaks at the time of the request. If the showAll parameter is set to true \nall streaks defined in the account, regardless of their active period, will be returned \ninstead. More advanced queries can be specified with the timeframe query. \n\nResults are sorted by active start date.\n",
        "operationId": "getAllStreaks",
        "summary": "Retrieves all streaks within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Skip"
          },
          {
            "$ref": "#/components/parameters/Category"
          },
          {
            "$ref": "#/components/parameters/Tags"
          },
          {
            "$ref": "#/components/parameters/Timeframe"
          },
          {
            "$ref": "#/components/parameters/Availability"
          },
          {
            "$ref": "#/components/parameters/Sort"
          },
          {
            "$ref": "#/components/parameters/Order"
          },
          {
            "$ref": "#/components/parameters/Language"
          }
        ],
        "responses": {
          "200": {
            "description": "Streaks retrieved successfully",
            "headers": {
              "X-Total-Count": {
                "$ref": "#/components/headers/X-Total-Count"
              },
              "X-Limit-Count": {
                "$ref": "#/components/headers/X-Limit-Count"
              },
              "X-Skip-Count": {
                "$ref": "#/components/headers/X-Skip-Count"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GetStreakResponse"
                  }
                },
                "examples": {
                  "Get Streaks": {
                    "$ref": "#/components/examples/GetStreaks"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Some elements are missing translations for the given language filter.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Streaks"
        ]
      }
    },
    "/teams/{id}": {
      "get": {
        "description": "Retrieves the team data with the specified ID within the given account\n",
        "operationId": "getTeam",
        "summary": "Retrieves the specified team data within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/TeamId"
          },
          {
            "$ref": "#/components/parameters/Account"
          }
        ],
        "responses": {
          "200": {
            "description": "Team retrieved succesfully\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamByIdResponse"
                },
                "examples": {
                  "Get Team": {
                    "$ref": "#/components/examples/GetTeam"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Team not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Teams"
        ]
      },
      "patch": {
        "description": "Updates a team within the given account (partial update). Partial data update allows you to specify\nonly certain field to be updated, i.e. if a field is not present in the request, it will not be modified\non the updated document\n",
        "operationId": "updateTeam",
        "summary": "Updates a team within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/TeamId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateTeamRequest"
              },
              "examples": {
                "Update Team": {
                  "$ref": "#/components/examples/UpdateTeam"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Team updated successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamResponse"
                },
                "examples": {
                  "Update Team": {
                    "$ref": "#/components/examples/UpdatedTeam"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. Check request data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Team not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Teams"
        ]
      },
      "delete": {
        "description": "Deletes the specified team from the given account\n",
        "operationId": "deleteTeam",
        "summary": "Deletes a team within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/TeamId"
          },
          {
            "$ref": "#/components/parameters/Account"
          }
        ],
        "responses": {
          "204": {
            "description": "Team deleted successfully"
          },
          "404": {
            "description": "Team not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Teams"
        ]
      }
    },
    "/teams": {
      "get": {
        "description": "Retrieves all teams within the given account\n",
        "operationId": "getAllTeams",
        "summary": "Retrieves all teams data within the given account",
        "parameters": [
          {
            "$ref": "#/components/parameters/Account"
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Skip"
          },
          {
            "$ref": "#/components/parameters/Category"
          },
          {
            "$ref": "#/components/parameters/Tags"
          },
          {
            "$ref": "#/components/parameters/Level"
          },
          {
            "$ref": "#/components/parameters/Sort"
          },
          {
            "$ref": "#/components/parameters/Order"
          }
        ],
        "responses": {
          "200": {
            "description": "All teams retrieved succesfully\n",
            "headers": {
              "X-Total-Count": {
                "$ref": "#/components/headers/X-Total-Count"
              },
              "X-Limit-Count": {
                "$ref": "#/components/headers/X-Limit-Count"
              },
              "X-Skip-Count": {
                "$ref": "#/components/headers/X-Skip-Count"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetTeamsResponse"
                },
                "examples": {
                  "Get Team": {
                    "$ref": "#/components/examples/GetTeams"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Account not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Teams"
        ]
      },
      "post": {
        "description": "Creates a team within the given account\n",
        "operationId": "createTeam",
        "summary": "Creates a team within the given account",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTeamRequest"
              },
              "examples": {
                "Create Team": {
                  "$ref": "#/components/examples/CreateTeam"
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Team successfully created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamResponse"
                },
                "examples": {
                  "Create Team": {
                    "$ref": "#/components/examples/CreatedTeam"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. Check request data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Team not created. Team exists.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Teams"
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "api_key": {
        "name": "api-key",
        "description": "When you sign up for an account, you will be provided with an API key which is used to access your\norganization's GameLayer resources\n",
        "type": "apiKey",
        "in": "header"
      }
    },
    "parameters": {
      "AchievementId": {
        "name": "id",
        "in": "path",
        "required": true,
        "description": "ID of the achievement",
        "schema": {
          "type": "string"
        }
      },
      "Account": {
        "name": "account",
        "in": "query",
        "description": "ID of the account to use for the query",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "Language": {
        "name": "language",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "ISO 639-1 language code for the requested language, like 'en'. If none is provided,\ntexts for the main gamelayer element will be provided. If the given code is \nnot in the list of currently supported languages or definitions for the specified language query\ndo not exist, an HTTP error response is provided. \nList of supported languages is: \n-  `en` - English\n-  `ar` - Arabic\n-  `zh` - Chinese\n-  `cs` -Czech\n-  `fi` - Finnish\n-  `fr` - French\n-  `de` - German\n-  `el` - Greek\n-  `hi` - Hindi\n-  `it` - Italian\n-  `ja` - Japanese\n-  `kk` - Kazakh\n-  `pt` - Portuguese\n-  `ru` - Russian\n-  `es` - Spanish\n-  `sv` - Swedish\n-  `tr` - Turkish\n"
      },
      "Player": {
        "name": "player",
        "in": "query",
        "description": "If specified, only the results for which the player is eligible, i.e. fulfills \nall requirements, will be returned\n",
        "schema": {
          "type": "string"
        }
      },
      "Category": {
        "name": "category",
        "in": "query",
        "required": false,
        "description": "Specifies the category by which to filter results. You may specifiy a comma-separated \nlist of all allowed categories. Defaults to empty string, all categories will be returned\n",
        "schema": {
          "type": "string",
          "default": ""
        }
      },
      "Tags": {
        "name": "tags",
        "in": "query",
        "required": false,
        "description": "Specifies the tags by which to filter results. You may specify a comma-separated list\nof all tags to include and/or exclude (preceding their ID mith a minus sign).\nDefaults to empty string, all tags are returned\n",
        "schema": {
          "type": "string",
          "default": ""
        }
      },
      "Availability": {
        "name": "availability",
        "in": "query",
        "required": false,
        "description": "Specifies the availability by which to filter results. Allowed values are: \n- `all` - return all results regardless of their availability status\n- `true` - return only available results)\n- `false` - return only unavailable results\n",
        "schema": {
          "type": "string",
          "enum": [
            "all",
            "true",
            "false"
          ],
          "default": true
        }
      },
      "Sort": {
        "name": "sort",
        "in": "query",
        "required": false,
        "description": "Specifies the field by which to order results. You may specify the sort \ncriterion for queried results. Results are sorted in descending order, \ni.e. most recent and highest values first, unless otherwise specified in \nthe order parameter. Defaults to nothing, i.e. results are returned unsorted\n",
        "schema": {
          "type": "string"
        }
      },
      "Order": {
        "name": "order",
        "in": "query",
        "required": false,
        "description": "Specifies the sort order to use for the sorted queries. Allowed values are:\n- `asc` - ascending order, i.e. lowest or oldest first\n- `desc` - descending order, i.e. highest or most recent first\n",
        "schema": {
          "type": "string",
          "enum": [
            "asc",
            "desc"
          ],
          "default": "desc"
        }
      },
      "Limit": {
        "name": "limit",
        "in": "query",
        "required": false,
        "description": "Number of results to return in the response. Useful for pagination.\n",
        "schema": {
          "type": "integer",
          "default": 50
        }
      },
      "Skip": {
        "name": "skip",
        "in": "query",
        "required": false,
        "description": "Number of results to skip from the beginning. Useful for pagination",
        "schema": {
          "type": "integer",
          "default": 0
        }
      },
      "StartDate": {
        "name": "startDate",
        "in": "query",
        "required": true,
        "description": "Specifies the start date for the query.\n",
        "schema": {
          "type": "string"
        }
      },
      "EndDate": {
        "name": "endDate",
        "in": "query",
        "required": true,
        "description": "Specifies the end date for the query.\n",
        "schema": {
          "type": "string"
        }
      },
      "EventId": {
        "name": "id",
        "in": "path",
        "required": true,
        "description": "ID of the event",
        "schema": {
          "type": "string"
        }
      },
      "LeaderboardId": {
        "name": "id",
        "in": "path",
        "required": true,
        "description": "ID of the leaderboard",
        "schema": {
          "type": "string"
        }
      },
      "TeamLeaderboard": {
        "name": "team",
        "in": "query",
        "required": false,
        "description": "Team for which to retrieve leaderboard scores. Required if the leaderboard is \npartitioned by ```team members vs team members```, ignored otherwise\n",
        "schema": {
          "type": "string",
          "default": ""
        }
      },
      "Rankby": {
        "name": "rankBy",
        "in": "query",
        "required": false,
        "description": "Specifies how team leaderboard data is compared. This is only relevant\nif element is set to ```team```. Allowed values are:\n- `total` - total points for team\n- `average` - average points for team\n",
        "schema": {
          "type": "string",
          "enum": [
            "total",
            "average"
          ],
          "default": "total"
        }
      },
      "LevelId": {
        "name": "id",
        "in": "path",
        "required": true,
        "description": "ID of the level",
        "schema": {
          "type": "string"
        }
      },
      "MissionId": {
        "name": "id",
        "in": "path",
        "required": true,
        "description": "ID of the mission",
        "schema": {
          "type": "string"
        }
      },
      "Timeframe": {
        "name": "timeframe",
        "in": "query",
        "required": false,
        "description": "Specifies the timeframe by which to filter results. You may specify a comma-separated \nlist of all allowed timeframes for the queried objects. Allowed values are: \n- `expired` - objects with an active end date in the past\n- `current` - objects currently active\n- `upcoming` - objects with an active start date in the future\n- `all` - all objects, regardless of their active period\n",
        "schema": {
          "type": "string",
          "enum": [
            "expired",
            "current",
            "all"
          ],
          "default": "current"
        }
      },
      "Lat": {
        "name": "lat",
        "in": "query",
        "required": false,
        "description": "Player's current latitude (WGS84). When provided together with `lon`, results are filtered\nbased on the player's proximity to location-aware elements. Non-location-aware elements\nare always included regardless of this parameter.\n",
        "schema": {
          "$ref": "#/components/schemas/Latitude"
        }
      },
      "Lon": {
        "name": "lon",
        "in": "query",
        "required": false,
        "description": "Player's current longitude (WGS84). Must be provided together with `lat` for\nlocation-based filtering to take effect.\n",
        "schema": {
          "$ref": "#/components/schemas/Longitude"
        }
      },
      "LocationFilter": {
        "name": "locationFilter",
        "in": "query",
        "required": false,
        "description": "Specifies which location zone to use for filtering when `lat` and `lon` are provided.\n- `actionable` - return elements where the player is within the actionable zone (default)\n- `viewable` - return elements where the player is within the viewable zone\n",
        "schema": {
          "type": "string",
          "enum": [
            "actionable",
            "viewable"
          ],
          "default": "actionable"
        }
      },
      "MysteryBoxId": {
        "name": "id",
        "in": "path",
        "required": true,
        "description": "ID of the mystery box",
        "schema": {
          "type": "string"
        }
      },
      "Stock": {
        "name": "stock",
        "in": "query",
        "required": false,
        "description": "Specifies the stock availability by which to filter prizes. Allowed values are:\n- `all` - return all prizes regardless of their stock availability\n- `true` - return only prizes where, if stock has been limited, there is more stock available \n- `false` - return only prizes that are out of stock, i.e. fully redeemed\n",
        "schema": {
          "type": "string",
          "enum": [
            "all",
            "true",
            "false"
          ],
          "default": "true"
        }
      },
      "PlayerId": {
        "name": "player",
        "in": "path",
        "required": true,
        "description": "ID of the player",
        "schema": {
          "type": "string"
        }
      },
      "Completion": {
        "name": "completion",
        "in": "query",
        "required": false,
        "description": "Specifies the completion status by which to filter results. Allowed values are: \n- `started` - e.g. started missions waiting for completion, unlocked achievements,\n- `completed` - e.g. completed missions, granted achievements, redeemed prizes\n- `all` - all results, regardless of completion status\n",
        "schema": {
          "type": "string",
          "enum": [
            "started",
            "completed",
            "all"
          ],
          "default": "all"
        }
      },
      "Level": {
        "name": "level",
        "in": "query",
        "required": false,
        "description": "Specifies the levels by which to filter results. You may specify a comma-separated \nlist of all levels to include and/or exclude (preceding their ID mith a minus sign)\n",
        "schema": {
          "type": "string",
          "default": ""
        }
      },
      "Team": {
        "name": "team",
        "in": "query",
        "required": false,
        "description": "Specifies the teams by which to filter results. You may specify a comma-separated \nlist of all teams to include and/or exclude (preceding their ID mith a minus sign)\n",
        "schema": {
          "type": "string",
          "default": ""
        }
      },
      "RefreshOffset": {
        "name": "refreshOffset",
        "in": "query",
        "required": false,
        "description": "Specifies the refresh offset when a refresh will be done. Offset is provided in format\nUTC+02:00. Valid range is UTC-12:00 to UTC+14:00.\nThe URI must be encoded if refreshOffset is provided.\n",
        "schema": {
          "type": "string",
          "default": ""
        }
      },
      "PrizeId": {
        "name": "id",
        "in": "path",
        "required": true,
        "description": "ID of the prize",
        "schema": {
          "type": "string"
        }
      },
      "QuizId": {
        "name": "id",
        "in": "path",
        "required": true,
        "description": "ID of the quiz",
        "schema": {
          "type": "string"
        }
      },
      "QuizPlayer": {
        "name": "player",
        "in": "query",
        "description": "ID of the player for which to retrieve the quiz result.\n",
        "schema": {
          "type": "string"
        }
      },
      "RaffleId": {
        "name": "id",
        "in": "path",
        "required": true,
        "description": "ID of the raffle",
        "schema": {
          "type": "string"
        }
      },
      "RuleId": {
        "name": "id",
        "in": "path",
        "required": true,
        "description": "ID of the rule",
        "schema": {
          "type": "string"
        }
      },
      "SurveyId": {
        "name": "id",
        "in": "path",
        "required": true,
        "description": "ID of the survey",
        "schema": {
          "type": "string"
        }
      },
      "SurveyPlayer": {
        "name": "player",
        "in": "query",
        "description": "ID of the player for which to retrieve the survey result.\n",
        "schema": {
          "type": "string"
        }
      },
      "StreakId": {
        "name": "id",
        "in": "path",
        "required": true,
        "description": "ID of the streak",
        "schema": {
          "type": "string"
        }
      },
      "TeamId": {
        "name": "id",
        "in": "path",
        "required": true,
        "description": "ID of the team",
        "schema": {
          "type": "string"
        }
      }
    },
    "schemas": {
      "Id": {
        "type": "string",
        "description": "ID of the achievement"
      },
      "Name": {
        "type": "string",
        "description": "Name of the achievement"
      },
      "Description": {
        "type": "string",
        "description": "Description of the achievement"
      },
      "Tags": {
        "type": "array",
        "description": "An array of tags",
        "items": {
          "type": "string"
        }
      },
      "Category": {
        "type": "string",
        "description": "Category to which the element belongs"
      },
      "ImgUrl": {
        "type": "string",
        "description": "URL of the achievement image"
      },
      "IsAvailable": {
        "type": "boolean",
        "description": "Specifies if the element is available for operations:\n- `true` - element is available\n- `false` - element is not available\n"
      },
      "Reward": {
        "type": "object",
        "description": "Reward granted when the element is completed. Points accumulate and are non-spendable (used for progression and ranking). Credits are spendable (used for prizes, mystery boxes, raffle tickets). The achievements array enables **achievement chaining** — completing this element grants steps toward other achievements.\n",
        "required": [
          "points",
          "credits",
          "achievements"
        ],
        "properties": {
          "points": {
            "type": "integer",
            "description": "Points awarded upon completion of the element. Points accumulate over time and never decrease through player actions."
          },
          "credits": {
            "type": "integer",
            "description": "Credits awarded upon completion of the element. Credits are a spendable balance."
          },
          "achievements": {
            "type": "array",
            "description": "Achievements that receive steps when this element is completed. This enables achievement chaining — for example, completing a mission can grant steps toward an achievement, and completing that achievement can grant steps toward another.\n",
            "items": {
              "type": "object",
              "required": [
                "id",
                "steps"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "ID of the target achievement"
                },
                "steps": {
                  "type": "integer",
                  "description": "Number of steps granted toward the target achievement"
                }
              }
            }
          },
          "prizeId": {
            "type": "string",
            "description": "ID of the prize awarded on mission completion. Only prizes marked as missionPrize can be used."
          },
          "expireMissionOnZeroStock": {
            "type": "boolean",
            "description": "If true and the reward prize is the only reward, the mission auto-expires when prize stock reaches zero."
          }
        }
      },
      "Requirement": {
        "type": "object",
        "description": "Prerequisite gate for the element. A player must satisfy **all** specified conditions to be eligible. Requirements are checked at the time of interaction (event completion, prize redemption, element listing with player filter, etc.). If a player does not meet the requirements, the action is denied or the element is hidden from listing.\n",
        "required": [
          "tags",
          "missions",
          "achievements",
          "level"
        ],
        "properties": {
          "tags": {
            "type": "array",
            "description": "Player must have all listed tags to be eligible",
            "items": {
              "type": "string",
              "description": "Tag"
            }
          },
          "missions": {
            "type": "array",
            "description": "Player must have completed all listed missions to be eligible",
            "items": {
              "type": "string",
              "description": "Mission ID"
            }
          },
          "achievements": {
            "type": "array",
            "description": "Player must have completed all listed achievements to be eligible",
            "items": {
              "type": "string",
              "description": "Achievement ID"
            }
          },
          "level": {
            "type": "object",
            "description": "Player must have reached at least this level (by ordinal) to be eligible",
            "required": [
              "id",
              "ordinal"
            ],
            "properties": {
              "id": {
                "type": "string",
                "description": "ID of the required level"
              },
              "ordinal": {
                "type": "integer",
                "description": "Ordinal of the required level. Player must be at or above this ordinal."
              }
            }
          },
          "category": {
            "type": "string",
            "description": "Player must belong to this category to be eligible"
          }
        }
      },
      "GetAchievementResponse": {
        "description": "Response to Get Achievement",
        "type": "object",
        "required": [
          "id",
          "name",
          "description",
          "imgUrl",
          "tags",
          "category",
          "isAvailable",
          "steps",
          "reward",
          "requirement"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/Id"
          },
          "name": {
            "$ref": "#/components/schemas/Name"
          },
          "description": {
            "$ref": "#/components/schemas/Description"
          },
          "tags": {
            "$ref": "#/components/schemas/Tags"
          },
          "category": {
            "$ref": "#/components/schemas/Category"
          },
          "imgUrl": {
            "$ref": "#/components/schemas/ImgUrl"
          },
          "isAvailable": {
            "$ref": "#/components/schemas/IsAvailable"
          },
          "steps": {
            "type": "integer",
            "description": "The number of steps required to grant the achievement"
          },
          "reward": {
            "$ref": "#/components/schemas/Reward"
          },
          "requirement": {
            "$ref": "#/components/schemas/Requirement"
          }
        }
      },
      "ErrorResponse": {
        "type": "object",
        "required": [
          "error",
          "errorCode"
        ],
        "properties": {
          "error": {
            "type": "string",
            "description": "Error in cleartext"
          },
          "errorCode": {
            "type": "integer",
            "description": "Error codes:<br> \n1 - Achievement not found.<br>\n2 - Event not found.<br>\n3 - Player not found.<br>\n4 - Leaderboard not found.<br>\n5 - Level not not found.<br>\n6 - Mission not found.<br>\n7 - Prize not found.<br>\n8 - Team not found.<br>\n9 - Team join failed.<br>\n10 - Mystery box not found.<br>\n11 - Raffle not found.<br>\n20 - Player not provided<br>\n21 - Player exists<br>\n22 - Maximum allowed of players created for development account<br>\n24 - Player is currently being processed (retry with Retry-After header)<br>\n25 - Invalid time zone provided for player. Must be in IANA format.\n31 - Team exists<br>\n40 - Survey not found.<br>\n41 - Answers missing in complete survey request.<br>\n42 - Player is not eligible for the survey.<br>\n43 - Player has not completed the survey.<br>\n44 - Survey results mismatch with provided survey.<br>\n50 - Quiz not found.<br>\n51 - Answers missing in complete quiz request.<br>\n52 - Quiz has not been started.<br>\n53 - Quiz was not completed in time.<br>\n54 - Player is not eligible for the quiz.<br>\n90 - Invalid voucher data.<br>\n100 - No elements defined for provided language filter.<br>\n1001 - Database save error<br>\n1002 - Database update error<br>\n1003 - Database delete error<br>\n<br>\nAdmin API error codes (returned by admin endpoints, not the player-facing API):<br>\n10050 - Mission already exists for the account.<br>\n10051 - Invalid mission data (e.g., child mission `count` &lt; 1).<br>\n10052 - Mission objectives mix multiple types — exactly one of `events`, `missions`, `quizzId`, or `surveyId` may be populated.<br>\n10053 - Child mission referenced by a meta-mission must be a leaf (not itself a meta-mission). Also returned when an admin tries to turn a leaf that is already referenced by a meta-mission into a meta-mission itself.<br>\n10054 - One or more referenced child missions do not exist in the account.<br>\n10055 - Meta-mission cannot reference itself as a child.<br>\n10056 - Meta-mission and all of its child missions must share the same `period`. Also returned when an admin tries to change the period of a leaf that is referenced by parents whose period would no longer match.<br>\n10057 - Meta-mission references more than 10 child missions.<br>\n10058 - Mission is referenced as a child by one or more meta-missions and cannot be deleted; the response includes a `referencedBy` array of parent mission ids. Remove the references from each parent first.<br>\n"
          }
        }
      },
      "AccountId": {
        "type": "string",
        "description": "ID of the account for the operation"
      },
      "PlayerId": {
        "type": "string",
        "description": "ID of the player"
      },
      "Language": {
        "type": "string",
        "description": "ISO 639-1 language code for the requested language, like 'en'. If none is provided,\ntexts for the main gamelayer element will be provided. If the given code is \nnot in the list of currently supported languages or definitions for the specified language query\ndo not exist, an HTTP error response is provided. \nList of supported languages is: \n-  `en` - English\n-  `ar` - Arabic\n-  `zh` - Chinese\n-  `cs` -Czech\n-  `fi` - Finnish\n-  `fr` - French\n-  `de` - German\n-  `el` - Greek\n-  `hi` - Hindi\n-  `it` - Italian\n-  `ja` - Japanese\n-  `kk` - Kazakh\n-  `pt` - Portuguese\n-  `ru` - Russian\n-  `es` - Spanish\n-  `sv` - Swedish\n-  `tr` - Turkish\n"
      },
      "Latitude": {
        "type": "number",
        "format": "double",
        "description": "Player's current latitude (WGS84)",
        "minimum": -90,
        "maximum": 90
      },
      "Longitude": {
        "type": "number",
        "format": "double",
        "description": "Player's current longitude (WGS84)",
        "minimum": -180,
        "maximum": 180
      },
      "CompleteEventRequest": {
        "description": "Complete Player Request",
        "type": "object",
        "required": [
          "player",
          "account"
        ],
        "properties": {
          "account": {
            "$ref": "#/components/schemas/AccountId"
          },
          "player": {
            "$ref": "#/components/schemas/PlayerId"
          },
          "count": {
            "type": "integer",
            "description": "Amount of completions for the event. If event is limited, player can complete\nthe event only the the amount of times specified by the event limitation\n",
            "default": 1
          },
          "tags": {
            "$ref": "#/components/schemas/Tags"
          },
          "language": {
            "$ref": "#/components/schemas/Language"
          },
          "lat": {
            "$ref": "#/components/schemas/Latitude"
          },
          "lon": {
            "$ref": "#/components/schemas/Longitude"
          }
        }
      },
      "Event-Id": {
        "type": "string",
        "description": "ID of the event"
      },
      "Event-Name": {
        "type": "string",
        "description": "Name of the event"
      },
      "Event-Description": {
        "type": "string",
        "description": "Description of the event"
      },
      "Event-ImgUrl": {
        "type": "string",
        "description": "URL of the event image"
      },
      "LimitCount": {
        "type": "boolean",
        "description": "Controls whether the `countLimit` cap is enforced. When `true`, the player can only complete the element up to `countLimit` times per period. When `false`, the element can be completed an unlimited number of times regardless of `countLimit`.\n"
      },
      "Player-Name": {
        "type": "string",
        "description": "Name of the player"
      },
      "Points": {
        "type": "integer",
        "description": "Amount of points granted to the player"
      },
      "Credits": {
        "type": "integer",
        "description": "Amount of credits granted to the player"
      },
      "PlayerConsciseResponse": {
        "description": "Response to Get Player",
        "type": "object",
        "properties": {
          "name": {
            "$ref": "#/components/schemas/Player-Name"
          },
          "points": {
            "$ref": "#/components/schemas/Points"
          },
          "credits": {
            "$ref": "#/components/schemas/Credits"
          }
        }
      },
      "Mission-Id": {
        "type": "string",
        "description": "ID of the mission"
      },
      "Mission-Name": {
        "type": "string",
        "description": "Name of the mission"
      },
      "Mission-Description": {
        "type": "string",
        "description": "Description of the mission"
      },
      "Mission-ImgUrl": {
        "type": "string",
        "description": "URL of the mission image"
      },
      "Level-Id": {
        "type": "string",
        "description": "ID of the level"
      },
      "Level-Name": {
        "type": "string",
        "description": "Name of the level"
      },
      "Level-Description": {
        "type": "string",
        "description": "Description of the level"
      },
      "Level-ImgUrl": {
        "type": "string",
        "description": "URL of the level image"
      },
      "Ordinal": {
        "type": "integer",
        "description": "Ordering of the levels, starts at 0"
      },
      "Streak-Id": {
        "type": "string",
        "description": "ID of the streak"
      },
      "Streak-Name": {
        "type": "string",
        "description": "Name of the streak"
      },
      "Streak-Description": {
        "type": "string",
        "description": "Description of the streak"
      },
      "Streak-ImgUrl": {
        "type": "string",
        "description": "URL of the streak image"
      },
      "Progress": {
        "type": "object",
        "description": "Summarizes everything that happened as a result of an action (event completion, quiz pass, or survey completion). This single response gives your application everything it needs to update the player's UI — show congratulations for completed missions, display new achievements, animate level-ups, and update streak counters. The progress object includes the full cascade of changes triggered by the action.\n",
        "required": [
          "points",
          "credits",
          "achievements",
          "missions",
          "levels"
        ],
        "properties": {
          "points": {
            "type": "object",
            "required": [
              "before",
              "earned"
            ],
            "properties": {
              "before": {
                "type": "integer",
                "description": "Player's total points before the action was processed"
              },
              "earned": {
                "type": "integer",
                "description": "Total points earned from the action, including points from the event itself and from any completed missions, achievements, levels, and streaks (after rule multipliers are applied)"
              }
            }
          },
          "credits": {
            "type": "object",
            "required": [
              "before",
              "earned"
            ],
            "properties": {
              "before": {
                "type": "integer",
                "description": "Player's credit balance before the action was processed"
              },
              "earned": {
                "type": "integer",
                "description": "Total credits earned from the action, including credits from the event itself and from any completed missions, achievements, levels, and streaks"
              }
            }
          },
          "achievements": {
            "type": "array",
            "description": "Achievements that reached their step target and completed as a result of this action (includes chained achievements)",
            "items": {
              "type": "object",
              "description": "Completed achievement",
              "required": [
                "id",
                "name",
                "description",
                "imgUrl"
              ],
              "properties": {
                "id": {
                  "$ref": "#/components/schemas/Id"
                },
                "name": {
                  "$ref": "#/components/schemas/Name"
                },
                "description": {
                  "$ref": "#/components/schemas/Description"
                },
                "imgUrl": {
                  "$ref": "#/components/schemas/ImgUrl"
                }
              }
            }
          },
          "unlockedAchievements": {
            "type": "array",
            "description": "Achievements that received steps and started progressing but have not yet reached their step target",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "$ref": "#/components/schemas/Id"
                },
                "name": {
                  "$ref": "#/components/schemas/Name"
                },
                "description": {
                  "$ref": "#/components/schemas/Description"
                },
                "imgUrl": {
                  "$ref": "#/components/schemas/ImgUrl"
                }
              }
            }
          },
          "missions": {
            "type": "array",
            "description": "Missions that had all objectives met and completed as a result of this action. Includes the points and credits earned from each mission's reward.",
            "items": {
              "type": "object",
              "description": "Completed mission",
              "required": [
                "id",
                "name",
                "description",
                "imgUrl"
              ],
              "properties": {
                "id": {
                  "$ref": "#/components/schemas/Mission-Id"
                },
                "name": {
                  "$ref": "#/components/schemas/Mission-Name"
                },
                "description": {
                  "$ref": "#/components/schemas/Mission-Description"
                },
                "imgUrl": {
                  "$ref": "#/components/schemas/Mission-ImgUrl"
                },
                "points": {
                  "type": "integer",
                  "description": "Points earned from the completed mission"
                },
                "credits": {
                  "type": "integer",
                  "description": "Credits earned from the completed mission"
                }
              }
            }
          },
          "startedMissions": {
            "type": "array",
            "description": "Missions that transitioned from `available` to `started` because this action progressed one of their objectives for the first time.",
            "items": {
              "type": "object",
              "description": "Started mission",
              "required": [
                "id",
                "name",
                "description",
                "imgUrl"
              ],
              "properties": {
                "id": {
                  "$ref": "#/components/schemas/Mission-Id"
                },
                "name": {
                  "$ref": "#/components/schemas/Mission-Name"
                },
                "description": {
                  "$ref": "#/components/schemas/Mission-Description"
                },
                "imgUrl": {
                  "$ref": "#/components/schemas/Mission-ImgUrl"
                }
              }
            }
          },
          "levels": {
            "type": "object",
            "description": "Level changes triggered by the action. A player may advance through multiple levels in a single action if their accumulated points/credits/achievements satisfy multiple consecutive level objectives.",
            "required": [
              "completed"
            ],
            "properties": {
              "completed": {
                "type": "array",
                "description": "Levels the player advanced through as a result of this action (may include multiple sequential levels).",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "$ref": "#/components/schemas/Level-Id"
                    },
                    "name": {
                      "$ref": "#/components/schemas/Level-Name"
                    },
                    "description": {
                      "$ref": "#/components/schemas/Level-Description"
                    },
                    "imgUrl": {
                      "$ref": "#/components/schemas/Level-ImgUrl"
                    },
                    "ordinal": {
                      "$ref": "#/components/schemas/Ordinal"
                    },
                    "startedOn": {
                      "type": "string",
                      "description": "Time when the level was started"
                    }
                  }
                }
              },
              "started": {
                "type": "object",
                "description": "The new current level if the player advanced to a new level. Only present when a new level was started as a result of the action.",
                "properties": {
                  "id": {
                    "$ref": "#/components/schemas/Level-Id"
                  },
                  "name": {
                    "$ref": "#/components/schemas/Level-Name"
                  },
                  "description": {
                    "$ref": "#/components/schemas/Level-Description"
                  },
                  "imgUrl": {
                    "$ref": "#/components/schemas/Level-ImgUrl"
                  },
                  "ordinal": {
                    "$ref": "#/components/schemas/Ordinal"
                  },
                  "startedOn": {
                    "type": "string",
                    "description": "Time when the level was started"
                  }
                }
              }
            }
          },
          "completedStreaks": {
            "type": "array",
            "description": "Streaks that reached their count limit (target) as a result of a mission being completed by this action",
            "items": {
              "type": "object",
              "description": "Completed streak",
              "required": [
                "id",
                "name",
                "description",
                "imgUrl",
                "streakCount",
                "points",
                "credits",
                "startedOn",
                "completedOn"
              ],
              "properties": {
                "id": {
                  "$ref": "#/components/schemas/Streak-Id"
                },
                "name": {
                  "$ref": "#/components/schemas/Streak-Name"
                },
                "description": {
                  "$ref": "#/components/schemas/Streak-Description"
                },
                "imgUrl": {
                  "$ref": "#/components/schemas/Streak-ImgUrl"
                },
                "points": {
                  "type": "integer",
                  "description": "Points awarded upon completion of the streak"
                },
                "credits": {
                  "type": "integer",
                  "description": "Credits awarded upon completion of the streak"
                },
                "startedOn": {
                  "type": "string",
                  "description": "Time when the streak was started"
                },
                "streakCount": {
                  "type": "integer",
                  "description": "Number of consecutive streak completions"
                },
                "completedOn": {
                  "type": "string",
                  "description": "Time when the streak was completed"
                },
                "lastStreakOn": {
                  "type": "string",
                  "description": "Time when the streak was hit last time"
                }
              }
            }
          },
          "activeStreaks": {
            "type": "array",
            "description": "Streaks that were incremented (but not yet completed) because a linked mission was completed by this action",
            "items": {
              "type": "object",
              "description": "Active streak",
              "required": [
                "id",
                "name",
                "description",
                "imgUrl",
                "streakCount",
                "points",
                "credits",
                "startedOn"
              ],
              "properties": {
                "id": {
                  "$ref": "#/components/schemas/Streak-Id"
                },
                "name": {
                  "$ref": "#/components/schemas/Streak-Name"
                },
                "description": {
                  "$ref": "#/components/schemas/Streak-Description"
                },
                "imgUrl": {
                  "$ref": "#/components/schemas/Streak-ImgUrl"
                },
                "streakCount": {
                  "type": "integer",
                  "description": "Number of consecutive streak completions"
                },
                "points": {
                  "type": "integer",
                  "description": "Points awarded upon completion of the streak"
                },
                "credits": {
                  "type": "integer",
                  "description": "Credits awarded upon completion of the streak"
                },
                "startedOn": {
                  "type": "string",
                  "description": "Time when the streak was started"
                },
                "lastStreakOn": {
                  "type": "string",
                  "description": "Time when the streak was hit last time"
                }
              }
            }
          },
          "rules": {
            "type": "array",
            "description": "Rules whose conditions matched the player's state and applied point multipliers during this action",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "description": "ID of the triggered rule"
                }
              }
            }
          }
        }
      },
      "CompleteEventResponse": {
        "description": "Response to Complete Event",
        "required": [
          "event",
          "player",
          "progress"
        ],
        "type": "object",
        "properties": {
          "event": {
            "description": "Basic event data",
            "required": [
              "id",
              "name",
              "description",
              "category",
              "imgUrl",
              "isAvailable",
              "reward"
            ],
            "properties": {
              "id": {
                "$ref": "#/components/schemas/Event-Id"
              },
              "name": {
                "$ref": "#/components/schemas/Event-Name"
              },
              "description": {
                "$ref": "#/components/schemas/Event-Description"
              },
              "category": {
                "$ref": "#/components/schemas/Category"
              },
              "isAvailable": {
                "$ref": "#/components/schemas/IsAvailable"
              },
              "imgUrl": {
                "$ref": "#/components/schemas/Event-ImgUrl"
              },
              "reward": {
                "$ref": "#/components/schemas/Reward"
              },
              "limitCount": {
                "$ref": "#/components/schemas/LimitCount"
              }
            }
          },
          "player": {
            "$ref": "#/components/schemas/PlayerConsciseResponse"
          },
          "progress": {
            "$ref": "#/components/schemas/Progress"
          }
        }
      },
      "GetEventResponse": {
        "description": "Response to Get Event",
        "type": "object",
        "required": [
          "id",
          "name",
          "description",
          "tags",
          "category",
          "imgUrl",
          "isAvailable",
          "reward"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/Event-Id"
          },
          "name": {
            "$ref": "#/components/schemas/Event-Name"
          },
          "description": {
            "$ref": "#/components/schemas/Event-Description"
          },
          "tags": {
            "$ref": "#/components/schemas/Tags"
          },
          "category": {
            "$ref": "#/components/schemas/Category"
          },
          "imgUrl": {
            "$ref": "#/components/schemas/Event-ImgUrl"
          },
          "isAvailable": {
            "$ref": "#/components/schemas/IsAvailable"
          },
          "reward": {
            "$ref": "#/components/schemas/Reward"
          },
          "limitCount": {
            "$ref": "#/components/schemas/LimitCount"
          }
        }
      },
      "GetJournalEntriesResponse": {
        "description": "Response to Get Journal Entries",
        "type": "object",
        "required": [
          "account",
          "player",
          "entries"
        ],
        "properties": {
          "account": {
            "type": "string",
            "description": "Account ID"
          },
          "player": {
            "type": "string",
            "description": "Player ID"
          },
          "entries": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "timestamp": {
                  "type": "string",
                  "format": "date-time",
                  "description": "Timestamp of the journal entry"
                },
                "points": {
                  "type": "integer",
                  "description": "Points earned or spent in this entry"
                },
                "credits": {
                  "type": "integer",
                  "description": "Credits earned or spent in this entry"
                },
                "elementType": {
                  "type": "string",
                  "description": "Type of gamification element (e.g. mission, achievement, event, prize)"
                },
                "elementId": {
                  "type": "string",
                  "description": "ID of the gamification element"
                },
                "action": {
                  "type": "string",
                  "enum": [
                    "earn",
                    "spend"
                  ],
                  "description": "Whether points/credits were earned or spent"
                }
              }
            }
          }
        }
      },
      "GetJournalSummaryResponse": {
        "description": "Response to Get Journal Summary",
        "type": "object",
        "required": [
          "account",
          "player",
          "earned",
          "spent"
        ],
        "properties": {
          "account": {
            "type": "string",
            "description": "Account ID"
          },
          "player": {
            "type": "string",
            "description": "Player ID"
          },
          "earned": {
            "type": "object",
            "description": "Aggregated totals for all earn actions in the date range",
            "properties": {
              "points": {
                "type": "integer",
                "description": "Total points earned"
              },
              "credits": {
                "type": "integer",
                "description": "Total credits earned"
              },
              "count": {
                "type": "integer",
                "description": "Number of earn transactions"
              }
            }
          },
          "spent": {
            "type": "object",
            "description": "Aggregated totals for all spend actions in the date range",
            "properties": {
              "points": {
                "type": "integer",
                "description": "Total points spent"
              },
              "credits": {
                "type": "integer",
                "description": "Total credits spent"
              },
              "count": {
                "type": "integer",
                "description": "Number of spend transactions"
              }
            }
          }
        }
      },
      "Leaderboard-Id": {
        "type": "string",
        "description": "ID of the leaderboard"
      },
      "Leaderboard-Name": {
        "type": "string",
        "description": "Name of the leaderboard"
      },
      "Leaderboard-Description": {
        "type": "string",
        "description": "Description of the leaderboard"
      },
      "Leaderboard-ImgUrl": {
        "type": "string",
        "description": "URL of the leaderboard image"
      },
      "Period": {
        "type": "string",
        "description": "Refresh period for the element. Determines how often completion counts and progress reset:\n- `daily` — resets once per day at the player's refresh offset.\n- `weekly` — resets once per week.\n- `monthly` — resets once per month.\n- `all-time` — never resets; progress accumulates indefinitely.\n\nThe exact reset time depends on each player's `refreshOffset` setting (defaults to UTC+00:00).\n",
        "enum": [
          "daily",
          "weekly",
          "monthly",
          "all-time"
        ]
      },
      "Element": {
        "type": "string",
        "description": "Specifies the ranking scope of the leaderboard:\n- `player` — ranks individual players against each other across the entire account.\n- `team` — ranks teams by their aggregated member scores. Use with `rankBy` to choose between total and average scoring.\n- `teammembers` — ranks players within a specific team. Requires the `team` query parameter to specify which team.\n",
        "enum": [
          "team",
          "player",
          "teammembers"
        ]
      },
      "LeaderboardScoresResponse": {
        "description": "Response to leaderboard query based on player scores",
        "type": "object",
        "required": [
          "leaderboard",
          "scores"
        ],
        "properties": {
          "leaderboard": {
            "type": "object",
            "required": [
              "id",
              "name",
              "description",
              "imgUrl",
              "period"
            ],
            "properties": {
              "id": {
                "$ref": "#/components/schemas/Leaderboard-Id"
              },
              "name": {
                "$ref": "#/components/schemas/Leaderboard-Name"
              },
              "description": {
                "$ref": "#/components/schemas/Leaderboard-Description"
              },
              "imgUrl": {
                "$ref": "#/components/schemas/Leaderboard-ImgUrl"
              },
              "period": {
                "$ref": "#/components/schemas/Period"
              },
              "element": {
                "$ref": "#/components/schemas/Element"
              }
            }
          },
          "scores": {
            "type": "object",
            "required": [
              "data"
            ],
            "properties": {
              "totalPlayers": {
                "type": "integer",
                "description": "Total players in the leaderboard (in response if leaderboard is for players or members vs members)"
              },
              "totalTeams": {
                "type": "integer",
                "description": "Total teams in the leaderboard (in response if leaderboard is for teams)"
              },
              "data": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "player",
                    "name",
                    "rank",
                    "scores",
                    "tags"
                  ],
                  "properties": {
                    "player": {
                      "type": "string",
                      "description": "ID of the player"
                    },
                    "name": {
                      "type": "string",
                      "description": "Name of the player"
                    },
                    "rank": {
                      "type": "integer",
                      "description": "Player ranking in the leaderboard"
                    },
                    "scores": {
                      "type": "integer",
                      "description": "Player's score in leaderboard"
                    },
                    "points": {
                      "type": "integer",
                      "description": "Player's score in points"
                    },
                    "team": {
                      "type": "string",
                      "description": "Team ID of the player"
                    },
                    "tags": {
                      "$ref": "#/components/schemas/Tags"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "RankBy": {
        "type": "string",
        "description": "Specifies how team leaderboard scores are calculated:\n- `total` — sum of all team members' scores. Larger teams may have an advantage.\n- `average` — average score per team member. Provides fair comparison regardless of team size.\n",
        "enum": [
          "total",
          "average"
        ]
      },
      "Units": {
        "type": "string",
        "description": "Unit used in leaderboard rankings (points or credits)",
        "enum": [
          "points",
          "credits"
        ]
      },
      "Active": {
        "type": "object",
        "description": "Period during which the element is active",
        "required": [
          "from",
          "to"
        ],
        "properties": {
          "from": {
            "type": "string",
            "description": "Start of activity period"
          },
          "to": {
            "type": "string",
            "description": "End of activity period"
          }
        }
      },
      "GetLeaderboardResponse": {
        "description": "Response to Get Leaderboard",
        "type": "object",
        "required": [
          "id",
          "name",
          "description",
          "imgUrl",
          "tags",
          "category",
          "isAvailable",
          "period",
          "element",
          "rankBy",
          "units",
          "active",
          "requirement"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/Leaderboard-Id"
          },
          "name": {
            "$ref": "#/components/schemas/Leaderboard-Name"
          },
          "description": {
            "$ref": "#/components/schemas/Leaderboard-Description"
          },
          "imgUrl": {
            "$ref": "#/components/schemas/Leaderboard-ImgUrl"
          },
          "tags": {
            "$ref": "#/components/schemas/Tags"
          },
          "category": {
            "$ref": "#/components/schemas/Category"
          },
          "isAvailable": {
            "$ref": "#/components/schemas/IsAvailable"
          },
          "period": {
            "$ref": "#/components/schemas/Period"
          },
          "element": {
            "$ref": "#/components/schemas/Element"
          },
          "rankBy": {
            "$ref": "#/components/schemas/RankBy"
          },
          "units": {
            "$ref": "#/components/schemas/Units"
          },
          "active": {
            "$ref": "#/components/schemas/Active"
          },
          "requirement": {
            "$ref": "#/components/schemas/Requirement"
          }
        }
      },
      "GetLevelResponse": {
        "description": "Response to get Level",
        "type": "object",
        "required": [
          "id",
          "name",
          "description",
          "imgUrl",
          "tags",
          "category",
          "isAvailable",
          "ordinal",
          "reward",
          "objectives"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/Level-Id"
          },
          "name": {
            "$ref": "#/components/schemas/Level-Name"
          },
          "description": {
            "$ref": "#/components/schemas/Level-Description"
          },
          "imgUrl": {
            "$ref": "#/components/schemas/Level-ImgUrl"
          },
          "tags": {
            "$ref": "#/components/schemas/Tags"
          },
          "category": {
            "$ref": "#/components/schemas/Category"
          },
          "isAvailable": {
            "$ref": "#/components/schemas/IsAvailable"
          },
          "ordinal": {
            "$ref": "#/components/schemas/Ordinal"
          },
          "reward": {
            "$ref": "#/components/schemas/Reward"
          },
          "objectives": {
            "type": "object",
            "description": "Objectives required to reach this level",
            "required": [
              "points",
              "credits",
              "achievements"
            ],
            "properties": {
              "points": {
                "type": "integer",
                "description": "Points required to reach this level"
              },
              "credits": {
                "type": "integer",
                "description": "Credits required to reach this level"
              },
              "achievements": {
                "type": "array",
                "description": "List of granted achievement required to reach this level",
                "items": {
                  "type": "string",
                  "description": "Achievement ID"
                }
              }
            }
          }
        }
      },
      "Priority": {
        "type": "integer",
        "description": "Priority of the mission"
      },
      "CountLimit": {
        "type": "integer",
        "description": "Maximum number of times this operation can be performed by the player during the refresh period. Works in conjunction with `limitCount` (which enables/disables the cap) and `period` (which determines when the count resets). For example, a count limit of 3 with a `daily` period means the player can complete the element up to 3 times per day.\n"
      },
      "Objectives": {
        "type": "object",
        "description": "Objectives that drive completion of a mission. **Mutually exclusive** — exactly one of `events`, `missions`, `quizzId`, or `surveyId` may be populated on any given mission:\n- **events** — the mission is driven by event completions (the player must complete each event the required number of times).\n- **missions** — the mission is a **meta-mission**: it requires the player to complete a set of *other* missions a required number of times each. Child missions must be leaves (cannot themselves be meta-missions) and must share the same `period` as the parent. Up to 10 child references per meta-mission.\n- **quizzId** — the mission is completed when the player passes the referenced quiz.\n- **surveyId** — the mission is completed when the player completes the referenced survey.\n",
        "properties": {
          "events": {
            "type": "array",
            "description": "List of event objectives required for completion of the mission. Only populated for event-driven missions.",
            "items": {
              "type": "object",
              "required": [
                "id",
                "count"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "ID of the event"
                },
                "count": {
                  "type": "integer",
                  "description": "Count needed for objective completion"
                },
                "currentCount": {
                  "type": "integer",
                  "description": "Current count of event completions by the player"
                }
              }
            }
          },
          "missions": {
            "type": "array",
            "description": "List of child-mission objectives required for completion of the meta-mission. Only populated for meta-missions. Each entry references a leaf mission and the number of times the player must complete it.\n\nCounting is **eligibility-window**: only completions that occur after the parent meta-mission's `MissionStatus` is created for the player are counted. Pre-existing lifetime completions of the child do not retroactively count.\n",
            "items": {
              "type": "object",
              "required": [
                "id",
                "count"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "ID of the child mission. Must be a leaf mission (not itself a meta-mission) in the same account and sharing the same `period` as the parent."
                },
                "count": {
                  "type": "integer",
                  "minimum": 1,
                  "description": "Number of completions of the child mission required by the parent"
                },
                "currentCount": {
                  "type": "integer",
                  "description": "Current count of child-mission completions by the player toward this parent"
                }
              }
            }
          },
          "quizzId": {
            "type": "string",
            "description": "ID of the quiz that drives this mission. Only populated for quiz-driven missions. A quiz can drive at most one mission per account."
          },
          "surveyId": {
            "type": "string",
            "description": "ID of the survey that drives this mission. Only populated for survey-driven missions. A survey can drive at most one mission per account."
          }
        }
      },
      "Location": {
        "type": "object",
        "description": "Location awareness configuration for gamification elements",
        "properties": {
          "isLocationAware": {
            "type": "boolean",
            "description": "If true, location checks are enforced for this element",
            "default": false
          },
          "lat": {
            "type": "number",
            "format": "double",
            "description": "Latitude of the hot-spot (WGS84)",
            "minimum": -90,
            "maximum": 90
          },
          "lon": {
            "type": "number",
            "format": "double",
            "description": "Longitude of the hot-spot (WGS84)",
            "minimum": -180,
            "maximum": 180
          },
          "actionableDistance": {
            "type": "number",
            "description": "Radius in metres defining the actionable zone. Player must be within this zone to complete or claim the element",
            "minimum": 0
          },
          "viewableDistance": {
            "type": "number",
            "description": "Radius in metres defining the viewable zone. Player must be within this zone to see the element. Must be greater than or equal to actionableDistance",
            "minimum": 0
          }
        }
      },
      "GetMissionResponse": {
        "description": "Response to Get Mission",
        "type": "object",
        "required": [
          "id",
          "name",
          "description",
          "imgUrl",
          "tags",
          "category",
          "isAvailable",
          "priority",
          "period",
          "limitCount",
          "countLimit",
          "active",
          "objectives",
          "requirement",
          "reward"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/Mission-Id"
          },
          "name": {
            "$ref": "#/components/schemas/Mission-Name"
          },
          "description": {
            "$ref": "#/components/schemas/Mission-Description"
          },
          "imgUrl": {
            "$ref": "#/components/schemas/Mission-ImgUrl"
          },
          "tags": {
            "$ref": "#/components/schemas/Tags"
          },
          "category": {
            "$ref": "#/components/schemas/Category"
          },
          "isAvailable": {
            "$ref": "#/components/schemas/IsAvailable"
          },
          "priority": {
            "$ref": "#/components/schemas/Priority"
          },
          "period": {
            "$ref": "#/components/schemas/Period"
          },
          "limitCount": {
            "$ref": "#/components/schemas/LimitCount"
          },
          "countLimit": {
            "$ref": "#/components/schemas/CountLimit"
          },
          "active": {
            "$ref": "#/components/schemas/Active"
          },
          "objectives": {
            "$ref": "#/components/schemas/Objectives"
          },
          "requirement": {
            "$ref": "#/components/schemas/Requirement"
          },
          "timeToComplete": {
            "type": "integer",
            "description": "Time in seconds to complete the mission. 0 means no time limit."
          },
          "timeToRestart": {
            "type": "integer",
            "description": "Time in seconds before the mission can be restarted. 0 means no delay."
          },
          "limitTimeToRestart": {
            "type": "boolean",
            "description": "If true, the timeToRestart field is enforced as a cooldown period in hours after mission completion."
          },
          "reward": {
            "$ref": "#/components/schemas/Reward"
          },
          "location": {
            "$ref": "#/components/schemas/Location"
          }
        }
      },
      "MysteryBox-Id": {
        "type": "string",
        "description": "ID of the mystery box"
      },
      "MysteryBox-Name": {
        "type": "string",
        "description": "Name of the mystery box"
      },
      "MysteryBox-Description": {
        "type": "string",
        "description": "Description of the mystery box"
      },
      "MysteryBox-ImgUrl": {
        "type": "string",
        "description": "URL of the mystery box image"
      },
      "Stock": {
        "type": "object",
        "description": "Stock tracking for redeemable elements (prizes, mystery boxes). When all units are redeemed (`available` reaches 0), the element shows as out of stock and further redemptions return `OUT_OF_STOCK`.\n",
        "required": [
          "redeemed",
          "available",
          "count"
        ],
        "properties": {
          "redeemed": {
            "type": "integer",
            "description": "Number of units already redeemed by players"
          },
          "available": {
            "type": "integer",
            "description": "Number of units still available for redemption (`count - redeemed`)"
          },
          "count": {
            "type": "integer",
            "description": "Total number of units originally allocated to stock"
          }
        }
      },
      "MysteryBox-Priority": {
        "type": "integer",
        "description": "Priority of the mystery box"
      },
      "GetMysteryBoxResponse": {
        "description": "Response to Get Mystery Box",
        "type": "object",
        "required": [
          "id",
          "name",
          "description",
          "imgUrl",
          "tags",
          "category",
          "isAvailable",
          "credits",
          "stock",
          "limitCount",
          "countLimit",
          "active",
          "period",
          "requirement"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/MysteryBox-Id"
          },
          "name": {
            "$ref": "#/components/schemas/MysteryBox-Name"
          },
          "description": {
            "$ref": "#/components/schemas/MysteryBox-Description"
          },
          "imgUrl": {
            "$ref": "#/components/schemas/MysteryBox-ImgUrl"
          },
          "tags": {
            "$ref": "#/components/schemas/Tags"
          },
          "category": {
            "$ref": "#/components/schemas/Category"
          },
          "isAvailable": {
            "$ref": "#/components/schemas/IsAvailable"
          },
          "credits": {
            "type": "integer",
            "description": "The amount of credits required to redeem the mystery box"
          },
          "stock": {
            "$ref": "#/components/schemas/Stock"
          },
          "limitCount": {
            "$ref": "#/components/schemas/LimitCount"
          },
          "countLimit": {
            "$ref": "#/components/schemas/CountLimit"
          },
          "active": {
            "$ref": "#/components/schemas/Active"
          },
          "period": {
            "$ref": "#/components/schemas/Period"
          },
          "requirement": {
            "$ref": "#/components/schemas/Requirement"
          },
          "priority": {
            "$ref": "#/components/schemas/MysteryBox-Priority"
          },
          "location": {
            "$ref": "#/components/schemas/Location"
          }
        }
      },
      "Player-PlayerId": {
        "type": "string",
        "description": "ID of the player for whom to perform the operation"
      },
      "RedeemMysteryBoxRequest": {
        "type": "object",
        "description": "Mystery box redeem request",
        "required": [
          "player",
          "account"
        ],
        "properties": {
          "player": {
            "$ref": "#/components/schemas/Player-PlayerId"
          },
          "account": {
            "$ref": "#/components/schemas/AccountId"
          },
          "language": {
            "$ref": "#/components/schemas/Language"
          },
          "lat": {
            "$ref": "#/components/schemas/Latitude"
          },
          "lon": {
            "$ref": "#/components/schemas/Longitude"
          }
        }
      },
      "RedeemMysteryBoxResponse": {
        "description": "Response to Redeem Mystery Box",
        "type": "object",
        "required": [
          "code",
          "message",
          "player",
          "mysterybox",
          "prize"
        ],
        "properties": {
          "code": {
            "type": "integer",
            "description": "Status code indicating the success of the operation. Possible values:\n- 1 - Mystery box redeemed\n- 2 - Player does not have enough credits to redeem mystery box\n- 3 - Mystery box is out of stock\n- 4 - Mystery box prizes out of stock\n- 5 - Player has exceeded available requests to redeem the mystery box\n- 6 - Player does not meet mystery box requirements\n- 7 - Player is not within the actionable zone\n"
          },
          "message": {
            "type": "string",
            "description": "Clear text status description"
          },
          "player": {
            "$ref": "#/components/schemas/PlayerConsciseResponse"
          },
          "mysterybox": {
            "type": "object",
            "required": [
              "id",
              "name",
              "description",
              "imgUrl",
              "stock",
              "credits"
            ],
            "properties": {
              "id": {
                "$ref": "#/components/schemas/MysteryBox-Id"
              },
              "name": {
                "$ref": "#/components/schemas/MysteryBox-Name"
              },
              "description": {
                "$ref": "#/components/schemas/MysteryBox-Description"
              },
              "imgUrl": {
                "$ref": "#/components/schemas/MysteryBox-ImgUrl"
              },
              "stock": {
                "$ref": "#/components/schemas/Stock"
              },
              "credits": {
                "type": "integer",
                "description": "Credits required to redeem the mystery box"
              },
              "category": {
                "$ref": "#/components/schemas/Category"
              },
              "isAvailable": {
                "$ref": "#/components/schemas/IsAvailable"
              }
            }
          },
          "prize": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "Prize ID"
              },
              "name": {
                "type": "string",
                "description": "Prize name"
              },
              "description": {
                "type": "string",
                "description": "Prize description"
              },
              "imgUrl": {
                "type": "string",
                "description": "Prize image URL"
              },
              "stock": {
                "$ref": "#/components/schemas/Stock"
              },
              "category": {
                "$ref": "#/components/schemas/Category"
              },
              "tags": {
                "$ref": "#/components/schemas/Tags"
              },
              "isAvailable": {
                "$ref": "#/components/schemas/IsAvailable"
              },
              "credits": {
                "type": "integer",
                "description": "Credits required to redeem the prize"
              },
              "limitCount": {
                "$ref": "#/components/schemas/LimitCount"
              },
              "countLimit": {
                "$ref": "#/components/schemas/CountLimit"
              },
              "limitStock": {
                "type": "boolean",
                "description": "Whether the prize stock is limited"
              },
              "stockCount": {
                "type": "integer",
                "description": "Total stock count for the prize"
              },
              "active": {
                "$ref": "#/components/schemas/Active"
              },
              "period": {
                "$ref": "#/components/schemas/Period"
              },
              "requirement": {
                "$ref": "#/components/schemas/Requirement"
              },
              "account": {
                "$ref": "#/components/schemas/AccountId"
              }
            }
          }
        }
      },
      "Player-ImgUrl": {
        "type": "string",
        "description": "URL of the player image"
      },
      "PointsBalance": {
        "type": "integer",
        "description": "Player's point balance"
      },
      "CreditsBalance": {
        "type": "integer",
        "description": "Player's credit balance"
      },
      "Team": {
        "type": "string",
        "description": "Team for the player (team ID). By default, no team is assigned to the player"
      },
      "Level": {
        "type": "object",
        "description": "Current level of the player",
        "properties": {
          "id": {
            "type": "string",
            "description": "Level ID"
          },
          "name": {
            "type": "string",
            "description": "Name of the level"
          },
          "description": {
            "type": "string",
            "description": "Description of the level"
          },
          "imgUrl": {
            "type": "string",
            "description": "URL of the level image"
          },
          "ordinal": {
            "type": "integer",
            "description": "Ordinal position of the level"
          }
        }
      },
      "Created": {
        "type": "string",
        "description": "Time when player was created"
      },
      "RefreshOffset": {
        "type": "string",
        "description": "Specifies the refresh offset when a refresh will be done. Offset is provided in format\nUTC+02:00. Valid range is UTC-12:00 to UTC+14:00.\n"
      },
      "PlayerResponse": {
        "description": "Response to Get Player",
        "type": "object",
        "required": [
          "player",
          "name",
          "imgUrl",
          "tags",
          "category",
          "isAvailable",
          "points",
          "credits",
          "team",
          "level",
          "createdOn",
          "refreshOffset"
        ],
        "properties": {
          "player": {
            "$ref": "#/components/schemas/Player-PlayerId"
          },
          "name": {
            "$ref": "#/components/schemas/Player-Name"
          },
          "imgUrl": {
            "$ref": "#/components/schemas/Player-ImgUrl"
          },
          "tags": {
            "$ref": "#/components/schemas/Tags"
          },
          "category": {
            "$ref": "#/components/schemas/Category"
          },
          "isAvailable": {
            "$ref": "#/components/schemas/IsAvailable"
          },
          "points": {
            "$ref": "#/components/schemas/PointsBalance"
          },
          "credits": {
            "$ref": "#/components/schemas/CreditsBalance"
          },
          "team": {
            "$ref": "#/components/schemas/Team"
          },
          "level": {
            "$ref": "#/components/schemas/Level"
          },
          "createdOn": {
            "$ref": "#/components/schemas/Created"
          },
          "refreshOffset": {
            "$ref": "#/components/schemas/RefreshOffset"
          }
        }
      },
      "DeletePlayerRequest": {
        "type": "object",
        "properties": {
          "hardDelete": {
            "type": "boolean",
            "description": "If set, all player records will also be deleted. Default is false."
          }
        }
      },
      "Player-Tags": {
        "type": "array",
        "description": "Tags to assign to the player as a comma-separated list"
      },
      "Player-Category": {
        "type": "string",
        "description": "Category for the player. By default, no category is assigned to the player"
      },
      "Mode": {
        "type": "string",
        "description": "Mode to use for the trigger: \n- `set` - player or team count is set to the specified value, setting rewards (points, credits, etc) accordingly\n- `increment` - the player or team count is incremented by the amount specified in the request\n",
        "default": "increment",
        "enum": [
          "set",
          "increment"
        ]
      },
      "UpdatePlayerRequest": {
        "type": "object",
        "required": [
          "player",
          "account"
        ],
        "properties": {
          "account": {
            "$ref": "#/components/schemas/AccountId"
          },
          "player": {
            "$ref": "#/components/schemas/Player-PlayerId"
          },
          "name": {
            "$ref": "#/components/schemas/Player-Name"
          },
          "tags": {
            "$ref": "#/components/schemas/Player-Tags"
          },
          "category": {
            "$ref": "#/components/schemas/Player-Category"
          },
          "imgUrl": {
            "$ref": "#/components/schemas/Player-ImgUrl"
          },
          "mode": {
            "$ref": "#/components/schemas/Mode"
          },
          "points": {
            "$ref": "#/components/schemas/Points"
          },
          "credits": {
            "$ref": "#/components/schemas/Credits"
          },
          "refreshOffset": {
            "$ref": "#/components/schemas/RefreshOffset"
          }
        }
      },
      "CompletedAchievementResponse": {
        "description": "A completed achievement",
        "type": "object",
        "required": [
          "id",
          "name",
          "description",
          "imgUrl",
          "category",
          "tags",
          "reward",
          "actions"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/Id"
          },
          "name": {
            "$ref": "#/components/schemas/Name"
          },
          "description": {
            "$ref": "#/components/schemas/Description"
          },
          "imgUrl": {
            "$ref": "#/components/schemas/ImgUrl"
          },
          "category": {
            "$ref": "#/components/schemas/Category"
          },
          "tags": {
            "$ref": "#/components/schemas/Tags"
          },
          "reward": {
            "$ref": "#/components/schemas/Reward"
          },
          "actions": {
            "type": "object",
            "required": [
              "completedOn",
              "firstCompletedOn",
              "count"
            ],
            "properties": {
              "startedOn": {
                "type": "string",
                "description": "Time when the achievement was last started"
              },
              "completedOn": {
                "type": "string",
                "description": "Time when the achievement was last completed"
              },
              "firstCompletedOn": {
                "type": "string",
                "description": "Time when the achievement was completed for the first time"
              },
              "count": {
                "type": "integer",
                "description": "Number of times the achievement has been completed"
              }
            }
          }
        }
      },
      "Actions": {
        "type": "object",
        "required": [
          "startedOn"
        ],
        "properties": {
          "startedOn": {
            "type": "string",
            "description": "Time when the element was started"
          },
          "completedOn": {
            "type": "string",
            "description": "Time when the element was completed"
          }
        }
      },
      "PlayerAchievementsResponse": {
        "description": "Response to Get Player Achievements",
        "type": "object",
        "required": [
          "player",
          "achievements"
        ],
        "properties": {
          "player": {
            "$ref": "#/components/schemas/PlayerConsciseResponse"
          },
          "achievements": {
            "type": "object",
            "properties": {
              "completed": {
                "type": "array",
                "description": "List of completed achievements",
                "items": {
                  "$ref": "#/components/schemas/CompletedAchievementResponse"
                }
              },
              "started": {
                "type": "array",
                "description": "List of started (in-progress) achievements",
                "items": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/GetAchievementResponse"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "status": {
                          "type": "string",
                          "description": "Achievement status",
                          "enum": [
                            "started"
                          ]
                        },
                        "count": {
                          "type": "integer",
                          "description": "Current step count"
                        },
                        "actions": {
                          "$ref": "#/components/schemas/Actions"
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "PlayerEventsResponse": {
        "description": "Response to Get Player Events",
        "type": "object",
        "required": [
          "player",
          "events"
        ],
        "properties": {
          "player": {
            "$ref": "#/components/schemas/PlayerConsciseResponse"
          },
          "events": {
            "type": "array",
            "description": "List of completed events",
            "items": {
              "type": "object",
              "description": "Data of completed events",
              "required": [
                "id",
                "name",
                "description",
                "isAvailable",
                "reward",
                "actions"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "ID of the completed event"
                },
                "name": {
                  "$ref": "#/components/schemas/Event-Name"
                },
                "description": {
                  "$ref": "#/components/schemas/Event-Description"
                },
                "isAvailable": {
                  "$ref": "#/components/schemas/IsAvailable"
                },
                "reward": {
                  "$ref": "#/components/schemas/Reward"
                },
                "actions": {
                  "type": "object",
                  "required": [
                    "completedOn",
                    "firstCompletedOn",
                    "count"
                  ],
                  "properties": {
                    "completedOn": {
                      "type": "string",
                      "description": "Last time when event was completed"
                    },
                    "firstCompletedOn": {
                      "type": "string",
                      "description": "Time when event was completed first time"
                    },
                    "count": {
                      "type": "integer",
                      "description": "Number of times the event has been completed"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "PlayerLevelsResponse": {
        "description": "Response to Get Player Levels",
        "type": "object",
        "required": [
          "player",
          "levels"
        ],
        "properties": {
          "player": {
            "$ref": "#/components/schemas/PlayerConsciseResponse"
          },
          "levels": {
            "type": "object",
            "required": [
              "completed",
              "started"
            ],
            "properties": {
              "completed": {
                "type": "array",
                "description": "List of completed levels",
                "items": {
                  "type": "object",
                  "required": [
                    "id",
                    "name",
                    "description",
                    "imgUrl",
                    "ordinal",
                    "reward",
                    "actions"
                  ],
                  "properties": {
                    "id": {
                      "type": "string",
                      "description": "ID of the completed level"
                    },
                    "name": {
                      "$ref": "#/components/schemas/Level-Name"
                    },
                    "description": {
                      "$ref": "#/components/schemas/Level-Description"
                    },
                    "imgUrl": {
                      "$ref": "#/components/schemas/Level-ImgUrl"
                    },
                    "ordinal": {
                      "$ref": "#/components/schemas/Ordinal"
                    },
                    "reward": {
                      "$ref": "#/components/schemas/Reward"
                    },
                    "actions": {
                      "$ref": "#/components/schemas/Actions"
                    }
                  }
                }
              },
              "started": {
                "type": "object",
                "description": "Details about started level",
                "required": [
                  "id",
                  "name",
                  "description",
                  "imgUrl",
                  "ordinal",
                  "reward",
                  "actions"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "ID of the started level"
                  },
                  "name": {
                    "$ref": "#/components/schemas/Level-Name"
                  },
                  "description": {
                    "$ref": "#/components/schemas/Level-Description"
                  },
                  "imgUrl": {
                    "$ref": "#/components/schemas/Level-ImgUrl"
                  },
                  "ordinal": {
                    "$ref": "#/components/schemas/Ordinal"
                  },
                  "reward": {
                    "$ref": "#/components/schemas/Reward"
                  },
                  "started": {
                    "type": "boolean",
                    "description": "Indicates if the level has been started"
                  },
                  "completed": {
                    "type": "boolean",
                    "description": "Indicates if the level has been completed"
                  },
                  "actions": {
                    "type": "object",
                    "required": [
                      "startedOn"
                    ],
                    "properties": {
                      "startedOn": {
                        "type": "string",
                        "description": "Time when the level was started"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "PlayerMissionSubResponse": {
        "description": "Player missions response part",
        "type": "object",
        "required": [
          "id",
          "name",
          "description",
          "period",
          "priority",
          "isAvailable",
          "category",
          "tags",
          "imgUrl",
          "countLimit",
          "objectives",
          "reward",
          "actions",
          "status"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/Mission-Id"
          },
          "name": {
            "$ref": "#/components/schemas/Mission-Name"
          },
          "description": {
            "$ref": "#/components/schemas/Mission-Description"
          },
          "priority": {
            "$ref": "#/components/schemas/Priority"
          },
          "isAvailable": {
            "$ref": "#/components/schemas/IsAvailable"
          },
          "category": {
            "$ref": "#/components/schemas/Category"
          },
          "tags": {
            "$ref": "#/components/schemas/Tags"
          },
          "imgUrl": {
            "$ref": "#/components/schemas/Mission-ImgUrl"
          },
          "actions": {
            "$ref": "#/components/schemas/Actions"
          },
          "period": {
            "$ref": "#/components/schemas/Period"
          },
          "countLimit": {
            "$ref": "#/components/schemas/CountLimit"
          },
          "objectives": {
            "$ref": "#/components/schemas/Objectives"
          },
          "reward": {
            "$ref": "#/components/schemas/Reward"
          },
          "status": {
            "type": "string",
            "description": "Mission status",
            "enum": [
              "completed",
              "started"
            ]
          }
        }
      },
      "PlayerMissionsResponse": {
        "description": "Response to Get Player Missions",
        "type": "object",
        "required": [
          "player",
          "missions"
        ],
        "properties": {
          "player": {
            "$ref": "#/components/schemas/PlayerConsciseResponse"
          },
          "missions": {
            "type": "object",
            "required": [
              "started",
              "completed"
            ],
            "properties": {
              "started": {
                "type": "array",
                "description": "List of started missions",
                "items": {
                  "$ref": "#/components/schemas/PlayerMissionSubResponse"
                }
              },
              "completed": {
                "type": "array",
                "description": "List of completed missions",
                "items": {
                  "$ref": "#/components/schemas/PlayerMissionSubResponse"
                }
              }
            }
          }
        }
      },
      "PlayerMissionProgressResponse": {
        "description": "Response to Get Player Mission Progress",
        "type": "object",
        "required": [
          "player",
          "progress"
        ],
        "properties": {
          "player": {
            "$ref": "#/components/schemas/PlayerConsciseResponse"
          },
          "progress": {
            "type": "object",
            "required": [
              "totalAverage",
              "nextRefresh",
              "period",
              "state",
              "actions",
              "events"
            ],
            "properties": {
              "totalAverage": {
                "type": "number",
                "description": "Total avarage of event completions driving the mission. 1 = all events completed."
              },
              "nextRefresh": {
                "type": "string",
                "description": "UTC time in ISO 8601 format when next refresh will happen for the mission. In case the state is\n'available', this is the time how long the mission is active to.\n"
              },
              "period": {
                "$ref": "#/components/schemas/Period"
              },
              "state": {
                "type": "string",
                "description": "State of the mission. It can be started, completed or available, ie that the mission can be started.",
                "enum": [
                  "started",
                  "completed",
                  "available"
                ]
              },
              "actions": {
                "type": "object",
                "properties": {
                  "startedOn": {
                    "type": "string",
                    "description": "Time when the mission was started"
                  },
                  "completedOn": {
                    "type": "string",
                    "description": "Time when the mission was completed"
                  }
                }
              },
              "events": {
                "type": "array",
                "description": "List of events driving the mission",
                "items": {
                  "type": "object",
                  "required": [
                    "id",
                    "count",
                    "currentCount",
                    "average"
                  ],
                  "properties": {
                    "id": {
                      "type": "string",
                      "description": "ID of the completed event"
                    },
                    "count": {
                      "type": "number",
                      "description": "Number of events needed to complete the mission"
                    },
                    "currentCount": {
                      "type": "number",
                      "description": "Number of events completed"
                    },
                    "average": {
                      "type": "number",
                      "description": "Completion rate of the event"
                    },
                    "name": {
                      "$ref": "#/components/schemas/Event-Name"
                    },
                    "description": {
                      "$ref": "#/components/schemas/Event-Description"
                    },
                    "imgUrl": {
                      "type": "string",
                      "description": "URL of the event image"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "Prize-Id": {
        "type": "string",
        "description": "ID of the prize"
      },
      "Prize-Name": {
        "type": "string",
        "description": "Name of the prize"
      },
      "Prize-Description": {
        "type": "string",
        "description": "Description of the prize"
      },
      "Prize-Credits": {
        "type": "integer",
        "description": "The amount of credits required to redeem the prize"
      },
      "Prize-ImgUrl": {
        "type": "string",
        "description": "URL of the prize image"
      },
      "Prize-CountLimit": {
        "type": "integer",
        "description": "The number of times a player can redeem the prize within the refresh period"
      },
      "PlayerPrizesSubResponse": {
        "description": "Player prize",
        "type": "object",
        "required": [
          "id",
          "name",
          "description",
          "credits",
          "imgUrl",
          "countLimit",
          "actions"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/Prize-Id"
          },
          "name": {
            "$ref": "#/components/schemas/Prize-Name"
          },
          "description": {
            "$ref": "#/components/schemas/Prize-Description"
          },
          "credits": {
            "$ref": "#/components/schemas/Prize-Credits"
          },
          "imgUrl": {
            "$ref": "#/components/schemas/Prize-ImgUrl"
          },
          "countLimit": {
            "$ref": "#/components/schemas/Prize-CountLimit"
          },
          "actions": {
            "type": "object",
            "required": [
              "count",
              "firstCompletedOn",
              "completedOn"
            ],
            "properties": {
              "count": {
                "type": "integer",
                "description": "Amount of times prizes has been redeemed by the player."
              },
              "firstCompletedOn": {
                "type": "string",
                "description": "Date when prize was first redeemed."
              },
              "completedOn": {
                "type": "string",
                "description": "Date for last prize rededem."
              }
            }
          }
        }
      },
      "PlayerPrizesResponse": {
        "description": "Response to Get Player Prizes",
        "type": "object",
        "required": [
          "player",
          "prizes"
        ],
        "properties": {
          "player": {
            "$ref": "#/components/schemas/PlayerConsciseResponse"
          },
          "prizes": {
            "type": "array",
            "description": "List of prizes",
            "items": {
              "$ref": "#/components/schemas/PlayerPrizesSubResponse"
            }
          }
        }
      },
      "PlayerRankingsResponse": {
        "description": "Response to Get Player Rankings",
        "type": "object",
        "required": [
          "player",
          "ranking"
        ],
        "properties": {
          "player": {
            "$ref": "#/components/schemas/PlayerConsciseResponse"
          },
          "ranking": {
            "type": "array",
            "description": "List of player rankings",
            "items": {
              "type": "object",
              "required": [
                "rank",
                "scores",
                "count",
                "totalPlayers",
                "leaderboard"
              ],
              "properties": {
                "rank": {
                  "type": "integer",
                  "description": "Player's rank in the leaderboard"
                },
                "scores": {
                  "type": "integer",
                  "description": "Player's score in the leaderboard"
                },
                "count": {
                  "type": "integer",
                  "description": "Amount of players who scored for the leaderboard"
                },
                "totalPlayers": {
                  "type": "integer",
                  "description": "Total players in the leaderboard"
                },
                "leaderboard": {
                  "type": "object",
                  "required": [
                    "id",
                    "name",
                    "description",
                    "period",
                    "imgUrl"
                  ],
                  "properties": {
                    "id": {
                      "$ref": "#/components/schemas/Leaderboard-Id"
                    },
                    "name": {
                      "$ref": "#/components/schemas/Leaderboard-Name"
                    },
                    "description": {
                      "$ref": "#/components/schemas/Leaderboard-Description"
                    },
                    "period": {
                      "$ref": "#/components/schemas/Period"
                    },
                    "imgUrl": {
                      "$ref": "#/components/schemas/Leaderboard-ImgUrl"
                    },
                    "element": {
                      "$ref": "#/components/schemas/Element"
                    },
                    "rankBy": {
                      "$ref": "#/components/schemas/RankBy"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "Streak-Priority": {
        "type": "integer",
        "description": "Priority of the streak"
      },
      "StreakActions": {
        "type": "object",
        "required": [
          "startedOn",
          "count"
        ],
        "properties": {
          "startedOn": {
            "type": "string",
            "description": "Time when the streak was started"
          },
          "count": {
            "type": "number",
            "description": "Number of times the streak has been hit"
          },
          "completedOn": {
            "type": "string",
            "description": "Time when the streak was completed"
          },
          "firstCompletedOn": {
            "type": "string",
            "description": "Time when the streak was completed first time"
          },
          "lastStreakOn": {
            "type": "string",
            "description": "Time when active streak was hit last time"
          }
        }
      },
      "StreakObjectives": {
        "type": "array",
        "description": "Mission ID(s) that drive the streak. When the player completes the linked mission within the current period, the streak count increments. If the player misses a period without completing the mission, the streak resets to zero. **Currently limited to exactly one mission ID.**\n",
        "items": {
          "type": "string",
          "description": "Mission ID"
        }
      },
      "PlayerStreakSubResponse": {
        "description": "Player streaks response part",
        "type": "object",
        "required": [
          "account",
          "id",
          "name",
          "description",
          "period",
          "priority",
          "category",
          "tags",
          "imgUrl",
          "limitCount",
          "countLimit",
          "objectives",
          "reward",
          "actions"
        ],
        "properties": {
          "account": {
            "type": "string",
            "description": "Account ID"
          },
          "id": {
            "$ref": "#/components/schemas/Streak-Id"
          },
          "name": {
            "$ref": "#/components/schemas/Streak-Name"
          },
          "description": {
            "$ref": "#/components/schemas/Streak-Description"
          },
          "priority": {
            "$ref": "#/components/schemas/Streak-Priority"
          },
          "isAvailable": {
            "$ref": "#/components/schemas/IsAvailable"
          },
          "category": {
            "$ref": "#/components/schemas/Category"
          },
          "tags": {
            "$ref": "#/components/schemas/Tags"
          },
          "imgUrl": {
            "$ref": "#/components/schemas/Streak-ImgUrl"
          },
          "actions": {
            "$ref": "#/components/schemas/StreakActions"
          },
          "period": {
            "$ref": "#/components/schemas/Period"
          },
          "countLimit": {
            "$ref": "#/components/schemas/CountLimit"
          },
          "limitCount": {
            "$ref": "#/components/schemas/LimitCount"
          },
          "objectives": {
            "$ref": "#/components/schemas/StreakObjectives"
          },
          "reward": {
            "$ref": "#/components/schemas/Reward"
          }
        }
      },
      "PlayerStreaksResponse": {
        "description": "Response to Get Player Streaks",
        "type": "object",
        "required": [
          "player",
          "streaks"
        ],
        "properties": {
          "player": {
            "$ref": "#/components/schemas/PlayerConsciseResponse"
          },
          "streaks": {
            "type": "object",
            "required": [
              "started",
              "completed"
            ],
            "properties": {
              "started": {
                "type": "array",
                "description": "List of active (started) streaks",
                "items": {
                  "$ref": "#/components/schemas/PlayerStreakSubResponse"
                }
              },
              "completed": {
                "type": "array",
                "description": "List of completed streaks",
                "items": {
                  "$ref": "#/components/schemas/PlayerStreakSubResponse"
                }
              }
            }
          }
        }
      },
      "LevelInput": {
        "type": "string",
        "description": "Level for the player (level ID). By default, player is assigned to base level."
      },
      "CreatePlayerRequest": {
        "type": "object",
        "required": [
          "player",
          "account",
          "name"
        ],
        "properties": {
          "player": {
            "$ref": "#/components/schemas/Player-PlayerId"
          },
          "account": {
            "$ref": "#/components/schemas/AccountId"
          },
          "name": {
            "$ref": "#/components/schemas/Player-Name"
          },
          "imgUrl": {
            "$ref": "#/components/schemas/Player-ImgUrl"
          },
          "category": {
            "$ref": "#/components/schemas/Player-Category"
          },
          "tags": {
            "$ref": "#/components/schemas/Player-Tags"
          },
          "team": {
            "$ref": "#/components/schemas/Team"
          },
          "level": {
            "$ref": "#/components/schemas/LevelInput"
          },
          "points": {
            "$ref": "#/components/schemas/Points"
          },
          "credits": {
            "$ref": "#/components/schemas/Credits"
          },
          "refreshOffset": {
            "$ref": "#/components/schemas/RefreshOffset"
          }
        }
      },
      "CreatePlayerResponse": {
        "type": "object",
        "description": "Response to Create Player request",
        "required": [
          "player",
          "name",
          "tags",
          "category",
          "imgUrl",
          "isAvailable",
          "points",
          "credits",
          "team",
          "level",
          "createdOn"
        ],
        "properties": {
          "tags": {
            "$ref": "#/components/schemas/Player-Tags"
          },
          "category": {
            "$ref": "#/components/schemas/Player-Category"
          },
          "name": {
            "$ref": "#/components/schemas/Player-Name"
          },
          "points": {
            "$ref": "#/components/schemas/Points"
          },
          "credits": {
            "$ref": "#/components/schemas/Credits"
          },
          "team": {
            "$ref": "#/components/schemas/Team"
          },
          "level": {
            "$ref": "#/components/schemas/Level"
          },
          "imgUrl": {
            "$ref": "#/components/schemas/Player-ImgUrl"
          },
          "isAvailable": {
            "$ref": "#/components/schemas/IsAvailable"
          },
          "player": {
            "$ref": "#/components/schemas/Player-PlayerId"
          },
          "account": {
            "$ref": "#/components/schemas/AccountId"
          },
          "createdOn": {
            "type": "string",
            "description": "Date when the player was created"
          },
          "refreshOffset": {
            "$ref": "#/components/schemas/RefreshOffset"
          }
        }
      },
      "GetPrizeResponse": {
        "description": "Response to Get Prize",
        "type": "object",
        "required": [
          "id",
          "name",
          "description",
          "credits",
          "tags",
          "category",
          "imgUrl",
          "isAvailable",
          "stock",
          "countLimit",
          "limitCount",
          "active",
          "period",
          "requirement"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/Prize-Id"
          },
          "name": {
            "$ref": "#/components/schemas/Prize-Name"
          },
          "description": {
            "$ref": "#/components/schemas/Prize-Description"
          },
          "credits": {
            "$ref": "#/components/schemas/Prize-Credits"
          },
          "tags": {
            "$ref": "#/components/schemas/Tags"
          },
          "category": {
            "$ref": "#/components/schemas/Category"
          },
          "imgUrl": {
            "$ref": "#/components/schemas/Prize-ImgUrl"
          },
          "isAvailable": {
            "$ref": "#/components/schemas/IsAvailable"
          },
          "stock": {
            "$ref": "#/components/schemas/Stock"
          },
          "countLimit": {
            "$ref": "#/components/schemas/Prize-CountLimit"
          },
          "limitCount": {
            "$ref": "#/components/schemas/LimitCount"
          },
          "active": {
            "$ref": "#/components/schemas/Active"
          },
          "period": {
            "$ref": "#/components/schemas/Period"
          },
          "requirement": {
            "$ref": "#/components/schemas/Requirement"
          },
          "location": {
            "$ref": "#/components/schemas/Location"
          },
          "missionPrize": {
            "type": "boolean",
            "description": "If true, this prize can only be awarded via mission completion and cannot be claimed directly, via mystery boxes, or raffle draws."
          },
          "useVouchers": {
            "type": "boolean",
            "description": "If true, a valid voucher code must be provided to claim this prize. Requests without a voucher code will be rejected."
          }
        }
      },
      "ClaimPrizeRequest": {
        "type": "object",
        "required": [
          "player",
          "account"
        ],
        "description": "Prize claim request",
        "properties": {
          "player": {
            "$ref": "#/components/schemas/Player-PlayerId"
          },
          "account": {
            "$ref": "#/components/schemas/AccountId"
          },
          "language": {
            "$ref": "#/components/schemas/Language"
          },
          "lat": {
            "$ref": "#/components/schemas/Latitude"
          },
          "lon": {
            "$ref": "#/components/schemas/Longitude"
          },
          "voucherCode": {
            "type": "string",
            "description": "Optional voucher code. When provided, the credit cost is waived — no credits are deducted from the player.\nAll other checks (stock limits, claim count limits, location) are still enforced.\nSingle-use codes are marked as used after a successful claim. Multi-use codes remain active.\nRequired when the prize has `useVouchers` enabled — omitting the code will return a VOUCHER_REQUIRED error.\n"
          }
        }
      },
      "ClaimPrizeResponse": {
        "type": "object",
        "required": [
          "code",
          "prize"
        ],
        "properties": {
          "code": {
            "type": "integer",
            "description": "Status code indicating the success of the operation. Possible values:\n- 1 - Prize claimed\n- 2 - Player does not have enough credits to claim the prize\n- 3 - Prize is out of stock\n- 5 - Player has exceeded available requests to claim the prize\n- 6 - Player does not meet prize requirements\n- 7 - Player is not within the actionable zone\n- 8 - Voucher code is invalid or has already been used\n- 9 - Prize is a mission prize and cannot be claimed directly\n- 10 - Prize requires a voucher code but none was provided\n"
          },
          "prize": {
            "$ref": "#/components/schemas/GetPrizeResponse"
          },
          "player": {
            "$ref": "#/components/schemas/PlayerConsciseResponse"
          }
        }
      },
      "VoucherCodeResponse": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "The voucher code"
          },
          "account": {
            "type": "string",
            "description": "Account ID"
          },
          "prizeId": {
            "type": "string",
            "description": "Prize ID"
          },
          "useType": {
            "type": "string",
            "enum": [
              "single",
              "multi"
            ],
            "description": "Code type. `single` codes can only be used once and are marked as used after a successful claim.\n`multi` codes remain active and can be used by multiple players.\n"
          },
          "usedBy": {
            "type": "string",
            "nullable": true,
            "description": "Player ID who used the voucher, or null if unused"
          },
          "usedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Timestamp when the voucher was used, or null if unused"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the voucher was created"
          }
        }
      },
      "AddVoucherCodesRequest": {
        "type": "object",
        "required": [
          "account",
          "codes"
        ],
        "description": "Request to add voucher codes to a prize",
        "properties": {
          "account": {
            "$ref": "#/components/schemas/AccountId"
          },
          "codes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Array of voucher code strings to add"
          },
          "useType": {
            "type": "string",
            "enum": [
              "single",
              "multi"
            ],
            "default": "single",
            "description": "Code type. `single` (default) — each code can be used once, then marked as used.\n`multi` — codes remain active and can be used by multiple players. Use multi for shared\npromotional codes (e.g., a restaurant promo code valid for the first 100 players).\n"
          }
        }
      },
      "VoucherInsertResponse": {
        "type": "object",
        "properties": {
          "inserted": {
            "type": "integer",
            "description": "Number of voucher codes successfully inserted"
          },
          "duplicates": {
            "type": "integer",
            "description": "Number of duplicate codes that were skipped"
          }
        }
      },
      "DeleteVoucherCodesRequest": {
        "type": "object",
        "required": [
          "account"
        ],
        "description": "Request to delete voucher codes from a prize",
        "properties": {
          "account": {
            "$ref": "#/components/schemas/AccountId"
          },
          "codes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Optional array of specific voucher codes to delete. If omitted, all voucher codes for the prize are deleted"
          }
        }
      },
      "Quiz-Id": {
        "type": "string",
        "description": "ID of the quiz"
      },
      "Quiz-Name": {
        "type": "string",
        "description": "Name of the quiz"
      },
      "Quiz-Description": {
        "type": "string",
        "description": "Description of the quiz"
      },
      "Quiz-ImgUrl": {
        "type": "string",
        "description": "URL of the survey quiz"
      },
      "MaxScore": {
        "type": "number",
        "description": "Maximum score for the quiz"
      },
      "RequiredPassRate": {
        "type": "number",
        "description": "Pass rate in percent required to complete the quiz. A value between 0 - 100.\n"
      },
      "PassMessage": {
        "type": "string",
        "description": "Message dislayed when the quiz is passed."
      },
      "FailMessage": {
        "type": "string",
        "description": "Message dislayed when the quiz is not passed."
      },
      "IsShuffleRequired": {
        "type": "boolean",
        "description": "Specifies if questions in the quiz will be shuffled."
      },
      "Timing": {
        "type": "object",
        "description": "Timing of the quiz.",
        "required": [
          "maxSecondsToComplete"
        ],
        "properties": {
          "maxSecondsToComplete": {
            "type": "number",
            "description": "Time in seconds to complete a quiz"
          }
        }
      },
      "CreatedOn": {
        "type": "string",
        "description": "Time when element was created"
      },
      "UpdatedOn": {
        "type": "string",
        "description": "Time when element was updated"
      },
      "QuizResponse": {
        "type": "object",
        "required": [
          "id",
          "name",
          "description",
          "imgUrl",
          "tags",
          "category",
          "isAvailable",
          "maxScore",
          "requiredPassRate",
          "passMessage",
          "failMessage",
          "isShuffleRequired",
          "timing",
          "reward"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/Quiz-Id"
          },
          "name": {
            "$ref": "#/components/schemas/Quiz-Name"
          },
          "description": {
            "$ref": "#/components/schemas/Quiz-Description"
          },
          "imgUrl": {
            "$ref": "#/components/schemas/Quiz-ImgUrl"
          },
          "tags": {
            "$ref": "#/components/schemas/Tags"
          },
          "category": {
            "$ref": "#/components/schemas/Category"
          },
          "isAvailable": {
            "$ref": "#/components/schemas/IsAvailable"
          },
          "maxScore": {
            "$ref": "#/components/schemas/MaxScore"
          },
          "requiredPassRate": {
            "$ref": "#/components/schemas/RequiredPassRate"
          },
          "passMessage": {
            "$ref": "#/components/schemas/PassMessage"
          },
          "failMessage": {
            "$ref": "#/components/schemas/FailMessage"
          },
          "isShuffleRequired": {
            "$ref": "#/components/schemas/IsShuffleRequired"
          },
          "timing": {
            "$ref": "#/components/schemas/Timing"
          },
          "reward": {
            "$ref": "#/components/schemas/Reward"
          },
          "createdOn": {
            "$ref": "#/components/schemas/CreatedOn"
          },
          "updatedOn": {
            "$ref": "#/components/schemas/UpdatedOn"
          }
        }
      },
      "QuizActions": {
        "type": "object",
        "required": [
          "startedOn",
          "count",
          "lastScore"
        ],
        "properties": {
          "startedOn": {
            "type": "string",
            "description": "Time when the player started the quiz"
          },
          "completedOn": {
            "type": "string",
            "description": "Last time when the player completed the quiz"
          },
          "count": {
            "type": "number",
            "description": "Amount of times the player has completed the quiz"
          },
          "lastScore": {
            "type": "number",
            "description": "Score for last completed quiz"
          },
          "passed": {
            "type": "boolean",
            "description": "If true, the player has passed the quiz"
          }
        }
      },
      "QuestionType": {
        "type": "string",
        "description": "Type of question. Possible values are:\n- `single` - question has only one correct answer\n- `multi` - question may have multiple correct answers\n"
      },
      "QuizQuestion": {
        "type": "object",
        "required": [
          "id",
          "imgUrl",
          "type",
          "text",
          "weight",
          "strictMode",
          "choices"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique ID of the question in the quiz"
          },
          "imgUrl": {
            "type": "string",
            "description": "URL of the quiz question"
          },
          "type": {
            "$ref": "#/components/schemas/QuestionType"
          },
          "weight": {
            "type": "number",
            "description": "Weight of the answer when calculating final score for the quiz"
          },
          "strictMode": {
            "type": "boolean",
            "description": "If set, all answers must be correct for the question."
          },
          "text": {
            "type": "string",
            "description": "Question text"
          },
          "choices": {
            "type": "array",
            "description": "List of choices",
            "items": {
              "type": "object",
              "required": [
                "id",
                "imgUrl",
                "text",
                "correctAnswer"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "ID of the choice text"
                },
                "imgUrl": {
                  "type": "string",
                  "description": "URL of the quiz question"
                },
                "text": {
                  "type": "string",
                  "description": "Choice text"
                },
                "correctAnswer": {
                  "type": "boolean",
                  "description": "if true, represents correct answer"
                }
              }
            }
          }
        }
      },
      "QuizResults": {
        "type": "array",
        "description": "List of questions and answers for the quiz completed by the player",
        "items": {
          "type": "object",
          "required": [
            "answers",
            "question",
            "score"
          ],
          "properties": {
            "answers": {
              "type": "array",
              "description": "player answer(s) to the question",
              "items": {
                "type": "string"
              }
            },
            "score": {
              "type": "number",
              "description": "Score for the answer."
            },
            "question": {
              "$ref": "#/components/schemas/QuizQuestion"
            }
          }
        }
      },
      "GetQuizResultResponse": {
        "description": "Response to get quiz results for a player",
        "type": "object",
        "required": [
          "quiz",
          "actions",
          "player",
          "results"
        ],
        "properties": {
          "quiz": {
            "$ref": "#/components/schemas/QuizResponse"
          },
          "actions": {
            "$ref": "#/components/schemas/QuizActions"
          },
          "player": {
            "$ref": "#/components/schemas/PlayerConsciseResponse"
          },
          "results": {
            "$ref": "#/components/schemas/QuizResults"
          }
        }
      },
      "StartQuizResponse": {
        "description": "Response to start quiz for a given player",
        "type": "object",
        "required": [
          "quiz",
          "actions",
          "questions",
          "player"
        ],
        "properties": {
          "quiz": {
            "$ref": "#/components/schemas/QuizResponse"
          },
          "actions": {
            "$ref": "#/components/schemas/QuizActions"
          },
          "questions": {
            "type": "array",
            "description": "List of questions for the quiz",
            "items": {
              "$ref": "#/components/schemas/QuizQuestion"
            }
          },
          "player": {
            "$ref": "#/components/schemas/PlayerConsciseResponse"
          }
        }
      },
      "CompleteQuizRequestBody": {
        "type": "object",
        "required": [
          "player",
          "account",
          "answers"
        ],
        "properties": {
          "account": {
            "$ref": "#/components/schemas/AccountId"
          },
          "player": {
            "$ref": "#/components/schemas/Player-PlayerId"
          },
          "answers": {
            "type": "array",
            "description": "Answers to the questions given upon completing the quiz/survey in JSON format. Answers\nshould be an array of objects.\n",
            "items": {
              "type": "object",
              "required": [
                "questionId",
                "answerIds"
              ],
              "properties": {
                "questionId": {
                  "type": "string",
                  "description": "The id of the question"
                },
                "answerIds": {
                  "type": "array",
                  "description": "A list of answer IDs for the question provided by the player. In case the \ntype of question is `single`, array would contain only one answer ID.\n",
                  "items": {
                    "type": "string",
                    "description": "Answer ID provided by the player"
                  }
                }
              }
            }
          }
        }
      },
      "CompleteQuizResponse": {
        "description": "Response to complete quiz request.",
        "type": "object",
        "required": [
          "quiz",
          "actions",
          "player",
          "results",
          "progress"
        ],
        "properties": {
          "quiz": {
            "$ref": "#/components/schemas/QuizResponse"
          },
          "actions": {
            "$ref": "#/components/schemas/QuizActions"
          },
          "player": {
            "$ref": "#/components/schemas/PlayerConsciseResponse"
          },
          "results": {
            "$ref": "#/components/schemas/QuizResults"
          },
          "progress": {
            "$ref": "#/components/schemas/Progress"
          }
        }
      },
      "Raffle-Id": {
        "type": "string",
        "description": "ID of the raffle"
      },
      "Raffle-Name": {
        "type": "string",
        "description": "Name of the raffle"
      },
      "Raffle-Description": {
        "type": "string",
        "description": "Description of the raffle"
      },
      "Raffle-ImgUrl": {
        "type": "string",
        "description": "URL of the raffle image"
      },
      "DrawTime": {
        "type": "string",
        "description": "Next drawtime for the raffle"
      },
      "Raffle-Credits": {
        "type": "integer",
        "description": "The amount of credits required to redeem a raffle ticket"
      },
      "Raffle-CountLimit": {
        "type": "integer",
        "description": "The number of times a player can redeem a raffle ticket within the refresh period"
      },
      "Raffle-Priority": {
        "type": "integer",
        "description": "Priority of the raffle"
      },
      "GetRaffleResponse": {
        "description": "Response to Get Raffle",
        "type": "object",
        "required": [
          "id",
          "name",
          "description",
          "imgUrl",
          "tags",
          "category",
          "isAvailable",
          "active",
          "drawTime",
          "credits",
          "stock",
          "countLimit",
          "limitCount",
          "period",
          "requirement"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/Raffle-Id"
          },
          "name": {
            "$ref": "#/components/schemas/Raffle-Name"
          },
          "description": {
            "$ref": "#/components/schemas/Raffle-Description"
          },
          "tags": {
            "$ref": "#/components/schemas/Tags"
          },
          "category": {
            "$ref": "#/components/schemas/Category"
          },
          "imgUrl": {
            "$ref": "#/components/schemas/Raffle-ImgUrl"
          },
          "isAvailable": {
            "$ref": "#/components/schemas/IsAvailable"
          },
          "drawTime": {
            "$ref": "#/components/schemas/DrawTime"
          },
          "credits": {
            "$ref": "#/components/schemas/Raffle-Credits"
          },
          "stock": {
            "$ref": "#/components/schemas/Stock"
          },
          "countLimit": {
            "$ref": "#/components/schemas/Raffle-CountLimit"
          },
          "limitCount": {
            "$ref": "#/components/schemas/LimitCount"
          },
          "active": {
            "$ref": "#/components/schemas/Active"
          },
          "period": {
            "$ref": "#/components/schemas/Period"
          },
          "requirement": {
            "$ref": "#/components/schemas/Requirement"
          },
          "priority": {
            "$ref": "#/components/schemas/Raffle-Priority"
          },
          "location": {
            "$ref": "#/components/schemas/Location"
          }
        }
      },
      "RedeemRaffleRequest": {
        "type": "object",
        "description": "Raffle redeem request",
        "required": [
          "player",
          "account"
        ],
        "properties": {
          "player": {
            "$ref": "#/components/schemas/Player-PlayerId"
          },
          "account": {
            "$ref": "#/components/schemas/AccountId"
          },
          "language": {
            "$ref": "#/components/schemas/Language"
          },
          "lat": {
            "$ref": "#/components/schemas/Latitude"
          },
          "lon": {
            "$ref": "#/components/schemas/Longitude"
          }
        }
      },
      "RedeemRaffleResponse": {
        "description": "Response to Redeem Raffle ticket",
        "type": "object",
        "required": [
          "code",
          "message",
          "player",
          "raffle"
        ],
        "properties": {
          "code": {
            "type": "integer",
            "description": "Status code indicating the success of the operation. Possible values:\n- 1 - Raffle ticket redeemed\n- 2 - Player does not have enough credits to redeem raffle ticket\n- 5 - Player has exceeded available requests to redeem the raffle ticket\n- 6 - Player does not meet raffle requirements\n- 7 - Player is not within the actionable zone\n"
          },
          "message": {
            "type": "string",
            "description": "Clear text status description"
          },
          "player": {
            "$ref": "#/components/schemas/PlayerConsciseResponse"
          },
          "raffle": {
            "type": "object",
            "required": [
              "id",
              "name",
              "description",
              "imgUrl",
              "category",
              "tags",
              "isAvailable",
              "credits",
              "active",
              "drawTime",
              "period"
            ],
            "properties": {
              "id": {
                "$ref": "#/components/schemas/Raffle-Id"
              },
              "name": {
                "$ref": "#/components/schemas/Raffle-Name"
              },
              "description": {
                "$ref": "#/components/schemas/Raffle-Description"
              },
              "imgUrl": {
                "$ref": "#/components/schemas/Raffle-ImgUrl"
              },
              "category": {
                "$ref": "#/components/schemas/Category"
              },
              "tags": {
                "$ref": "#/components/schemas/Tags"
              },
              "isAvailable": {
                "$ref": "#/components/schemas/IsAvailable"
              },
              "credits": {
                "$ref": "#/components/schemas/Raffle-Credits"
              },
              "active": {
                "$ref": "#/components/schemas/Active"
              },
              "drawTime": {
                "$ref": "#/components/schemas/DrawTime"
              },
              "period": {
                "$ref": "#/components/schemas/Period"
              }
            }
          }
        }
      },
      "Survey-Id": {
        "type": "string",
        "description": "ID of the survey"
      },
      "Survey-Name": {
        "type": "string",
        "description": "Name of the survey"
      },
      "Survey-Description": {
        "type": "string",
        "description": "Description of the survey"
      },
      "Survey-ImgUrl": {
        "type": "string",
        "description": "URL of the survey image"
      },
      "Survey-IsShuffleRequired": {
        "type": "boolean",
        "description": "Specifies if questions in the survey will be shuffled."
      },
      "Survey-QuestionType": {
        "type": "string",
        "description": "Type of question. Possible values are:\n- `single` - question has only answer option\n- `multi` - question may have multiple answer options\n"
      },
      "SurveyQuestions": {
        "type": "array",
        "description": "List of questions for the survey",
        "items": {
          "type": "object",
          "required": [
            "id",
            "imgUrl",
            "type",
            "text",
            "choices"
          ],
          "properties": {
            "id": {
              "type": "string",
              "description": "Unique ID of the question in the survey"
            },
            "imgUrl": {
              "type": "string",
              "description": "URL of the survey question"
            },
            "type": {
              "$ref": "#/components/schemas/Survey-QuestionType"
            },
            "text": {
              "type": "string",
              "description": "Text of the question"
            },
            "choices": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "id",
                  "text",
                  "imgUrl"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique ID of the choice within the survey"
                  },
                  "imgUrl": {
                    "type": "string",
                    "description": "URL of the survey choice image"
                  },
                  "text": {
                    "type": "string",
                    "description": "Text for the choice"
                  }
                }
              }
            }
          }
        }
      },
      "Survey": {
        "type": "object",
        "required": [
          "id",
          "name",
          "description",
          "imgUrl",
          "tags",
          "category",
          "isAvailable",
          "isShuffleRequired",
          "questions",
          "reward",
          "createdOn",
          "updatedOn"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/Survey-Id"
          },
          "name": {
            "$ref": "#/components/schemas/Survey-Name"
          },
          "description": {
            "$ref": "#/components/schemas/Survey-Description"
          },
          "imgUrl": {
            "$ref": "#/components/schemas/Survey-ImgUrl"
          },
          "tags": {
            "$ref": "#/components/schemas/Tags"
          },
          "category": {
            "$ref": "#/components/schemas/Category"
          },
          "isAvailable": {
            "$ref": "#/components/schemas/IsAvailable"
          },
          "isShuffleRequired": {
            "$ref": "#/components/schemas/Survey-IsShuffleRequired"
          },
          "questions": {
            "$ref": "#/components/schemas/SurveyQuestions"
          },
          "reward": {
            "$ref": "#/components/schemas/Reward"
          },
          "createdOn": {
            "$ref": "#/components/schemas/CreatedOn"
          },
          "updatedOn": {
            "$ref": "#/components/schemas/UpdatedOn"
          }
        }
      },
      "Surveys": {
        "type": "object",
        "required": [
          "id",
          "name",
          "description",
          "imgUrl",
          "tags",
          "category",
          "isAvailable",
          "isShuffleRequired",
          "reward",
          "createdOn",
          "updatedOn"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/Survey-Id"
          },
          "name": {
            "$ref": "#/components/schemas/Survey-Name"
          },
          "description": {
            "$ref": "#/components/schemas/Survey-Description"
          },
          "imgUrl": {
            "$ref": "#/components/schemas/Survey-ImgUrl"
          },
          "tags": {
            "$ref": "#/components/schemas/Tags"
          },
          "category": {
            "$ref": "#/components/schemas/Category"
          },
          "isAvailable": {
            "$ref": "#/components/schemas/IsAvailable"
          },
          "isShuffleRequired": {
            "$ref": "#/components/schemas/Survey-IsShuffleRequired"
          },
          "reward": {
            "$ref": "#/components/schemas/Reward"
          },
          "createdOn": {
            "$ref": "#/components/schemas/CreatedOn"
          },
          "updatedOn": {
            "$ref": "#/components/schemas/UpdatedOn"
          }
        }
      },
      "SurveyResult": {
        "type": "array",
        "description": "List of questions and responses for the survey completed by the player",
        "items": {
          "type": "object",
          "required": [
            "id",
            "imgUrl",
            "type",
            "text",
            "choices"
          ],
          "properties": {
            "id": {
              "type": "string",
              "description": "Unique ID of the question in the survey"
            },
            "imgUrl": {
              "type": "string",
              "description": "URL of the survey question"
            },
            "type": {
              "$ref": "#/components/schemas/Survey-QuestionType"
            },
            "text": {
              "type": "string",
              "description": "Text of the question"
            },
            "choices": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "id",
                  "text",
                  "value",
                  "percent",
                  "rank",
                  "imgUrl"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique ID of the choice within the survey"
                  },
                  "imgUrl": {
                    "type": "string",
                    "description": "URL of the survey choice image"
                  },
                  "text": {
                    "type": "string",
                    "description": "Text for the choice"
                  },
                  "value": {
                    "type": "number",
                    "description": "How many times the choice has been selected"
                  },
                  "percent": {
                    "type": "number",
                    "description": "Answer percentage of the choice"
                  },
                  "rank": {
                    "type": "number",
                    "description": "Rank of the choice"
                  }
                }
              }
            },
            "answers": {
              "type": "array",
              "description": "player answer(s) to the question",
              "items": {
                "type": "string"
              }
            }
          }
        }
      },
      "GetSurveyResultResponse": {
        "type": "object",
        "required": [
          "survey",
          "results"
        ],
        "properties": {
          "survey": {
            "$ref": "#/components/schemas/Survey"
          },
          "player": {
            "$ref": "#/components/schemas/PlayerConsciseResponse"
          },
          "results": {
            "type": "object",
            "required": [
              "questions"
            ],
            "properties": {
              "questions": {
                "$ref": "#/components/schemas/SurveyResult"
              }
            }
          }
        }
      },
      "CompleteSurveyRequest": {
        "type": "object",
        "required": [
          "player",
          "account",
          "answers"
        ],
        "properties": {
          "account": {
            "$ref": "#/components/schemas/AccountId"
          },
          "player": {
            "$ref": "#/components/schemas/Player-PlayerId"
          },
          "answers": {
            "type": "array",
            "description": "Answers to the questions given upon completing the quiz/survey in JSON format. Answers\nshould be an array of objects.\n",
            "items": {
              "type": "object",
              "required": [
                "questionId",
                "answerIds"
              ],
              "properties": {
                "questionId": {
                  "type": "string",
                  "description": "The id of the question"
                },
                "answerIds": {
                  "type": "array",
                  "description": "A list of answer IDs for the question provided by the player. In case the \ntype of question is `single`, array would contain only one answer ID.\n",
                  "items": {
                    "type": "string",
                    "description": "Answer ID provided by the player"
                  }
                }
              }
            }
          }
        }
      },
      "SurveyActions": {
        "type": "object",
        "required": [
          "startedOn",
          "completedOn",
          "firstCompletedOn",
          "count"
        ],
        "properties": {
          "startedOn": {
            "type": "string",
            "description": "Time when the player started the survey"
          },
          "firstCompletedOn": {
            "type": "string",
            "description": "Last time when the player completed the survey"
          },
          "completedOn": {
            "type": "string",
            "description": "Last time when the player completed the survey"
          },
          "count": {
            "type": "number",
            "description": "Amount of times the player has completed the survey"
          }
        }
      },
      "SurveyResultQuestion": {
        "type": "object",
        "required": [
          "id",
          "imgUrl",
          "type",
          "text",
          "choices"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique ID of the question in the survey"
          },
          "imgUrl": {
            "type": "string",
            "description": "URL of the survey question"
          },
          "type": {
            "$ref": "#/components/schemas/Survey-QuestionType"
          },
          "text": {
            "type": "string",
            "description": "Text of the question"
          },
          "choices": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "text",
                "value",
                "percent",
                "rank",
                "imgUrl"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Unique ID of the choice within the survey"
                },
                "imgUrl": {
                  "type": "string",
                  "description": "URL of the survey choice image"
                },
                "text": {
                  "type": "string",
                  "description": "Text for the choice"
                },
                "value": {
                  "type": "number",
                  "description": "How many times the choice has been selected"
                },
                "percent": {
                  "type": "number",
                  "description": "Answer percentage of the choice"
                },
                "rank": {
                  "type": "number",
                  "description": "Rank of the choice"
                }
              }
            }
          }
        }
      },
      "CompleteSurveyResponse": {
        "description": "Response to complete survey request.",
        "type": "object",
        "required": [
          "survey",
          "actions",
          "player",
          "results",
          "progress"
        ],
        "properties": {
          "survey": {
            "$ref": "#/components/schemas/Survey"
          },
          "player": {
            "$ref": "#/components/schemas/PlayerConsciseResponse"
          },
          "actions": {
            "$ref": "#/components/schemas/SurveyActions"
          },
          "results": {
            "type": "array",
            "description": "List of questions with player answers and aggregated results",
            "items": {
              "type": "object",
              "properties": {
                "question": {
                  "$ref": "#/components/schemas/SurveyResultQuestion"
                },
                "answer": {
                  "type": "array",
                  "description": "Player's answer IDs for the question",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "progress": {
            "$ref": "#/components/schemas/Progress"
          }
        }
      },
      "resources_StreakObjectives": {
        "type": "array",
        "description": "List of mission IDs which drives the streak. NOTE! Currenly only one mission ID,\nbut it is returned as an array of one string.\n",
        "items": {
          "type": "string"
        }
      },
      "StreakReward": {
        "type": "object",
        "required": [
          "points",
          "credits",
          "multiplier",
          "achievements"
        ],
        "properties": {
          "points": {
            "type": "integer",
            "description": "Points awarded upon completion of a mission driving the streak."
          },
          "credits": {
            "type": "integer",
            "description": "Credits awarded upon completion of a mission driving the streak."
          },
          "multiplier": {
            "type": "integer",
            "description": "How much the score of the streak shall be multiplied by for \neach completion of a mission driving the streak.\n"
          },
          "achievements": {
            "type": "array",
            "description": "List of achievements with steps incremented upon completion of a mission driving the streak.",
            "items": {
              "type": "object",
              "required": [
                "id",
                "steps"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "ID of the achievement"
                },
                "steps": {
                  "type": "integer",
                  "description": "Steps granted towards the given achievement"
                }
              }
            }
          }
        }
      },
      "GetStreakResponse": {
        "description": "Response to Get Streak",
        "type": "object",
        "required": [
          "id",
          "name",
          "description",
          "imgUrl",
          "tags",
          "category",
          "isAvailable",
          "priority",
          "period",
          "limitCount",
          "countLimit",
          "active",
          "objectives",
          "reward"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/Streak-Id"
          },
          "name": {
            "$ref": "#/components/schemas/Streak-Name"
          },
          "description": {
            "$ref": "#/components/schemas/Streak-Description"
          },
          "imgUrl": {
            "$ref": "#/components/schemas/Streak-ImgUrl"
          },
          "tags": {
            "$ref": "#/components/schemas/Tags"
          },
          "category": {
            "$ref": "#/components/schemas/Category"
          },
          "isAvailable": {
            "$ref": "#/components/schemas/IsAvailable"
          },
          "priority": {
            "$ref": "#/components/schemas/Streak-Priority"
          },
          "period": {
            "$ref": "#/components/schemas/Period"
          },
          "limitCount": {
            "$ref": "#/components/schemas/LimitCount"
          },
          "countLimit": {
            "$ref": "#/components/schemas/CountLimit"
          },
          "active": {
            "$ref": "#/components/schemas/Active"
          },
          "objectives": {
            "$ref": "#/components/schemas/resources_StreakObjectives"
          },
          "account": {
            "$ref": "#/components/schemas/AccountId"
          },
          "reward": {
            "$ref": "#/components/schemas/StreakReward"
          }
        }
      },
      "Team-Id": {
        "type": "string",
        "description": "ID of the team"
      },
      "Team-Name": {
        "type": "string",
        "description": "Name of the team"
      },
      "Team-Description": {
        "type": "string",
        "description": "Team description"
      },
      "Team-ImgUrl": {
        "type": "string",
        "description": "URL of the team image"
      },
      "Team-Level": {
        "type": "string",
        "description": "Level for the team (level ID). By default, team is assigned to base level."
      },
      "Team-PointsBalance": {
        "type": "integer",
        "description": "Team's point balance"
      },
      "Team-CreditsBalance": {
        "type": "integer",
        "description": "Team's credit balance"
      },
      "Team-CreatedOn": {
        "type": "string",
        "description": "Time when team was created"
      },
      "TeamResponse": {
        "type": "object",
        "required": [
          "id",
          "name",
          "description",
          "imgUrl",
          "category",
          "tags",
          "isAvailable",
          "level",
          "points",
          "credits",
          "createdOn"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/Team-Id"
          },
          "name": {
            "$ref": "#/components/schemas/Team-Name"
          },
          "description": {
            "$ref": "#/components/schemas/Team-Description"
          },
          "imgUrl": {
            "$ref": "#/components/schemas/Team-ImgUrl"
          },
          "category": {
            "$ref": "#/components/schemas/Category"
          },
          "tags": {
            "$ref": "#/components/schemas/Tags"
          },
          "isAvailable": {
            "$ref": "#/components/schemas/IsAvailable"
          },
          "level": {
            "$ref": "#/components/schemas/Team-Level"
          },
          "points": {
            "$ref": "#/components/schemas/Team-PointsBalance"
          },
          "credits": {
            "$ref": "#/components/schemas/Team-CreditsBalance"
          },
          "createdOn": {
            "$ref": "#/components/schemas/Team-CreatedOn"
          }
        }
      },
      "TeamByIdResponse": {
        "type": "object",
        "required": [
          "team",
          "players"
        ],
        "properties": {
          "team": {
            "$ref": "#/components/schemas/TeamResponse"
          },
          "players": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "tags",
                "category",
                "points",
                "credits",
                "player",
                "name",
                "createdOn"
              ],
              "properties": {
                "tags": {
                  "$ref": "#/components/schemas/Tags"
                },
                "category": {
                  "$ref": "#/components/schemas/Category"
                },
                "points": {
                  "$ref": "#/components/schemas/Points"
                },
                "credits": {
                  "$ref": "#/components/schemas/Credits"
                },
                "player": {
                  "$ref": "#/components/schemas/Player-PlayerId"
                },
                "name": {
                  "$ref": "#/components/schemas/Player-Name"
                },
                "createdOn": {
                  "$ref": "#/components/schemas/Created"
                }
              }
            }
          }
        }
      },
      "Team-Category": {
        "type": "string",
        "description": "Category for the team. By default, no category is assigned to the team"
      },
      "Team-Tags": {
        "type": "string",
        "description": "Tags to assign to the team as a comma-separated list"
      },
      "Team-Points": {
        "type": "integer",
        "description": "Amount of points to grant to the team",
        "default": 0
      },
      "Team-Credits": {
        "type": "integer",
        "description": "Amount of credits to grant to the team",
        "default": 0
      },
      "UpdateTeamRequest": {
        "type": "object",
        "required": [
          "id",
          "account"
        ],
        "properties": {
          "account": {
            "$ref": "#/components/schemas/AccountId"
          },
          "id": {
            "$ref": "#/components/schemas/Team-Id"
          },
          "name": {
            "$ref": "#/components/schemas/Team-Name"
          },
          "description": {
            "$ref": "#/components/schemas/Team-Description"
          },
          "imgUrl": {
            "$ref": "#/components/schemas/Team-ImgUrl"
          },
          "category": {
            "$ref": "#/components/schemas/Team-Category"
          },
          "tags": {
            "$ref": "#/components/schemas/Team-Tags"
          },
          "mode": {
            "$ref": "#/components/schemas/Mode"
          },
          "points": {
            "$ref": "#/components/schemas/Team-Points"
          },
          "credits": {
            "$ref": "#/components/schemas/Team-Credits"
          },
          "isAvailable": {
            "$ref": "#/components/schemas/IsAvailable"
          }
        }
      },
      "GetTeamsResponse": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/TeamResponse"
        }
      },
      "CreateTeamRequest": {
        "type": "object",
        "required": [
          "id",
          "account",
          "name"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/Team-Id"
          },
          "account": {
            "$ref": "#/components/schemas/AccountId"
          },
          "name": {
            "$ref": "#/components/schemas/Team-Name"
          },
          "description": {
            "$ref": "#/components/schemas/Team-Description"
          },
          "imgUrl": {
            "$ref": "#/components/schemas/Team-ImgUrl"
          },
          "category": {
            "$ref": "#/components/schemas/Team-Category"
          },
          "tags": {
            "$ref": "#/components/schemas/Team-Tags"
          },
          "isAvailable": {
            "$ref": "#/components/schemas/IsAvailable"
          },
          "level": {
            "$ref": "#/components/schemas/Team-Level"
          },
          "points": {
            "$ref": "#/components/schemas/Team-Points"
          },
          "credits": {
            "$ref": "#/components/schemas/Team-Credits"
          }
        }
      }
    },
    "examples": {
      "GetAchievement": {
        "value": {
          "description": "Game On! You unlocked the Game Addict badge!!",
          "category": "",
          "tags": [
            "gamer"
          ],
          "isAvailable": true,
          "steps": 10,
          "id": "game-addict",
          "name": "Game Addict",
          "imgUrl": "https://images.gamelayer.co/glimages/gltest/badge1.png",
          "requirement": {
            "category": "",
            "tags": [],
            "missions": [],
            "achievements": [],
            "level": {
              "id": "",
              "ordinal": 0
            }
          },
          "reward": {
            "points": 10,
            "credits": 10,
            "achievements": []
          }
        }
      },
      "GetAchievements": {
        "value": [
          {
            "description": "Game On! You unlocked the Game Addict badge!!",
            "category": "",
            "tags": [
              "gamer"
            ],
            "isAvailable": true,
            "steps": 10,
            "id": "game-addict",
            "name": "Game Addict",
            "imgUrl": "https://images.gamelayer.co/glimages/gltest/badge1.png",
            "requirement": {
              "category": "",
              "tags": [],
              "missions": [],
              "achievements": [],
              "level": {
                "id": "",
                "ordinal": 0
              }
            },
            "reward": {
              "points": 10,
              "credits": 10,
              "achievements": []
            }
          }
        ]
      },
      "CompleteEvent": {
        "value": {
          "player": "player-080277",
          "account": "docs-for-devs"
        }
      },
      "CompletedEvent": {
        "value": {
          "event": {
            "description": "",
            "category": "",
            "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
            "isAvailable": true,
            "limitCount": false,
            "id": "ev-2",
            "name": "ev-2",
            "reward": {
              "points": 1,
              "credits": 0,
              "achievements": []
            }
          },
          "player": {
            "name": "Str-2 Player",
            "points": 697,
            "credits": 0
          },
          "progress": {
            "points": {
              "before": 662,
              "earned": 35
            },
            "credits": {
              "before": 0,
              "earned": 0
            },
            "levels": {
              "completed": []
            },
            "missions": [
              {
                "id": "m-2",
                "name": "m-2",
                "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
                "description": "Mission driven by ev-2",
                "points": 25,
                "credits": 0
              }
            ],
            "startedMissions": [
              {
                "id": "m-2",
                "name": "m-2",
                "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
                "description": "Mission driven by ev-2"
              }
            ],
            "achievements": [],
            "unlockedAchievements": [],
            "rules": [],
            "completedStreaks": [
              {
                "id": "streak-1",
                "name": "Streak One",
                "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
                "description": "Streak One Description",
                "streakCount": 1,
                "points": 10,
                "credits": 0,
                "startedOn": "2024-04-08T02:34:33.870Z",
                "completedOn": "2024-04-08T02:34:33.870Z",
                "lastStreakOn": "2024-04-08T02:34:33.870Z"
              }
            ],
            "activeStreaks": [
              {
                "id": "streak-2",
                "name": "Streak Two",
                "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
                "description": "Streak Two Description",
                "streakCount": 2,
                "points": 0,
                "credits": 0,
                "startedOn": "2024-04-08T02:34:59.361Z",
                "lastStreakOn": "2024-04-09T06:34:59.361Z"
              }
            ]
          }
        }
      },
      "GetEvent": {
        "value": {
          "description": "Use this event each time the player plays a game",
          "category": "",
          "tags": [],
          "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
          "isAvailable": true,
          "id": "play-game",
          "name": "Play Game",
          "reward": {
            "points": 0,
            "credits": 0,
            "achievements": []
          }
        }
      },
      "GetEvents": {
        "value": [
          {
            "description": "Use this event each time the player plays a game",
            "category": "",
            "tags": [],
            "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
            "isAvailable": true,
            "id": "play-game",
            "name": "Play Game",
            "reward": {
              "points": 0,
              "credits": 0,
              "achievements": []
            }
          },
          {
            "description": "Use this event each time the player watches a video",
            "category": "",
            "tags": [],
            "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
            "isAvailable": true,
            "id": "watch-video",
            "name": "Video Player",
            "reward": {
              "points": 0,
              "credits": 0,
              "achievements": []
            }
          }
        ]
      },
      "GetJournalEntries": {
        "value": {
          "account": "demo-account",
          "player": "player-1",
          "entries": [
            {
              "timestamp": "2025-01-15T10:30:00.000Z",
              "points": 250,
              "credits": 100,
              "elementType": "mission",
              "elementId": "daily-login",
              "action": "earn"
            },
            {
              "timestamp": "2025-01-15T11:00:00.000Z",
              "points": 0,
              "credits": 50,
              "elementType": "prize",
              "elementId": "coffee-voucher",
              "action": "spend"
            }
          ]
        }
      },
      "GetJournalSummary": {
        "value": {
          "account": "demo-account",
          "player": "player-1",
          "earned": {
            "points": 1500,
            "credits": 300,
            "count": 12
          },
          "spent": {
            "points": 0,
            "credits": 150,
            "count": 3
          }
        }
      },
      "GetLeaderboardWithScores": {
        "value": {
          "leaderboard": {
            "name": "Hall of Fame",
            "description": "Can you become the Leader of the Pack?!",
            "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
            "period": "all-time",
            "id": "hall-of-fame"
          },
          "scores": {
            "totalPlayers": 2,
            "data": [
              {
                "player": "player5@test.com",
                "name": "Joe Doe",
                "scores": 108000,
                "points": 108000,
                "tags": [],
                "rank": 1
              },
              {
                "name": "Joe Bloggs",
                "scores": 26110,
                "points": 26110,
                "player": "player1@test.com",
                "tags": [],
                "rank": 2
              }
            ]
          }
        }
      },
      "GetLeaderboardsMemberVsMembers": {
        "value": {
          "leaderboard": {
            "name": "Members in Teams",
            "description": "Members in teams competing against each other",
            "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
            "period": "daily",
            "element": "teammembers",
            "id": "leaderboard-teammembers"
          },
          "scores": {
            "totalPlayers": 8,
            "data": [
              {
                "player": "lb-103",
                "name": "Lb-103",
                "scores": 105,
                "tags": [],
                "team": "team-lb-2",
                "rank": 1
              },
              {
                "player": "lb-100",
                "name": "Lb-100",
                "scores": 84,
                "tags": [],
                "team": "team-lb-2",
                "rank": 2
              },
              {
                "player": "lb-123",
                "name": "Lb-123",
                "scores": 63,
                "tags": [],
                "team": "team-lb-2",
                "rank": 3
              }
            ]
          }
        }
      },
      "GetLeaderboardsForTeams": {
        "value": {
          "leaderboard": {
            "name": "Best Team Players",
            "description": "Compete against your immediate team colleagues for the top spot!!!",
            "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
            "period": "all-time",
            "element": "team",
            "id": "leaderboard-team"
          },
          "scores": {
            "totalTeams": 9,
            "data": [
              {
                "player": "team-lb-2",
                "team": "team-lb-2",
                "scores": 357,
                "tags": [],
                "rank": 1,
                "name": "Test leaderboard team 2"
              },
              {
                "player": "team-lb-1",
                "team": "team-lb-1",
                "scores": 21,
                "tags": [],
                "rank": 2,
                "name": "Team Leaderboard One"
              }
            ]
          }
        }
      },
      "GetLeaderboards": {
        "value": [
          {
            "name": "Hall of Fame",
            "description": "Can you become the Leader of the Pack?!",
            "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
            "category": "",
            "tags": [],
            "isAvailable": true,
            "period": "all-time",
            "element": "player",
            "rankBy": "total",
            "units": "points",
            "id": "hall-of-fame",
            "active": {
              "from": "2021-12-31T22:00:00.000Z",
              "to": "2022-12-30T22:00:00.000Z"
            },
            "requirement": {
              "category": "",
              "tags": [],
              "missions": [],
              "achievements": [],
              "level": {
                "id": "",
                "ordinal": 0
              }
            }
          }
        ]
      },
      "GetLevel": {
        "value": {
          "name": "Wookie Rookie",
          "description": "Level Up! Nice work .. You made the grade and became a Rookie!!",
          "imgUrl": "https://images.gamelayer.co/glimages/gltest/3572830.png",
          "category": "",
          "tags": [],
          "isAvailable": true,
          "id": "level-2",
          "ordinal": 1,
          "objectives": {
            "points": 1000,
            "credits": 0,
            "achievements": []
          },
          "reward": {
            "points": 0,
            "credits": 0,
            "achievements": []
          }
        }
      },
      "GetLevels": {
        "value": [
          {
            "name": "Total Noob",
            "description": "You have to start somewhere .. So start at the very beginning!",
            "imgUrl": "https://images.gamelayer.co/glimages/gltest/3572829.png",
            "category": "",
            "tags": [],
            "isAvailable": true,
            "id": "level-1",
            "ordinal": 0,
            "objectives": {
              "points": 100,
              "credits": 0,
              "achievements": []
            },
            "reward": {
              "points": 0,
              "credits": 0,
              "achievements": []
            }
          },
          {
            "name": "Wookie Rookie",
            "description": "Level Up! Nice work .. You made the grade and became a Rookie!!",
            "imgUrl": "https://images.gamelayer.co/glimages/gltest/3572830.png",
            "category": "",
            "tags": [],
            "isAvailable": true,
            "id": "level-2",
            "ordinal": 1,
            "objectives": {
              "points": 1000,
              "credits": 0,
              "achievements": []
            },
            "reward": {
              "points": 0,
              "credits": 0,
              "achievements": []
            }
          },
          {
            "name": "Grand Master",
            "description": "Level Up! You rock .. The hard work paid off and you made it to Master!!",
            "imgUrl": "https://images.gamelayer.co/glimages/gltest/3572831.png",
            "category": "",
            "tags": [],
            "isAvailable": true,
            "id": "level-3",
            "ordinal": 2,
            "objectives": {
              "points": 5000,
              "credits": 0,
              "achievements": []
            },
            "reward": {
              "points": 0,
              "credits": 0,
              "achievements": []
            }
          }
        ]
      },
      "GetMission": {
        "value": {
          "timeToComplete": 0,
          "timeToRestart": 0,
          "limitTimeToRestart": false,
          "description": "Complete the game before the end of the month",
          "priority": 2,
          "category": "",
          "isAvailable": true,
          "limitCount": false,
          "countLimit": 1,
          "tags": [],
          "imgUrl": "https://images.gamelayer.co/glimages/gltest/game2.png",
          "id": "play-me",
          "name": "Gaming is Life",
          "active": {
            "from": "2021-12-31T22:00:00.000Z",
            "to": "2022-12-30T22:00:00.000Z"
          },
          "period": "monthly",
          "objectives": {
            "events": [
              {
                "currentCount": 0,
                "id": "play-game",
                "count": 1
              }
            ],
            "missions": []
          },
          "requirement": {
            "category": "",
            "tags": [
              "gamer"
            ],
            "missions": [],
            "achievements": [],
            "level": {
              "id": "level-2",
              "ordinal": 1
            }
          },
          "reward": {
            "points": 250,
            "credits": 100,
            "achievements": [
              {
                "id": "game-addict",
                "steps": 1
              }
            ],
            "prizeId": "",
            "expireMissionOnZeroStock": false
          }
        }
      },
      "GetMissions": {
        "value": [
          {
            "timeToComplete": 0,
            "timeToRestart": 0,
            "limitTimeToRestart": false,
            "description": "Complete five coding exercises this week",
            "priority": 1,
            "category": "Programming",
            "isAvailable": true,
            "limitCount": false,
            "countLimit": 1,
            "tags": [],
            "imgUrl": "https://images.gamelayer.co/glimages/gltest/code1.png",
            "id": "code-me",
            "name": "Stay Calm and Code",
            "active": {
              "from": "2021-12-31T22:00:00.000Z",
              "to": "2022-12-30T22:00:00.000Z"
            },
            "period": "weekly",
            "objectives": {
              "events": [
                {
                  "currentCount": 0,
                  "id": "write-code",
                  "count": 5
                }
              ],
              "missions": []
            },
            "requirement": {
              "category": "",
              "tags": [
                "coder"
              ],
              "missions": [],
              "achievements": [],
              "level": {
                "id": "level-2",
                "ordinal": 1
              }
            },
            "reward": {
              "points": 100,
              "credits": 10,
              "achievements": [
                {
                  "id": "king-of-code",
                  "steps": 1
                }
              ],
              "prizeId": "",
              "expireMissionOnZeroStock": false
            }
          },
          {
            "timeToComplete": 0,
            "timeToRestart": 0,
            "limitTimeToRestart": false,
            "description": "Complete the game before the end of the month",
            "priority": 2,
            "category": "",
            "isAvailable": true,
            "limitCount": false,
            "countLimit": 1,
            "tags": [],
            "imgUrl": "https://images.gamelayer.co/glimages/gltest/game2.png",
            "id": "play-me",
            "name": "Gaming is Life",
            "active": {
              "from": "2021-12-31T22:00:00.000Z",
              "to": "2022-12-30T22:00:00.000Z"
            },
            "period": "monthly",
            "objectives": {
              "events": [
                {
                  "currentCount": 0,
                  "id": "play-game",
                  "count": 1
                }
              ],
              "missions": []
            },
            "requirement": {
              "category": "",
              "tags": [
                "gamer"
              ],
              "missions": [],
              "achievements": [],
              "level": {
                "id": "level-2",
                "ordinal": 1
              }
            },
            "reward": {
              "points": 250,
              "credits": 100,
              "achievements": [
                {
                  "id": "game-addict",
                  "steps": 1
                }
              ],
              "prizeId": "",
              "expireMissionOnZeroStock": false
            }
          }
        ]
      },
      "GetMysteryBox": {
        "value": {
          "stock": {
            "redeemed": 0,
            "available": 60,
            "count": 60
          },
          "name": "Daily Mystery Box",
          "description": "Come back every day and open the Mystery Box for great prizes!",
          "imgUrl": "https://images.gamelayer.co/glimages/gltest/prize.png",
          "category": "",
          "tags": [],
          "isAvailable": true,
          "credits": 1,
          "countLimit": 5,
          "limitCount": false,
          "id": "daily-reward",
          "active": {
            "from": "2021-12-31T22:00:00.000Z",
            "to": "2022-12-30T22:00:00.000Z"
          },
          "period": "daily",
          "requirement": {
            "category": "",
            "tags": [],
            "missions": [],
            "achievements": [],
            "level": {
              "id": "",
              "ordinal": 0
            }
          }
        }
      },
      "RedeemMysteryBox": {
        "value": {
          "code": 1,
          "message": "Prize cup-coffee claimed from mysterybox",
          "mysterybox": {
            "id": "daily-reward",
            "name": "Daily Mystery Box",
            "description": "Come back every day and open the Mystery Box for great prizes!",
            "stock": {
              "redeemed": 6,
              "available": 100029,
              "count": 100030
            },
            "imgUrl": "https://images.gamelayer.co/glimages/gltest/prize.png",
            "category": "",
            "isAvailable": true,
            "credits": 1
          },
          "prize": {
            "stock": {
              "redeemed": 8,
              "available": 86,
              "count": 100
            },
            "name": "Coffee",
            "description": "Treat yourself to a hot cup of (house) coffee :)",
            "imgUrl": "https://images.gamelayer.co/glimages/gltest/coffee.png",
            "category": "",
            "tags": [],
            "isAvailable": true,
            "credits": 10,
            "limitCount": false,
            "countLimit": 1,
            "limitStock": true,
            "stockCount": 100,
            "id": "cup-coffee",
            "active": {
              "from": "2021-12-31T22:00:00.000Z",
              "to": "2022-12-30T22:00:00.000Z"
            },
            "period": "monthly",
            "requirement": {
              "category": "",
              "tags": [],
              "missions": [],
              "achievements": [],
              "level": {
                "id": "level-1",
                "ordinal": 0
              }
            },
            "account": "docs-for-devs"
          },
          "player": {
            "name": "Susan Smith",
            "points": 962,
            "credits": 100155
          }
        }
      },
      "GetMysteryBoxes": {
        "value": [
          {
            "stock": {
              "redeemed": 0,
              "available": 60,
              "count": 60
            },
            "name": "Daily Mystery Box",
            "description": "Come back every day and open the Mystery Box for great prizes!",
            "imgUrl": "https://images.gamelayer.co/glimages/gltest/prize.png",
            "priority": 0,
            "category": "",
            "tags": [],
            "isAvailable": true,
            "credits": 1,
            "countLimit": 5,
            "limitCount": false,
            "id": "daily-reward",
            "active": {
              "from": "2021-12-31T22:00:00.000Z",
              "to": "2022-12-30T22:00:00.000Z"
            },
            "period": "daily",
            "requirement": {
              "category": "",
              "tags": [],
              "missions": [],
              "achievements": [],
              "level": {
                "id": "",
                "ordinal": 0
              }
            }
          }
        ]
      },
      "GetPlayer": {
        "value": {
          "tags": [
            "coder"
          ],
          "category": "",
          "imgUrl": "https://images.gamelayer.co/glimages/gltest/girl1.png",
          "isAvailable": true,
          "points": 0,
          "credits": 998,
          "team": "a-team",
          "level": {
            "id": "",
            "name": "",
            "description": "",
            "imgUrl": "",
            "ordinal": 0
          },
          "player": "player-080277",
          "name": "Jane Doe",
          "createdOn": "2022-03-03T05:58:16.622Z",
          "refreshOffset": ""
        }
      },
      "UpdatePlayer": {
        "value": {
          "account": "gltest",
          "player": "player-42",
          "name": "Mr Anderson",
          "tags": [
            "running",
            "health"
          ],
          "category": "",
          "imgUrl": "",
          "points": 300,
          "credits": 30
        }
      },
      "GetPlayerAchievements": {
        "value": {
          "player": {
            "points": 0,
            "credits": 5,
            "name": "Susan Smith"
          },
          "achievements": {
            "started": [
              {
                "description": "Game On! You unlocked the Game Addict badge!!",
                "category": "",
                "tags": [
                  "gamer"
                ],
                "isAvailable": true,
                "steps": 10,
                "status": "started",
                "count": 2,
                "actions": {
                  "startedOn": "2022-03-05T08:51:24.000Z"
                },
                "id": "game-addict",
                "name": "Game Addict",
                "imgUrl": "https://images.gamelayer.co/glimages/gltest/badge1.png",
                "requirement": {
                  "category": "",
                  "tags": [],
                  "missions": [],
                  "achievements": [],
                  "level": {
                    "id": "",
                    "ordinal": 0
                  }
                },
                "reward": {
                  "points": 10,
                  "credits": 10,
                  "achievements": []
                }
              }
            ],
            "completed": [
              {
                "id": "first-login",
                "name": "First Login",
                "description": "You logged in for the first time!",
                "imgUrl": "https://images.gamelayer.co/glimages/gltest/badge2.png",
                "category": "",
                "tags": [
                  "starter"
                ],
                "reward": {
                  "points": 5,
                  "credits": 0,
                  "achievements": []
                },
                "actions": {
                  "startedOn": "2022-03-05T08:51:24.000Z",
                  "completedOn": "2022-03-05T08:52:10.000Z",
                  "firstCompletedOn": "2022-03-05T08:52:10.000Z",
                  "count": 1
                }
              }
            ]
          }
        }
      },
      "GetPlayerEvents": {
        "value": {
          "player": {
            "points": 0,
            "credits": 5,
            "name": "Susan Smith"
          },
          "events": [
            {
              "description": "Use this event each time the player plays a game",
              "name": "Play Game",
              "isAvailable": true,
              "id": "play-game",
              "reward": {
                "points": 0,
                "credits": 0,
                "achievements": []
              },
              "actions": {
                "count": 5,
                "firstCompletedOn": "2022-03-05T08:49:07.319Z",
                "completedOn": "2022-03-05T08:51:33.366Z"
              }
            }
          ]
        }
      },
      "GetPlayerLevels": {
        "value": {
          "player": {
            "name": "Susan Smith",
            "points": 0,
            "credits": 5
          },
          "levels": {
            "started": {
              "id": "level-3",
              "description": "Level Up! You rock .. The hard work paid off and you made it to Master!!",
              "name": "Grand Master",
              "imgUrl": "https://images.gamelayer.co/glimages/gltest/3572831.png",
              "ordinal": 2,
              "started": true,
              "completed": false,
              "reward": {
                "points": 0,
                "credits": 0,
                "achievements": []
              },
              "actions": {
                "startedOn": "2022-03-05T08:49:07.000Z"
              }
            },
            "completed": []
          }
        }
      },
      "GetPlayerMissions": {
        "value": {
          "player": {
            "points": 460,
            "credits": 107,
            "name": "Susan Smith"
          },
          "missions": {
            "started": [],
            "completed": [
              {
                "description": "Complete the game before the end of the month",
                "priority": 2,
                "category": "",
                "isAvailable": true,
                "countLimit": 1,
                "tags": [
                  "games"
                ],
                "imgUrl": "https://images.gamelayer.co/glimages/gltest/game2.png",
                "actions": {
                  "startedOn": "2022-03-11T03:43:52.000Z",
                  "completedOn": "2022-03-11T03:43:52.000Z"
                },
                "id": "play-me",
                "name": "Gaming is Life",
                "period": "monthly",
                "objectives": {
                  "events": [
                    {
                      "currentCount": 1,
                      "id": "play-game",
                      "count": 1
                    }
                  ],
                  "missions": []
                },
                "reward": {
                  "points": 250,
                  "credits": 100,
                  "achievements": [
                    {
                      "id": "game-addict",
                      "steps": 1
                    }
                  ]
                },
                "status": "completed"
              }
            ]
          }
        }
      },
      "GetPlayerMissionProgressStarted": {
        "value": {
          "player": {
            "points": 2867,
            "credits": 0,
            "name": "Str-2 Player"
          },
          "progress": {
            "totalAverage": 0.5,
            "nextRefresh": "2024-04-22T21:00:00.000Z",
            "period": "daily",
            "state": "started",
            "actions": {
              "startedOn": "2024-04-22T02:39:29.000Z"
            },
            "events": [
              {
                "id": "ev-2",
                "count": 10,
                "currentCount": 5,
                "average": 0.5,
                "name": "ev-2",
                "description": "",
                "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png"
              }
            ]
          }
        }
      },
      "GetPlayerMissionProgressCompleted": {
        "value": {
          "player": {
            "points": 2897,
            "credits": 0,
            "name": "Str-2 Player"
          },
          "progress": {
            "totalAverage": 1,
            "nextRefresh": "2024-04-22T21:00:00.000Z",
            "period": "daily",
            "state": "completed",
            "actions": {
              "startedOn": "2024-04-22T02:39:29.000Z",
              "completedOn": "2024-04-22T02:50:59.332Z"
            },
            "events": [
              {
                "id": "ev-2",
                "count": 10,
                "currentCount": 10,
                "average": 1,
                "name": "ev-2",
                "description": "",
                "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png"
              }
            ]
          }
        }
      },
      "GetPlayerPrizes": {
        "value": {
          "player": {
            "name": "Susan Smith",
            "points": 460,
            "credits": 107
          },
          "prizes": [
            {
              "description": "Treat yourself to a hot cup of (house) coffee :)",
              "name": "Coffee",
              "imgUrl": "https://images.gamelayer.co/glimages/gltest/coffee.png",
              "credits": 10,
              "countLimit": 1,
              "id": "cup-coffee",
              "actions": {
                "count": 1,
                "firstCompletedOn": "2022-03-08T03:43:24.206Z",
                "completedOn": "2022-03-08T03:43:24.206Z"
              }
            }
          ]
        }
      },
      "GetPlayerRanking": {
        "value": {
          "player": {
            "points": 460,
            "credits": 107,
            "name": "Susan Smith"
          },
          "ranking": [
            {
              "leaderboard": {
                "id": "hall-of-fame",
                "name": "Hall of Fame",
                "description": "",
                "imgUrl": "",
                "period": "all-time",
                "element": "player",
                "rankBy": "total"
              },
              "rank": 4,
              "scores": 250,
              "count": 10,
              "totalPlayers": 50
            }
          ]
        }
      },
      "GetPlayerStreaks": {
        "value": {
          "player": {
            "points": 2054,
            "credits": 0,
            "name": "Str-2 Player"
          },
          "streaks": {
            "started": [
              {
                "limitCount": false,
                "countLimit": 1,
                "objectives": [
                  "m-2"
                ],
                "id": "streak-4",
                "account": "gltest",
                "period": "weekly",
                "reward": {
                  "points": 0,
                  "credits": 0,
                  "achievements": []
                },
                "actions": {
                  "startedOn": "2024-04-12T02:59:14.410Z",
                  "lastStreakOn": "2024-04-12T02:59:14.410Z",
                  "count": 1
                },
                "name": "Streak Four",
                "description": "Unlimited streak for testing",
                "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
                "priority": 0,
                "category": "",
                "tags": []
              },
              {
                "limitCount": true,
                "countLimit": 5,
                "objectives": [
                  "m-2"
                ],
                "id": "streak-2",
                "account": "gltest",
                "period": "daily",
                "reward": {
                  "points": 1,
                  "credits": 0,
                  "achievements": []
                },
                "actions": {
                  "startedOn": "2024-04-11T02:59:14.318Z",
                  "lastStreakOn": "2024-04-12T03:01:52.174Z",
                  "count": 2
                },
                "name": "Streak Two",
                "description": "Streak Two Description",
                "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
                "priority": 0,
                "category": "",
                "tags": []
              }
            ],
            "completed": [
              {
                "account": "gltest",
                "id": "streak-1",
                "actions": {
                  "completedOn": "2024-04-12T02:56:17.679Z",
                  "count": 1,
                  "firstCompletedOn": "2024-04-12T02:56:17.679Z",
                  "startedOn": "2024-04-12T02:56:17.456Z"
                },
                "objectives": [
                  "m-1"
                ],
                "reward": {
                  "points": 10,
                  "credits": 0,
                  "achievements": []
                },
                "name": "Streak One",
                "description": "Streak One Description",
                "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
                "priority": 0,
                "category": "",
                "tags": [],
                "period": "daily",
                "limitCount": false,
                "countLimit": 1
              }
            ]
          }
        }
      },
      "GetPlayers": {
        "value": [
          {
            "tags": [
              "coder"
            ],
            "category": "",
            "imgUrl": "https://images.gamelayer.co/glimages/gltest/girl1.png",
            "isAvailable": true,
            "points": 0,
            "credits": 998,
            "team": "a-team",
            "level": {
              "id": "",
              "name": "",
              "description": "",
              "imgUrl": "",
              "ordinal": 0
            },
            "player": "player-080277",
            "name": "Jane Doe",
            "createdOn": "2022-03-03T05:58:16.622Z",
            "refreshOffset": ""
          },
          {
            "tags": [
              "gamer"
            ],
            "category": "",
            "imgUrl": "https://images.gamelayer.co/glimages/gltest/girl2.png",
            "isAvailable": true,
            "points": 0,
            "credits": 5,
            "team": "a-team",
            "level": {
              "id": "",
              "name": "",
              "description": "",
              "imgUrl": "",
              "ordinal": 0
            },
            "player": "player-200701",
            "name": "Susan Smith",
            "createdOn": "2022-03-03T05:59:24.752Z",
            "refreshOffset": ""
          }
        ]
      },
      "CreatePlayer": {
        "value": {
          "tags": [],
          "category": "",
          "imgUrl": "",
          "isAvailable": true,
          "points": 0,
          "credits": 0,
          "team": "",
          "level": {
            "id": "",
            "name": "",
            "description": "",
            "imgUrl": "",
            "ordinal": 0
          },
          "player": "player-421",
          "name": "Mr Pete",
          "createdOn": "2022-03-11T04:41:39.880Z"
        }
      },
      "GetPrize": {
        "value": {
          "stock": {
            "redeemed": 2,
            "available": 98,
            "count": 100
          },
          "name": "Coffee",
          "description": "Treat yourself to a hot cup of (house) coffee :)",
          "imgUrl": "https://images.gamelayer.co/glimages/gltest/coffee.png",
          "category": "",
          "tags": [],
          "isAvailable": true,
          "credits": 10,
          "countLimit": 1,
          "limitCount": false,
          "id": "cup-coffee",
          "missionPrize": false,
          "active": {
            "from": "2021-12-31T22:00:00.000Z",
            "to": "2022-12-30T22:00:00.000Z"
          },
          "period": "monthly",
          "requirement": {
            "category": "",
            "tags": [],
            "missions": [],
            "achievements": [],
            "level": {
              "id": "level-1",
              "ordinal": 0
            }
          }
        }
      },
      "ClaimPrize": {
        "value": {
          "code": 2,
          "prize": {
            "id": "cup-coffee",
            "name": "Coffee",
            "description": "Treat yourself to a hot cup of (house) coffee :)",
            "imgUrl": "https://images.gamelayer.co/glimages/gltest/coffee.png",
            "category": "",
            "tags": [],
            "isAvailable": true,
            "active": {
              "from": "2021-12-31T22:00:00.000Z",
              "to": "2022-12-30T22:00:00.000Z"
            },
            "credits": 10,
            "countLimit": 1,
            "limitCount": false,
            "missionPrize": false,
            "period": "monthly",
            "stock": {
              "redeemed": 7,
              "available": 93,
              "count": 100
            },
            "requirement": {
              "category": "",
              "tags": [],
              "missions": [],
              "achievements": [],
              "level": {
                "id": "level-1",
                "ordinal": 0
              }
            }
          },
          "player": {
            "name": "Susan Smith",
            "points": 811,
            "credits": 162
          }
        }
      },
      "GetPrizes": {
        "value": [
          {
            "stock": {
              "redeemed": 2,
              "available": 98,
              "count": 100
            },
            "name": "Coffee",
            "description": "Treat yourself to a hot cup of (house) coffee :)",
            "imgUrl": "https://images.gamelayer.co/glimages/gltest/coffee.png",
            "category": "",
            "tags": [],
            "isAvailable": true,
            "credits": 10,
            "countLimit": 1,
            "limitCount": false,
            "id": "cup-coffee",
            "missionPrize": false,
            "active": {
              "from": "2021-12-31T22:00:00.000Z",
              "to": "2022-12-30T22:00:00.000Z"
            },
            "period": "monthly",
            "requirement": {
              "category": "",
              "tags": [],
              "missions": [],
              "achievements": [],
              "level": {
                "id": "level-1",
                "ordinal": 0
              }
            }
          },
          {
            "stock": {
              "redeemed": 1,
              "available": 49,
              "count": 50
            },
            "name": "Ice Cream",
            "description": "I scream, You scream, We all scream for Ice Cream :)",
            "imgUrl": "https://images.gamelayer.co/glimages/gltest/icecream.png",
            "category": "",
            "tags": [],
            "isAvailable": true,
            "credits": 100,
            "countLimit": 1,
            "limitCount": false,
            "id": "ice-cream",
            "missionPrize": false,
            "active": {
              "from": "2021-12-31T22:00:00.000Z",
              "to": "2022-12-30T22:00:00.000Z"
            },
            "period": "monthly",
            "requirement": {
              "category": "",
              "tags": [],
              "missions": [],
              "achievements": [],
              "level": {
                "id": "level-2",
                "ordinal": 1
              }
            }
          }
        ]
      },
      "GetQuizById": {
        "value": {
          "name": "Master Quiz - 1",
          "description": "System test quiz. No strict mode",
          "imgUrl": "",
          "category": "test",
          "isAvailable": true,
          "requiredPassRate": 100,
          "passMessage": "Congratulations. Yuo passed the quiz!",
          "failMessage": "You did not pass the quiz.",
          "isShuffleRequired": false,
          "id": "st-quiz-1",
          "reward": {
            "points": 100,
            "credits": 1,
            "achievements": []
          },
          "timing": {
            "maxSecondsToComplete": 120
          },
          "maxScore": 7,
          "tags": [
            "tag1"
          ]
        }
      },
      "GetQuizzes": {
        "value": [
          {
            "name": "Master Quiz - 1",
            "description": "System test quiz. No strict mode",
            "imgUrl": "",
            "category": "test",
            "isAvailable": true,
            "requiredPassRate": 100,
            "passMessage": "Congratulations. Yuo passed the quiz!",
            "failMessage": "You did not pass the quiz.",
            "isShuffleRequired": false,
            "id": "st-quiz-1",
            "reward": {
              "points": 100,
              "credits": 1,
              "achievements": []
            },
            "timing": {
              "maxSecondsToComplete": 120
            },
            "maxScore": 7,
            "tags": [
              "tag1"
            ]
          },
          {
            "name": "Master Quiz - 1",
            "description": "System test quiz. Strict mode",
            "imgUrl": "",
            "category": "",
            "isAvailable": true,
            "requiredPassRate": 100,
            "passMessage": "Congratulations. Yuo passed the quiz!",
            "failMessage": "You did not pass the quiz.",
            "isShuffleRequired": false,
            "id": "st-quiz-2",
            "reward": {
              "points": 100,
              "credits": 1,
              "achievements": []
            },
            "timing": {
              "maxSecondsToComplete": 120
            },
            "maxScore": 8,
            "tags": []
          }
        ]
      },
      "GetQuizResults": {
        "value": {
          "quiz": {
            "name": "Master Quiz - 1",
            "description": "System test quiz. No strict mode",
            "imgUrl": "",
            "category": "test",
            "isAvailable": true,
            "requiredPassRate": 100,
            "passMessage": "Congratulations. Yuo passed the quiz!",
            "failMessage": "You did not pass the quiz.",
            "isShuffleRequired": false,
            "id": "st-quiz-1",
            "reward": {
              "points": 100,
              "credits": 1,
              "achievements": []
            },
            "timing": {
              "maxSecondsToComplete": 120
            },
            "maxScore": 7,
            "tags": [],
            "createdOn": "2023-02-05T08:37:23.923Z",
            "updatedOn": "2023-02-05T08:37:23.923Z"
          },
          "player": {
            "name": "John Doe",
            "points": 100,
            "credits": 1
          },
          "actions": {
            "count": 2,
            "lastScore": 7,
            "passed": true,
            "startedOn": "2023-02-05T08:58:47.940Z",
            "completedOn": "2023-02-05T08:58:50.789Z"
          },
          "results": [
            {
              "answers": [
                "6ae91e77"
              ],
              "score": 4,
              "question": {
                "type": "single",
                "imgUrl": "",
                "weight": 4,
                "strictMode": true,
                "choices": [
                  {
                    "imgUrl": "",
                    "text": "Be good",
                    "correctAnswer": false,
                    "id": "5fc5fb82"
                  },
                  {
                    "imgUrl": "",
                    "text": "Be bad",
                    "correctAnswer": true,
                    "id": "6ae91e77"
                  }
                ],
                "text": "What is the meaning of life",
                "id": "d1327ed1"
              }
            },
            {
              "answers": [
                "fe566d5d"
              ],
              "score": 1,
              "question": {
                "type": "single",
                "imgUrl": "",
                "weight": 1,
                "strictMode": true,
                "choices": [
                  {
                    "imgUrl": "",
                    "text": "Be good - 2",
                    "correctAnswer": true,
                    "id": "fe566d5d"
                  },
                  {
                    "imgUrl": "",
                    "text": "Be bad - 2",
                    "correctAnswer": false,
                    "id": "f42f82a8"
                  }
                ],
                "text": "What is the meaning of life - 2",
                "id": "a9c1ca84"
              }
            },
            {
              "answers": [
                "64d3368c"
              ],
              "score": 2,
              "question": {
                "type": "single",
                "imgUrl": "",
                "weight": 2,
                "strictMode": true,
                "choices": [
                  {
                    "imgUrl": "",
                    "text": "Be good - 3",
                    "correctAnswer": true,
                    "id": "64d3368c"
                  },
                  {
                    "imgUrl": "",
                    "text": "Be bad - 3",
                    "correctAnswer": false,
                    "id": "48bb3fdd"
                  }
                ],
                "text": "What is the meaning of life - 3",
                "id": "74a9269f"
              }
            }
          ]
        }
      },
      "StartQuiz": {
        "value": {
          "account": "st-account",
          "player": "st-player-1"
        }
      },
      "StartQuizResponse": {
        "value": {
          "quiz": {
            "id": "st-quiz-1",
            "name": "Master Quiz - 1",
            "description": "System test quiz. No strict mode",
            "imgUrl": "",
            "category": "test",
            "isAvailable": true,
            "maxScore": 7,
            "requiredPassRate": 100,
            "passMessage": "Congratulations. Yuo passed the quiz!",
            "failMessage": "You did not pass the quiz.",
            "isShuffleRequired": false,
            "timing": {
              "maxSecondsToComplete": 120
            },
            "reward": {
              "points": 100,
              "credits": 1,
              "achievements": []
            },
            "tags": []
          },
          "actions": {
            "count": 0,
            "lastScore": 0,
            "passed": false,
            "startedOn": "2023-02-05T08:44:50.425Z"
          },
          "questions": [
            {
              "type": "single",
              "imgUrl": "",
              "weight": 4,
              "strictMode": true,
              "text": "What is the meaning of life",
              "choices": [
                {
                  "imgUrl": "",
                  "text": "Be good",
                  "correctAnswer": false,
                  "id": "5fc5fb82"
                },
                {
                  "imgUrl": "",
                  "text": "Be bad",
                  "correctAnswer": true,
                  "id": "6ae91e77"
                }
              ],
              "id": "d1327ed1"
            },
            {
              "type": "single",
              "imgUrl": "",
              "weight": 1,
              "strictMode": true,
              "text": "What is the meaning of life - 2",
              "choices": [
                {
                  "imgUrl": "",
                  "text": "Be good - 2",
                  "correctAnswer": true,
                  "id": "fe566d5d"
                },
                {
                  "imgUrl": "",
                  "text": "Be bad - 2",
                  "correctAnswer": false,
                  "id": "f42f82a8"
                }
              ],
              "id": "a9c1ca84"
            },
            {
              "type": "single",
              "imgUrl": "",
              "weight": 2,
              "strictMode": true,
              "text": "What is the meaning of life - 3",
              "choices": [
                {
                  "imgUrl": "",
                  "text": "Be good - 3",
                  "correctAnswer": true,
                  "id": "64d3368c"
                },
                {
                  "imgUrl": "",
                  "text": "Be bad - 3",
                  "correctAnswer": false,
                  "id": "48bb3fdd"
                }
              ],
              "id": "74a9269f"
            }
          ],
          "player": {
            "name": "John Doe",
            "points": 0,
            "credits": 0
          }
        }
      },
      "CompleteQuiz": {
        "value": {
          "account": "account-id",
          "player": "player-id",
          "answers": [
            {
              "questionId": "d1327ed1",
              "answerIds": [
                "6ae91e77"
              ]
            },
            {
              "questionId": "a9c1ca84",
              "answerIds": [
                "fe566d5d"
              ]
            },
            {
              "questionId": "74a9269f",
              "answerIds": [
                "64d3368c"
              ]
            }
          ]
        }
      },
      "CompleteQuizResponse": {
        "value": {
          "quiz": {
            "id": "st-quiz-1",
            "name": "Master Quiz - 1",
            "description": "System test quiz. No strict mode",
            "imgUrl": "",
            "category": "test",
            "isAvailable": true,
            "maxScore": 7,
            "requiredPassRate": 100,
            "passMessage": "Congratulations. Yuo passed the quiz!",
            "failMessage": "You did not pass the quiz.",
            "isShuffleRequired": false,
            "timing": {
              "maxSecondsToComplete": 120
            },
            "reward": {
              "points": 100,
              "credits": 1,
              "achievements": []
            },
            "tags": []
          },
          "actions": {
            "count": 2,
            "lastScore": 7,
            "passed": true,
            "startedOn": "2023-02-05T08:58:47.940Z",
            "completedOn": "2023-02-05T08:58:50.789Z"
          },
          "player": {
            "name": "John Doe",
            "points": 100,
            "credits": 1
          },
          "results": [
            {
              "answers": [
                "6ae91e77"
              ],
              "score": 4,
              "question": {
                "type": "single",
                "imgUrl": "",
                "weight": 4,
                "strictMode": true,
                "text": "What is the meaning of life",
                "choices": [
                  {
                    "imgUrl": "",
                    "text": "Be good",
                    "correctAnswer": false,
                    "id": "5fc5fb82"
                  },
                  {
                    "imgUrl": "",
                    "text": "Be bad",
                    "correctAnswer": true,
                    "id": "6ae91e77"
                  }
                ],
                "id": "d1327ed1"
              }
            },
            {
              "answers": [
                "fe566d5d"
              ],
              "score": 1,
              "question": {
                "type": "single",
                "imgUrl": "",
                "weight": 1,
                "strictMode": true,
                "text": "What is the meaning of life - 2",
                "choices": [
                  {
                    "imgUrl": "",
                    "text": "Be good - 2",
                    "correctAnswer": true,
                    "id": "fe566d5d"
                  },
                  {
                    "imgUrl": "",
                    "text": "Be bad - 2",
                    "correctAnswer": false,
                    "id": "f42f82a8"
                  }
                ],
                "id": "a9c1ca84"
              }
            },
            {
              "answers": [
                "64d3368c"
              ],
              "score": 2,
              "question": {
                "type": "single",
                "imgUrl": "",
                "weight": 2,
                "strictMode": true,
                "text": "What is the meaning of life - 3",
                "choices": [
                  {
                    "imgUrl": "",
                    "text": "Be good - 3",
                    "correctAnswer": true,
                    "id": "64d3368c"
                  },
                  {
                    "imgUrl": "",
                    "text": "Be bad - 3",
                    "correctAnswer": false,
                    "id": "48bb3fdd"
                  }
                ],
                "id": "74a9269f"
              }
            }
          ],
          "progress": {
            "points": {
              "before": 0,
              "earned": 100
            },
            "credits": {
              "before": 0,
              "earned": 1
            },
            "levels": {
              "completed": [
                {
                  "id": "st-level-2",
                  "name": "Test Level Two",
                  "description": "Objectives - 5 points",
                  "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
                  "ordinal": 1
                },
                {
                  "id": "st-level-3",
                  "name": "Test Level Three",
                  "description": "Objectives - 10 points",
                  "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
                  "ordinal": 2
                }
              ],
              "started": {}
            },
            "missions": [],
            "achievements": []
          }
        }
      },
      "GetRaffle": {
        "value": {
          "stock": {
            "redeemed": 0,
            "available": 30,
            "count": 30
          },
          "name": "Weekly Prize Draw",
          "description": "Enter the weekly draw for a chance to win great prizes! Draw takes place every Sunday at 19:00!",
          "imgUrl": "https://images.gamelayer.co/glimages/gltest/raffle.png",
          "priority": 0,
          "category": "",
          "tags": [],
          "isAvailable": true,
          "active": {
            "from": "2021-12-31T22:00:00.000Z",
            "to": "2022-12-30T22:00:00.000Z"
          },
          "drawTime": "2022-01-09T19:00:00.000Z",
          "credits": 1,
          "countLimit": 5,
          "limitCount": false,
          "period": "weekly",
          "requirement": {
            "category": "",
            "tags": [],
            "missions": [],
            "achievements": [],
            "level": {
              "id": "",
              "ordinal": 0
            }
          },
          "id": "weekly-raffle"
        }
      },
      "GetRaffles": {
        "value": [
          {
            "stock": {
              "redeemed": 0,
              "available": 30,
              "count": 30
            },
            "name": "Weekly Prize Draw",
            "description": "Enter the weekly draw for a chance to win great prizes! Draw takes place every Sunday at 19:00!",
            "imgUrl": "https://images.gamelayer.co/glimages/gltest/raffle.png",
            "priority": 0,
            "category": "",
            "tags": [],
            "isAvailable": true,
            "active": {
              "from": "2021-12-31T22:00:00.000Z",
              "to": "2022-12-30T22:00:00.000Z"
            },
            "drawTime": "2022-01-09T19:00:00.000Z",
            "credits": 1,
            "countLimit": 5,
            "limitCount": false,
            "period": "weekly",
            "requirement": {
              "category": "",
              "tags": [],
              "missions": [],
              "achievements": [],
              "level": {
                "id": "",
                "ordinal": 0
              }
            },
            "id": "weekly-raffle"
          }
        ]
      },
      "RedeemRaffle": {
        "value": {
          "code": 1,
          "message": "Raffle ticket redeemed successfully",
          "raffle": {
            "id": "weekly-raffle",
            "name": "Weekly Prize Draw",
            "description": "Enter the weekly draw for a chance to win great prizes! Draw takes place every Sunday at 19:00!",
            "imgUrl": "https://images.gamelayer.co/glimages/gltest/raffle.png",
            "category": "",
            "tags": [],
            "isAvailable": true,
            "credits": 1,
            "active": {
              "from": "2021-12-31T22:00:00.000Z",
              "to": "2022-12-30T22:00:00.000Z"
            },
            "drawTime": "2022-01-09T19:00:00.000Z",
            "period": "weekly"
          },
          "player": {
            "name": "Susan Smith",
            "points": 811,
            "credits": 182
          }
        }
      },
      "GetRuleById": {
        "value": {
          "name": "New rule name",
          "description": "Rock'n roll",
          "imgUrl": "",
          "isAvailable": true,
          "priority": 100,
          "breakOnEval": false,
          "id": "rule-1",
          "conditionId": "startDateOrCreatedOnRange",
          "actionId": "actionMultiplyGainedPoints",
          "conditionParams": {
            "minDays": {
              "value": 8
            },
            "maxDays": {
              "value": 10
            },
            "days": {
              "value": 10
            },
            "startDate": {
              "value": "2023-09-04"
            }
          },
          "actionParams": {
            "multiplier": {
              "value": 4
            }
          },
          "createdOn": "2023-09-04T02:32:16.487Z",
          "updatedOn": "2023-09-04T02:32:16.518Z"
        }
      },
      "GetSurvey": {
        "value": {
          "name": "Survey Two",
          "description": "",
          "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
          "category": "",
          "tags": [],
          "isAvailable": true,
          "isShuffleRequired": true,
          "id": "st-survey-2",
          "questions": [
            {
              "type": "single",
              "imgUrl": "",
              "id": "t_ldfjzfw8_qwhfa15ki",
              "text": "q1",
              "choices": [
                {
                  "imgUrl": "",
                  "text": "r1-1",
                  "id": "s_ldfk0icu_qigk0ctdr"
                },
                {
                  "imgUrl": "",
                  "text": "r1-2",
                  "id": "r_ldfjzpog_lfmcn095v"
                },
                {
                  "imgUrl": "",
                  "text": "r1-3",
                  "id": "d_ldfjzv4g_4g8xht4f0"
                }
              ]
            },
            {
              "type": "single",
              "imgUrl": "",
              "id": "h_ldfk02s4_8syju702w",
              "text": "q2",
              "choices": [
                {
                  "imgUrl": "",
                  "text": "r2-1",
                  "id": "r_ldfk0icu_374txinmb"
                },
                {
                  "imgUrl": "",
                  "text": "r2-2",
                  "id": "k_ldfk09na_bkpawnwse"
                },
                {
                  "imgUrl": "",
                  "text": "r2-3",
                  "id": "w_ldfk0d10_wt6v0j6sg"
                }
              ]
            }
          ],
          "reward": {
            "points": 0,
            "credits": 0,
            "achievements": []
          },
          "createdOn": "2023-01-28T06:10:25.116Z",
          "updatedOn": "2023-01-28T06:10:25.116Z"
        }
      },
      "GetSurveys": {
        "value": [
          {
            "name": "st-survey-1",
            "description": "",
            "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
            "category": "",
            "tags": [],
            "isAvailable": true,
            "isShuffleRequired": true,
            "id": "st-survey-1",
            "reward": {
              "points": 0,
              "credits": 0,
              "achievements": []
            },
            "createdOn": "2023-01-25T05:58:17.834Z",
            "updatedOn": "2023-01-25T05:58:17.835Z"
          },
          {
            "name": "Survey Two",
            "description": "",
            "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
            "category": "",
            "tags": [],
            "isAvailable": true,
            "isShuffleRequired": true,
            "id": "st-survey-2",
            "reward": {
              "points": 0,
              "credits": 0,
              "achievements": []
            },
            "createdOn": "2023-01-28T06:10:25.116Z",
            "updatedOn": "2023-01-28T06:10:25.116Z"
          }
        ]
      },
      "GetSurveyResultResponse": {
        "value": {
          "survey": {
            "id": "st-survey-2",
            "name": "Survey Two",
            "description": "",
            "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
            "category": "",
            "isAvailable": true,
            "isShuffleRequired": true,
            "tags": [],
            "questions": [],
            "reward": {
              "points": 0,
              "credits": 0,
              "achievements": []
            },
            "createdOn": "2023-01-28T06:10:25.116Z",
            "updatedOn": "2023-01-28T06:10:25.116Z"
          },
          "results": {
            "questions": [
              {
                "id": "t_ldfjzfw8_qwhfa15ki",
                "text": "q1",
                "imgUrl": "",
                "type": "single",
                "choices": [
                  {
                    "id": "r_ldfjzpog_lfmcn095v",
                    "value": 4,
                    "rank": 1,
                    "percent": 100,
                    "text": "r1-2",
                    "imgUrl": ""
                  },
                  {
                    "id": "s_ldfk0icu_qigk0ctdr",
                    "value": 0,
                    "rank": 2,
                    "percent": 0,
                    "text": "r1-1",
                    "imgUrl": ""
                  },
                  {
                    "id": "d_ldfjzv4g_4g8xht4f0",
                    "value": 0,
                    "rank": 3,
                    "percent": 0,
                    "text": "r1-3",
                    "imgUrl": ""
                  }
                ]
              },
              {
                "id": "h_ldfk02s4_8syju702w",
                "text": "q2",
                "imgUrl": "",
                "type": "single",
                "choices": [
                  {
                    "id": "r_ldfk0icu_374txinmb",
                    "value": 4,
                    "rank": 1,
                    "percent": 100,
                    "text": "r2-1",
                    "imgUrl": ""
                  },
                  {
                    "id": "w_ldfk0d10_wt6v0j6sg",
                    "value": 1,
                    "rank": 2,
                    "percent": 25,
                    "text": "r2-3",
                    "imgUrl": ""
                  },
                  {
                    "id": "k_ldfk09na_bkpawnwse",
                    "value": 0,
                    "rank": 3,
                    "percent": 0,
                    "text": "r2-2",
                    "imgUrl": ""
                  }
                ]
              }
            ]
          }
        }
      },
      "CompleteSurveyRequest": {
        "value": {
          "account": "st-account",
          "player": "st-player-1",
          "answers": [
            {
              "questionId": "t_ldfjzfw8_qwhfa15ki",
              "answerIds": [
                "r_ldfjzpog_lfmcn095v"
              ]
            },
            {
              "questionId": "h_ldfk02s4_8syju702w",
              "answerIds": [
                "r_ldfk0icu_374txinmb"
              ]
            }
          ]
        }
      },
      "CompleteSurveyResponse": {
        "value": {
          "survey": {
            "id": "st-survey-2",
            "name": "Survey Two",
            "description": "",
            "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
            "category": "",
            "isAvailable": true,
            "isShuffleRequired": true,
            "tags": [],
            "questions": [],
            "reward": {
              "points": 0,
              "credits": 0,
              "achievements": []
            },
            "createdOn": "2023-01-28T06:10:25.116Z",
            "updatedOn": "2023-01-28T06:10:25.116Z"
          },
          "actions": {
            "count": 1,
            "startedOn": "2023-02-05T07:40:46.813Z",
            "completedOn": "2023-02-05T07:40:46.814Z",
            "firstCompletedOn": "2023-02-05T07:40:46.814Z"
          },
          "player": {
            "name": "John Doe",
            "points": 0,
            "credits": 0
          },
          "results": [
            {
              "question": {
                "id": "t_ldfjzfw8_qwhfa15ki",
                "text": "q1",
                "imgUrl": "",
                "type": "single",
                "choices": [
                  {
                    "id": "r_ldfjzpog_lfmcn095v",
                    "value": 5,
                    "rank": 1,
                    "percent": 100,
                    "text": "r1-2",
                    "imgUrl": ""
                  },
                  {
                    "id": "s_ldfk0icu_qigk0ctdr",
                    "value": 0,
                    "rank": 2,
                    "percent": 0,
                    "text": "r1-1",
                    "imgUrl": ""
                  },
                  {
                    "id": "d_ldfjzv4g_4g8xht4f0",
                    "value": 0,
                    "rank": 3,
                    "percent": 0,
                    "text": "r1-3",
                    "imgUrl": ""
                  }
                ]
              },
              "answer": [
                "r_ldfjzpog_lfmcn095v"
              ]
            },
            {
              "question": {
                "id": "h_ldfk02s4_8syju702w",
                "text": "q2",
                "imgUrl": "",
                "type": "single",
                "choices": [
                  {
                    "id": "r_ldfk0icu_374txinmb",
                    "value": 5,
                    "rank": 1,
                    "percent": 100,
                    "text": "r2-1",
                    "imgUrl": ""
                  },
                  {
                    "id": "w_ldfk0d10_wt6v0j6sg",
                    "value": 1,
                    "rank": 2,
                    "percent": 20,
                    "text": "r2-3",
                    "imgUrl": ""
                  },
                  {
                    "id": "k_ldfk09na_bkpawnwse",
                    "value": 0,
                    "rank": 3,
                    "percent": 0,
                    "text": "r2-2",
                    "imgUrl": ""
                  }
                ]
              },
              "answer": [
                "r_ldfk0icu_374txinmb"
              ]
            }
          ],
          "progress": {
            "points": {
              "before": 0,
              "earned": 0
            },
            "credits": {
              "before": 0,
              "earned": 0
            },
            "levels": {
              "completed": [
                {
                  "id": "st-level-1",
                  "name": "Test Level One",
                  "description": "Objectives - none (all start here)",
                  "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
                  "ordinal": 0
                }
              ],
              "started": {
                "id": "st-level-2",
                "name": "Test Level Two",
                "description": "Objectives - 5 points",
                "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
                "ordinal": 1,
                "startedOn": "2023-02-05T09:40:46+02:00"
              }
            },
            "missions": [],
            "achievements": []
          }
        }
      },
      "GetStreak": {
        "value": {
          "isAvailable": true,
          "description": "Streak One Description",
          "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
          "tags": [],
          "category": "",
          "limitCount": true,
          "countLimit": 5,
          "priority": 0,
          "objectives": [
            "run-mission"
          ],
          "id": "streak-1",
          "name": "Streak One",
          "active": {
            "from": "2024-03-24T07:25:09.000Z",
            "to": "2024-06-30T06:25:09.000Z"
          },
          "period": "weekly",
          "reward": {
            "multiplier": 1,
            "points": 1,
            "credits": 0,
            "achievements": []
          },
          "account": "gltest"
        }
      },
      "GetStreaks": {
        "value": [
          {
            "isAvailable": true,
            "description": "Streak One Description",
            "imgUrl": "https://images.gamelayer.co/glimages/default/defaultimg.png",
            "tags": [],
            "category": "",
            "limitCount": true,
            "countLimit": 5,
            "priority": 0,
            "objectives": [
              "run-mission"
            ],
            "id": "streak-1",
            "name": "Streak One",
            "active": {
              "from": "2024-03-24T07:25:09.000Z",
              "to": "2024-06-30T06:25:09.000Z"
            },
            "period": "weekly",
            "reward": {
              "multiplier": 1,
              "points": 1,
              "credits": 0,
              "achievements": []
            },
            "account": "gltest"
          }
        ]
      },
      "GetTeam": {
        "value": {
          "team": {
            "description": "Home of the brave!",
            "imgUrl": "https://images.gamelayer.co/glimages/gltest/team1.png",
            "category": "",
            "tags": [],
            "isAvailable": true,
            "points": 1521,
            "credits": 178,
            "level": "",
            "id": "a-team",
            "name": "The A-Team",
            "createdOn": "2022-03-03T06:00:00.825Z"
          },
          "players": [
            {
              "tags": [
                "coder"
              ],
              "category": "",
              "points": 0,
              "credits": 998,
              "player": "player-080277",
              "name": "Jane Doe",
              "createdOn": "2022-03-03T05:58:16.622Z"
            },
            {
              "tags": [
                "running",
                "health"
              ],
              "category": "",
              "points": 811,
              "credits": 172,
              "player": "player-200701",
              "name": "Susan Smith",
              "createdOn": "2022-03-03T05:59:24.752Z"
            }
          ]
        }
      },
      "UpdateTeam": {
        "value": {
          "id": "a-team",
          "name": "A-team",
          "category": "",
          "tags": "running",
          "points": 100,
          "credits": 0,
          "account": "docs-for-devs"
        }
      },
      "UpdatedTeam": {
        "value": {
          "description": "Home of the brave!",
          "imgUrl": "https://images.gamelayer.co/glimages/gltest/team1.png",
          "category": "",
          "tags": [],
          "isAvailable": true,
          "points": 100,
          "credits": 0,
          "level": "",
          "id": "a-team",
          "name": "A-team",
          "createdOn": "2022-03-03T06:00:00.825Z"
        }
      },
      "GetTeams": {
        "value": [
          {
            "description": "Home of the brave!",
            "imgUrl": "https://images.gamelayer.co/glimages/gltest/team1.png",
            "category": "",
            "tags": [],
            "isAvailable": true,
            "points": 1521,
            "credits": 178,
            "level": "",
            "id": "a-team",
            "name": "The A-Team",
            "createdOn": "2022-03-03T06:00:00.825Z"
          },
          {
            "description": "We are the champions!",
            "imgUrl": "https://images.gamelayer.co/glimages/gltest/team2.png",
            "category": "",
            "tags": [],
            "isAvailable": true,
            "points": 3,
            "credits": 0,
            "level": "",
            "id": "b-team",
            "name": "The B-Squad",
            "createdOn": "2022-03-03T06:00:16.892Z"
          }
        ]
      },
      "CreateTeam": {
        "value": {
          "id": "team-sm",
          "account": "docs-for-devs",
          "name": "Sales & Marketing",
          "description": "Team for the Sales & Marketing folks",
          "imgUrl": "https://images.gamelayer.co/glimages/gltest/team-one.png",
          "category": "",
          "tags": "",
          "isAvailable": true,
          "points": 0,
          "credits": 0,
          "level": ""
        }
      },
      "CreatedTeam": {
        "value": {
          "description": "Team for the Sales & Marketing folks",
          "imgUrl": "https://images.gamelayer.co/glimages/gltest/team-one.png",
          "category": "",
          "tags": [],
          "isAvailable": true,
          "points": 0,
          "credits": 0,
          "level": "",
          "id": "team-sm",
          "name": "Sales & Marketing",
          "createdOn": "2022-03-03T06:00:00.825Z"
        }
      }
    },
    "headers": {
      "X-Total-Count": {
        "description": "Total number of results available conforming to the query criteria specified in \nthe request parameters. In case returned data contains data from multiple elements\nX-Total-Count-Id specifies the element ID which has most elements complying to \nthe query\n",
        "schema": {
          "type": "integer"
        }
      },
      "X-Limit-Count": {
        "description": "Result pagination limit count specified (or implicitly applied) in the \nrequest, i.e. how many results are included in the response\n",
        "schema": {
          "type": "integer"
        }
      },
      "X-Skip-Count": {
        "description": "Result pagination skip count (offset) specified (or implicitly applied) in \nthe request, i.e. how many results have been skipped from the beginning in \nthe response\n",
        "schema": {
          "type": "integer"
        }
      }
    }
  }
}