# LootLoom demo catalog API

LootLoom is a preview: every game offer, seller, price, rating, sale and review is generated demo data. Nothing can be bought, sold or delivered.

A small read-only JSON API over the fixed demo catalog of LootLoom (32 games, 420 offers, 56 fictional sellers). No authentication, no cookies, CORS open to every origin. There are no accounts, orders, payments or write operations, and none are planned for the preview. Prices are demo prices in EUR.

Texts come in the language given by `lang` (cs, en, ru, de, fr; default en); ids and numbers are the same in every language.

Rate limit: 120 requests per 60 seconds per client IP (kept in memory only). Every response carries `RateLimit-Policy: "api";q=120;w=60` and `RateLimit: "api";r=<remaining>;t=<seconds>`; a 429 also sends `Retry-After`.

Errors always use one JSON shape (OpenAPI schema `Error`): `{"error":{"code":"invalid_parameter","message":"…","field":"limit"}}` with the codes invalid_parameter (400), not_found (404), method_not_allowed (405), rate_limited (429) and server_error (500).

OpenAPI 3.1: https://gameshop.adscaled.media/openapi.json (also https://gameshop.adscaled.media/api/openapi.json). API catalog (RFC 9727): https://gameshop.adscaled.media/.well-known/api-catalog.

## Operations

- `GET /api/v1/health`: Service status: `{"ok":true,"mode":"preview","paymentsEnabled":false,"version":"…"}`.
- `GET /api/v1/games`: All 32 demo games with categories, offer count, image and page URL. Query: `lang`.
- `GET /api/v1/games/{slug}`: One game, e.g. `/api/v1/games/minecraft`. 404 for an unknown slug.
- `GET /api/v1/offers`: Demo offers, paged. Query: `lang`, `game`, `category`, `seller`, `inStock`, `minPrice`, `maxPrice`, `sort` (popular, price-asc, price-desc, newest, rating, sales), `limit` (1 to 100, default 20), `offset`.
- `GET /api/v1/offers/{id}`: One offer, e.g. `/api/v1/offers/offer-0001`. 404 for an unknown id.

## Example

```
curl "https://gameshop.adscaled.media/api/v1/offers?game=minecraft&sort=price-asc&limit=2"
```

## Versioning and deprecation

The API is versioned in the path: the current major version is v1 (`/api/v1/`, OpenAPI `info.version` 1.0.0, semantic versioning).

Within v1 changes are only additive (new optional fields, parameters or operations). Breaking changes get a new major version under a new path (/api/v2/), and the previous version keeps working in parallel.

A deprecated operation is marked `deprecated: true` in the OpenAPI description and announced in these docs and in /llms.txt, its responses carry the `Deprecation` (RFC 9745) and `Sunset` (RFC 8594) headers with a `Link` rel="deprecation" to the notice, and it stays available for at least 90 days after the deprecation is announced.

## Contact

Questions: contact@adscaled.media. About the preview: https://gameshop.adscaled.media/en/about. Privacy: https://gameshop.adscaled.media/en/privacy.
