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

# Customer API

> Endpoints you call on Zero-Dash — the game catalogue, launch URLs and free round campaigns.

Five endpoints, one direction: **you → Zero-Dash**. For the endpoints that run the other way, see [Wallet Callbacks](/api-reference/callbacks/introduction).

<Card title="Base URL" icon="server" horizontal>
  Assigned during onboarding, with separate hosts for staging and production. The playground on each page lets you set it.
</Card>

## Authentication

Every request carries three headers:

```http theme={null}
X-Operator: <provided-by-zerodash>
X-Zd-Signature: <hex hmac-sha512>
X-Zd-Timestamp: <unix millis>
```

The signature is `hex(HMAC-SHA512(apiPath|timestamp|data, secretKey))`. The signature is validated on **every** call, and a timestamp more than 5 minutes old is rejected.

<Card title="Signing, in six languages" icon="key" href="/security/signature" horizontal>
  Algorithm, worked examples and copy-paste clients — all checked against the same test vector.
</Card>

An [IP allowlist](/security/ip-allowlist) is optional here. Configure one and requests from any other source are refused, even correctly signed ones.

## Endpoints

<CardGroup cols={2}>
  <Card title="List games" icon="grid-2" href="/api-reference/customer/list-games">
    `GET /api/v1/games` — the catalogue provisioned for your account.
  </Card>

  <Card title="Obtain game launch URL" icon="rocket" href="/api-reference/customer/game-launch-url">
    `GET /api/v1/games/{gameSlug}` — mint a URL for one player, one session.
  </Card>

  <Card title="Create campaign" icon="bullhorn" href="/api-reference/customer/create-campaign">
    `POST /api/v1/free-rounds/campaigns` — define a free rounds offer.
  </Card>

  <Card title="Create bonus code" icon="ticket" href="/api-reference/customer/create-bonus-code">
    `POST /api/v1/free-rounds/campaigns/codes` — attach a campaign to one player.
  </Card>

  <Card title="Search campaigns" icon="magnifying-glass" href="/api-reference/customer/search-campaigns">
    `POST /api/v1/free-rounds/campaigns/search` — paginated campaign lookup.
  </Card>
</CardGroup>

## Conventions

|                  |                                           |
| ---------------- | ----------------------------------------- |
| Transport        | HTTPS with a valid TLS certificate        |
| Content type     | `application/json`, and nothing else      |
| Body timestamps  | ISO-8601 UTC — `2026-01-29T14:05:29.678Z` |
| Header timestamp | Unix milliseconds — `1778920901644`       |
| Currencies       | ISO-4217                                  |
| Success envelope | `{ "data": … }`                           |
| Error body       | `{ "message": "…" }`                      |

Full detail in [API conventions](/security/conventions).

## Caching

Responses carry `ETag`, `Last-Modified` and `Cache-Control`. Send `If-None-Match` or `If-Modified-Since` and get a `304 Not Modified` instead of the payload when nothing has changed.

This matters most for the game catalogue: it is the largest response, it changes rarely, and it should be polled on a schedule rather than fetched per page render. See [Caching and performance](/security/conventions#caching-and-performance).
