{"openapi":"3.1.0","info":{"title":"Hearthstone API","version":"1.0.0","description":"Hearthstone card data as an API, built on the open HearthstoneJSON dataset for Blizzard's collectible card game. Search and filter the full collectible card pool by name, class (Mage, Hunter, Priest, …), card type (minion, spell, weapon, hero), rarity, mana cost, set, minion race or mechanic (Battlecry, Deathrattle, Taunt and more). Fetch any card by its id or name for the full record: cost, attack, health/durability, rules text, flavour text, set, mechanics and rendered card art. List every class and set with card counts, or pull a random card (optionally matching a filter). Real data, no key needed upstream. Ideal for deck builders, collection trackers, card-search tools and Hearthstone fan apps.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/hearthstone-api","description":"oanor gateway"}],"tags":[{"name":"Hearthstone"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/card":{"get":{"operationId":"get_v1_card","tags":["Hearthstone"],"summary":"A single card by id or name","description":"","parameters":[{"name":"id","in":"query","required":true,"description":"Card id or name, e.g. EX1_277","schema":{"type":"string"},"example":"EX1_277"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"card":{"id":"EX1_277","set":"Legacy","cost":1,"name":"Arcane Missiles","text":"Deal 3 damage randomly split among all enemies.","type":"Spell","elite":false,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/EX1_277.png","races":[],"artist":"Warren Mahy","dbf_id":564,"flavor":"You'd think you'd be able to control your missiles a little better since you're a powerful mage and all.","rarity":"Free","mechanics":["Immunetospellpower"],"card_class":"Mage","collectible":true,"spell_school":"Arcane"}},"meta":{"timestamp":"2026-06-08T01:18:33.013Z","request_id":"17951487-0021-4433-b63d-a425c32abba3"},"status":"ok","message":"Card retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/classes":{"get":{"operationId":"get_v1_classes","tags":["Hearthstone"],"summary":"All classes with card counts","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"count":12,"classes":[{"name":"Neutral","cards":2097},{"name":"Mage","cards":583},{"name":"Paladin","cards":583},{"name":"Priest","cards":580},{"name":"Druid","cards":579},{"name":"Warlock","cards":574},{"name":"Hunter","cards":573},{"name":"Warrior","cards":570},{"name":"Shaman","cards":564},{"name":"Rogue","cards":561},{"name":"Demonhunter","cards":389},{"name":"Deathknight","cards":295}]},"meta":{"timestamp":"2026-06-08T01:18:33.115Z","request_id":"b6d38a4f-0e1f-4162-8211-feec2db730e8"},"status":"ok","message":"Classes retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/random":{"get":{"operationId":"get_v1_random","tags":["Hearthstone"],"summary":"A random card (accepts search filters)","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"card":{"id":"FP1_017","set":"Naxx","cost":2,"name":"Nerub'ar Weblord","race":"Undead","text":"Minions with Battlecry cost (2) more.","type":"Minion","elite":false,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/FP1_017.png","races":["Undead"],"artist":"Alex Horley Orlandelli","attack":1,"dbf_id":1800,"flavor":"Weblords spend all day making giant trampoline parks.","health":4,"rarity":"Common","mechanics":["Aura"],"card_class":"Neutral","collectible":true}},"meta":{"timestamp":"2026-06-08T01:18:33.167Z","request_id":"f3558ce8-f9f9-4cbc-9eec-2fbda026b543"},"status":"ok","message":"Random card retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/search":{"get":{"operationId":"get_v1_search","tags":["Hearthstone"],"summary":"Search & filter cards","description":"","parameters":[{"name":"name","in":"query","required":false,"description":"Name contains","schema":{"type":"string"}},{"name":"class","in":"query","required":false,"description":"Class, e.g. mage","schema":{"type":"string"},"example":"mage"},{"name":"type","in":"query","required":false,"description":"minion | spell | weapon | hero","schema":{"type":"string"}},{"name":"rarity","in":"query","required":false,"description":"common | rare | epic | legendary","schema":{"type":"string"},"example":"legendary"},{"name":"cost","in":"query","required":false,"description":"Exact mana cost","schema":{"type":"string"}},{"name":"set","in":"query","required":false,"description":"Card set","schema":{"type":"string"}},{"name":"race","in":"query","required":false,"description":"Minion race, e.g. dragon","schema":{"type":"string"}},{"name":"mechanic","in":"query","required":false,"description":"Mechanic, e.g. taunt","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Max results (default 30, max 200)","schema":{"type":"string"},"example":"30"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"cards":[{"id":"BT_006","set":"Black Temple","cost":1,"name":"Evocation","text":"Fill your hand with random Mage spells. They are Temporary.","type":"Spell","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/BT_006.png","races":[],"artist":"Gonzalo Ordonez","dbf_id":56389,"flavor":"You too could be the winner of the national spelling spree!","rarity":"Legendary","mechanics":[],"card_class":"Mage","collectible":true,"spell_school":"Arcane"},{"id":"UNG_028","set":"Ungoro","cost":1,"name":"Open the Waygate","text":"Quest: Cast 8 spells that didn't start in your deck. Reward: Time Warp.","type":"Spell","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/UNG_028.png","races":[],"artist":"Rafael Zanchetin","dbf_id":41168,"flavor":"Although powerful, the incantation is simple. It’s just a jump to the left, and then a step to the right.","rarity":"Legendary","mechanics":["Quest"],"card_class":"Mage","collectible":true},{"id":"ULD_433","set":"Uldum","cost":1,"name":"Raid the Sky Temple","text":"Quest: Cast 10 spells. Reward: Ascendant Scroll.","type":"Spell","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/ULD_433.png","races":[],"artist":"Ludo Lullabi","dbf_id":53945,"flavor":"\"Why can't I hold all these scrolls?\"","rarity":"Legendary","mechanics":["Quest"],"card_class":"Mage","collectible":true},{"id":"SW_450","set":"Stormwind","cost":1,"name":"Sorcerer's Gambit","text":"Questline: Cast a Fire, Frost, and Arcane spell. Reward: Draw a spell.","type":"Spell","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/SW_450.png","races":[],"artist":"Arthur Bozonnet","dbf_id":64488,"flavor":"After \"the incident,\" the Stockades really had to reevaluate their anti-mage protocols.","rarity":"Legendary","mechanics":[],"card_class":"Mage","collectible":true},{"id":"TLC_460","set":"The Lost City","cost":1,"name":"The Forbidden Sequence","text":"Quest: Discover 7 cards. Reward: The Origin Stone.","type":"Spell","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/TLC_460.png","races":[],"artist":"Mooncolony","dbf_id":118183,"flavor":"Day 9. We were not welcomed with open arms, but with spears! Fortunately, Chief Esho took pity on us and called off the guards. Learning of Elise's expertise, a Titanographer whisked her away to the library. Umbra disappeared in the twisting streets...","rarity":"Legendary","mechanics":["Quest"],"card_class":"Mage","collectible":true},{"id":"GIL_691","set":"Gilneas","cost":2,"name":"Archmage Arugal","text":"Whenever you draw a minion, add a copy of it to your hand.","type":"Minion","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/GIL_691.png","races":[],"artist":"James Ryman","attack":2,"dbf_id":47692,"flavor":"His worgen children call him Archmage AROO-OO-OO-OO-gal.","health":2,"rarity":"Legendary","mechanics":["Trigger Visual"],"card_class":"Mage","collectible":true},{"id":"BT_028","set":"Black Temple","cost":2,"name":"Astromancer Solarian","text":"Spell Damage +1 Deathrattle: Shuffle 'Solarian Prime' into your deck.","type":"Minion","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/BT_028.png","races":[],"artist":"Arthur Gimaldinov","attack":3,"dbf_id":56717,"flavor":"Loyal to Kael'thas Sunstrider, this blood elf mage sought arcane power in the Void. Did she find it... or did IT find her?","health":2,"rarity":"Legendary","mechanics":["Deathrattle","Spellpower"],"card_class":"Mage","collectible":true},{"id":"DMF_108","set":"Darkmoon Faire","cost":2,"name":"Deck of Lunacy","text":"Transform spells in your deck into ones that cost (3) more. (They keep their original Cost.)","type":"Spell","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/DMF_108.png","races":[],"artist":"Ivan Fomin","dbf_id":61587,"flavor":"Voted \"Most Lunacy\" in Madness Monthly magazine.","rarity":"Legendary","mechanics":[],"card_class":"Mage","collectible":true},{"id":"ETC_206","set":"Battle Of The Bands","cost":2,"name":"Infinitize the Maxitude","text":"Discover a spell. Reduce its Cost by (1). Finale: Return this to your hand at end of turn.","type":"Spell","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/ETC_206.png","races":[],"artist":"Konstantin Porubov","dbf_id":97361,"flavor":"When your music is instrumental, it doesn't matter if the words make no sense.","rarity":"Legendary","mechanics":["Discover"],"card_class":"Mage","collectible":true},{"id":"CORE_DAL_575","set":"Core","cost":2,"name":"Khadgar","text":"Your cards that summon minions summon twice as many.","type":"Minion","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/CORE_DAL_575.png","races":[],"artist":"Evgeniy Zagumennyy","attack":2,"dbf_id":126975,"flavor":"\"What do you call two minions summoned at once? Twinions, haha! Wait... where are you going?\"","health":2,"rarity":"Legendary","mechanics":["Trigger Visual"],"card_class":"Mage","collectible":true},{"id":"DAL_575","set":"Dalaran","cost":2,"name":"Khadgar","text":"Your cards that summon minions summon twice as many.","type":"Minion","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/DAL_575.png","races":[],"artist":"Evgeniy Zagumennyy","attack":2,"dbf_id":52502,"flavor":"\"What do you call two minions summoned at once? Twinions, haha! Wait... where are you going?\"","health":2,"rarity":"Legendary","mechanics":["Trigger Visual"],"card_class":"Mage","collectible":true},{"id":"UNG_027","set":"Ungoro","cost":2,"name":"Pyros","race":"Elemental","text":"Deathrattle: Return this to your hand as a 6/6 that costs (4).","type":"Minion","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/UNG_027.png","races":["Elemental","Beast"],"artist":"Mike Sass","attack":2,"dbf_id":41162,"flavor":"If you strike her down, she shall become more powerful than you can possibly… well, she'll become a 6/6 anyways.","health":2,"rarity":"Legendary","mechanics":["Deathrattle"],"card_class":"Mage","collectible":true},{"id":"DRG_104","set":"Dragons","cost":3,"name":"Chenvaala","race":"Elemental","text":"After you cast three spells in a turn, summon a 5/5 Elemental.","type":"Minion","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/DRG_104.png","races":["Elemental"],"artist":"James Ryman","attack":2,"dbf_id":54904,"flavor":"Like the Dragon Soul. If dragons had souls of ice.","health":5,"rarity":"Legendary","mechanics":[],"card_class":"Mage","collectible":true},{"id":"EDR_517","set":"Emerald Dream","cost":3,"name":"Q'onzu","race":"Beast","text":"Battlecry: Discover a spell. Choose to keep it or put it on top of your opponent's deck.","type":"Minion","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/EDR_517.png","races":["Beast"],"artist":"Grafit Studio","attack":3,"dbf_id":114287,"flavor":"\"Where did Sarge go? Anyone seen Sarge?\" - Harth","health":4,"rarity":"Legendary","mechanics":["Battlecry","Discover"],"card_class":"Mage","collectible":true},{"id":"BOT_103","set":"Boomsday","cost":3,"name":"Stargazer Luna","race":"Draenei","text":"After you play the right-most card in your hand, draw a card.","type":"Minion","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/BOT_103.png","races":["Draenei"],"artist":"L. Lullabi & K. Turovec","attack":2,"dbf_id":47982,"flavor":"She's Dr. Boom's right-hand mage.","health":4,"rarity":"Legendary","mechanics":["Trigger Visual"],"card_class":"Mage","collectible":true},{"id":"CORE_BOT_103","set":"Placeholder 202204","cost":3,"name":"Stargazer Luna","race":"Draenei","text":"After you play the right-most card in your hand, draw a card.","type":"Minion","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/CORE_BOT_103.png","races":["Draenei"],"artist":"L. Lullabi & K. Turovec","attack":2,"dbf_id":102195,"flavor":"She's Dr. Boom's right-hand mage.","health":4,"rarity":"Legendary","mechanics":["Trigger Visual"],"card_class":"Mage","collectible":true},{"id":"TIME_861","set":"Time Travel","cost":3,"name":"Timelooper Toki","text":"Battlecry: Get 3 random spells from the past. When you play ALL 3, get another Timelooper Toki.","type":"Minion","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/TIME_861.png","races":[],"artist":"Patrik Bjorkstrom","attack":3,"dbf_id":119741,"flavor":"Well this loop's a wash. Let's meditate until the next one.","health":3,"rarity":"Legendary","mechanics":["Battlecry"],"card_class":"Mage","collectible":true},{"id":"CATA_458","set":"Cataclysm","cost":4,"name":"Archmage Kalec","text":"Battlecry: Give all spells in your hand and deck Spell Damage +1.","type":"Minion","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/CATA_458.png","races":[],"artist":"Sergey Tsvelykh","attack":4,"dbf_id":122632,"flavor":"Kalec comes, Kalec goes.","health":4,"rarity":"Legendary","mechanics":["Battlecry"],"card_class":"Mage","collectible":true},{"id":"TSC_087","set":"The Sunken City","cost":4,"name":"Commander Sivara","race":"Naga","text":"Battlecry: If you've cast three spells while holding this, add those spells back to your hand.@ ({0} left!)@ (Ready!)","type":"Minion","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/TSC_087.png","races":["Naga"],"artist":"James Ryman","attack":3,"dbf_id":77609,"flavor":"With six legs, gills, and an impressive array of magic, Sivara is an all-terrain-spellcaster.","health":5,"rarity":"Legendary","mechanics":["Battlecry"],"card_class":"Mage","collectible":true},{"id":"VAC_524","set":"Island Vacation","cost":4,"name":"King Tide","text":"Battlecry: Both players' spells cost (5) until the end of your next turn.","type":"Minion","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/VAC_524.png","races":[],"artist":"Edgar Hidalgo","attack":4,"dbf_id":106375,"flavor":"blizz pls surf","health":4,"rarity":"Legendary","mechanics":["Battlecry"],"card_class":"Mage","collectible":true},{"id":"CORE_REV_515","set":"Placeholder 202204","cost":4,"name":"Orion, Mansion Manager","text":"After a friendly Secret is revealed, cast a different Mage Secret and gain +2/+2.","type":"Minion","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/CORE_REV_515.png","races":[],"artist":"Anton Zemskov","attack":3,"dbf_id":118120,"flavor":"The secrets of the universe are vast... and will be revealed sometime later this game.","health":5,"rarity":"Legendary","mechanics":["Trigger Visual"],"card_class":"Mage","collectible":true},{"id":"REV_515","set":"Revendreth","cost":4,"name":"Orion, Mansion Manager","text":"After a friendly Secret is revealed, cast a different Mage Secret and gain +2/+2.","type":"Minion","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/REV_515.png","races":[],"artist":"Anton Zemskov","attack":3,"dbf_id":78397,"flavor":"The secrets of the universe are vast... and will be revealed sometime later this game.","health":5,"rarity":"Legendary","mechanics":["Trigger Visual"],"card_class":"Mage","collectible":true},{"id":"VAC_424","set":"Island Vacation","cost":4,"name":"Raylla, Sand Sculptor","race":"Draenei","text":"Paladin Tourist After you cast a spell, summon a random 2-Cost minion and give it Divine Shield.","type":"Minion","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/VAC_424.png","races":["Draenei"],"artist":"James Ryman","attack":2,"dbf_id":107187,"flavor":"Is this flavor text raylla the best we can do?","health":6,"rarity":"Legendary","mechanics":["Trigger Visual"],"card_class":"Mage","collectible":true},{"id":"WW_430","set":"Wild West","cost":4,"name":"Tae'thelan Bloodwatcher","text":"Cards that didn't start in your deck cost (4) less (but not less than 1).","type":"Minion","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/WW_430.png","races":[],"artist":"Forrest Imel","attack":2,"dbf_id":101880,"flavor":"He's a big fan of Control Death Knight live streams.","health":5,"rarity":"Legendary","mechanics":["Aura"],"card_class":"Mage","collectible":true},{"id":"BAR_748","set":"The Barrens","cost":4,"name":"Varden Dawngrasp","text":"Battlecry: Freeze all enemy minions. If any are already Frozen, deal 4 damage to them instead.","type":"Minion","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/BAR_748.png","races":[],"artist":"Arthur Bozonnet","attack":3,"dbf_id":63261,"flavor":"Varden Dawngrasp could wield fire, summon hailstorms, and morph a night elf into a sheep with a snap of their fingers. Knowing how malleable reality could be, certain labels felt downright trivial.","health":3,"rarity":"Legendary","mechanics":["Battlecry"],"card_class":"Mage","collectible":true},{"id":"CS3_001","set":"Placeholder 202204","cost":5,"name":"Aegwynn, the Guardian","text":"Spell Damage +2 Deathrattle: The next minion you draw inherits these powers.","type":"Minion","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/CS3_001.png","races":[],"artist":"Luke Mancini","attack":5,"dbf_id":62347,"flavor":"With Medivh as her son, nothing YOU do could ever disappoint her.","health":5,"rarity":"Legendary","mechanics":["Deathrattle","Spellpower"],"card_class":"Mage","collectible":true},{"id":"LEG_CS3_001","set":"Legacy","cost":5,"name":"Aegwynn, the Guardian","text":"Spell Damage +2 Deathrattle: The next minion you draw inherits these powers.","type":"Minion","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/LEG_CS3_001.png","races":[],"artist":"Luke Mancini","attack":5,"dbf_id":113180,"flavor":"With Medivh as her son, nothing YOU do could ever disappoint her.","health":5,"rarity":"Legendary","mechanics":["Deathrattle","Spellpower"],"card_class":"Mage","collectible":true},{"id":"TIME_852","set":"Time Travel","cost":5,"name":"Azure Queen Sindragosa","race":"Dragon","text":"Fabled If you control another Dragon, your Arcane spells cost (2) less.","type":"Minion","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/TIME_852.png","races":["Dragon"],"artist":"Zoltan Boros","attack":2,"dbf_id":119524,"flavor":"Once Malygos' beloved mate, Sindragosa was among the first to suspect the corruption that had overtaken Neltharion. She came to regret not trusting her suspicions.","health":8,"rarity":"Legendary","mechanics":["Aura"],"card_class":"Mage","collectible":true},{"id":"GDB_136","set":"Space","cost":5,"name":"Exarch Hataaru","race":"Draenei","text":"Battlecry: Discover a spell and reduce its Cost by (1). If you play it this turn, repeat this effect.","type":"Minion","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/GDB_136.png","races":["Draenei"],"artist":"Grafit Studio","attack":5,"dbf_id":111893,"flavor":"Severely outmatched by the Burning Legion, the Draenei had no hopes of survival… That changed with the invention of arkonite crystals, giving Hataaru and his Artificers new ways to empower their people.","health":5,"rarity":"Legendary","mechanics":["Battlecry","Discover"],"card_class":"Mage","collectible":true},{"id":"TID_709","set":"The Sunken City","cost":5,"name":"Lady Naz'jar","race":"Naga","text":"While in your hand, this    transforms after you cast a    Fire, Frost, or Arcane spell.","type":"Minion","elite":true,"image":"https://art.hearthstonejson.com/v1/render/latest/enUS/256x/TID_709.png","races":["Naga"],"artist":"A. J. Nazzaro","attack":5,"dbf_id":72024,"flavor":"Talk about an identity crisis.","health":5,"rarity":"Legendary","mechanics":[],"card_class":"Mage","collectible":true}],"count":30,"total":78},"meta":{"timestamp":"2026-06-08T01:18:33.227Z","request_id":"705a617f-142d-4429-a324-830cc5ecb781"},"status":"ok","message":"Cards retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/sets":{"get":{"operationId":"get_v1_sets","tags":["Hearthstone"],"summary":"All sets with card counts","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"sets":[{"name":"Hero Skins","cards":714},{"name":"Placeholder 202204","cards":654},{"name":"Vanilla","cards":382},{"name":"Core","cards":289},{"name":"Expert1","cards":245},{"name":"Legacy","cards":230},{"name":"Space","cards":194},{"name":"Wild West","cards":183},{"name":"The Lost City","cards":183},{"name":"Emerald Dream","cards":183},{"name":"Time Travel","cards":183},{"name":"Battle Of The Bands","cards":183},{"name":"Whizbangs Workshop","cards":183},{"name":"Return Of The Lich King","cards":183},{"name":"Titans","cards":183},{"name":"Island Vacation","cards":183},{"name":"Alterac Valley","cards":170},{"name":"The Barrens","cards":170},{"name":"Stormwind","cards":170},{"name":"Darkmoon Faire","cards":170},{"name":"Revendreth","cards":170},{"name":"The Sunken City","cards":170},{"name":"Cataclysm","cards":164},{"name":"Wonders","cards":147},{"name":"Dragons","cards":140},{"name":"Boomsday","cards":136},{"name":"Dalaran","cards":136},{"name":"Black Temple","cards":135},{"name":"Gilneas","cards":135},{"name":"Icecrown","cards":135},{"name":"Lootapalooza","cards":135},{"name":"Scholomance","cards":135},{"name":"Troll","cards":135},{"name":"Uldum","cards":135},{"name":"Ungoro","cards":135},{"name":"Og","cards":134},{"name":"Tgt","cards":132},{"name":"Gangs","cards":132},{"name":"Gvg","cards":123},{"name":"Kara","cards":45},{"name":"Loe","cards":45},{"name":"Year Of The Dragon","cards":35},{"name":"Brm","cards":31},{"name":"Naxx","cards":30},{"name":"Path Of Arthas","cards":26},{"name":"Demon Hunter Initiate","cards":20},{"name":"Event","cards":15},{"name":"Escapefrom Violet Hold","cards":2}],"count":48},"meta":{"timestamp":"2026-06-08T01:18:33.347Z","request_id":"e57db7f2-f74d-4c73-b324-ff279e3dfe71"},"status":"ok","message":"Sets retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Service description & endpoints","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"service":"hearthstone-api","endpoints":{"GET /v1/card":"A single card by id or name (id=, e.g. EX1_277 or Arcane Missiles).","GET /v1/meta":"This document.","GET /v1/sets":"All sets with card counts.","GET /v1/random":"A random card (accepts the same filters as search).","GET /v1/search":"Search/filter cards (name=, class=, type=, rarity=, cost=, set=, race=, mechanic=, limit=).","GET /v1/classes":"All classes with card counts."},"description":"Hearthstone card data via the open HearthstoneJSON dataset: search and filter every collectible card by name, class, type, rarity, cost, set, minion race or mechanic; fetch a single card with its stats, text and rendered art; list the classes and sets; and pull a random card. Real data, no key."},"meta":{"timestamp":"2026-06-08T01:18:33.441Z","request_id":"4ddc91e8-272f-4048-ac4c-7cf78470dc6f"},"status":"ok","message":"Meta","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":10500,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":400,"monthly_call_quota":142000,"rps_limit":8,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":1700,"monthly_call_quota":730000,"rps_limit":25,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":6200,"monthly_call_quota":3400000,"rps_limit":50,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/hearthstone-api"}