/cards
One endpoint, two methods.
GEThttps://api.justtcg.com/v1/cards
cardIduuid | string
Optional
Direct lookup by card ID.
variantIduuid | string
Optional
Direct lookup by variant ID — fastest path.
tcgplayerIdstring
Optional
TCGplayer product ID.
mtgjsonIdstring
Optional
MTGJSON UUID.
scryfallIdstring
Optional
Scryfall UUID.
tcgplayerSkuIdstring
Optional
TCGplayer SKU ID (variant-level).
Response
request.ts
import { JustTCG } from 'justtcg-js';
const client = new JustTCG();
const { data } = await client.cards.get({
cardId: 'pokemon-battle-academy-fire-energy-22-charizard-stamped-promo',
condition: ['NM', 'LP'],
priceHistoryDuration: '30d',
});
console.log(data[0].variants[0].price);response · 200 OK
{
"data": [
{
"id": "pokemon-battle-academy-fire-energy-22-charizard-stamped-promo",
"uuid": "23edc8d4-b6b7-5d0c-a5fa-659040d24a7c",
"name": "Fire Energy (#22 Charizard Stamped)",
"game": "Pokemon",
"set": "battle-academy-pokemon",
"set_name": "Battle Academy",
"rarity": "Promo",
"tcgplayerId": "219042",
"mtgjsonId": null,
"scryfallId": null,
"variants": [
{
"id": "pokemon-…_near-mint",
"uuid": "c6bfa6f7-0b82-5011-b2ee-b572e2708a0e",
"condition": "Near Mint",
"printing": "Normal",
"price": 0.14,
"priceChange24hr": 0,
"lastUpdated": 1780936262,
"priceHistory": [{
"p": 0.14,
"t": 1780358400
}]
}
]
}
],
"meta": { "total": 1, "limit": 20, "offset": 0, "hasMore": false },
"_metadata": {
"apiPlan": "Pro",
"apiRequestsRemaining": 49213
}
}POSThttps://api.justtcg.com/v1/cards
Identifier precedence:
variantId > tcgplayerSkuId > tcgplayerId > mtgjsonId > scryfallId > cardId. Use one identifier per item.cardIdstring
Optional
Card-level lookup.
variantIdstring
Optional
Variant-level lookup — fastest path.
tcgplayerIdstring
Optional
TCGplayer product ID.
mtgjsonIdstring
Optional
MTGJSON UUID.
scryfallIdstring
Optional
Scryfall UUID.
tcgplayerSkuIdstring
Optional
TCGplayer SKU ID.
Limits:200 items / request (Enterprise), 100 (Starter & Pro), 20 (Free). Batch larger workloads.
Response
request.ts
import { JustTCG } from 'justtcg-js';
const client = new JustTCG();
const { data } = await client.cards.batch([
{ tcgplayerId: '219042', condition: 'NM', printing: 'Normal' },
{ tcgplayerId: '25788', condition: 'LP', printing: '1st Edition' },
]);response · 200 OK
{
"data": [
{
"id": "pokemon-battle-academy-fire-energy-22-charizard-stamped-promo",
"uuid": "23edc8d4-b6b7-5d0c-a5fa-659040d24a7c",
"name": "Fire Energy (#22 Charizard Stamped)",
"game": "Pokemon",
"set": "battle-academy-pokemon",
"set_name": "Battle Academy",
"rarity": "Promo",
"tcgplayerId": "219042",
"mtgjsonId": null,
"scryfallId": null,
"variants": [
{
"id": "pokemon-…_near-mint",
"uuid": "c6bfa6f7-0b82-5011-b2ee-b572e2708a0e",
"condition": "Near Mint",
"printing": "Normal",
"price": 0.14,
"priceChange24hr": 0,
"lastUpdated": 1780936262,
"priceHistory": [{
"p": 0.14,
"t": 1780358400
}]
}
]
}
],
"meta": { "total": 1, "limit": 20, "offset": 0, "hasMore": false },
"_metadata": {
"apiPlan": "Pro",
"apiRequestsRemaining": 49213
}
}*Per-request limits
The maximum number of cards you can request at once depends on your plan. For GET requests this is the highest accepted value for the limit parameter; for POSTrequests it's the maximum length of the lookup array. Batch larger workloads across multiple requests.
| Plan | Max cards per request |
|---|---|
| Free | 20 cards |
| Starter | 100 cards |
| Pro | 100 cards |
| Enterprise | 200 cards |