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

ActionWhat it does
Download a card imageDownload 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 cardGet 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 cardPick a card at random out of everything the filters leave, or a handful of them.
Get card imagesGet 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 valuesRead the enumerations behind the card data.
Get related cardsGet 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 buildFind out which game build HearthstoneJSON is publishing right now, how many collectible cards and sets it holds, and which sets are newest.
List card setsList every set in the game with how many cards it holds, how many of those are collectible, and which classes it touches.
List keywordsList every keyword the cards use, with how many carry each one and an example.
List languagesList every language HearthstoneJSON publishes card text in, each with the file it lives in.
Search cardsSearch 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 cardsBreak 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

CardcardtextRequired
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 imageimagetext
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.
Languagelocaletext
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 buildbuildtext
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

CardcardtextRequired
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.
Languagelocaletext
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 buildbuildtext
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

Setssetslist
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.
Classesclasseslist
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 typestypeslist
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)).
Raritiesraritieslist
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 typesminion_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.
Keywordskeywordslist
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 costmin_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 costmax_costnumber
Optional. Only cards costing at most this much mana.From 0 to 100.
How manycountnumber
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 collectinclude_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.
Languagelocaletext
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 buildbuildtext
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

CardcardtextRequired
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.
Languagelocaletext
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 buildbuildtext
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

Enumerationenumtext
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.
Searchsearchtext
Optional. Only values whose name contains this text. Applies to the list of enumerations too when no enumeration is chosen.
Number of resultslimitnumber
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 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

CardcardtextRequired
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.
Languagelocaletext
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 buildbuildtext
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

Languagelocaletext
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 tooinclude_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

Searchsearchtext
Optional. Only rows whose name contains this text. Capitals, punctuation and spacing are ignored. Leave empty for all of them.
Include cards you cannot collectinclude_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.
Languagelocaletext
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 buildbuildtext
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

Searchsearchtext
Optional. Only rows whose name contains this text. Capitals, punctuation and spacing are ignored. Leave empty for all of them.
Include cards you cannot collectinclude_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.
Languagelocaletext
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 buildbuildtext
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 textquerytext
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.
Setssetslist
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.
Classesclasseslist
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 typestypeslist
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)).
Raritiesraritieslist
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 typesminion_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 schoolsspell_schoolslist
Optional. Only spells of these schools (Fire, Frost, Arcane and the rest). Spells printed before schools existed have none and match nothing here.
Keywordskeywordslist
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 matchingkeywords_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 costmin_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 costmax_costnumber
Optional. Only cards costing at most this much mana.From 0 to 100.
Lowest attackmin_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 attackmax_attacknumber
Optional. Only cards with at most this much attack.From 0 to 100.
Lowest healthmin_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 healthmax_healthnumber
Optional. Only cards with at most this much health.From 0 to 100.
Sort bysort_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.
Directionsort_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 resultslimitnumber
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.
Skipoffsetnumber
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 collectinclude_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.
Languagelocaletext
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 buildbuildtext
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 textquerytext
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.
Setssetslist
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.
Classesclasseslist
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 typestypeslist
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)).
Raritiesraritieslist
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 typesminion_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 schoolsspell_schoolslist
Optional. Only spells of these schools (Fire, Frost, Arcane and the rest). Spells printed before schools existed have none and match nothing here.
Keywordskeywordslist
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 matchingkeywords_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 costmin_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 costmax_costnumber
Optional. Only cards costing at most this much mana.From 0 to 100.
Lowest attackmin_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 attackmax_attacknumber
Optional. Only cards with at most this much attack.From 0 to 100.
Lowest healthmin_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 healthmax_healthnumber
Optional. Only cards with at most this much health.From 0 to 100.
Include cards you cannot collectinclude_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.
Languagelocaletext
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 buildbuildtext
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
}

On this page