The AllSets.json file is an object that looks like this:

  "LEA" : { /* set data */ },
  "LEB" : { /* set data */ },
  "2ED" : { /* set data */ },

A flat array of all sets is also available: AllSetsArray.jsonand AllSetsArray-x.json

Each individual set is a JSON object like this:

  "name" : "Nemesis",            // The name of the set
  "code" : "NMS",                // The set's abbreviated code
  "gathererCode" : "NE",         // The code that Gatherer uses for the set. Only present if different than 'code'
  "oldCode" : "NEM",             // An old style code used by some Magic software. Only present if different than 'gathererCode' and 'code'
  "magicCardsInfoCode" : "ne",   // The code that uses for the set. Only present if has this set
  "releaseDate" : "2000-02-14"   // When the set was released (YYYY-MM-DD). For promo sets, the date the first card was released.
  "border" : "black",            // The type of border on the cards, either "white", "black" or "silver"
  "type" : "expansion",          // Type of set. One of: "core", "expansion", "reprint", "box", "un",
                                 //                      "from the vault", "premium deck", "duel deck",
                                 //                      "starter", "commander", "planechase", "archenemy",
                                 //                      "promo", "vanguard", "masters", "conspiracy", "masterpiece"
  "block" : "Masques",           // The block this set is in,
  "onlineOnly" : false,          // Present and set to true if the set was only released online
  "booster" : [ "rare", ... ],   // Booster contents for this set, see below for details
  "cards" : [ {}, {}, {}, ... ]  // The cards in the set

Some software (Magic Workstation) uses non-standard set codes. You can find those in this post

Booster Field

The 'booster' key is present for each set that has physical boosters (so not present for box sets, duel decks, digital masters editions, etc.). It is an array containing one item per card in the booster. Thus the array length is how many cards are in a booster. Each item in the array is either a string representing the type of booster card or an array of strings representing possible types for that booster card.

For example, 'Magic 2013' contains 1 land, 1 marketing card, 10 commons, 3 uncommons and 1 rare or mythic rare:

  "name" : "Magic 2013",
  "booster" : [ "land", "marketing", "common", "common", "common", "common", "common", "common", "common", "common", "common", "common", "uncommon", "uncommon", "uncommon", [ "rare", "mythic rare" ] ]

The common booster card types are:

The Time Spiral block has some additional types:

Note that the 'Time Spiral "Timeshifted"' set does not have a booster field. This 'set' was actually a subset of the 'Time Spiral' set and its cards are the 'timeshifted purple' booster card type mentioned above. The "Magic: The Gathering—Conspiracy" expansion has an additional "draft-matters" type which can either be a "Conspiracy" type card or a card that affects drafting. The "Vintage Masters" set has one slot that can contain either a power nine card or a guaranteed foil, so it has additional types "power nine" and "foil". Foils are not explictily mentioned, except for 'Modern Masters' where a slot is guaranteed a foil. So that set has four additional possible booster card types: foil common, foil uncommon, foil rare and foil mythic rare. Any card marked as "starter" : true should be exempted from any booster generation as these cards were only available in boxed sets and not in boosters.


The cards value is an Array of cards, each being a JSON object with key/value pairs. Below you will find a table detailing each key. The cards are ordered first by 'number', then by 'name', then by 'multiverseid'. If a value would be empty (such as manaCost for Basic Lands), then the key will not exist in the object. All cards are from the latest Oracle text, not the original printed text (the 'extras' file has the originalText which is the non-oracle text).

