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

# List games

> Returns every game enabled for your operator account, including artwork, supported languages and country restrictions.

This response is cacheable: it carries `ETag`, `Last-Modified` and `Cache-Control`. Send `If-None-Match` on subsequent calls to get a cheap `304 Not Modified` instead of the full payload. See [Caching](/security/conventions#caching-and-performance).



## OpenAPI

````yaml api-reference/customer.json GET /api/v1/games
openapi: 3.1.0
info:
  title: Zero-Dash Customer API
  version: 1.0.0
  summary: >-
    Server-to-server API that operators call to list games, launch sessions and
    manage free rounds.
  description: >-
    Endpoints that **you (the operator) call on Zero-Dash**.


    Every request is authenticated with an HMAC-SHA512 signature over
    `apiPath|timestamp|data`. See [Request signature](/security/signature) for
    the algorithm and ready-made clients.


    All endpoints are RESTful, accept and return JSON, and are served over HTTPS
    with a valid TLS certificate.
  contact:
    name: Zero-Dash Integrations
    email: info@zerodash.studio
servers:
  - url: https://{host}
    description: The exact host is assigned to you during onboarding.
    variables:
      host:
        default: api.zerodash.studio
        description: >-
          Base host provided by Zero-Dash. A separate staging host is issued for
          certification.
security:
  - operatorId: []
    signature: []
    timestamp: []
tags:
  - name: Games
    description: Discover the game catalogue and open a player session.
  - name: Free Rounds
    description: Create and inspect free round campaigns and bonus codes.
paths:
  /api/v1/games:
    get:
      tags:
        - Games
      summary: List games
      description: >-
        Returns every game enabled for your operator account, including artwork,
        supported languages and country restrictions.


        This response is cacheable: it carries `ETag`, `Last-Modified` and
        `Cache-Control`. Send `If-None-Match` on subsequent calls to get a cheap
        `304 Not Modified` instead of the full payload. See
        [Caching](/security/conventions#caching-and-performance).
      operationId: listGames
      parameters:
        - $ref: '#/components/parameters/IfNoneMatch'
        - $ref: '#/components/parameters/IfModifiedSince'
      responses:
        '200':
          description: The list of games available to your operator account.
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
            Last-Modified:
              $ref: '#/components/headers/LastModified'
            Cache-Control:
              $ref: '#/components/headers/CacheControl'
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Game'
              example:
                data:
                  - slug: lucky-duck
                    name: Lucky Duck
                    description: >-
                      Single player crash game with a growing multiplier and
                      manual cash-out.
                    gameType: crash-single
                    available: true
                    freeRound: true
                    freeToPlay: true
                    desktop: true
                    mobile: true
                    images:
                      - ratio: '3:2'
                        width: 600
                        height: 400
                        url: https://cdn.zerodash.studio/lucky-duck-600x400.webp
                      - ratio: '3:4'
                        width: 255
                        height: 340
                        url: https://cdn.zerodash.studio/lucky-duck-255x340.webp
                      - ratio: '1:1'
                        width: 270
                        height: 270
                        url: https://cdn.zerodash.studio/lucky-duck-270x270.webp
                    languages:
                      - en
                      - de
                      - pt-BR
                    restrictedCountries:
                      - IT
                      - US
        '304':
          description: Not Modified. Your cached copy is still current.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalError'
      x-codeSamples:
        - lang: Go
          label: Go (signed)
          source: |-
            req, _ := http.NewRequest(http.MethodGet, base+"/api/v1/games", nil)
            sign(req, secretKey, nil) // see /security/signature
            req.Header.Set("X-Operator", operatorID)

            resp, err := http.DefaultClient.Do(req)
        - lang: JavaScript
          label: Node.js (signed)
          source: |-
            const res = await zd.get('/api/v1/games');
            const games = res.data;
            // zd = signed client from /security/signature
components:
  parameters:
    IfNoneMatch:
      name: If-None-Match
      in: header
      required: false
      description: >-
        Echo the `ETag` from your cached copy to receive `304 Not Modified` when
        nothing changed.
      schema:
        type: string
    IfModifiedSince:
      name: If-Modified-Since
      in: header
      required: false
      description: Echo the `Last-Modified` value from your cached copy.
      schema:
        type: string
  headers:
    ETag:
      description: Opaque version of this payload. Send it back as `If-None-Match`.
      schema:
        type: string
    LastModified:
      description: Last modification time of this payload.
      schema:
        type: string
    CacheControl:
      description: How long the payload may be reused.
      schema:
        type: string
  schemas:
    Game:
      type: object
      required:
        - slug
        - name
        - gameType
        - available
        - freeRound
        - freeToPlay
        - desktop
        - mobile
        - images
      properties:
        slug:
          type: string
          description: Unique game identifier, used to launch the game.
          examples:
            - lucky-duck
        name:
          type: string
          description: Human-readable name of the game.
        description:
          type: string
          description: Longer description of the game.
        gameType:
          type: string
          description: Category of the game.
          enum:
            - crash-multiplier-single
            - crash-multiplier-multi
            - crash-single
            - crash-multi
            - table-game
          x-enumDescriptions:
            crash-multiplier-single: Single player Aviator-like crash game
            crash-multiplier-multi: Multi player Aviator-like crash game
            crash-single: Single player instant/crash game (plinko, dice, …)
            crash-multi: Multi player instant/crash game (multiplayer roulette, …)
            table-game: Blackjack, Baccarat, Poker, …
        available:
          type: boolean
          description: Whether the game is currently available.
        freeRound:
          type: boolean
          description: Whether the game supports free rounds.
        freeToPlay:
          type: boolean
          description: Whether the game has a demo mode without real money.
        desktop:
          type: boolean
          description: Whether the game is designed for desktop devices.
        mobile:
          type: boolean
          description: Whether the game is designed for mobile devices.
        images:
          type: array
          description: >-
            Artwork in every available aspect ratio. Use `srcset` or CSS media
            queries to pick the right one.
          items:
            $ref: '#/components/schemas/GameImage'
        languages:
          type: array
          description: ISO 639-1 languages supported by the game, when available.
          items:
            type: string
        restrictedCountries:
          type: array
          description: >-
            ISO 3166-1 alpha-2 countries where the game is restricted. Enforced
            on the player's IP address.
          items:
            type: string
    GameImage:
      type: object
      required:
        - ratio
        - width
        - height
        - url
      properties:
        ratio:
          type: string
          description: Aspect ratio of the asset.
          enum:
            - '1:1'
            - '3:4'
            - '3:2'
        width:
          type: integer
          description: Width in pixels.
        height:
          type: integer
          description: Height in pixels.
        url:
          type: string
          format: uri
          description: CDN URL of the asset.
    Error:
      type: object
      properties:
        message:
          type: string
          description: Human-readable explanation of the failure.
  responses:
    BadRequest:
      description: Invalid request payload or query format.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: invalid currency code
    Unauthorized:
      description: >-
        Missing, malformed, stale or mismatched signature — or a source IP
        outside your allowlist.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: invalid signature
    InternalError:
      description: Internal server error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: internal error
  securitySchemes:
    operatorId:
      type: apiKey
      in: header
      name: X-Operator
      description: Your operator identifier, issued by Zero-Dash during onboarding.
    signature:
      type: apiKey
      in: header
      name: X-Zd-Signature
      description: >-
        Hex-encoded `HMAC-SHA512(apiPath|timestamp|data, secretKey)`. See
        [Request signature](/security/signature).
    timestamp:
      type: apiKey
      in: header
      name: X-Zd-Timestamp
      description: >-
        Unix time in **milliseconds**, and the exact value signed. Requests
        older than 5 minutes are rejected.

````