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.

    # Authentication

    You authenticate to the GameLayer API by providing your secret API key in the request
    header ```api-key```

    The API key will be provided when you sign up for a GameLayer account.

    In case the account ID does not match with the API key, HTTP status 401,
    Not Authorized will be the response.

    # Errors

    The API uses standard HTTP status codes to indicate the success or failure of an API call.
    The body of the response will be JSON in the following format:

    ```
    {
        "error": "Player 'player-520' exists for account 'docs-for-devs'",
        "errorCode": 22
    }
    ```

    # Dual (Virtual) Currency System

    GameLayer uses two distinct virtual currencies:

    | Currency | Behavior | Purpose |
    |----------|----------|---------|
    | **Points** | Accumulate over time. Never decrease through player actions. | Progression and ranking — points determine level advancement and leaderboard position. |
    | **Credits** | Spendable balance. Increase when earned, decrease when redeemed. | Economy — credits are spent on prizes, mystery boxes, and raffle tickets. |

    Both currencies can be awarded by events, missions, achievements, levels, streaks, quizzes, and surveys.

    # Requirements and Eligibility

    Most elements support a **requirement** block that acts as a prerequisite gate. A player must satisfy all specified conditions to be eligible:

    - **Tags** — player must have all listed tags.
    - **Missions** — player must have completed all listed missions.
    - **Achievements** — player must have completed all listed achievements.
    - **Level** — player must have reached at least the specified level (by ordinal).
    - **Category** — player must belong to the specified category.

    Requirements 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.

    # Periods and Refresh Cycles

    Many elements operate on a **period** that determines how often they reset:

    | Period | Resets |
    |--------|--------|
    | `daily` | Once per day |
    | `weekly` | Once per week |
    | `monthly` | Once per month |
    | `all-time` | Never resets |

    When a period resets, completion counts and progress for that element start fresh.

    # Refresh Offset

    Each 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`.

    # The Progression Cascade

    When your application calls `POST /events/{id}/complete`, a single action can cascade through multiple elements automatically:

    1. **Event completes** — awards points, credits, and achievement steps.
    2. **Rules evaluate** — matching rules apply point multipliers.
    3. **Missions progress** — missions with this event in their objectives update. Completed missions grant their reward.
    4. **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.
    5. **Achievements advance** — steps from events, missions, and streaks are applied. Completed achievements grant their reward and may chain to other achievements.
    6. **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.
    7. **Leaderboards update** — player and team scores are updated.

    The response includes a **progress** object summarizing everything that happened.
  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.

      Each 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).

      **Achievement chaining**: An achievement's reward can include steps toward other achievements. For example, completing "Bronze Collector" could grant 1 step toward "Silver Collector".

      Achievements support **requirements** (tags, missions, achievements, level, category) that gate eligibility. Requirements are checked when the achievement is first unlocked.
  - 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.
  - 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`.

      When 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.

      **Key properties**:
      - **Reward**: Points, credits, and/or achievement steps awarded on completion.
      - **Count limit**: Optionally cap completions per player per period (daily/weekly/monthly/all-time).
      - **Count parameter**: Pass a `count` value to register multiple completions in a single call.
      - **Mode**: `increment` (add to count) or `set` (set count to a specific value, adjusting rewards accordingly).
      - **Tags**: Dynamic context tags can be passed at completion time.
  - name: Journal
    x-displayName: Journal
    description: |
      The journal provides a complete audit trail of all point and credit
      transactions for each player. Every time points or credits are earned
      or spent through gamification elements — missions, achievements, events,
      prizes, and more — a journal entry is recorded. Use the journal to query
      a player's transaction history within a date range, or retrieve an
      aggregated summary of earned and spent totals.      
  - name: Leaderboards
    x-displayName: Leaderboards
    description: |
      Leaderboards provide competitive rankings comparing players or teams based on accumulated points or credits.

      **Key properties**:
      - **Element**: `player` (individual ranking), `team` (team aggregate scores), or `teammembers` (players ranked within a specific team).
      - **Rank by**: `total` (sum of scores) or `average` (average per team member — useful for fair team comparison regardless of team size).
      - **Units**: `points` or `credits` — which currency drives the score.
      - **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.
      - **Period**: `daily`, `weekly`, `monthly`, or `all-time`. Scores reset each period.

      Scores update automatically as players earn points or credits. Rankings are computed dynamically with proper tie handling. Leaderboards support requirements for eligibility gating.
  - name: Levels
    x-displayName: Levels
    description: |
      Levels represent a player's progression tier, forming an ordered ladder that players advance through sequentially.

      Each 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.

      As 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.

      Levels can be used in requirements to gate access to other elements (e.g., "must be level 3 to access premium missions").
  - name: Missions
    x-displayName: Missions
    description: |
      Missions are goal-based challenges that require players to complete one or more objectives within a time period.

      **Lifecycle**: `available` → `started` (first relevant event completed) → `completed` (all objectives met).

      **Key properties**:
      - **Objectives**: Events with target counts (e.g., "complete event X 5 times"). Can also be driven by other missions, a quiz, or a survey.
      - **Period**: `daily`, `weekly`, `monthly`, or `all-time`. Progress resets each period.
      - **Count limit**: Cap how many times a player can complete the mission per period (default: once).
      - **Time to complete**: Optional time limit (in seconds) from when the mission starts.
      - **Reward**: Points, credits, and/or achievement steps awarded on completion.
      - **Requirement**: Prerequisites (tags, missions, achievements, level, category) the player must meet to be eligible.

      Mission 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.
  - name: MysteryBoxes
    x-displayName: Mystery Boxes
    description: |
      Mystery boxes are credit-based containers that award one randomly selected prize from a pool.

      A 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.

      **Key properties**:
      - **Credits**: Cost to open the mystery box.
      - **Prizes**: Pool of prizes with quantity allocations determining selection probability.
      - **Count limit**: Cap on openings per player per period.
      - **Requirement**: Prerequisites the player must meet to be eligible.
  - 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.

      **Dual currency system**:
      - **Points**: Accumulate over time and never decrease through player actions. Used for progression (level advancement) and leaderboard ranking.
      - **Credits**: A spendable balance that increases when earned and decreases when redeemed on prizes, mystery boxes, or raffle tickets.

      Players 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.

      Player progress endpoints provide views into started/completed missions, achievements, levels, streaks, redeemed prizes, and leaderboard rankings.
  - name: Prizes
    x-displayName: Prizes
    description: |
      Prizes are items in a reward shop that players redeem using credits.

      When a player claims a prize, the platform verifies sufficient credits, requirement eligibility, and stock availability. Redemption outcomes:
      - `REDEEMED` — success, credits deducted and prize granted.
      - `NOT_ENOUGH_CREDITS` — insufficient credit balance.
      - `OUT_OF_STOCK` — no stock remaining.
      - `COUNT_EXCEEDED` — player has reached their redemption limit for this period.
      - `VOUCHER_INVALID` — voucher code is invalid or has already been used.

      **Key properties**:
      - **Credits**: Cost to redeem the prize.
      - **Stock**: Optional finite stock. When all units are redeemed, the prize shows as out of stock.
      - **Count limit**: Cap how many times a player can redeem per period.
      - **Period**: `daily`, `weekly`, `monthly`, or `all-time` for count limit tracking.
      - **Requirement**: Prerequisites the player must meet.

      **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.
  - name: Quizzes
    x-displayName: Quizzes
    description: |
      Quizzes are scored assessments where players answer questions and receive rewards for passing.

      **Types**:
      - `basic` — all questions answered before scoring. Results available after submission.
      - `immediate` — scored question-by-question with immediate feedback.

      **Flow**: Start quiz → receive questions → submit answers → platform scores against correct answers → pass/fail determined by required pass rate.

      **Key properties**:
      - **Questions**: Each has a type (`single` or `multi`), text, optional image, weighted score, and answer choices with correct answers marked.
      - **Required pass rate**: Percentage of maximum score needed to pass (0–100).
      - **Timing**: Optional time limit in seconds from when the player starts.
      - **Shuffle**: Optionally randomize question order per player.
      - **Reward**: Points, credits, and/or achievement steps — awarded only if the quiz is passed.

      Quizzes can drive missions — when a player passes the quiz, the linked mission is automatically completed.
  - 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.

      Each 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.

      **Key properties**:
      - **Credits**: Cost per ticket.
      - **Draw time**: Scheduled date and time for the prize draw.
      - **Prizes**: Pool of prizes available in the draw.
      - **Count limit**: Maximum tickets a player can purchase per period.
      - **Active window**: Date range during which tickets can be purchased.
      - **Requirement**: Prerequisites the player must meet.
  - 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.

      Rules 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.

      **Available conditions**: Player created within date range, start date range, player created before a date.
      **Available actions**: Multiply earned points by a given factor. Multiple rules can stack multipliers.
  - 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.

      A 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.

      **Key properties**:
      - **Objectives**: Mission ID(s) driving the streak (currently limited to one mission).
      - **Period**: `daily`, `weekly`, or `monthly`.
      - **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.
      - **Reward**: Points, credits, and/or achievement steps awarded per streak increment.
  - name: Surveys
    x-displayName: Surveys
    description: |
      Surveys collect player feedback through questions with no correct answers and no scoring.

      Unlike 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.

      **Key properties**:
      - **Questions**: Each has a type (`single` or `multi`), text, optional image, and answer choices (no correct answers).
      - **Shuffle**: Optionally randomize question order.
      - **Reward**: Points, credits, and/or achievement steps — always awarded on completion.

      Surveys can drive missions, just like quizzes. Completing the survey auto-completes the linked mission.
  - 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.

      When 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.

      **Key properties**:
      - **Category**: Segment teams into groups.
      - **Tags**: Label teams for filtering and requirement matching.
      - **Level**: Teams can be assigned to levels, similar to players.
      - **Points / Credits**: Aggregated from team members' activity.
