Skip to content

Pagination

Most list endpoints return paginated results. TCG API uses offset-based pagination.

ParameterTypeDefaultMaxDescription
pageinteger1Page number (1-indexed)
per_pageinteger50100Results per page

Every paginated response includes a meta object:

{
"data": [...],
"meta": {
"total": 847,
"page": 1,
"per_page": 50,
"has_more": true
}
}
FieldDescription
totalTotal number of results matching your query
pageCurrent page number
per_pageNumber of results per page
has_moreWhether there are more pages available
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 cards

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.