Skip to content
Crypto-only, prepaid. Top up a balance and we draw from it monthly — nothing is ever charged automatically.
tcggraph

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.

TypeScript
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);
}
Python
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