GET
/api/cardsReturns every card in alphabetical order, including its gameplay metadata, set appearances, and individual printings.
- Authentication
- None
- Rate limit
- 30 requests per minute
- Response
- JSON
Expect changes
This API is subject to change as we continue developing the card database. Fields and data may change without notice, and requests are rate limited per user.
Synchronize, don't depend on it live
Poll intermittently, compare each response with your previous import, and host the data your application needs. The API is not intended to be your application's live data backend.
Host images yourself
Card images are not included in the API response, and our private CDN may not be used to serve them. Download released card images from the public image folder.
/api/cardsReturns every card in alphabetical order, including its gameplay metadata, set appearances, and individual printings.
curl "https://squirrel-api.sorcerytcg.com/api/cards"const response = await fetch("https://squirrel-api.sorcerytcg.com/api/cards");
const cards = await response.json();/**
* The JSON shape returned by GET /api/cards.
*
* This contract deliberately has no imports from Prisma or another internal
* package, so it can be copied directly into an API consumer.
*/
export type CardAPIDTO = {
id: string;
name: string;
slug: string;
engine: {
type: "Avatar" | "Minion" | "Magic" | "Aura" | "Artifact" | "Site";
category: "Avatar" | "Spell" | "Site" | "Token";
rarity: "Unique" | "Elite" | "Exceptional" | "Ordinary" | null;
slot: "Unique" | "Elite" | "Exceptional" | "Ordinary" | null;
rules: string | null;
cost: number | null;
attack: number | null;
defense: number | null;
life: number | null;
water: number | null;
earth: number | null;
fire: number | null;
air: number | null;
elements: ("Earth" | "Fire" | "Water" | "Air" | "None")[];
subtypes: (
| "Angel"
| "Beast"
| "Demon"
| "Dragon"
| "Dwarf"
| "Faerie"
| "Giant"
| "Gnome"
| "Goblin"
| "Merfolk"
| "Monster"
| "Mortal"
| "Ogre"
| "Spirit"
| "Sphinx"
| "Troll"
| "Undead"
| "Armor"
| "Automaton"
| "Device"
| "Document"
| "Instruments"
| "Monument"
| "Potion"
| "Relic"
| "Weapon"
| "Desert"
| "River"
| "Tower"
| "Village"
)[];
keywords: (
| "Airborne"
| "Burrowing"
| "Charge"
| "Deathrite"
| "Disabled"
| "Flood"
| "Genesis"
| "Immobile"
| "Lance"
| "Landbound"
| "Lethal"
| "Movement"
| "Ranged"
| "Spellcaster"
| "Stealth"
| "Submerge"
| "Voidwalk"
| "Ward"
| "Waterbound"
)[];
umbrellas: ("Knight" | "Royalty" | "Evil")[];
back: {
type: "Avatar" | "Minion" | "Magic" | "Aura" | "Artifact" | "Site";
category: "Avatar" | "Spell" | "Site" | "Token";
rarity: "Unique" | "Elite" | "Exceptional" | "Ordinary" | null;
slot: "Unique" | "Elite" | "Exceptional" | "Ordinary" | null;
rules: string | null;
cost: number | null;
attack: number | null;
defense: number | null;
life: number | null;
water: number | null;
earth: number | null;
fire: number | null;
air: number | null;
elements: ("Earth" | "Fire" | "Water" | "Air" | "None")[];
subtypes: (
| "Angel"
| "Beast"
| "Demon"
| "Dragon"
| "Dwarf"
| "Faerie"
| "Giant"
| "Gnome"
| "Goblin"
| "Merfolk"
| "Monster"
| "Mortal"
| "Ogre"
| "Spirit"
| "Sphinx"
| "Troll"
| "Undead"
| "Armor"
| "Automaton"
| "Device"
| "Document"
| "Instruments"
| "Monument"
| "Potion"
| "Relic"
| "Weapon"
| "Desert"
| "River"
| "Tower"
| "Village"
)[];
keywords: (
| "Airborne"
| "Burrowing"
| "Charge"
| "Deathrite"
| "Disabled"
| "Flood"
| "Genesis"
| "Immobile"
| "Lance"
| "Landbound"
| "Lethal"
| "Movement"
| "Ranged"
| "Spellcaster"
| "Stealth"
| "Submerge"
| "Voidwalk"
| "Ward"
| "Waterbound"
)[];
umbrellas: ("Knight" | "Royalty" | "Evil")[];
} | null;
};
printings: {
id: string;
slug: string;
/** ISO 8601 date-time string. */
printedAt: string;
set: {
name: string;
code: string;
/** ISO 8601 date-time string. */
releasedAt: string;
};
meta: {
finish: "Standard" | "Foil" | "Rainbow";
product:
| "Booster"
| "BoxTopper"
| "PreconstructedDeck"
| "Dust"
| "DraftKit"
| "WelcomeKit"
| "Kickstarter"
| "TeamCovenant"
| "AlphaInvestments"
| "StarCityGames"
| "OrganizedPlay";
typeline: string;
flavor: string | null;
artist: { name: string; slug: string };
back: {
finish: "Standard" | "Foil" | "Rainbow";
product:
| "Booster"
| "BoxTopper"
| "PreconstructedDeck"
| "Dust"
| "DraftKit"
| "WelcomeKit"
| "Kickstarter"
| "TeamCovenant"
| "AlphaInvestments"
| "StarCityGames"
| "OrganizedPlay";
typeline: string;
flavor: string | null;
artist: { name: string; slug: string };
} | null;
};
}[];
};