Pagination
All list endpoints use cursor-based pagination for consistent and efficient page navigation.
Query Parameters
Section titled “Query Parameters”| Parameter | Type | Default | Max | Description |
|---|---|---|---|---|
limit | integer | 20 | 100 | Number of items per page |
cursor | string | — | — | Opaque cursor from a previous response |
Response Format
Section titled “Response Format”{ "data": [ { "id": "game_abc", "name": "My Indie Game" }, { "id": "game_def", "name": "Another Game" } ], "meta": { "requestId": "req_abc123", "timestamp": "2026-03-02T12:00:00Z", "cursor": "eyJpZCI6ImdhbWVfZGVmIn0", "hasMore": true, "totalCount": 42 }}| Field | Description |
|---|---|
meta.cursor | Pass this value as the cursor query parameter to get the next page |
meta.hasMore | true if more items exist beyond this page |
meta.totalCount | Total number of items matching the query (when available) |
Fetching the First Page
Section titled “Fetching the First Page”curl -H "Authorization: Bearer wpg_sk_..." \ "https://app.weplaytestgames.com/api/v1/games?limit=10"const response = await fetch( 'https://app.weplaytestgames.com/api/v1/games?limit=10', { headers: { Authorization: `Bearer ${apiKey}` } },);const { data, meta } = await response.json();response = requests.get( 'https://app.weplaytestgames.com/api/v1/games', params={'limit': 10}, headers={'Authorization': f'Bearer {api_key}'},)result = response.json()games = result['data']cursor = result['meta'].get('cursor')Fetching Subsequent Pages
Section titled “Fetching Subsequent Pages”Use the cursor from the previous response:
curl -H "Authorization: Bearer wpg_sk_..." \ "https://app.weplaytestgames.com/api/v1/games?limit=10&cursor=eyJpZCI6ImdhbWVfZGVmIn0"Iterating All Pages
Section titled “Iterating All Pages”let cursor: string | undefined;const allGames = [];
do { const url = new URL('https://app.weplaytestgames.com/api/v1/games'); url.searchParams.set('limit', '100'); if (cursor) url.searchParams.set('cursor', cursor);
const response = await fetch(url, { headers: { Authorization: `Bearer ${apiKey}` }, }); const { data, meta } = await response.json(); allGames.push(...data); cursor = meta.hasMore ? meta.cursor : undefined;} while (cursor);- Cursors are opaque — do not parse, modify, or construct them manually
- Cursors may expire if the underlying data changes significantly
- The
totalCountfield may not be available on all endpoints (check individual endpoint docs) - Results are ordered by creation date (newest first) unless the endpoint specifies otherwise