> ## Documentation Index
> Fetch the complete documentation index at: https://docs.summerengine.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get published game

> Public published Game resolved by durable ID or current registry slug, with current available featured Items in the configured display zone.



## OpenAPI

````yaml scripts/reference/sources/openapi/player.json GET /v1/store/games/{gameId}
openapi: 3.1.0
info:
  title: Summer Player Game Platform API
  version: summer.player.games/v1
  description: >-
    Public Summer Games store reads, the connected-app OAuth endpoints, and the
    signed-in player's profile and preferences.
servers:
  - url: https://api.summer.games
security:
  - playerBearer: []
paths:
  /v1/store/games/{gameId}:
    parameters:
      - name: includeImageVariants
        in: query
        schema:
          type: boolean
          default: false
        description: >-
          Opt in to optional image size metadata. Omitted by default for
          compatibility with strict older clients; the default image URL still
          serves the web version when available.
    get:
      description: >-
        Public published Game resolved by durable ID or current registry slug,
        with current available featured Items in the configured display zone.
        Bearer credentials are ignored. Game detail uses Cache-Control private,
        no-store and never returns 304.
      operationId: getPublishedGame
      parameters:
        - name: includeBackgroundColor
          in: query
          required: false
          description: >-
            Opt in to creator-selected item preview backgrounds; omitted or
            false preserves the original item response.
          schema:
            type: boolean
            default: false
        - name: gameId
          in: path
          required: true
          schema:
            type: string
            minLength: 1
            maxLength: 128
        - name: platform
          in: query
          required: false
          schema:
            $ref: '#/components/schemas/GamePlatform'
      responses:
        '200':
          description: >-
            Success. Cache behavior is unchanged by public access; honor
            response Cache-Control.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GameDetail'
        '400':
          description: Invalid filters or request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Published resource not found.
        '409':
          description: Request changed, expired, or no longer compatible.
        '503':
          description: Dependency unavailable; retry if retryable is true.
      security: []
