Skip to content

Pagination

All list endpoints use cursor-based pagination for consistent and efficient page navigation.

ParameterTypeDefaultMaxDescription
limitinteger20100Number of items per page
cursorstringOpaque cursor from a previous response
{
"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
}
}
FieldDescription
meta.cursorPass this value as the cursor query parameter to get the next page
meta.hasMoretrue if more items exist beyond this page
meta.totalCountTotal number of items matching the query (when available)
Terminal window
curl -H "Authorization: Bearer wpg_sk_..." \
"https://app.weplaytestgames.com/api/v1/games?limit=10"

Use the cursor from the previous response:

Terminal window
curl -H "Authorization: Bearer wpg_sk_..." \
"https://app.weplaytestgames.com/api/v1/games?limit=10&cursor=eyJpZCI6ImdhbWVfZGVmIn0"
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 totalCount field may not be available on all endpoints (check individual endpoint docs)
  • Results are ordered by creation date (newest first) unless the endpoint specifies otherwise