Key Example Description
id 3129aee7f26a4282ce131db7d417b1bc3338c4d4 A unique id for this card. It is made up by doing an SHA1 hash of setCode + cardName + cardImageName
layout "normal" The card layout. Possible values: normal, split, flip, double-faced, token, plane, scheme, phenomenon, leveler, vanguard, meld
name "Research" The card name. For split, double-faced and flip cards, just the name of one side of the card. Basically each 'sub-card' has its own record.
names [ "Research", "Development" ] Only used for split, flip, double-faced, and meld cards. Will contain all the names on this card, front or back. For meld cards, the first name is the card with the meld ability, which has the top half on its back, the second name is the card with the reminder text, and the third name is the melded back face.
manaCost "{G}{U}" The mana cost of this card. Consists of one or more mana symbols.
cmc 2 Converted mana cost. Always a number. NOTE: cmc may have a decimal point as cards from unhinged may contain "half mana" (such as 'Little Girl' with a cmc of 0.5). Cards without this field have an implied cmc of zero as per rule 202.3a
colors [ "Blue", "Green" ] The card colors. Usually this is derived from the casting cost, but some cards are special (like the back of double-faced cards and Ghostfire).
colorIdentity [ "U", "G" ] This is created reading all card color information and costs. It is the same for double-sided cards (if they have different colors, the identity will have both colors). It also identifies all mana symbols in the card (cost and text). Mostly used on commander decks.
type "Legendary Creature — Angel" The card type. This is the type you would see on the card if printed today. Note: The dash is a UTF8 'long dash' as per the MTG rules
supertypes [ "Legendary" ] The supertypes of the card. These appear to the far left of the card type. Example values: Basic, Legendary, Snow, World, Ongoing
types [ "Creature" ] The types of the card. These appear to the left of the dash in a card type. Example values: Instant, Sorcery, Artifact, Creature, Enchantment, Land, Planeswalker
subtypes [ "Angel" ] The subtypes of the card. These appear to the right of the dash in a card type. Usually each word is its own subtype. Example values: Trap, Arcane, Equipment, Aura, Human, Rat, Squirrel, etc.
rarity "Rare" The rarity of the card. Examples: Common, Uncommon, Rare, Mythic Rare, Special, Basic Land
text "{T}: You gain 1 life." The text of the card. May contain mana symbols and other symbols.
flavor "I'd like to buy a bowel." The flavor text of the card.
artist "Mark Poole" The artist of the card. This may not match what is on the card as MTGJSON corrects many card misprints.
number "148a" The card number. This is printed at the bottom-center of the card in small text. This is a string, not an integer, because some cards have letters in their numbers.
power "4" The power of the card. This is only present for creatures. This is a string, not an integer, because some cards have powers like: "1+*"
toughness "5" The toughness of the card. This is only present for creatures. This is a string, not an integer, because some cards have toughness like: "1+*"
loyalty 4 The loyalty of the card. This is only present for planeswalkers.
multiverseid 2479 The multiverseid of the card on Wizard's Gatherer web page.
Cards from sets that do not exist on Gatherer will NOT have a multiverseid.
Sets not on Gatherer are: ATH, ITP, DKM, RQS, DPA and all sets with a 4 letter code that starts with a lowercase 'p'.
variations [ 1909, 1910 ] If a card has alternate art (for example, 4 different Forests, or the 2 Brothers Yamazaki) then each other variation's multiverseid will be listed here, NOT including the current card's multiverseid. NOTE: Only present for sets that exist on Gatherer.
imageName "ajani goldmane" This used to refer to the file name for this card. has been SHUT DOWN by Wizards of the Coast.
This field will continue to be set correctly and is now only useful for UID purposes.
watermark "Selesnya" The watermark on the card. Note: Split cards don't currently have this field set, despite having a watermark on each side of the split card.
border "black" If the border for this specific card is DIFFERENT than the border specified in the top level set JSON, then it will be specified here. (Example: Unglued has silver borders, except for the lands which are black bordered)
timeshifted true If this card was a timeshifted card in the set.
hand -3 Maximum hand size modifier. Only exists for Vanguard cards.
life -10 Starting life total modifier. Only exists for Vanguard cards.
reserved true Set to true if this card is reserved by Wizards Official Reprint Policy
releaseDate "2010-07-22" or "2010-07" or "2010" The date this card was released. This is only set for promo cards. The date may not be accurate to an exact day and month, thus only a partial date may be set (YYYY-MM-DD or YYYY-MM or YYYY). Some promo cards do not have a known release date.
starter true Set to true if this card was only released as part of a core box set. These are technically part of the core sets and are tournament legal despite not being available in boosters.
mciNumber 109 Number used by for their indexing URLs (Most often it is the card number in the set)
Extras Only Fields
Key Example Description
rulings [ { "date" : "2003-04-15",
"text" : "Does not tap." } ]
The rulings for the card. An array of objects, each object having 'date' and 'text' keys.
foreignNames [ { "language" : "Italian",
"name" : "Wurm Devastatore",
"multiverseid" : 200475 } ]
Foreign language names for the card, if this card in this set was printed in another language. An array of objects, each object having 'language', 'name' and 'multiverseid' keys. Not available for all sets.
printings [ "ICE", "CHR" ] The sets that this card was printed in, expressed as an array of set codes.
originalText "{8}: Do 4 damage to any target." The original text on the card at the time it was printed. This field is not available for promo cards.
originalType "Mono Artifact" The original type on the card at the time it was printed. This field is not available for promo cards.
legalities [ { "format" : "Legacy",
"legality" : "Banned" },
{ "format" : "Vintage",
"legality" : "Restricted" } ]
Which formats this card is legal, restricted or banned in. An array of objects, each object having 'format' and 'legality'. A 'condition' key may be added in the future if Gatherer decides to utilize it again.
source "Theros Game Day prize" For promo cards, this is where this card was originally obtained. For box sets that are theme decks, this is which theme deck the card is from. For clash packs, this is which deck it is from.

A unique identifier (UID) key for each card can be made by combining: setCode + cardName + imageName


The AllCards.json file is organized by card name and merges card data from multiple sets into a single card object.

Due to this merging of card data, several set specific fields are not present in the AllCards data: artist, border, flavor, foreignNames, id, mciNumber, multiverseid, number, originalText, originalType, rarity, releaseDate, reserved, timeshifted, variations, watermark

This file is lighter weight and is meant to provide a quick and easy way to get basic card data.

The JSON file itself looks like this:

"Nevinyrral's Disk" : { /* card data */ },
           "Norrit" : { /* card data */ },
"Nullmage Shepherd" : { /* card data */ },

Additional JSON Files

Several additional JSON files are available and will be updated whenever card data is added or updated:

It also notes which JSON files have changed since the last update with fields: updatedSetFiles, newSetFiles, removedSetFiles


All JSON files are also available as JSONP files by changing the extension from '.json' to '.jsonp'. This allows you to include them client side by linking to them directly with a

A callback handler called 'mtgjsoncallback' will be called with 2 arguments. The first argument is the JSON data itself. This isn't a string, so no need to call JSON.parse() The second is the file name as a string, without an extension ("AllSets" in the example).

Client side javascript example:

window.mtgjsoncallback = function(data, name) {
  /* handling code here */