Pagination
Pagination
Section titled “Pagination”Most list endpoints return paginated results. TCG API uses offset-based pagination.
Request Parameters
Section titled “Request Parameters”| Parameter | Type | Default | Max | Description |
|---|---|---|---|---|
page | integer | 1 | — | Page number (1-indexed) |
per_page | integer | 50 | 100 | Results per page |
Response Meta
Section titled “Response Meta”Every paginated response includes a meta object:
{ "data": [...], "meta": { "total": 847, "page": 1, "per_page": 50, "has_more": true }}| Field | Description |
|---|---|
total | Total number of results matching your query |
page | Current page number |
per_page | Number of results per page |
has_more | Whether there are more pages available |
Example: Paginating Through All Results
Section titled “Example: Paginating Through All Results”const API_KEY = 'tcg_live_...';
async function getAllCards(setId) { const cards = []; let page = 1;
while (true) { const resp = await fetch( `https://api.tcgapi.dev/v1/sets/${setId}/cards?page=${page}&per_page=100`, { headers: { 'X-API-Key': API_KEY } } ); const json = await resp.json(); cards.push(...json.data);
if (!json.meta.has_more) break; page++; }
return cards;}import requests
API_KEY = "tcg_live_..."HEADERS = {"X-API-Key": API_KEY}
def get_all_cards(set_id): cards = [] page = 1 while True: resp = requests.get( f"https://api.tcgapi.dev/v1/sets/{set_id}/cards", params={"page": page, "per_page": 100}, headers=HEADERS, ) data = resp.json() cards.extend(data["data"]) if not data["meta"]["has_more"]: break page += 1 return cardsRate Limit Considerations
Section titled “Rate Limit Considerations”Each page request counts as one API call. For a set with 230 cards:
- At
per_page=50: 5 requests - At
per_page=100: 3 requests
Use per_page=100 to minimize request count, or use bulk endpoints (Pro+) for large fetches.