Quickstart
From nothing to a live card query in under a minute. No approval queue, no sales call.
1. Get a key
Create a key from the dashboard. Every plan reaches every game and the full card pool, so the key you make on Starter queries the same catalog as one on Scale. Store it as an environment variable — never commit it.
export TCGGRAPH_KEY="tcg_live_..."2. Make a request
Authenticate with a bearer token. Every REST endpoint lives under https://api.tcggraph.com/v1.
curl "https://api.tcggraph.com/v1/cards?game=pokemon&name=charizard&limit=2" \
-H "Authorization: Bearer $TCGGRAPH_KEY"3. Read the response
Successful responses always carry data and, for collections, meta. Core fields sit at the top level and game-specific stats sit under gameData.
{
"data": [
{
"id": "pkm_sv3pt5_199",
"game": "pokemon",
"name": "Charizard ex",
"set": { "code": "sv3pt5", "name": "151", "releasedAt": "2023/09/22" },
"collectorNumber": "199/165",
"rarity": "Special Illustration Rare",
"artist": "miki kudo",
"prices": [
{ "source": "tcgplayer", "finish": "holofoil", "market": 370.48 }
],
"gameData": { "hp": 330, "types": ["Fire"] }
}
],
"meta": { "page": 1, "limit": 2, "totalCount": 2, "hasMore": false }
}4. Or call it from your language
There is no SDK to install — it is a GET with a bearer token. If you want types, the OpenAPI document generates a typed client in one command.
const params = new URLSearchParams({ game: "pokemon", name: "charizard", limit: "2" });
const res = await fetch(`https://api.tcggraph.com/v1/cards?${params}`, {
headers: { Authorization: `Bearer ${process.env.TCGGRAPH_KEY}` },
});
const { data } = await res.json();
for (const card of data) {
console.log(card.name, card.prices[0]?.market);
}import os, requests
res = requests.get(
"https://api.tcggraph.com/v1/cards",
params={"game": "pokemon", "name": "charizard", "limit": 2},
headers={"Authorization": f"Bearer {os.environ['TCGGRAPH_KEY']}"},
timeout=10,
)
for card in res.json()["data"]:
print(card["name"], card["prices"][0]["market"])5. Reach for GraphQL when it helps
If you need several games or several related resources in one round trip, GraphQL saves you the extra calls. It is optional — REST covers every capability.
query FireHitters {
cards(
filter: { game: POKEMON, gameData: { types: "Fire" } }
sort: PRICE_DESC
limit: 5
) {
nodes {
name
set { name }
prices { market }
gameData
}
pageInfo { totalCount }
}
}Next steps
- Read the REST reference for the full filter grammar.
- Check credits and rate limits before you go to production.
- Browse the games catalog to see what each game exposes.