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

# Obtain game launch URL

> Returns a single-use URL that you redirect the player to (new tab preferred, iframe supported).

Call this **at click time**, not ahead of time: the URL is bound to the player session token and the IP address you pass in.

For a free-to-play session set `freeToPlay=true` and omit both `currency` and `token`.



## OpenAPI

````yaml api-reference/customer.json GET /api/v1/games/{gameSlug}
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/{gameSlug}:
    get:
      tags:
        - Games
      summary: Obtain game launch URL
      description: >-
        Returns a single-use URL that you redirect the player to (new tab
        preferred, iframe supported).


        Call this **at click time**, not ahead of time: the URL is bound to the
        player session token and the IP address you pass in.


        For a free-to-play session set `freeToPlay=true` and omit both
        `currency` and `token`.
      operationId: getGameLaunchUrl
      parameters:
        - name: gameSlug
          in: path
          required: true
          description: >-
            Human-readable game identifier from [List
            games](/api-reference/customer/list-games).
          schema:
            type: string
            examples:
              - lucky-duck
        - name: ipAddress
          in: query
          required: true
          description: >-
            IP address of the player's browser. Used for country restriction
            checks — send the real client IP, not your server's.
          schema:
            type: string
            examples:
              - 1.2.3.4
        - name: freeToPlay
          in: query
          required: true
          description: >-
            `false` for a real money session, `true` for a demo session in the
            virtual **FUN** currency.
          schema:
            type: boolean
            default: false
        - name: currency
          in: query
          required: false
          description: >-
            ISO-4217 currency code of the player wallet. Required for real money
            sessions, must be omitted when `freeToPlay=true`.
          schema:
            type: string
            examples:
              - USD
              - BTC
        - name: token
          in: query
          required: false
          description: >-
            Player session token generated by you. Required for real money
            sessions, must be omitted when `freeToPlay=true`. See [Session
            token](/launch/session-token).
          schema:
            type: string
            examples:
              - user-token
        - name: lang
          in: query
          required: false
          description: ISO 639-1 language for the game UI. Autodetected when omitted.
          schema:
            type: string
            examples:
              - en
      responses:
        '200':
          description: A launch URL ready to be opened in the player's browser.
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  data:
                    type: object
                    required:
                      - url
                    properties:
                      url:
                        type: string
                        format: uri
                        description: Open this URL in a new tab, window or iframe.
              example:
                data:
                  url: https://games.zerodash.studio/lucky-duck?s=eyJhbGciOi...
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: Unknown game slug, or the game is not enabled for your account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  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
  schemas:
    Error:
      type: object
      properties:
        message:
          type: string
          description: Human-readable explanation of the failure.
  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.

````