paths:
  /achievements/{id}:
    get:
      description: |
        Retrieves the achievement with the specified ID within the given account.

        Achievements 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).
      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
          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.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
        - Achievements
  /achievements:
    get:
      description: |
        Retrieves achievements based on provided query within the given account
      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
          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.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
        - Achievements
  /analytics:
    get:
      description: |
        Retrieves analytics for the given account.
      operationId: getAnalytics
      summary: Retrieves analytics for the given account.
      parameters:
        - $ref: '#/components/parameters/Account'
      responses:
        '200':
          description: |
            Analytics retrieved succesfully
          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.
        Only the date part of query parameters will be used and is required.
        Date is given in format YYYY-MM-DD. Example: 2022-09-01
      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
          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**:

        1. The event's configured reward (points, credits, achievement steps) is awarded.
        2. Rules are evaluated and point multipliers applied if conditions match.
        3. Missions with this event in their objectives have progress updated; completed missions grant their rewards.
        4. Streaks linked to completed missions are incremented (or reset if a period was missed).
        5. Achievements receiving steps are advanced; completed achievements grant their rewards and may chain.
        6. Level objectives are checked; the player levels up if thresholds are met.
        7. Leaderboard scores are updated for the player and their team.

        The response includes a **progress** object summarizing all completed missions, started missions, completed/unlocked achievements, level changes, streak updates, and triggered rules.

        **Parameters**:
        - `count` — number of completions to register (default: 1). Useful for batch actions (e.g., "walked 5000 steps").
        - `tags` — optional tags passed at completion time for dynamic context and requirement matching.

        If a language property is provided in the body, the response will contain
        translated elements. In case no translations are found for the language,
        default texts will be used in the response.
      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
            wait and retry after the duration indicated by the `Retry-After` header (in seconds).
            This happens when concurrent requests attempt to complete events for the same player simultaneously.
          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
      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
          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.
      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
          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.
          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
        record all point and credit transactions (earned and spent) across gamification elements such
        as missions, achievements, events, and prizes.

        Results are paginated and sortable. Use `skip` and `limit` for pagination.
      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.
            Examples: `mission`, `achievement`, `event`, `prize`
          schema:
            type: string
        - name: action
          in: query
          required: false
          description: |
            Filter entries by action type. Allowed values are:
            - `earn` - entries where points or credits were earned
            - `spend` - entries where points or credits were spent
          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
          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.
          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.
        The summary groups entries by action type (`earn` and `spend`) and provides totals for
        points, credits, and the number of transactions in each category.
      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
          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.
          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.

        The 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).

        If the leaderboard has a `drivenBy` configuration, only completions of the specified missions contribute to scores. Otherwise, all point/credit activity counts.

        If the leaderboard contains a partition, the partition value to query must be provided as a parameter.
      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
          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
      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
          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.
          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.

        Levels 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.
      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
          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
      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
          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.
          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.

        Missions 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.
      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
          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.

        When the `player` parameter is provided, results are filtered based on the player's eligibility (requirements and tags).

        Results are sorted by active start date.
      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
          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.
          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
      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
          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 
            matching the language filter.
          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.

        **Redemption outcomes** (returned in the response):
        - `REDEEMED` — success. Credits are deducted and a random prize is awarded.
        - `NOT_ENOUGH_CREDITS` — the player's credit balance is less than the mystery box cost.
        - `OUT_OF_STOCK` — all prizes in the mystery box have been claimed.
        - `COUNT_EXCEEDED` — the player has reached their redemption limit for this period.

        If a language property is provided in the body, the response will contain
        translated elements. In case no translations are found for the language,
        default texts will be used in the response.
      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 
        parameters, only those mystery boxes the player can currently afford will be returned.
        By default, the response will contain all available mystery boxes at the time of the request. 
        That includes mystery boxes that have been explicitly set as available and have stock available, 
        if applicable
      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.
          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.

        The 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.
      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
          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
        only certain field to be updated, i.e. if a field is not present in the request, it will not be modified
        on the updated document
      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
      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 
        specified ID within the given account
      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
          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 
            for the given language filter.
          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
      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
          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.
          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
      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
          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.
          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 
        ID within the given account
      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
          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 
            for the given language filter.
          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 
        ID within the given account.
      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
          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.
          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
      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
          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 
            for the given language filter
          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
      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
          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 
            for the given language filter.
          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 
        ID within the given account
      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
          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 
            for the given language filter.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
        - Players
  /players:
    get:
      description: |
        Retrieves all players within the given account.
      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
      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
        already exist for the given account. Returns which players were created
        and which already existed.
      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:
            - Missing or empty players array
            - Players array exceeds 1000 items
            - A player entry is missing required fields (player, name)
            - Invalid refreshOffset value
            - Account player limit exceeded
          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
        silently ignored — the response reports how many were actually deleted versus
        how many were requested.

        When `hardDelete` is set to `true`, all related player data is cascade-deleted
        across all collections (events, missions, achievements, streaks, levels, prizes,
        claims, quizzes, leaderboard scores, and journal entries). Without `hardDelete`,
        only the player documents are removed and related data is left intact.
      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
                    collections (events, missions, achievements, streaks, levels,
                    prizes, claims, quizzes, leaderboard scores, journal entries).
                    When false, only the player documents are removed.
            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:
            - Missing or empty players array
            - Players array exceeds 1000 items
          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
      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
          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.

        **Redemption outcomes** (returned in the response):
        - `REDEEMED` — success. Credits are deducted and the prize is granted.
        - `NOT_ENOUGH_CREDITS` — the player's credit balance is less than the prize cost.
        - `OUT_OF_STOCK` — no stock remaining for this prize.
        - `COUNT_EXCEEDED` — the player has reached their redemption limit for this period.
        - `VOUCHER_INVALID` — the voucher code is invalid or has already been used.
        - `VOUCHER_REQUIRED` — the prize requires a voucher code but none was provided.

        **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.

        **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`.

        If a language property is provided in the body, the response will contain
        translated elements. In case no translations are found for the language,
        default texts will be used in the response.
      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,
        bypassing the credit check. Requirements, stock limits, and claim count limits are still enforced. Only the credit
        cost is waived.

        Codes can be **single-use** (default) or **multi-use**. 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.

        Duplicate codes (codes that already exist for this prize) are silently skipped. The response indicates how many
        codes were inserted and how many were duplicates.
      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.
      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:
            - `active` — only unused voucher codes
            - `used` — only used voucher codes
            - `all` — all voucher codes regardless of status
          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
        specific codes are deleted. If no `codes` array is provided, all voucher codes for the prize are deleted.
      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
        parameters, only those prizes the player can currently afford will be returned. By default,
        the response will contain all available prizes at the time of the request. That includes prizes
        that have been explicitly set as available and have stock available, if applicable.

        Mission prizes are excluded by default. Use the `missionPrize` query parameter to include or filter for mission prizes.
      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.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
        - Prizes
  /quizzes/{id}:
    get:
      description: |
        Retrieves quiz with specified ID within the given account.

        Quizzes 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.
      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.
          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 
        parameters, only those quizzes the player is eligible for will be returned.
        By default, the response will contain all available quizzes at the time of the request. 
        That includes quizzes that have been explicitly set as available.
      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.
      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.
          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.

        If a quiz is already started and active for the player, no action will be taken
        (i.e. no quiz re-start). Current quiz questions for the player will be returned
        in the response. Questions may be shuffled if the quiz has shuffle enabled.
      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.
          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.

        The 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.
      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.
          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
      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
          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 
        parameters, only those raffles the player can currently afford will be returned.
        By default, the response will contain all available raffles at the time of the request. 
        That includes raffles that have been explicitly set as available and have stock available, 
        if applicable
      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.
          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.

        **Redemption outcomes** (returned in the response):
        - `REDEEMED` — success. Credits are deducted and a ticket is issued.
        - `NOT_ENOUGH_CREDITS` — the player's credit balance is less than the ticket cost.
        - `COUNT_EXCEEDED` — the player has reached their ticket purchase limit for this period.

        If a language property is provided in the body, the response will contain
        translated elements. In case no translations are found for the language,
        default texts will be used in the response.
      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.

        Rules 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.
      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
        only certain field to be updated, i.e. if a field is not present in the request, it will not be modified
        on the updated document
      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.
      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.

        Unlike 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.
      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.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Survey'
              examples:
                Get Survey:
                  $ref: '#/components/examples/GetSurvey'
        '404':
          description: |
            Survey not found.
          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 
        parameters, only those surveys the player is eligible for will be returned.
        By default, the response will contain all available surveys at the time of the request. 
        That includes surveys that have been explicitly set as available.
      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.
          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,
        player details with player answers will be provided.
      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.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetSurveyResultResponse'
              examples:
                Get Survey Result:
                  $ref: '#/components/examples/GetSurveyResultResponse'
        '404':
          description: |
            Survey or player not found.
          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.

        Responses 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.
      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.
          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.

        Streaks 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.
      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
          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 
        all active streaks at the time of the request. If the showAll parameter is set to true 
        all streaks defined in the account, regardless of their active period, will be returned 
        instead. More advanced queries can be specified with the timeframe query. 

        Results are sorted by active start date.
      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.
          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
      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
          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
        only certain field to be updated, i.e. if a field is not present in the request, it will not be modified
        on the updated document
      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
      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
      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
          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
      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
        organization's GameLayer resources
      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,
        texts for the main gamelayer element will be provided. If the given code is 
        not in the list of currently supported languages or definitions for the specified language query
        do not exist, an HTTP error response is provided. 
        List of supported languages is: 
        -  `en` - English
        -  `ar` - Arabic
        -  `zh` - Chinese
        -  `cs` -Czech
        -  `fi` - Finnish
        -  `fr` - French
        -  `de` - German
        -  `el` - Greek
        -  `hi` - Hindi
        -  `it` - Italian
        -  `ja` - Japanese
        -  `kk` - Kazakh
        -  `pt` - Portuguese
        -  `ru` - Russian
        -  `es` - Spanish
        -  `sv` - Swedish
        -  `tr` - Turkish
    Player:
      name: player
      in: query
      description: |
        If specified, only the results for which the player is eligible, i.e. fulfills 
        all requirements, will be returned
      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 
        list of all allowed categories. Defaults to empty string, all categories will be returned
      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
        of all tags to include and/or exclude (preceding their ID mith a minus sign).
        Defaults to empty string, all tags are returned
      schema:
        type: string
        default: ''
    Availability:
      name: availability
      in: query
      required: false
      description: |
        Specifies the availability by which to filter results. Allowed values are: 
        - `all` - return all results regardless of their availability status
        - `true` - return only available results)
        - `false` - return only unavailable results
      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 
        criterion for queried results. Results are sorted in descending order, 
        i.e. most recent and highest values first, unless otherwise specified in 
        the order parameter. Defaults to nothing, i.e. results are returned unsorted
      schema:
        type: string
    Order:
      name: order
      in: query
      required: false
      description: |
        Specifies the sort order to use for the sorted queries. Allowed values are:
        - `asc` - ascending order, i.e. lowest or oldest first
        - `desc` - descending order, i.e. highest or most recent first
      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.
      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.
      schema:
        type: string
    EndDate:
      name: endDate
      in: query
      required: true
      description: |
        Specifies the end date for the query.
      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 
        partitioned by ```team members vs team members```, ignored otherwise
      schema:
        type: string
        default: ''
    Rankby:
      name: rankBy
      in: query
      required: false
      description: |
        Specifies how team leaderboard data is compared. This is only relevant
        if element is set to ```team```. Allowed values are:
        - `total` - total points for team
        - `average` - average points for team
      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 
        list of all allowed timeframes for the queried objects. Allowed values are: 
        - `expired` - objects with an active end date in the past
        - `current` - objects currently active
        - `upcoming` - objects with an active start date in the future
        - `all` - all objects, regardless of their active period
      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
        based on the player's proximity to location-aware elements. Non-location-aware elements
        are always included regardless of this parameter.
      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
        location-based filtering to take effect.
      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.
        - `actionable` - return elements where the player is within the actionable zone (default)
        - `viewable` - return elements where the player is within the viewable zone
      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:
        - `all` - return all prizes regardless of their stock availability
        - `true` - return only prizes where, if stock has been limited, there is more stock available 
        - `false` - return only prizes that are out of stock, i.e. fully redeemed
      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: 
        - `started` - e.g. started missions waiting for completion, unlocked achievements,
        - `completed` - e.g. completed missions, granted achievements, redeemed prizes
        - `all` - all results, regardless of completion status
      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 
        list of all levels to include and/or exclude (preceding their ID mith a minus sign)
      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 
        list of all teams to include and/or exclude (preceding their ID mith a minus sign)
      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
        UTC+02:00. Valid range is UTC-12:00 to UTC+14:00.
        The URI must be encoded if refreshOffset is provided.
      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.
      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.
      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:
        - `true` - element is available
        - `false` - element is not available
    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.
      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.
          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.
      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> 
            1 - Achievement not found.<br>
            2 - Event not found.<br>
            3 - Player not found.<br>
            4 - Leaderboard not found.<br>
            5 - Level not not found.<br>
            6 - Mission not found.<br>
            7 - Prize not found.<br>
            8 - Team not found.<br>
            9 - Team join failed.<br>
            10 - Mystery box not found.<br>
            11 - Raffle not found.<br>
            20 - Player not provided<br>
            21 - Player exists<br>
            22 - Maximum allowed of players created for development account<br>
            24 - Player is currently being processed (retry with Retry-After header)<br>
            25 - Invalid time zone provided for player. Must be in IANA format.
            31 - Team exists<br>
            40 - Survey not found.<br>
            41 - Answers missing in complete survey request.<br>
            42 - Player is not eligible for the survey.<br>
            43 - Player has not completed the survey.<br>
            44 - Survey results mismatch with provided survey.<br>
            50 - Quiz not found.<br>
            51 - Answers missing in complete quiz request.<br>
            52 - Quiz has not been started.<br>
            53 - Quiz was not completed in time.<br>
            54 - Player is not eligible for the quiz.<br>
            90 - Invalid voucher data.<br>
            100 - No elements defined for provided language filter.<br>
            1001 - Database save error<br>
            1002 - Database update error<br>
            1003 - Database delete error<br>
            <br>
            Admin API error codes (returned by admin endpoints, not the player-facing API):<br>
            10050 - Mission already exists for the account.<br>
            10051 - Invalid mission data (e.g., child mission `count` &lt; 1).<br>
            10052 - Mission objectives mix multiple types — exactly one of `events`, `missions`, `quizzId`, or `surveyId` may be populated.<br>
            10053 - 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>
            10054 - One or more referenced child missions do not exist in the account.<br>
            10055 - Meta-mission cannot reference itself as a child.<br>
            10056 - 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>
            10057 - Meta-mission references more than 10 child missions.<br>
            10058 - 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>
    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,
        texts for the main gamelayer element will be provided. If the given code is 
        not in the list of currently supported languages or definitions for the specified language query
        do not exist, an HTTP error response is provided. 
        List of supported languages is: 
        -  `en` - English
        -  `ar` - Arabic
        -  `zh` - Chinese
        -  `cs` -Czech
        -  `fi` - Finnish
        -  `fr` - French
        -  `de` - German
        -  `el` - Greek
        -  `hi` - Hindi
        -  `it` - Italian
        -  `ja` - Japanese
        -  `kk` - Kazakh
        -  `pt` - Portuguese
        -  `ru` - Russian
        -  `es` - Spanish
        -  `sv` - Swedish
        -  `tr` - Turkish
    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
            the event only the the amount of times specified by the event limitation
          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`.
    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.
      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:
        - `daily` — resets once per day at the player's refresh offset.
        - `weekly` — resets once per week.
        - `monthly` — resets once per month.
        - `all-time` — never resets; progress accumulates indefinitely.

        The exact reset time depends on each player's `refreshOffset` setting (defaults to UTC+00:00).
      enum:
        - daily
        - weekly
        - monthly
        - all-time
    Element:
      type: string
      description: |
        Specifies the ranking scope of the leaderboard:
        - `player` — ranks individual players against each other across the entire account.
        - `team` — ranks teams by their aggregated member scores. Use with `rankBy` to choose between total and average scoring.
        - `teammembers` — ranks players within a specific team. Requires the `team` query parameter to specify which team.
      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:
        - `total` — sum of all team members' scores. Larger teams may have an advantage.
        - `average` — average score per team member. Provides fair comparison regardless of team size.
      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.
    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:
        - **events** — the mission is driven by event completions (the player must complete each event the required number of times).
        - **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.
        - **quizzId** — the mission is completed when the player passes the referenced quiz.
        - **surveyId** — the mission is completed when the player completes the referenced survey.
      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.

            Counting 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.
          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`.
      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:
            - 1 - Mystery box redeemed
            - 2 - Player does not have enough credits to redeem mystery box
            - 3 - Mystery box is out of stock
            - 4 - Mystery box prizes out of stock
            - 5 - Player has exceeded available requests to redeem the mystery box
            - 6 - Player does not meet mystery box requirements
            - 7 - Player is not within the actionable zone
        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
        UTC+02:00. Valid range is UTC-12:00 to UTC+14:00.
    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: 
        - `set` - player or team count is set to the specified value, setting rewards (points, credits, etc) accordingly
        - `increment` - the player or team count is incremented by the amount specified in the request
      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
                'available', this is the time how long the mission is active to.
            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.**
      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.
            All other checks (stock limits, claim count limits, location) are still enforced.
            Single-use codes are marked as used after a successful claim. Multi-use codes remain active.
            Required when the prize has `useVouchers` enabled — omitting the code will return a VOUCHER_REQUIRED error.
    ClaimPrizeResponse:
      type: object
      required:
        - code
        - prize
      properties:
        code:
          type: integer
          description: |
            Status code indicating the success of the operation. Possible values:
            - 1 - Prize claimed
            - 2 - Player does not have enough credits to claim the prize
            - 3 - Prize is out of stock
            - 5 - Player has exceeded available requests to claim the prize
            - 6 - Player does not meet prize requirements
            - 7 - Player is not within the actionable zone
            - 8 - Voucher code is invalid or has already been used
            - 9 - Prize is a mission prize and cannot be claimed directly
            - 10 - Prize requires a voucher code but none was provided
        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.
            `multi` codes remain active and can be used by multiple players.
        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.
            `multi` — codes remain active and can be used by multiple players. Use multi for shared
            promotional codes (e.g., a restaurant promo code valid for the first 100 players).
    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.
    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:
        - `single` - question has only one correct answer
        - `multi` - question may have multiple correct answers
    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
            should be an array of objects.
          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 
                  type of question is `single`, array would contain only one answer ID.
                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:
            - 1 - Raffle ticket redeemed
            - 2 - Player does not have enough credits to redeem raffle ticket
            - 5 - Player has exceeded available requests to redeem the raffle ticket
            - 6 - Player does not meet raffle requirements
            - 7 - Player is not within the actionable zone
        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:
        - `single` - question has only answer option
        - `multi` - question may have multiple answer options
    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
            should be an array of objects.
          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 
                  type of question is `single`, array would contain only one answer ID.
                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,
        but it is returned as an array of one string.
      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 
            each completion of a mission driving the streak.
        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 
        the request parameters. In case returned data contains data from multiple elements
        X-Total-Count-Id specifies the element ID which has most elements complying to 
        the query
      schema:
        type: integer
    X-Limit-Count:
      description: |
        Result pagination limit count specified (or implicitly applied) in the 
        request, i.e. how many results are included in the response
      schema:
        type: integer
    X-Skip-Count:
      description: |
        Result pagination skip count (offset) specified (or implicitly applied) in 
        the request, i.e. how many results have been skipped from the beginning in 
        the response
      schema:
        type: integer
