HearthstoneJSON
App · Gaming · 12 actions
Read Hearthstone's card data from a workflow. HearthstoneJSON publishes every card in the game, converted straight out of the game files, in fourteen languages. Search the whole card pool by text and by set, class, type, rarity, minion type, spell school, keyword, mana cost, attack and health; look one card up by name, ID or dbfId; pick one at random for a card of the day; and follow a card to the tokens, enchantments and hero power it brings with it. Break a slice of the pool down by every property at once, with its mana curve and its averages, to see what an expansion gave each class. Every card comes back with its rules text in plain readable form and its art, tile and full-card render already addressed, and any of those images can be downloaded and attached. The card sets, minion types, spell schools and keywords a step can filter on are read from the card data itself, so a new expansion needs no new setup. Every action reads: nothing here changes anything. No account or API key required.
Actions
| Action | What it does |
|---|---|
| Download a card image | Download one of a card's images and store it, so a later step can attach it to an email, post it or put it in a document. |
| Get a card | Get one Hearthstone card in full, by its name, its card ID or its dbfId: 'Leeroy Jenkins', 'EX1_116' and 559 all find the same card. |
| Get a random card | Pick a card at random out of everything the filters leave, or a handful of them. |
| Get card images | Get every image HearthstoneJSON publishes for one card: the square art at both sizes in JPG and WebP, the lossless original, the deck-list tile in three formats, and the whole card rendered in any of the game's languages. |
| Get enum values | Read the enumerations behind the card data. |
| Get related cards | Get the cards one card brings with it: the pool it creates from, the hero power a hero comes with, and the tokens and enchantments it summons or applies. |
| Get the latest build | Find out which game build HearthstoneJSON is publishing right now, how many collectible cards and sets it holds, and which sets are newest. |
| List card sets | List every set in the game with how many cards it holds, how many of those are collectible, and which classes it touches. |
| List keywords | List every keyword the cards use, with how many carry each one and an example. |
| List languages | List every language HearthstoneJSON publishes card text in, each with the file it lives in. |
| Search cards | Search every Hearthstone card by text and by every property a card has: set, class, type, rarity, minion type, spell school, keyword, mana cost, attack and health. |
| Summarize cards | Break a slice of the card pool down by every property at once: how it splits across classes, sets, types, rarities, minion types, spell schools and keywords, its mana curve, and its average cost, attack and health. |
Download a card image
Download one of a card's images and store it, so a later step can attach it to an email, post it or put it in a document. Choose the whole rendered card, the square art at either size, the lossless original or the deck-list tile. Asking for a render of a card the service does not pre-render comes back as a sentence naming what to ask for instead, rather than as a 404. HearthstoneJSON asks that busy sites re-host rather than hotlink, which is what this action is for. No API key required.
Inputs
- Card
cardtextRequired - The card, by name, by card ID or by dbfId: 'Leeroy Jenkins', 'EX1_116' and 559 all name the same card. The name has to be the whole name, so use Search cards when you only have part of one.
- Which image
imagetext - Optional. Which of the card's images to download. The whole rendered card at 512px by default, which is the one that reads as a Hearthstone card wherever it is posted.One of:
render_512_png(Full card render, 512px wide (PNG)),render_256_png(Full card render, 256px wide (PNG)),art_512_jpg(Card art, 512x512 (JPG)),art_512_webp(Card art, 512x512 (WebP)),art_256_jpg(Card art, 256x256 (JPG)),art_256_webp(Card art, 256x256 (WebP)),art_original_png(Original lossless art (PNG)),tile_png(Deck-list tile, 256x59 (PNG)),tile_jpg(Deck-list tile, 256x59 (JPG)),tile_webp(Deck-list tile, 256x59 (WebP)). Default:render_512_png. - Language
localetext - Optional. The language to read card names and text in. English (US) by default. Only the text changes: IDs, sets and every other value are the same in every language.One of:
enUS(English (US)),zhCN(Chinese (Simplified)),zhTW(Chinese (Traditional)),frFR(French),deDE(German),itIT(Italian),jaJP(Japanese),koKR(Korean),plPL(Polish),ptBR(Portuguese (Brazil)), and 4 more. Default:enUS. - Game build
buildtext - Optional. A specific game build to read, for example 25770, which is how you look at the cards as they were at a past patch. Leave empty for the build HearthstoneJSON is publishing now.
Outputs
byte_sizenumber- The file's size in bytes.
content_typetext- The file's media type, e.g. image/png.
document_reftext- The stored file's reference, for a step that takes one directly.
documentslist- The stored file, in the shape every step that produces one uses.
filenametext- The file's name.
imageobject- Which card and which image this file is.
urltext- A URL that serves the stored file.
Example output
{
"byte_size": 412803,
"content_type": "image/png",
"document_ref": "doc_hearthstonejson_ex1_116",
"documents": [
{
"content_type": "image/png",
"document_ref": "doc_hearthstonejson_ex1_116",
"filename": "EX1_116-render_512_png.png",
"size_bytes": 412803,
"url": "/actions/core/serve-document/doc_hearthstonejson_ex1_116"
}
],
"filename": "EX1_116-render_512_png.png",
"image": {
"card_id": "EX1_116",
"choice": "render_512_png",
"label": "Full card render, 512px wide (PNG)",
"name": "Leeroy Jenkins",
"source_url": "https://art.hearthstonejson.com/v1/render/latest/enUS/512x/EX1_116.png"
},
"url": "/actions/core/serve-document/doc_hearthstonejson_ex1_116"
}Get a card
Get one Hearthstone card in full, by its name, its card ID or its dbfId: 'Leeroy Jenkins', 'EX1_116' and 559 all find the same card. Every field the game publishes comes back, from the rules text and the flavour joke to the play requirements and the pool a card creates from, along with every image URL. A card the collectible set does not hold, such as a hero power or an enchantment, is looked for in the whole game rather than reported missing. No API key required.
Inputs
- Card
cardtextRequired - The card, by name, by card ID or by dbfId: 'Leeroy Jenkins', 'EX1_116' and 559 all name the same card. The name has to be the whole name, so use Search cards when you only have part of one.
- Language
localetext - Optional. The language to read card names and text in. English (US) by default. Only the text changes: IDs, sets and every other value are the same in every language.One of:
enUS(English (US)),zhCN(Chinese (Simplified)),zhTW(Chinese (Traditional)),frFR(French),deDE(German),itIT(Italian),jaJP(Japanese),koKR(Korean),plPL(Polish),ptBR(Portuguese (Brazil)), and 4 more. Default:enUS. - Game build
buildtext - Optional. A specific game build to read, for example 25770, which is how you look at the cards as they were at a past patch. Leave empty for the build HearthstoneJSON is publishing now.
Outputs
buildtext- The game build the catalogue came from.
cardobject- One Hearthstone card, with its art already addressed.
collectible_onlytrue/false- True when only collectible cards were read, which is the default. False when the whole game was.
imagesobject- Every published image URL for the card, keyed the same way the Download a card image step names them.
localetext- The language the catalogue was read in.
matched_bytext- Which of "id", "dbf_id" or "name" the lookup matched on.
source_urltext- The HearthstoneJSON file this answer was read out of.
Example output
{
"build": "25770",
"card": {
"armor": null,
"art_url": "https://art.hearthstonejson.com/v1/512x/EX1_116.jpg",
"artist": "Gabe from Penny Arcade",
"attack": 6,
"card_class": "NEUTRAL",
"card_class_name": "Neutral",
"classes": [
"NEUTRAL"
],
"collectible": true,
"cost": 5,
"dbf_id": 559,
"durability": null,
"elite": true,
"entourage": [
"EX1_116t"
],
"faction": "ALLIANCE",
"flavor": "At least he has Angry Chicken.",
"health": 2,
"hero_power_dbf_id": null,
"hide_stats": false,
"how_to_earn": null,
"how_to_earn_golden": null,
"id": "EX1_116",
"keywords": [
"Battlecry",
"Charge"
],
"locale": "enUS",
"mechanics": [
"BATTLECRY",
"CHARGE"
],
"multi_class_group": null,
"name": "Leeroy Jenkins",
"overload": null,
"play_requirements": {},
"race": null,
"race_name": null,
"races": [],
"rarity": "LEGENDARY",
"rarity_name": "Legendary",
"referenced_tags": [],
"render_url": "https://art.hearthstonejson.com/v1/render/latest/enUS/512x/EX1_116.png",
"set": "EXPERT1",
"set_name": "Classic",
"spell_damage": null,
"spell_school": null,
"spell_school_name": null,
"targeting_arrow_text": null,
"text": "<b>Charge</b>. <b>Battlecry:</b> Summon two 1/1 Whelps for your opponent.",
"text_plain": "Charge. Battlecry: Summon two 1/1 Whelps for your opponent.",
"tile_url": "https://art.hearthstonejson.com/v1/tiles/EX1_116.png",
"type": "MINION",
"type_name": "Minion"
},
"collectible_only": true,
"images": {
"art_256_jpg": "https://art.hearthstonejson.com/v1/256x/EX1_116.jpg",
"art_256_webp": "https://art.hearthstonejson.com/v1/256x/EX1_116.webp",
"art_512_jpg": "https://art.hearthstonejson.com/v1/512x/EX1_116.jpg",
"art_512_webp": "https://art.hearthstonejson.com/v1/512x/EX1_116.webp",
"art_original_png": "https://art.hearthstonejson.com/v1/orig/EX1_116.png",
"render_256_png": "https://art.hearthstonejson.com/v1/render/latest/enUS/256x/EX1_116.png",
"render_512_png": "https://art.hearthstonejson.com/v1/render/latest/enUS/512x/EX1_116.png",
"tile_jpg": "https://art.hearthstonejson.com/v1/tiles/EX1_116.jpg",
"tile_png": "https://art.hearthstonejson.com/v1/tiles/EX1_116.png",
"tile_webp": "https://art.hearthstonejson.com/v1/tiles/EX1_116.webp"
},
"locale": "enUS",
"matched_by": "name",
"source_url": "https://api.hearthstonejson.com/v1/25770/enUS/cards.collectible.json"
}Get a random card
Pick a card at random out of everything the filters leave, or a handful of them. The filters are the ones Search cards takes, so a step can ask for a random Legendary from one expansion, or a random Murloc, rather than a random anything. Built for the workflows that post a card of the day or open a meeting with one. An empty pool is reported as found: false with the filters that produced it, rather than as a failed step. No API key required.
Inputs
- Sets
setslist - Optional. Only cards from these sets. Every set is included when nothing is chosen. Pick from the list, which is read from the card data itself so it always holds the newest expansion.
- Classes
classeslist - Optional. Only cards playable by these classes. A multi-class card matches any of the classes it belongs to. Choose Neutral for the cards every deck can run.One or more of:
DEATHKNIGHT(Death Knight),DEMONHUNTER(Demon Hunter),DRUID,HUNTER,MAGE,PALADIN,PRIEST,ROGUE,SHAMAN,WARLOCK,WARRIOR,NEUTRAL(Neutral (any class can play it)). - Card types
typeslist - Optional. Only cards of these types. Hero powers and enchantments are not collectible, so choosing one of those also needs 'Include cards you cannot collect' turned on.One or more of:
MINION,SPELL,WEAPON,HERO,LOCATION,HERO_POWER(Hero power (not collectible)),ENCHANTMENT(Enchantment or buff (not collectible)). - Rarities
raritieslist - Optional. Only cards of these rarities. Free is the rarity of the cards in the Core set, which carry no rarity gem.One or more of:
FREE,COMMON,RARE,EPIC,LEGENDARY. - Minion types
minion_typeslist - Optional. Only minions of these types (Murloc, Dragon, Mech and the rest). A minion with two types matches either of them. Read from the card data, so a tribe added by a new expansion appears here.
- Keywords
keywordslist - Optional. Only cards carrying these keywords (Battlecry, Taunt, Deathrattle and the rest). Whether a card needs all of them or just one is the next field.
- Cheapest mana cost
min_costnumber - Optional. Only cards costing at least this much mana. A card with no mana cost at all, such as an enchantment, is left out once either cost bound is set.From 0 to 100.
- Dearest mana cost
max_costnumber - Optional. Only cards costing at most this much mana.From 0 to 100.
- How many
countnumber - Optional. How many cards to pick, without repeats. Between 1 and 25; one by default. Asking for more than the pool holds returns the whole pool.From 1 to 25. Default:
1. - Include cards you cannot collect
include_non_collectibletrue/false - Optional. Off by default, which reads the collectible set: the cards that show up in a collection, plus the base heroes. Turn it on to also reach hero powers, enchantments and the tokens cards summon. That file is many times larger and slower to read, so leave it off unless a step needs those.Default:
false. - Language
localetext - Optional. The language to read card names and text in. English (US) by default. Only the text changes: IDs, sets and every other value are the same in every language.One of:
enUS(English (US)),zhCN(Chinese (Simplified)),zhTW(Chinese (Traditional)),frFR(French),deDE(German),itIT(Italian),jaJP(Japanese),koKR(Korean),plPL(Polish),ptBR(Portuguese (Brazil)), and 4 more. Default:enUS. - Game build
buildtext - Optional. A specific game build to read, for example 25770, which is how you look at the cards as they were at a past patch. Leave empty for the build HearthstoneJSON is publishing now.
Outputs
buildtext- The game build the catalogue came from.
cardslist- The cards picked.
collectible_onlytrue/false- True when only collectible cards were read, which is the default. False when the whole game was.
countnumber- How many rows are in this result.
filterstext- What the search narrowed to, as a phrase. Null when nothing was narrowed, i.e. the whole catalogue was read.
foundtrue/false- False when the filters left nothing to pick from.
localetext- The language the catalogue was read in.
pool_sizenumber- How many cards the filters left to pick from.
source_urltext- The HearthstoneJSON file this answer was read out of.
Example output
{
"build": "25770",
"cards": [
{
"armor": null,
"art_url": "https://art.hearthstonejson.com/v1/512x/EX1_116.jpg",
"artist": "Gabe from Penny Arcade",
"attack": 6,
"card_class": "NEUTRAL",
"card_class_name": "Neutral",
"classes": [
"NEUTRAL"
],
"collectible": true,
"cost": 5,
"dbf_id": 559,
"durability": null,
"elite": true,
"entourage": [
"EX1_116t"
],
"faction": "ALLIANCE",
"flavor": "At least he has Angry Chicken.",
"health": 2,
"hero_power_dbf_id": null,
"hide_stats": false,
"how_to_earn": null,
"how_to_earn_golden": null,
"id": "EX1_116",
"keywords": [
"Battlecry",
"Charge"
],
"locale": "enUS",
"mechanics": [
"BATTLECRY",
"CHARGE"
],
"multi_class_group": null,
"name": "Leeroy Jenkins",
"overload": null,
"play_requirements": {},
"race": null,
"race_name": null,
"races": [],
"rarity": "LEGENDARY",
"rarity_name": "Legendary",
"referenced_tags": [],
"render_url": "https://art.hearthstonejson.com/v1/render/latest/enUS/512x/EX1_116.png",
"set": "EXPERT1",
"set_name": "Classic",
"spell_damage": null,
"spell_school": null,
"spell_school_name": null,
"targeting_arrow_text": null,
"text": "<b>Charge</b>. <b>Battlecry:</b> Summon two 1/1 Whelps for your opponent.",
"text_plain": "Charge. Battlecry: Summon two 1/1 Whelps for your opponent.",
"tile_url": "https://art.hearthstonejson.com/v1/tiles/EX1_116.png",
"type": "MINION",
"type_name": "Minion"
}
],
"collectible_only": true,
"count": 1,
"filters": "legendary",
"found": true,
"locale": "enUS",
"pool_size": 331,
"source_url": "https://api.hearthstonejson.com/v1/25770/enUS/cards.collectible.json"
}Get card images
Get every image HearthstoneJSON publishes for one card: the square art at both sizes in JPG and WebP, the lossless original, the deck-list tile in three formats, and the whole card rendered in any of the game's languages. Each URL comes back with what it is and whether the service publishes it for this card, since only playable cards are pre-rendered. Use it when a step needs a link to embed; use Download a card image when it needs the file. No API key required.
Inputs
- Card
cardtextRequired - The card, by name, by card ID or by dbfId: 'Leeroy Jenkins', 'EX1_116' and 559 all name the same card. The name has to be the whole name, so use Search cards when you only have part of one.
- Language
localetext - Optional. The language to read card names and text in. English (US) by default. Only the text changes: IDs, sets and every other value are the same in every language.One of:
enUS(English (US)),zhCN(Chinese (Simplified)),zhTW(Chinese (Traditional)),frFR(French),deDE(German),itIT(Italian),jaJP(Japanese),koKR(Korean),plPL(Polish),ptBR(Portuguese (Brazil)), and 4 more. Default:enUS. - Game build
buildtext - Optional. A specific game build to read, for example 25770, which is how you look at the cards as they were at a past patch. Leave empty for the build HearthstoneJSON is publishing now.
Outputs
buildtext- The game build the catalogue came from.
card_idtext- The card ID the URLs were built from, e.g. "EX1_116".
collectible_onlytrue/false- True when only collectible cards were read, which is the default. False when the whole game was.
imageslist- Every image, with what it is and where it lives.
localetext- The language the catalogue was read in.
matched_bytext- Which of "id", "dbf_id" or "name" the lookup matched on.
nametext- The card's name.
render_availabletrue/false- Whether a full-card render exists. Only minions, spells, weapons, heroes and locations have one.
render_localetext- The language the render URLs are in.
source_urltext- The HearthstoneJSON file this answer was read out of.
urlsobject- Every published image URL for the card, keyed the same way the Download a card image step names them.
Example output
{
"build": "25770",
"card_id": "EX1_116",
"collectible_only": true,
"images": [
{
"available": true,
"choice": "render_512_png",
"format": "png",
"kind": "render",
"label": "Full card render, 512px wide (PNG)",
"url": "https://art.hearthstonejson.com/v1/render/latest/enUS/512x/EX1_116.png"
}
],
"locale": "enUS",
"matched_by": "id",
"name": "Leeroy Jenkins",
"render_available": true,
"render_locale": "enUS",
"source_url": "https://api.hearthstonejson.com/v1/25770/enUS/cards.collectible.json",
"urls": {
"art_256_jpg": "https://art.hearthstonejson.com/v1/256x/EX1_116.jpg",
"art_256_webp": "https://art.hearthstonejson.com/v1/256x/EX1_116.webp",
"art_512_jpg": "https://art.hearthstonejson.com/v1/512x/EX1_116.jpg",
"art_512_webp": "https://art.hearthstonejson.com/v1/512x/EX1_116.webp",
"art_original_png": "https://art.hearthstonejson.com/v1/orig/EX1_116.png",
"render_256_png": "https://art.hearthstonejson.com/v1/render/latest/enUS/256x/EX1_116.png",
"render_512_png": "https://art.hearthstonejson.com/v1/render/latest/enUS/512x/EX1_116.png",
"tile_jpg": "https://art.hearthstonejson.com/v1/tiles/EX1_116.jpg",
"tile_png": "https://art.hearthstonejson.com/v1/tiles/EX1_116.png",
"tile_webp": "https://art.hearthstonejson.com/v1/tiles/EX1_116.webp"
}
}Get enum values
Read the enumerations behind the card data. Every set code, class, card type, rarity, minion type and game tag is one member of one of these, so this is where a value the filters did not offer comes from, and how a number in another Hearthstone tool is turned back into a name. Leave the enumeration empty to see which ones the service publishes. No API key required.
Inputs
- Enumeration
enumtext - Optional. Which enumeration to read, for example CardSet or GameTag. Leave empty to list every one the service publishes with how many values each holds.
- Search
searchtext - Optional. Only values whose name contains this text. Applies to the list of enumerations too when no enumeration is chosen.
- Number of results
limitnumber - Optional. How many values to return. Between 1 and 1000; 200 by default. Some enumerations hold well over a thousand values, so search rather than raising this.From 1 to 1000. Default:
200.
Outputs
available_enumslist- Every enumeration the service publishes, by name.
countnumber- How many rows are in this result.
enumtext- Which enumeration was read. Null when the enumerations themselves were listed.
enumslist- The enumerations published, when none was chosen.
memberslist- The values of the chosen enumeration, in numeric order.
searchtext- The search text this answer used. Null when none was given.
total_countnumber- How many rows matched in total, before the limit was applied.
Example output
{
"available_enums": [
"CardClass",
"CardSet",
"GameTag",
"Locale",
"Rarity"
],
"count": 5,
"enum": "Rarity",
"enums": [],
"members": [
{
"display_name": "Common",
"name": "COMMON",
"value": 1
},
{
"display_name": "Free",
"name": "FREE",
"value": 2
},
{
"display_name": "Rare",
"name": "RARE",
"value": 3
},
{
"display_name": "Epic",
"name": "EPIC",
"value": 4
},
{
"display_name": "Legendary",
"name": "LEGENDARY",
"value": 5
}
],
"search": null,
"total_count": 5
}Get related cards
Get the cards one card brings with it: the pool it creates from, the hero power a hero comes with, and the tokens and enchantments it summons or applies. Nothing in the card data links those last ones, so they are found through the game's own ID convention, which is what turns 'Leeroy Jenkins' into the 1/1 Whelps he gives your opponent. Reads the whole game, since none of these are collectible. No API key required.
Inputs
- Card
cardtextRequired - The card, by name, by card ID or by dbfId: 'Leeroy Jenkins', 'EX1_116' and 559 all name the same card. The name has to be the whole name, so use Search cards when you only have part of one.
- Language
localetext - Optional. The language to read card names and text in. English (US) by default. Only the text changes: IDs, sets and every other value are the same in every language.One of:
enUS(English (US)),zhCN(Chinese (Simplified)),zhTW(Chinese (Traditional)),frFR(French),deDE(German),itIT(Italian),jaJP(Japanese),koKR(Korean),plPL(Polish),ptBR(Portuguese (Brazil)), and 4 more. Default:enUS. - Game build
buildtext - Optional. A specific game build to read, for example 25770, which is how you look at the cards as they were at a past patch. Leave empty for the build HearthstoneJSON is publishing now.
Outputs
buildtext- The game build the catalogue came from.
cardobject- One Hearthstone card, with its art already addressed.
collectible_onlytrue/false- True when only collectible cards were read, which is the default. False when the whole game was.
entouragelist- The cards this card creates from, resolved in full.
entourage_countnumber- How many cards are in that pool.
hero_powerobject- This hero's hero power. Null for anything that is not a hero.
localetext- The language the catalogue was read in.
matched_bytext- Which of "id", "dbf_id" or "name" the lookup matched on.
referenced_tagslist- Keywords the card's text mentions but does not itself have.
source_urltext- The HearthstoneJSON file this answer was read out of.
token_countnumber- How many of those there are.
tokenslist- The tokens and enchantments whose ID is this card's with something appended, which is how the game names what a card summons or applies.
total_relatednumber- Everything above added together.
Example output
{
"build": "25770",
"card": {
"armor": null,
"art_url": "https://art.hearthstonejson.com/v1/512x/EX1_116.jpg",
"artist": "Gabe from Penny Arcade",
"attack": 6,
"card_class": "NEUTRAL",
"card_class_name": "Neutral",
"classes": [
"NEUTRAL"
],
"collectible": true,
"cost": 5,
"dbf_id": 559,
"durability": null,
"elite": true,
"entourage": [
"EX1_116t"
],
"faction": "ALLIANCE",
"flavor": "At least he has Angry Chicken.",
"health": 2,
"hero_power_dbf_id": null,
"hide_stats": false,
"how_to_earn": null,
"how_to_earn_golden": null,
"id": "EX1_116",
"keywords": [
"Battlecry",
"Charge"
],
"locale": "enUS",
"mechanics": [
"BATTLECRY",
"CHARGE"
],
"multi_class_group": null,
"name": "Leeroy Jenkins",
"overload": null,
"play_requirements": {},
"race": null,
"race_name": null,
"races": [],
"rarity": "LEGENDARY",
"rarity_name": "Legendary",
"referenced_tags": [],
"render_url": "https://art.hearthstonejson.com/v1/render/latest/enUS/512x/EX1_116.png",
"set": "EXPERT1",
"set_name": "Classic",
"spell_damage": null,
"spell_school": null,
"spell_school_name": null,
"targeting_arrow_text": null,
"text": "<b>Charge</b>. <b>Battlecry:</b> Summon two 1/1 Whelps for your opponent.",
"text_plain": "Charge. Battlecry: Summon two 1/1 Whelps for your opponent.",
"tile_url": "https://art.hearthstonejson.com/v1/tiles/EX1_116.png",
"type": "MINION",
"type_name": "Minion"
},
"collectible_only": false,
"entourage": [],
"entourage_count": 0,
"hero_power": null,
"locale": "enUS",
"matched_by": "name",
"referenced_tags": [],
"source_url": "https://api.hearthstonejson.com/v1/25770/enUS/cards.json",
"token_count": 1,
"tokens": [
{
"armor": null,
"art_url": "https://art.hearthstonejson.com/v1/512x/EX1_116.jpg",
"artist": "Gabe from Penny Arcade",
"attack": 6,
"card_class": "NEUTRAL",
"card_class_name": "Neutral",
"classes": [
"NEUTRAL"
],
"collectible": true,
"cost": 5,
"dbf_id": 559,
"durability": null,
"elite": true,
"entourage": [
"EX1_116t"
],
"faction": "ALLIANCE",
"flavor": "At least he has Angry Chicken.",
"health": 2,
"hero_power_dbf_id": null,
"hide_stats": false,
"how_to_earn": null,
"how_to_earn_golden": null,
"id": "EX1_116",
"keywords": [
"Battlecry",
"Charge"
],
"locale": "enUS",
"mechanics": [
"BATTLECRY",
"CHARGE"
],
"multi_class_group": null,
"name": "Leeroy Jenkins",
"overload": null,
"play_requirements": {},
"race": null,
"race_name": null,
"races": [],
"rarity": "LEGENDARY",
"rarity_name": "Legendary",
"referenced_tags": [],
"render_url": "https://art.hearthstonejson.com/v1/render/latest/enUS/512x/EX1_116.png",
"set": "EXPERT1",
"set_name": "Classic",
"spell_damage": null,
"spell_school": null,
"spell_school_name": null,
"targeting_arrow_text": null,
"text": "<b>Charge</b>. <b>Battlecry:</b> Summon two 1/1 Whelps for your opponent.",
"text_plain": "Charge. Battlecry: Summon two 1/1 Whelps for your opponent.",
"tile_url": "https://art.hearthstonejson.com/v1/tiles/EX1_116.png",
"type": "MINION",
"type_name": "Minion"
}
],
"total_related": 1
}Get the latest build
Find out which game build HearthstoneJSON is publishing right now, how many collectible cards and sets it holds, and which sets are newest. The build number is what pins the rest of a workflow to one patch, so every step reads the same cards even if a patch lands mid-run, and comparing it against a build recorded earlier is how a workflow notices that a new expansion is out. No API key required.
Inputs
- Language
localetext - Optional. The language to read card names and text in. English (US) by default. Only the text changes: IDs, sets and every other value are the same in every language.One of:
enUS(English (US)),zhCN(Chinese (Simplified)),zhTW(Chinese (Traditional)),frFR(French),deDE(German),itIT(Italian),jaJP(Japanese),koKR(Korean),plPL(Polish),ptBR(Portuguese (Brazil)), and 4 more. Default:enUS. - Count the cards too
include_card_countstrue/false - Optional. On by default, which also reads the collectible card file to report how many cards and sets the build holds. Turn it off for the build number on its own, which costs one small request.Default:
true.
Outputs
buildtext- The build being published, e.g. "25770". Pass it as Game build on other steps to pin them to it.
build_knowntrue/false- False when the service answered without naming a build, in which case the other steps read the latest one.
cards_urltext- Where every card in this build lives.
collectible_card_countnumber- How many collectible cards this build holds. Null when the counts were skipped.
collectible_cards_urltext- Where this build's collectible cards live.
enums_urltext- Where the enumerations live.
latest_urltext- The always-current URL that redirects to whichever build is newest.
localetext- The language the catalogue was read in.
newest_setslist- The most recently released sets, newest first.
set_countnumber- How many sets they span. Null when the counts were skipped.
Example output
{
"build": "25770",
"build_known": true,
"cards_url": "https://api.hearthstonejson.com/v1/25770/enUS/cards.json",
"collectible_card_count": 4312,
"collectible_cards_url": "https://api.hearthstonejson.com/v1/25770/enUS/cards.collectible.json",
"enums_url": "https://api.hearthstonejson.com/v1/enums.json",
"latest_url": "https://api.hearthstonejson.com/v1/latest/enUS/cards.collectible.json",
"locale": "enUS",
"newest_sets": [
{
"set": "EMERALD_DREAM",
"set_name": "Into the Emerald Dream"
}
],
"set_count": 38
}List card sets
List every set in the game with how many cards it holds, how many of those are collectible, and which classes it touches. This is the step that turns 'the Un'Goro expansion' into the set code the other actions filter on, and the quickest way to see what a new patch added. No API key required.
Inputs
- Search
searchtext - Optional. Only rows whose name contains this text. Capitals, punctuation and spacing are ignored. Leave empty for all of them.
- Include cards you cannot collect
include_non_collectibletrue/false - Optional. Off by default, which reads the collectible set: the cards that show up in a collection, plus the base heroes. Turn it on to also reach hero powers, enchantments and the tokens cards summon. That file is many times larger and slower to read, so leave it off unless a step needs those.Default:
false. - Language
localetext - Optional. The language to read card names and text in. English (US) by default. Only the text changes: IDs, sets and every other value are the same in every language.One of:
enUS(English (US)),zhCN(Chinese (Simplified)),zhTW(Chinese (Traditional)),frFR(French),deDE(German),itIT(Italian),jaJP(Japanese),koKR(Korean),plPL(Polish),ptBR(Portuguese (Brazil)), and 4 more. Default:enUS. - Game build
buildtext - Optional. A specific game build to read, for example 25770, which is how you look at the cards as they were at a past patch. Leave empty for the build HearthstoneJSON is publishing now.
Outputs
buildtext- The game build the catalogue came from.
collectible_onlytrue/false- True when only collectible cards were read, which is the default. False when the whole game was.
countnumber- How many rows are in this result.
localetext- The language the catalogue was read in.
searchtext- The search text this answer used. Null when none was given.
setslist- The sets, largest first.
source_urltext- The HearthstoneJSON file this answer was read out of.
Example output
{
"build": "25770",
"collectible_only": true,
"count": 1,
"locale": "enUS",
"search": "classic",
"sets": [
{
"card_count": 245,
"class_count": 10,
"classes": [
"DRUID",
"HUNTER",
"MAGE",
"NEUTRAL"
],
"collectible_count": 245,
"example_card": "Leeroy Jenkins",
"set": "EXPERT1",
"set_name": "Classic"
}
],
"source_url": "https://api.hearthstonejson.com/v1/25770/enUS/cards.collectible.json"
}List keywords
List every keyword the cards use, with how many carry each one and an example. Battlecry, Deathrattle, Taunt, Discover and the rest, including the ones a new expansion introduced. This is where the values the keyword filter takes come from, and it answers 'how many Taunt minions are there' on its own. No API key required.
Inputs
- Search
searchtext - Optional. Only rows whose name contains this text. Capitals, punctuation and spacing are ignored. Leave empty for all of them.
- Include cards you cannot collect
include_non_collectibletrue/false - Optional. Off by default, which reads the collectible set: the cards that show up in a collection, plus the base heroes. Turn it on to also reach hero powers, enchantments and the tokens cards summon. That file is many times larger and slower to read, so leave it off unless a step needs those.Default:
false. - Language
localetext - Optional. The language to read card names and text in. English (US) by default. Only the text changes: IDs, sets and every other value are the same in every language.One of:
enUS(English (US)),zhCN(Chinese (Simplified)),zhTW(Chinese (Traditional)),frFR(French),deDE(German),itIT(Italian),jaJP(Japanese),koKR(Korean),plPL(Polish),ptBR(Portuguese (Brazil)), and 4 more. Default:enUS. - Game build
buildtext - Optional. A specific game build to read, for example 25770, which is how you look at the cards as they were at a past patch. Leave empty for the build HearthstoneJSON is publishing now.
Outputs
buildtext- The game build the catalogue came from.
collectible_onlytrue/false- True when only collectible cards were read, which is the default. False when the whole game was.
countnumber- How many rows are in this result.
keywordslist- The keywords, commonest first.
localetext- The language the catalogue was read in.
searchtext- The search text this answer used. Null when none was given.
source_urltext- The HearthstoneJSON file this answer was read out of.
Example output
{
"build": "25770",
"collectible_only": true,
"count": 1,
"keywords": [
{
"card_count": 612,
"example_card": "Leeroy Jenkins",
"keyword": "BATTLECRY",
"keyword_name": "Battlecry"
}
],
"locale": "enUS",
"search": "battlecry",
"source_url": "https://api.hearthstonejson.com/v1/25770/enUS/cards.collectible.json"
}List languages
List every language HearthstoneJSON publishes card text in, each with the file it lives in. Read from the service's own list rather than a fixed one, so a language added later shows up here. Run it once when building a workflow that has to report cards in something other than English. No API key required.
Inputs
None.
Outputs
countnumber- How many rows are in this result.
default_localetext- The language used when a step names none.
languageslist- The languages, English first.
read_from_servicetrue/false- True when the list came from the service's own enumeration. False when it fell back to the languages known here.
Example output
{
"count": 2,
"default_locale": "enUS",
"languages": [
{
"cards_url": "https://api.hearthstonejson.com/v1/latest/enUS/cards.collectible.json",
"is_default": true,
"language": "English (US)",
"locale": "enUS"
},
{
"cards_url": "https://api.hearthstonejson.com/v1/latest/frFR/cards.collectible.json",
"is_default": false,
"language": "French",
"locale": "frFR"
}
],
"read_from_service": true
}Search cards
Search every Hearthstone card by text and by every property a card has: set, class, type, rarity, minion type, spell school, keyword, mana cost, attack and health. Each card comes back with its rules text in plain form, its keywords spelled out, and its art, tile and render URLs already built, so a step can post a card without a second call. This is the action to reach for first: it turns 'legendary Dragon minions that cost seven or less' into the cards themselves. Reads the collectible set unless told otherwise. No API key required.
Inputs
- Search text
querytext - Optional. Only cards where every word appears in the name, the card text, the flavour text, the artist or the card ID. Capitals, punctuation and word order are ignored. Leave empty to browse by the filters below alone.
- Sets
setslist - Optional. Only cards from these sets. Every set is included when nothing is chosen. Pick from the list, which is read from the card data itself so it always holds the newest expansion.
- Classes
classeslist - Optional. Only cards playable by these classes. A multi-class card matches any of the classes it belongs to. Choose Neutral for the cards every deck can run.One or more of:
DEATHKNIGHT(Death Knight),DEMONHUNTER(Demon Hunter),DRUID,HUNTER,MAGE,PALADIN,PRIEST,ROGUE,SHAMAN,WARLOCK,WARRIOR,NEUTRAL(Neutral (any class can play it)). - Card types
typeslist - Optional. Only cards of these types. Hero powers and enchantments are not collectible, so choosing one of those also needs 'Include cards you cannot collect' turned on.One or more of:
MINION,SPELL,WEAPON,HERO,LOCATION,HERO_POWER(Hero power (not collectible)),ENCHANTMENT(Enchantment or buff (not collectible)). - Rarities
raritieslist - Optional. Only cards of these rarities. Free is the rarity of the cards in the Core set, which carry no rarity gem.One or more of:
FREE,COMMON,RARE,EPIC,LEGENDARY. - Minion types
minion_typeslist - Optional. Only minions of these types (Murloc, Dragon, Mech and the rest). A minion with two types matches either of them. Read from the card data, so a tribe added by a new expansion appears here.
- Spell schools
spell_schoolslist - Optional. Only spells of these schools (Fire, Frost, Arcane and the rest). Spells printed before schools existed have none and match nothing here.
- Keywords
keywordslist - Optional. Only cards carrying these keywords (Battlecry, Taunt, Deathrattle and the rest). Whether a card needs all of them or just one is the next field.
- Keyword matching
keywords_matchtext - Optional. How to read a list of several keywords. By default a card has to carry every one of them, which is what finds a Battlecry that is also a Deathrattle; choose the other to find cards carrying any of them. Ignored when no keyword is chosen.One of:
all(The card has every keyword chosen),any(The card has at least one of them). Default:all. - Cheapest mana cost
min_costnumber - Optional. Only cards costing at least this much mana. A card with no mana cost at all, such as an enchantment, is left out once either cost bound is set.From 0 to 100.
- Dearest mana cost
max_costnumber - Optional. Only cards costing at most this much mana.From 0 to 100.
- Lowest attack
min_attacknumber - Optional. Only cards with at least this much attack, which restricts the answer to minions and weapons: nothing else has any.From 0 to 100.
- Highest attack
max_attacknumber - Optional. Only cards with at most this much attack.From 0 to 100.
- Lowest health
min_healthnumber - Optional. Only cards with at least this much health, which restricts the answer to minions and heroes: a weapon has durability rather than health and is left out.From 0 to 100.
- Highest health
max_healthnumber - Optional. Only cards with at most this much health.From 0 to 100.
- Sort by
sort_bytext - Optional. What to order the results by. Best match by default, which puts the card you named first when there is search text and falls back to the name when there is not.One of:
relevance(Best match for the search text),name,cost(Mana cost),attack,health(Health (or a weapon's durability)),rarity,set,dbf_id(dbfId, which rises with release order). Default:relevance. - Direction
sort_directiontext - Optional. Which end to start from. Ignored when sorting by best match, which is always best first.One of:
asc(Smallest first (A to Z, cheapest first)),desc(Largest first (Z to A, most expensive first)). Default:asc. - Number of results
limitnumber - Optional. How many cards to return in this page. Between 1 and 200; 25 by default. This is the only thing that decides how much a step prints, so raise it to see more rather than expecting a second page.From 1 to 200. Default:
25. - Skip
offsetnumber - Optional. How many cards to skip before this page. Use the next offset from the previous result to page through. 0 by default.From 0 to 100000. Default:
0. - Include cards you cannot collect
include_non_collectibletrue/false - Optional. Off by default, which reads the collectible set: the cards that show up in a collection, plus the base heroes. Turn it on to also reach hero powers, enchantments and the tokens cards summon. That file is many times larger and slower to read, so leave it off unless a step needs those.Default:
false. - Language
localetext - Optional. The language to read card names and text in. English (US) by default. Only the text changes: IDs, sets and every other value are the same in every language.One of:
enUS(English (US)),zhCN(Chinese (Simplified)),zhTW(Chinese (Traditional)),frFR(French),deDE(German),itIT(Italian),jaJP(Japanese),koKR(Korean),plPL(Polish),ptBR(Portuguese (Brazil)), and 4 more. Default:enUS. - Game build
buildtext - Optional. A specific game build to read, for example 25770, which is how you look at the cards as they were at a past patch. Leave empty for the build HearthstoneJSON is publishing now.
Outputs
buildtext- The game build the catalogue came from.
cardslist- The cards in this page.
collectible_onlytrue/false- True when only collectible cards were read, which is the default. False when the whole game was.
countnumber- How many rows are in this result.
filterstext- What the search narrowed to, as a phrase. Null when nothing was narrowed, i.e. the whole catalogue was read.
has_moretrue/false- True when more rows matched than this page holds.
localetext- The language the catalogue was read in.
next_offsetnumber- The Skip value that fetches the next page. Null on the last one.
querytext- The search text this answer used. Null when none was given.
sort_directiontext- Which end they started from, "asc" or "desc".
sorted_bytext- What the results were ordered by.
source_urltext- The HearthstoneJSON file this answer was read out of.
total_countnumber- How many rows matched in total, before the limit was applied.
Example output
{
"build": "25770",
"cards": [
{
"armor": null,
"art_url": "https://art.hearthstonejson.com/v1/512x/EX1_116.jpg",
"artist": "Gabe from Penny Arcade",
"attack": 6,
"card_class": "NEUTRAL",
"card_class_name": "Neutral",
"classes": [
"NEUTRAL"
],
"collectible": true,
"cost": 5,
"dbf_id": 559,
"durability": null,
"elite": true,
"entourage": [
"EX1_116t"
],
"faction": "ALLIANCE",
"flavor": "At least he has Angry Chicken.",
"health": 2,
"hero_power_dbf_id": null,
"hide_stats": false,
"how_to_earn": null,
"how_to_earn_golden": null,
"id": "EX1_116",
"keywords": [
"Battlecry",
"Charge"
],
"locale": "enUS",
"mechanics": [
"BATTLECRY",
"CHARGE"
],
"multi_class_group": null,
"name": "Leeroy Jenkins",
"overload": null,
"play_requirements": {},
"race": null,
"race_name": null,
"races": [],
"rarity": "LEGENDARY",
"rarity_name": "Legendary",
"referenced_tags": [],
"render_url": "https://art.hearthstonejson.com/v1/render/latest/enUS/512x/EX1_116.png",
"set": "EXPERT1",
"set_name": "Classic",
"spell_damage": null,
"spell_school": null,
"spell_school_name": null,
"targeting_arrow_text": null,
"text": "<b>Charge</b>. <b>Battlecry:</b> Summon two 1/1 Whelps for your opponent.",
"text_plain": "Charge. Battlecry: Summon two 1/1 Whelps for your opponent.",
"tile_url": "https://art.hearthstonejson.com/v1/tiles/EX1_116.png",
"type": "MINION",
"type_name": "Minion"
}
],
"collectible_only": true,
"count": 1,
"filters": "matching \"leeroy\"",
"has_more": false,
"locale": "enUS",
"next_offset": null,
"query": "leeroy",
"sort_direction": "asc",
"sorted_by": "relevance",
"source_url": "https://api.hearthstonejson.com/v1/25770/enUS/cards.collectible.json",
"total_count": 1
}Summarize cards
Break a slice of the card pool down by every property at once: how it splits across classes, sets, types, rarities, minion types, spell schools and keywords, its mana curve, and its average cost, attack and health. Takes the same filters as Search cards, so a step can ask what one expansion gave each class, or how aggressive a class's cards are, without pulling the cards themselves. No API key required.
Inputs
- Search text
querytext - Optional. Only cards where every word appears in the name, the card text, the flavour text, the artist or the card ID. Capitals, punctuation and word order are ignored. Leave empty to browse by the filters below alone.
- Sets
setslist - Optional. Only cards from these sets. Every set is included when nothing is chosen. Pick from the list, which is read from the card data itself so it always holds the newest expansion.
- Classes
classeslist - Optional. Only cards playable by these classes. A multi-class card matches any of the classes it belongs to. Choose Neutral for the cards every deck can run.One or more of:
DEATHKNIGHT(Death Knight),DEMONHUNTER(Demon Hunter),DRUID,HUNTER,MAGE,PALADIN,PRIEST,ROGUE,SHAMAN,WARLOCK,WARRIOR,NEUTRAL(Neutral (any class can play it)). - Card types
typeslist - Optional. Only cards of these types. Hero powers and enchantments are not collectible, so choosing one of those also needs 'Include cards you cannot collect' turned on.One or more of:
MINION,SPELL,WEAPON,HERO,LOCATION,HERO_POWER(Hero power (not collectible)),ENCHANTMENT(Enchantment or buff (not collectible)). - Rarities
raritieslist - Optional. Only cards of these rarities. Free is the rarity of the cards in the Core set, which carry no rarity gem.One or more of:
FREE,COMMON,RARE,EPIC,LEGENDARY. - Minion types
minion_typeslist - Optional. Only minions of these types (Murloc, Dragon, Mech and the rest). A minion with two types matches either of them. Read from the card data, so a tribe added by a new expansion appears here.
- Spell schools
spell_schoolslist - Optional. Only spells of these schools (Fire, Frost, Arcane and the rest). Spells printed before schools existed have none and match nothing here.
- Keywords
keywordslist - Optional. Only cards carrying these keywords (Battlecry, Taunt, Deathrattle and the rest). Whether a card needs all of them or just one is the next field.
- Keyword matching
keywords_matchtext - Optional. How to read a list of several keywords. By default a card has to carry every one of them, which is what finds a Battlecry that is also a Deathrattle; choose the other to find cards carrying any of them. Ignored when no keyword is chosen.One of:
all(The card has every keyword chosen),any(The card has at least one of them). Default:all. - Cheapest mana cost
min_costnumber - Optional. Only cards costing at least this much mana. A card with no mana cost at all, such as an enchantment, is left out once either cost bound is set.From 0 to 100.
- Dearest mana cost
max_costnumber - Optional. Only cards costing at most this much mana.From 0 to 100.
- Lowest attack
min_attacknumber - Optional. Only cards with at least this much attack, which restricts the answer to minions and weapons: nothing else has any.From 0 to 100.
- Highest attack
max_attacknumber - Optional. Only cards with at most this much attack.From 0 to 100.
- Lowest health
min_healthnumber - Optional. Only cards with at least this much health, which restricts the answer to minions and heroes: a weapon has durability rather than health and is left out.From 0 to 100.
- Highest health
max_healthnumber - Optional. Only cards with at most this much health.From 0 to 100.
- Include cards you cannot collect
include_non_collectibletrue/false - Optional. Off by default, which reads the collectible set: the cards that show up in a collection, plus the base heroes. Turn it on to also reach hero powers, enchantments and the tokens cards summon. That file is many times larger and slower to read, so leave it off unless a step needs those.Default:
false. - Language
localetext - Optional. The language to read card names and text in. English (US) by default. Only the text changes: IDs, sets and every other value are the same in every language.One of:
enUS(English (US)),zhCN(Chinese (Simplified)),zhTW(Chinese (Traditional)),frFR(French),deDE(German),itIT(Italian),jaJP(Japanese),koKR(Korean),plPL(Polish),ptBR(Portuguese (Brazil)), and 4 more. Default:enUS. - Game build
buildtext - Optional. A specific game build to read, for example 25770, which is how you look at the cards as they were at a past patch. Leave empty for the build HearthstoneJSON is publishing now.
Outputs
average_attacknumber- The mean attack of the cards that have one.
average_costnumber- The mean mana cost, to two decimal places.
average_healthnumber- The mean health of the cards that have one.
buildtext- The game build the catalogue came from.
by_classlist- The split across classes.
by_keywordlist- The split across keywords, commonest first.
by_minion_typelist- The split across minion types.
by_raritylist- The split across rarities.
by_setlist- The split across sets.
by_spell_schoollist- The split across spell schools.
by_typelist- The split across card types.
collectible_countnumber- How many of those show up in a collection.
collectible_onlytrue/false- True when only collectible cards were read, which is the default. False when the whole game was.
filterstext- What the search narrowed to, as a phrase. Null when nothing was narrowed, i.e. the whole catalogue was read.
localetext- The language the catalogue was read in.
mana_curvelist- How many cards sit at each mana cost, cheapest first.
querytext- The search text this answer used. Null when none was given.
source_urltext- The HearthstoneJSON file this answer was read out of.
total_countnumber- How many cards the filters left.
Example output
{
"average_attack": 3.12,
"average_cost": 3.86,
"average_health": 3.44,
"build": "25770",
"by_class": [
{
"card_count": 125,
"name": "Neutral",
"value": "NEUTRAL"
}
],
"by_keyword": [
{
"card_count": 61,
"name": "Battlecry",
"value": "BATTLECRY"
}
],
"by_minion_type": [
{
"card_count": 22,
"name": "Beast",
"value": "BEAST"
}
],
"by_rarity": [
{
"card_count": 94,
"name": "Common",
"value": "COMMON"
}
],
"by_set": [
{
"card_count": 245,
"name": "Classic",
"value": "EXPERT1"
}
],
"by_spell_school": [
{
"card_count": 8,
"name": "Fire",
"value": "FIRE"
}
],
"by_type": [
{
"card_count": 178,
"name": "Minion",
"value": "MINION"
}
],
"collectible_count": 245,
"collectible_only": true,
"filters": "from Classic",
"locale": "enUS",
"mana_curve": [
{
"card_count": 30,
"cost": 5
}
],
"query": null,
"source_url": "https://api.hearthstonejson.com/v1/25770/enUS/cards.collectible.json",
"total_count": 245
}