Games Endpoints
All games endpoints require the game_owner scope.
List Games
Section titled “List Games”GET /api/v1/games
Returns all games owned by the authenticated user (cursor-paginated).
Query Parameters
Section titled “Query Parameters”| Parameter | Type | Default | Description |
|---|---|---|---|
limit | integer | 20 | Max 100 |
cursor | string | — | Pagination cursor |
curl -H "Authorization: Bearer wpg_sk_..." \ "https://app.weplaytestgames.com/api/v1/games"const response = await fetch('https://app.weplaytestgames.com/api/v1/games', { headers: { Authorization: `Bearer ${apiKey}` },});const { data, meta } = await response.json();Response
Section titled “Response”{ "data": { "games": [ { "id": "a1b2c3d4-...", "name": "Dungeon Crawlers", "description": "A roguelike dungeon crawler with pixel art", "instructions": "Play through the first 3 levels", "buildUrl": "https://store.steampowered.com/app/123456", "coverImageUrl": "https://example.com/cover.jpg", "externalUrl": "https://dungeoncrawlers.com", "status": "active", "createdAt": "2026-01-15T10:00:00.000Z", "updatedAt": "2026-02-01T14:00:00.000Z", "categories": [ { "id": "cat-uuid-1", "name": "Roguelike", "slug": "roguelike" }, { "id": "cat-uuid-2", "name": "Pixel Art", "slug": "pixel-art" } ], "devices": ["PC", "Mac"], "platforms": ["Steam", "itch.io"] } ] }, "meta": { "requestId": "req_abc123def456", "timestamp": "2026-03-02T12:00:00.000Z", "cursor": "eyJpZCI6ImFiYzEyMyJ9", "hasMore": false }}Create Game
Section titled “Create Game”POST /api/v1/games
Request Body
Section titled “Request Body”| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Game name (max 200 chars) |
description | string | No | Game description (max 5000 chars) |
instructions | string | No | Instructions for playtesters (max 5000 chars) |
buildUrl | string | Yes | Download/access URL (must be a valid URL) |
coverImageUrl | string | No | Cover image URL |
externalUrl | string | No | External website URL |
devices | string[] | No | Target devices: PC, Mac, Linux, iOS, Android |
platforms | string[] | No | Distribution platforms: Steam, Epic Games, GOG, itch.io, Other |
tags | string[] | No | Array of category UUIDs (from GET /api/v1/info/categories) |
curl -X POST https://app.weplaytestgames.com/api/v1/games \ -H "Authorization: Bearer wpg_sk_..." \ -H "Content-Type: application/json" \ -H "Idempotency-Key: $(uuidgen)" \ -d '{ "name": "Dungeon Crawlers", "description": "A roguelike dungeon crawler with pixel art", "buildUrl": "https://store.steampowered.com/app/123456", "devices": ["PC", "Mac"], "platforms": ["Steam"], "tags": ["category-uuid-1", "category-uuid-2"] }'const response = await fetch('https://app.weplaytestgames.com/api/v1/games', { method: 'POST', headers: { Authorization: `Bearer ${apiKey}`, 'Content-Type': 'application/json', 'Idempotency-Key': crypto.randomUUID(), }, body: JSON.stringify({ name: 'Dungeon Crawlers', description: 'A roguelike dungeon crawler with pixel art', buildUrl: 'https://store.steampowered.com/app/123456', devices: ['PC', 'Mac'], platforms: ['Steam'], tags: ['category-uuid-1', 'category-uuid-2'], }),});Response
Section titled “Response”{ "data": { "game": { "id": "a1b2c3d4-...", "ownerId": "owner-uuid", "name": "Dungeon Crawlers", "description": "A roguelike dungeon crawler with pixel art", "instructions": null, "buildUrl": "https://store.steampowered.com/app/123456", "coverImageUrl": null, "externalUrl": null, "status": "active", "createdAt": "2026-03-02T12:00:00.000Z", "updatedAt": "2026-03-02T12:00:00.000Z" } }, "meta": { "requestId": "req_abc123def456", "timestamp": "2026-03-02T12:00:00.000Z" }}Get Game
Section titled “Get Game”GET /api/v1/games/:id
Returns details for a specific game including categories, devices, and platforms.
Response
Section titled “Response”{ "data": { "game": { "id": "a1b2c3d4-...", "name": "Dungeon Crawlers", "description": "A roguelike dungeon crawler with pixel art", "instructions": "Play through the first 3 levels", "buildUrl": "https://store.steampowered.com/app/123456", "coverImageUrl": "https://example.com/cover.jpg", "externalUrl": null, "status": "active", "createdAt": "2026-01-15T10:00:00.000Z", "updatedAt": "2026-02-01T14:00:00.000Z", "categories": [ { "id": "cat-uuid-1", "name": "Roguelike", "slug": "roguelike" } ], "devices": ["PC", "Mac"], "platforms": ["Steam"] } }, "meta": { "requestId": "req_abc123def456", "timestamp": "2026-03-02T12:00:00.000Z" }}Update Game
Section titled “Update Game”PATCH /api/v1/games/:id
Update game details. All fields are optional.
Request Body
Section titled “Request Body”| Field | Type | Description |
|---|---|---|
name | string | Game name (max 200 chars) |
description | string | Game description (max 5000 chars) |
instructions | string | Instructions for playtesters (max 5000 chars) |
buildUrl | string | Download/access URL |
coverImageUrl | string|null | Cover image URL (set to null to remove) |
externalUrl | string|null | External website URL (set to null to remove) |
devices | string[] | Replaces existing devices |
platforms | string[] | Replaces existing platforms |
tags | string[] | Array of category UUIDs (replaces existing tags) |
Response
Section titled “Response”Returns the updated game object (raw database fields, without categories/devices/platforms relations).
List Game Builds
Section titled “List Game Builds”GET /api/v1/games/:id/builds
Returns the build history for a game (cursor-paginated).
Query Parameters
Section titled “Query Parameters”| Parameter | Type | Default | Description |
|---|---|---|---|
limit | integer | 20 | Max 100 |
cursor | string | — | Pagination cursor |
Response
Section titled “Response”{ "data": { "builds": [ { "id": "build-uuid", "gameId": "game-uuid", "buildUrl": "https://...", "createdAt": "2026-02-15T10:00:00.000Z" } ] }, "meta": { "requestId": "req_abc123def456", "timestamp": "2026-03-02T12:00:00.000Z", "hasMore": false }}