components:
  schemas:
    GamePlatform:
      type: string
      enum:
        - android
        - ios
        - linux
        - macos
        - web
        - windows
    GameDetail:
      allOf:
        - $ref: '#/components/schemas/Game'
        - type: object
          required:
            - featuredItems
            - supportItems
          properties:
            featuredItems:
              type: array
              maxItems: 6
              items:
                $ref: '#/components/schemas/Item'
              description: >-
                Creator order with unavailable Items omitted, using current
                offers and media. Detail is private no-store; acquisition still
                requires a fresh trusted quote.
            supportItems:
              type: array
              maxItems: 4
              items:
                $ref: '#/components/schemas/Item'
              description: >-
                The Game's published Support Items (tagged support-item),
                cheapest first, with current offers and media. They are the tip
                choices for the Game's creator. Buying one is an ordinary Game
                Shop purchase through purchase-requests at the ordinary split;
                it is never a transfer to the creator. Empty when the Game has
                none.
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
            message:
              type: string
            retryable:
              type: boolean
            requestId:
              type: string
            correlationId:
              type: string
          required:
            - code
            - message
            - retryable
            - requestId
      required:
        - error
    Game:
      type: object
      properties:
        minimumAge:
          type:
            - integer
            - 'null'
          enum:
            - 3
            - 7
            - 12
            - 16
            - 18
            - null
          description: >-
            Declared minimum age from the published listing. Null or absent
            means All ages, the default. This is not a certified rating or an
            access restriction.
        communityRating:
          $ref: '#/components/schemas/CommunityRating'
        slug:
          type: string
          description: >-
            Current globally unique registry slug for public URLs. Listing title
            edits do not change it; gameId remains the durable identity.
        subtitle:
          type: string
          maxLength: 160
        releaseUpdatedAt:
          type: string
          format: date-time
          description: >-
            Latest recorded non-Preview release activation for the Game, shared
            across device platforms. Rollback or recovery to a different release
            updates this date; notes and listing corrections do not. Omitted
            when activation history is unknown.
        listingUpdatedAt:
          type: string
          format: date-time
          description: >-
            Latest approved listing activation, not a playable release update.
            Absent in draft previews and older retained cards.
        gameId:
          type: string
          minLength: 1
          maxLength: 128
        name:
          type: string
        description:
          type: string
        tags:
          type: array
          items:
            type: string
        supportedPlatforms:
          type: array
          items:
            $ref: '#/components/schemas/GamePlatform'
        languages:
          type: array
          items:
            type: string
        media:
          type: array
          items:
            $ref: '#/components/schemas/Media'
        icon:
          $ref: '#/components/schemas/Media'
          description: >-
            The revision's selected Game icon, when one is published. It is also
            present in media.
        release:
          type: object
          required:
            - comingSoon
            - precision
          description: >-
            The creator's declared release, absent when none was declared (the
            Game is out). A Coming Soon Game is listed but cannot be bought,
            played or downloaded; its availability reason is coming_soon.
          properties:
            comingSoon:
              type: boolean
            date:
              type: string
              description: >-
                A day (2026-11-14), month (2026-11), quarter (2026-Q4) or year
                (2026); absent while to be announced. Released Games carry an
                exact day.
            precision:
              type: string
              enum:
                - day
                - month
                - quarter
                - year
                - tba
        systemRequirements:
          type: object
          description: >-
            Minimum and optional recommended requirements per desktop platform
            (windows, macos, linux), each {minimum, recommended?} of free-text
            os, processor, memory, graphics, storage, network and notes. Absent
            when not declared.
        aiDisclosure:
          type: object
          description: >-
            {uses: [assets|code|generatedGameplay], description?}; an empty uses
            array means the creator declared no AI use. Absent when not
            declared.
        contentSurvey:
          type: object
          description: >-
            Mature-content answers (violence, bloodGore, sexualContent, nudity,
            language, substances, gambling levels; userGeneratedContent,
            onlineInteraction, inGamePurchases flags; notes). Absent when not
            declared.
        mediaSlots:
          type: object
          description: >-
            Named media among media[] as the creator named it: flat {keyArt?:
            {assetId, focalPoint: {x, y} as 0..1 fractions from the top left},
            screenshots?: [assetId], trailers?: [{assetId, posterAssetId}]} (the
            desktop slots named before flows), plus desktop?: {keyArt?,
            capsuleTall?, capsuleWide?, icon?, screenshots?, trailers?} and
            mobile?: {icon?, tallCover?, keyArt?, screenshots?}, each image as
            {assetId, focalPoint}. Absent when the creator named none. Render
            from storeArt, which applies the fallbacks.
        storeArt:
          $ref: '#/components/schemas/StoreArt'
        longDescription:
          type: string
          description: >-
            About this game, plain text; blank lines separate paragraphs. Render
            as text, never as HTML. `description` stays the short description.
            Absent when not declared.
        genres:
          type: array
          items:
            type: string
          description: >-
            1 to 5 Game tag IDs of category genre (see GET /v1/store/tags for
            labels), in the creator's order. Absent when not declared.
        features:
          type: array
          items:
            type: string
            enum:
              - single_player
              - online_multiplayer
              - local_multiplayer
              - online_coop
              - local_coop
              - cross_platform
              - controller_full
              - controller_partial
              - cloud_saves
              - plays_in_browser
              - level_editor
              - achievements
              - in_game_purchases
          description: >-
            Store page features in the creator's order. Clients should ignore
            values they do not know. Absent when not declared.
        credits:
          type: object
          required:
            - developer
          description: Absent when not declared.
          properties:
            developer:
              type: string
            publisher:
              type: string
              description: Absent when there is none.
            franchise:
              type: string
              description: Absent when there is none.
        languageSupport:
          type: array
          description: >-
            Per-language support in code order; its codes equal languages.
            Absent when not declared (then only languages is known).
          items:
            type: object
            required:
              - code
              - interface
              - fullAudio
              - subtitles
            properties:
              code:
                type: string
                description: Lowercase BCP 47 code, for example en or pt-br.
              interface:
                type: boolean
              fullAudio:
                type: boolean
              subtitles:
                type: boolean
        externalLinks:
          type: array
          description: >-
            Creator links in the creator's order; https only, social kinds
            restricted to their service's hosts. Clients should ignore kinds
            they do not know. Absent when not declared.
          items:
            type: object
            required:
              - kind
              - url
            properties:
              kind:
                type: string
                enum:
                  - website
                  - x
                  - youtube
                  - instagram
                  - tiktok
                  - bluesky
                  - discord
              url:
                type: string
                format: uri
        mobile:
          type: object
          required:
            - subtitle
            - description
          description: >-
            The iPhone and Android apps' own text. A null field means use
            subtitle or description. Absent when the phone apps use the desktop
            text for both.
          properties:
            subtitle:
              type:
                - string
                - 'null'
              maxLength: 160
            description:
              type:
                - string
                - 'null'
              maxLength: 170
        publishedAt:
          type: string
          format: date-time
        accessModel:
          type: string
          enum:
            - free
            - paid
          description: >-
            A paid Game is played by players holding its license; free Games
            need none.
        price:
          $ref: '#/components/schemas/GamePrice'
        availability:
          $ref: '#/components/schemas/Availability'
      required:
        - gameId
        - name
        - description
        - tags
        - supportedPlatforms
        - languages
        - media
        - publishedAt
        - accessModel
        - availability
    Item:
      type: object
      required:
        - itemId
        - gameId
        - name
        - description
        - tags
        - media
        - price
      properties:
        backgroundColor:
          type: string
          pattern: ^#[0-9A-Fa-f]{6}$
          description: >-
            Creator-selected preview color; omitted uses the application
            default.
        itemId:
          type: string
        gameId:
          type: string
        name:
          type: string
        description:
          type: string
        tags:
          type: array
          items:
            type: string
        media:
          type: array
          items:
            $ref: '#/components/schemas/Media'
        price:
          type: object
          required:
            - sparksAmount
            - zoneId
          properties:
            sparksAmount:
              type: integer
              format: int64
            zoneId:
              type: string
            offerId:
              type: string
    CommunityRating:
      type: object
      required:
        - source
        - status
        - entityId
        - methodology
        - revision
        - count
        - average
        - observedAt
        - checkedAt
      description: >-
        Summer DB owns community scores. Missing authority or identity never
        implies zero votes. This is independent of content-age classification,
        discovery rank and playability.
      properties:
        source:
          type: string
          const: summer_db
        status:
          type: string
          enum:
            - available
            - not_indexed
            - unavailable
        entityId:
          type:
            - string
            - 'null'
          format: uuid
        methodology:
          type:
            - string
            - 'null'
        revision:
          type:
            - integer
            - 'null'
          minimum: 0
          maximum: 9007199254740991
        count:
          type:
            - integer
            - 'null'
          minimum: 0
          maximum: 9007199254740991
        average:
          type:
            - number
            - 'null'
          minimum: 1
          maximum: 10
          description: Null for a known game with no votes; never a synthetic zero.
        observedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: Rating aggregate update time, not fetch time.
        checkedAt:
          type: string
          format: date-time
          description: Time of this authority read or failed attempt.
    Media:
      type: object
      properties:
        assetId:
          type: string
          minLength: 1
          maxLength: 128
        kind:
          type: string
          enum:
            - IMAGE
            - VIDEO
            - MODEL_3D
        url:
          type: string
          format: uri
          description: >-
            Stable Platform URL for public IMAGE and MODEL_3D delivery; no
            redirect or signature. Images use the 1920px maximum-edge web
            version when prepared, otherwise the original. Other delivery
            references may remain signed.
        variants:
          type: array
          maxItems: 4
          description: >-
            Optional publication-scoped image representations. All share this
            media reference's expiry and visibility rules; dimensions preserve
            aspect ratio without upscaling. Sizes 128, 256 and 512 target the
            shorter edge with a four-times-size longer-edge cap (2048 pixels for
            size 512); size 1920 remains a maximum-edge rendition. Smaller
            originals retain their dimensions. Publications may omit variants
            until prepared.
          items:
            type: object
            required:
              - size
              - width
              - height
              - url
              - contentType
            properties:
              size:
                type: integer
                enum:
                  - 128
                  - 256
                  - 512
                  - 1920
              width:
                type: integer
                minimum: 1
                maximum: 2048
              height:
                type: integer
                minimum: 1
                maximum: 2048
              url:
                type: string
                format: uri
              contentType:
                type: string
                enum:
                  - image/jpeg
                  - image/png
        expiresAt:
          type: string
          format: date-time
          description: >-
            Refresh or revalidate the delivery reference by this deadline. For
            stable public IMAGE and MODEL_3D URLs this is a revalidation
            deadline, not URL invalidation. Other signed or private references
            retain their URL expiry semantics. Required for backward
            compatibility.
      required:
        - assetId
        - kind
        - url
        - expiresAt
    StoreArt:
      type: object
      required:
        - desktop
        - mobile
      description: >-
        The art each storefront flow renders, with fallbacks applied, so every
        client picks the same image for a slot. desktop is the summer.games
        website and the desktop app; mobile is the iPhone and Android apps. Each
        image names an asset in media[]; render it from that entry (icons from
        the 256 or 512 variant). Crop every image to its frame at its focal
        point. Titles, taglines and buttons are drawn by the client, never baked
        into this art.
      properties:
        desktop:
          type: object
          required:
            - screenshots
            - trailers
          properties:
            keyArt:
              $ref: '#/components/schemas/StoreArtImage'
            capsuleTall:
              $ref: '#/components/schemas/StoreArtImage'
            capsuleWide:
              $ref: '#/components/schemas/StoreArtImage'
            icon:
              $ref: '#/components/schemas/StoreArtImage'
            screenshots:
              type: array
              items:
                type: string
              description: IMAGE asset ids in display order.
            trailers:
              type: array
              items:
                type: object
                required:
                  - assetId
                  - posterAssetId
                properties:
                  assetId:
                    type: string
                  posterAssetId:
                    type: string
        mobile:
          type: object
          required:
            - screenshots
          properties:
            icon:
              $ref: '#/components/schemas/StoreArtImage'
            tallCover:
              $ref: '#/components/schemas/StoreArtImage'
            keyArt:
              $ref: '#/components/schemas/StoreArtImage'
            screenshots:
              type: array
              items:
                type: string
              description: >-
                IMAGE asset ids in display order, in the game's play
                orientation; fit portrait images rather than cropping them.
    GamePrice:
      type: object
      additionalProperties: false
      description: >-
        What a player pays now for a paid Game, in minor units. Present only
        when accessModel is paid.
      properties:
        currency:
          type: string
          enum:
            - USD
        baseMinor:
          type: integer
          minimum: 50
          description: The creator's price before any discount.
        finalMinor:
          type: integer
          minimum: 50
          description: The price charged now.
        discountPercent:
          type: integer
          minimum: 0
          maximum: 90
          description: Zero when no discount is live.
        dealEndsAt:
          type: string
          format: date-time
          description: When the live discount ends.
        purchasable:
          type: boolean
          description: >-
            False only if Stripe has since restricted the creator's account;
            show the price without Buy.
      required:
        - currency
        - baseMinor
        - finalMinor
        - discountPercent
        - purchasable
    Availability:
      type: object
      properties:
        playable:
          type: boolean
        reason:
          type: string
          description: >-
            Why the Game is not playable, e.g. coming_soon (listed, not out
            yet), platform_required, unsupported_platform or
            release_unavailable.
        releaseId:
          type: string
          minLength: 1
          maxLength: 128
        buildId:
          type: string
          minLength: 1
          maxLength: 128
      required:
        - playable
    StoreArtImage:
      type: object
      required:
        - assetId
        - focalPoint
      description: >-
        Absent when the Game has no image for the slot (show the client
        placeholder). Fallback order: a missing capsule uses the desktop key
        art; the mobile tall cover uses the mobile key art; each flow borrows
        the other flow's key art, icon and screenshots; then the first published
        image that is not the icon stands in. The icon is never used as a cover.
      properties:
        assetId:
          type: string
        focalPoint:
          type: object
          required:
            - x
            - 'y'
          properties:
            x:
              type: number
              minimum: 0
              maximum: 1
            'y':
              type: number
              minimum: 0
              maximum: 1
        fallbackFrom:
          type: string
          description: >-
            Absent when the creator filled this slot. Otherwise the slot whose
            image stands in (desktop.keyArt, mobile.keyArt, desktop.icon,
            mobile.icon), or media for the first published image of a Game that
            named none.
  securitySchemes:
    playerBearer:
      type: http
      scheme: bearer
      description: >-
        A player access token. Store reads need no token. Other apps get a token
        through connected-app OAuth: register the client, let the player approve
        it on summer.games, then exchange the code at the token endpoint.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.