<!-- GENERATED from the API's route table. Do not edit. -->
# HTTP API

Base: `https://cassette.gg`. JSON everywhere. Errors: `{"error":{"code","message"}}` (see errors.md). Amounts: decimal strings of USDC units (6 decimals) plus a `usd` display string.
Auth: `Authorization: Bearer <jwt>` from SIWE (EIP-4361): `GET /v1/auth/nonce?address=` → sign the message → `POST /v1/auth/verify {message, signature}` → `{token}` (7 d).
Read endpoints need no key. How to sign in, pair, relay transactions and sign links: `https://cassette.gg/agents/protocol.md`.

| Method | Path | Auth |
|---|---|---|
| `GET` | `/v1/health` | none |
| `GET` | `/v1/config` | none |
| `GET` | `/v1/auth/nonce` | none |
| `POST` | `/v1/auth/verify` | none |
| `GET` | `/v1/me` | bearer |
| `GET` | `/v1/me/library` | bearer |
| `GET` | `/v1/home` | none |
| `GET` | `/v1/games` | none |
| `GET` | `/v1/games/:slug` | none |
| `GET` | `/v1/games/:slug/items` | none |
| `GET` | `/v1/profiles/:idOrHandle` | none |
| `GET` | `/v1/users/:username` | none |
| `GET` | `/v1/usernames/:name` | none |
| `GET` | `/v1/search` | none |
| `GET` | `/v1/tags` | none |
| `GET` | `/v1/entitlements/:address/:gameId` | none |
| `POST` | `/v1/sessions` | bearer |
| `POST` | `/v1/sessions/:id/heartbeat` | bearer |
| `POST` | `/v1/sessions/:id/end` | bearer |
| `POST` | `/v1/attestations/license` | bearer |
| `POST` | `/v1/verify` | none |
| `GET` | `/.well-known/jwks.json` | none |
| `POST` | `/v1/telemetry` | none |
| `GET` | `/v1/dev/games/:gameId/stats` | bearer |
| `POST` | `/v1/builds` | bearer |
| `GET` | `/v1/builds/:hash` | none |
| `GET` | `/v1/manifests/:sha256` | none |
| `POST` | `/v1/manifests` | bearer |
| `GET` | `/v1/assets/:sha256` | none |
| `GET` | `/v1/jwks` | none |
| `GET` | `/v1/nft/usernames/:tokenId` | none |
| `GET` | `/v1/nft/licenses/:gameId` | none |
| `GET` | `/v1/nft/items/:itemId` | none |
| `POST` | `/v1/assets` | bearer |
| `POST` | `/v1/metadata` | bearer |
| `POST` | `/v1/relay` | none |
| `GET` | `/v1/relay/:txHash` | none |
| `POST` | `/v1/dev/faucet` | none |
| `POST` | `/v1/agent-links` | none |
| `GET` | `/v1/agent-links/:code` | none |
| `POST` | `/v1/agent-links/:code/approve` | bearer |
| `POST` | `/v1/pairings` | none |
| `GET` | `/v1/pairings/:id` | none |
| `POST` | `/v1/community/:id/telemetry` | none |
| `GET` | `/v1/rails` | none |
| `GET` | `/v1/player-reviews` | none |
| `GET` | `/v1/player-reviews/summary` | none |
| `GET` | `/v1/me/player-reviews/eligibility` | none |
| `POST` | `/v1/player-reviews` | bearer |
| `DELETE` | `/v1/player-reviews` | bearer |
| `POST` | `/v1/player-reviews/:id/vote` | bearer |
| `GET` | `/v1/community` | none |
| `GET` | `/v1/community/:id` | none |
| `POST` | `/v1/community/:id/claims` | bearer |
| `POST` | `/v1/community/:id/claims/:claimId/verify` | bearer |
| `POST` | `/v1/reports` | none |
| `POST` | `/v1/me/purchases/consent` | bearer |
| `GET` | `/v1/me/purchases/consent/:txHash` | bearer |
| `POST` | `/v1/community/:id/report` | none |
| `GET` | `/v1/storefronts` | none |
| `GET` | `/v1/storefronts/:address` | none |
| `GET` | `/v1/storefronts/:address/listings` | none |
| `GET` | `/v1/storefronts/:address/sales` | bearer |
| `GET` | `/v1/sales/:storefront/:saleId` | none |
| `GET` | `/v1/sales/:storefront/:saleId/self-refund` | none |
| `GET` | `/v1/receipts/:storefront/:saleId` | none |
| `GET` | `/v1/receipts/tx/:txHash` | none |
| `GET` | `/v1/me/sales` | bearer |
| `GET` | `/v1/wallet/rules` | none |
| `POST` | `/v1/wallet/decode` | none |
| `GET` | `/v1/abuse/criteria` | none |
| `GET` | `/v1/abuse/status/:address` | none |
| `POST` | `/v1/abuse/appeals` | bearer |

Useful reads: `GET /v1/games?sort=trending|new|top&capability=phone&pricing=free|free-with-items|paid&tag=&q=&limit=`, `GET /v1/games/<slug>` (GameDetail incl. `items`, `playUrl`, `stats`), `GET /v1/search?q=`, `GET /v1/profiles/<id|handle>`, `GET /v1/community`.
Types: `packages/shared/src/api.ts` (`GameSummary`, `GameDetail`, `ItemView`, `ProfileView`, `HomeView`, `DevGameStats`, …).
