This page is the MTGStocks parameter reference. What the data is used for, a real sample and pricing are on MTGStocks API: what you get →
E-commerce & Marketplaces

MTGStocks API & Scraper: parameters and responses

This is the reference for the 25 MTGStocks endpoints under /mtgstocks/v1 (search, suggest, print, price_history, sellers, interests, sets, set, set_market, set_market_history and 15 more) and their 40 parameters. Each endpoint lists its parameters, required or optional, with allowed values and defaults, and comes with a cURL, Python and JavaScript call; every response uses the same { ok, data, meta, error } envelope.

The MTGStocks API returns Magic: The Gathering market data as clean JSON.

25 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

print returns one printing of a card with the latest low, average, high, market and foil prices at TCGplayer, Card Kingdom, Star City Games and ManaPool in USD and at Cardmarket and CardTrader in EUR, previous-day, week-ago and month-ago prices, the all-time high and low, format legality, every other printing and the sealed products that contain it. price_history returns the daily series behind the chart for one store: TCGplayer back to 2012 and Cardmarket back to 2017. interests is the daily table of biggest price moves (about 7,000 rows) with current and past price and percent change, in USD or EUR, regular or foil, filterable by direction, price, set, format legality and Reserved List. sellers lists current offers and buy prices at the stores MTGStocks tracks (Card Kingdom, Star City Games, ABU Games, ManaPool, Hareruya and others) with each row's own currency. sets, set and set_market cover all 454 sets, per-card prices and total set value with 7-day and 30-day change. sealed, sealed_history and expected_value cover booster boxes, their price history and what the contents are worth. indices tracks MTGStocks' market indices, including the Reserved List, in USD and EUR. No account, no browser - one ReefAPI key and the standard { ok, data, meta, error } envelope.

Reference

One print, six stores, 14 years of history: Black Lotus (Unlimited)

Black Lotus from Unlimited Edition on 2026-11-08: one print call returned its price at six stores in their own currencies, and price_history returned 5,234 daily TCGplayer average points from 2012-06-22 to today.

StoreCurrencyAverage price
TCGplayerUSD20,000.00
ManaPoolUSD21,518.34
Star City GamesUSD25,999.99
Card KingdomUSD35,099.99
CardmarketEUR13,281.67

TCGplayer all-time high on this print: 105,123.29 USD (2026-08-12), all-time low 1,303.24 USD (2012-07-04). Stores are compared in their own currency; the engine does not convert or blend them, and fields a store does not publish come back null.

Live example

Real request and response JSON

Captured from the indexed primary action, print, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/mtgstocks/v1/print",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "print_id": "15770"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "mtgstocks",
    "endpoint": "print",
    "mode": "live",
    "latency_ms": 323,
    "record_count": 1,
    "bytes": 9163,
    "cache_hit": false,
    "charged_credits": 1,
    "version": "0.1.0",
    "request_id": "665055c71f7c4cf7",
    "queue_ms": 1.3,
    "fetched_at": "2026-11-08T13:04:29.364Z"
  },
  "data": {
    "print": {
      "print_id": 15770,
      "name": "Black Lotus",
      "slug": "15770-black-lotus",
      "url": "https://www.mtgstocks.com/prints/15770-black-lotus",
      "rarity": "R",
      "collector_number": "233",
      "foil": false,
      "reserved_list": true,
      "image_url": "https://cards.scryfall.io/normal/front/4/a/4a2e428c-dd25-484c-bbc8-2d6ce10ef42c.jpg",
      "set": {
        "set_id": 73,
        "name": "Unlimited Edition",
        "code": "2ED",
        "slug": "73-unlimited-edition",
        "set_type": "core"
      },
      "extended_rarity": "R1",
      "has_foil": false,
      "has_nonfoil": true,
      "flip_card": false,
      "tournament_legal": true,
      "multiverse_id": 600,
      "scryfall_id": "4a2e428c-dd25-484c-bbc8-2d6ce10ef42c",
      "scryfall_url": "https://www.scryfall.com/card/4a2e428c-dd25-484c-bbc8-2d6ce10ef42c",
      "edhrec_url": "https://www.edhrec.com/cards/black-lotus",
      "set_mkm_id": 3,
      "card": {
        "card_id": 12208,
        "name": "Black Lotus",
        "mana_cost": "{0}",
        "mana_value": 0,
        "supertype": "Artifact",
        "subtype": null,
        "oracle_text": "{T}, Sacrifice this artifact: Add three mana of any one color.",
        "power": null,
        "toughness": null,
        "loyalty": null,
        "reserved_list": true,
        "lowest_print_id": 15770,
        "legality": {
          "tlr": "banned",
          "duel": "banned",
          "brawl": "not_legal",
          "penny": "not_legal",
          "predh": "banned",
          "future": "not_legal",
          "legacy": "banned",
          "modern": "not_legal",
          "pauper": "not_legal",
          "alchemy": "not_legal",
          "pioneer": "not_legal",
          "vintage": "restricted",
          "explorer": "not_legal",
          "historic": "not_legal",
          "standard": "not_legal",
          "timeless": "not_legal",
          "commander": "banned",
          "gladiator": "not_legal",
          "oldschool": "restricted",
          "premodern": "not_legal",
          "oathbreaker": "banned",
          "historicbrawl": "not_legal",
          "standardbrawl": "not_legal",
          "paupercommander": "not_legal",
          "competitivebrawl": "not_legal"
        }
      },
      "all_time_high_tcgplayer": {
        "average": 105123.29,
        "date": "2026-08-12",
        "currency": "USD"
      },
      "all_time_low_tcgplayer": {
        "average": 1303.24,
        "date": "2012-07-04",
        "currency": "USD"
      },
      "buylist": {
        "nm": 1,
        "lp": 1,
        "nm_foil": null,
        "lp_foil": null,
        "currency": null
      },
      "stores": {
        "tcgplayer": {
          "store": "tcgplayer",
          "currency": "USD",
          "url": "https://www.tcgplayer.com/product/8989/magic-unlimited-edition-black-lotus",
          "low": 19249.99,
          "average": 20000,
          "high": 22549.99,
          "market": null,
          "foil": null,
          "foil_low": null,
          "market_foil": null,
          "url_foil": null,
          "product_id": 8989,
          "price_date": "2026-11-08",
          "average_previous_day": 20000,
          "average_week_ago": 21275,
          "average_month_ago": 20000,
          "foil_previous_day": null,
          "foil_week_ago": null,
          "foil_month_ago": null,
          "average_change_day_percent": 0,
          "average_change_week_percent": -5.99,
          "average_change_month_percent": 0,
          "foil_change_day_percent": null,
          "foil_change_week_percent": null,
          "foil_change_month_percent": null
        },
        "cardkingdom": {
          "store": "cardkingdom",
          "currency": "USD",
          "url": "https://www.cardkingdom.com/mtg/unlimited/black-lotus",
          "low": null,
          "average": 35099.99,
          "high": null,
          "market": null,
          "foil": null,
          "foil_low": null,
          "market_foil": null,
          "url_foil": null,
          "product_id": null,
          "price_date": null,
          "average_previous_day": 35099.99,
          "average_week_ago": 35099.99,
          "average_month_ago": 34999.99,
          "foil_previous_day": null,
          "foil_week_ago": null,
          "foil_month_ago": null,
          "average_change_day_percent": 0,
          "average_change_week_percent": 0,
          "average_change_month_percent": 0.29,
          "foil_change_day_percent": null,
          "foil_change_week_percent": null,
          "foil_change_month_percent": null
        },
        "starcitygames": {
          "store": "starcitygames",
          "currency": "USD",
          "url": "https://starcitygames.com/black-lotus-sgl-mtg-2ed-233-enn/",
          "low": null,
          "average": 25999.99,
          "high": null,
          "market": null,
          "foil": 25999.99,
          "foil_low": null,
          "market_foil": null,
          "url_foil": null,
          "product_id": null,
          "price_date": null,
          "average_previous_day": 25999.99,
          "average_week_ago": 25999.99,
          "average_month_ago": 23999.99,
          "foil_previous_day": 25999.99,
          "foil_week_ago": 25999.99,
          "foil_month_ago": 23999.99,
          "average_change_day_percent": 0,
          "average_change_week_percent": 0,
          "average_change_month_percent": 8.33,
          "foil_change_day_percent": 0,
          "foil_change_week_percent": 0,
          "foil_change_month_percent": 8.33
        },
        "manapool": {
          "store": "manapool",
          "currency": "USD",
          "url": "https://manapool.com/card/2ed/233/black-lotus",
          "low": null,
          "average": 21518.34,
          "high": null,
          "market": null,
          "foil": null,
          "foil_low": null,
          "market_foil": null,
          "url_foil": null,
          "product_id": null,
          "price_date": null,
          "average_previous_day": null,
          "average_week_ago": null,
          "average_month_ago": null,
          "foil_previous_day": null,
          "foil_week_ago": null,
          "foil_month_ago": null,
          "average_change_day_percent": null,
          "average_change_week_percent": null,
          "average_change_month_percent": null,
          "foil_change_day_percent": null,
          "foil_change_week_percent": null,
          "foil_change_month_percent": null
        },
        "cardmarket": {
          "store": "cardmarket",
          "currency": "EUR",
          "url": "https://www.cardmarket.com/en/Magic/Products/Singles/Unlimited/Black-Lotus?referrer=mtg-stocks",
          "low": 10999.99,
          "average": 13281.67,
          "high": null,
          "market": null,
          "foil": null,
          "foil_low": null,
          "market_foil": null,
          "url_foil": null,
          "product_id": null,
          "price_date": null,
          "average_previous_day": 13281.67,
          "average_week_ago": 13733.33,
          "average_month_ago": 18250,
          "foil_previous_day": null,
          "foil_week_ago": null,
          "foil_month_ago": null,
          "average_change_day_percent": 0,
          "average_change_week_percent": -3.29,
          "average_change_month_percent": -27.22,
          "foil_change_day_percent": null,
          "foil_change_week_percent": null,
          "foil_change_month_percent": null
        },
        "cardtrader": {
          "store": "cardtrader",
          "currency": "EUR",
          "url": "https://www.cardtrader.com/cards/38394",
          "low": 12500.64,
          "average": 16500.44,
          "high": null,
          "market": null,
          "foil": null,
          "foil_low": null,
          "market_foil": null,
          "url_foil": null,
          "product_id": 38394,
          "price_date": null,
          "average_previous_day": 16500.44,
          "average_week_ago": 16500.44,
          "average_month_ago": 30417.14,
          "foil_previous_day": null,
          "foil_week_ago": null,
          "foil_month_ago": null,
          "average_change_day_percent": 0,
          "average_change_week_percent": 0,
          "average_change_month_percent": -45.75,
          "foil_change_day_percent": null,
          "foil_change_week_percent": null,
          "foil_change_month_percent": null
        }
      },
      "found_in_sealed": [],
      "other_printings": [
        {
          "print_id": 83036,
          "name": "Black Lotus",
          "slug": "83036-black-lotus-retro-frame",
          "url": "https://www.mtgstocks.com/prints/83036-black-lotus-retro-frame",
          "foil": false,
          "collector_number": "525",
          "rarity": "R",
          "image_url": "https://static.mtgstocks.com/cardimages/t449429.png",
          "set": {
            "set_id": "[trimmed-depth]",
            "name": "[trimmed-depth]",
            "code": "[trimmed-depth]"
          },
          "tcgplayer_average_usd": 7750,
          "cardmarket_average_eur": 7500,
          "tcgplayer_url": "https://www.tcgplayer.com/product/449429/magic-30th-anniversary-edition-black-lotus-retro-frame",
          "cardmarket_url": "https://www.cardmarket.com/en/Magic/Products/Singles/30th-Anniversary-Edition/Black-Lotus-V2?referrer=mtg-stocks"
        },
        {
          "print_id": 82732,
          "name": "Black Lotus",
          "slug": "82732-black-lotus",
          "url": "https://www.mtgstocks.com/prints/82732-black-lotus",
          "foil": false,
          "collector_number": "228",
          "rarity": "R",
          "image_url": "https://static.mtgstocks.com/cardimages/t449115.png",
          "set": {
            "set_id": "[trimmed-depth]",
            "name": "[trimmed-depth]",
            "code": "[trimmed-depth]"
          },
          "tcgplayer_average_usd": 5999.99,
          "cardmarket_average_eur": 2799.98,
          "tcgplayer_url": "https://www.tcgplayer.com/product/449115/magic-30th-anniversary-edition-black-lotus",
          "cardmarket_url": "https://www.cardmarket.com/en/Magic/Products/Singles/30th-Anniversary-Edition/Black-Lotus-V1?referrer=mtg-stocks"
        },
        {
          "print_id": 16374,
          "name": "Black Lotus",
          "slug": "16374-black-lotus",
          "url": "https://www.mtgstocks.com/prints/16374-black-lotus",
          "foil": false,
          "collector_number": "232",
          "rarity": "R",
          "image_url": "https://cards.scryfall.io/normal/front/b/0/b0faa7f2-b547-42c4-a810-839da50dadfe.jpg",
          "set": {
            "set_id": "[trimmed-depth]",
            "name": "[trimmed-depth]",
            "code": "[trimmed-depth]"
          },
          "tcgplayer_average_usd": 74981,
          "cardmarket_average_eur": 98500,
          "tcgplayer_url": "https://www.tcgplayer.com/product/1042/magic-alpha-edition-black-lotus",
          "cardmarket_url": "https://www.cardmarket.com/en/Magic/Products/Singles/Alpha/Black-Lotus?referrer=mtg-stocks"
        }
      ]
    }
  }
}
Actions

What the MTGStocks API does

ActionDescriptionConcrete use caseKey params
searchFind Magic: The Gathering prints by card name: every printing across all sets with the print id, set, rarity and image. 25 rows a page, with the total number of matches.Pricing teams call search to find Magic.query, page, limit, max_rotations
suggestSearch-as-you-type: the closest prints for a partial card name, with set, foil availability and similarity score, plus plain matching card names. The quickest way to turn a name into a print_id.Marketplace operators call suggest to get search-as-you-type.query, max_rotations
printOne print in full: the latest low / average / high / market / foil prices at every store MTGStocks tracks (TCGplayer, Card Kingdom, Star City Games, ManaPool in USD; Cardmarket, CardTrader in EUR) with previous-day, week-ago and month-ago prices and percent changes, the all-time high and low, buylist prices, oracle text and format legality, ids for Scryfall and Gatherer, every other printing of the card with its price, and the sealed products that contain it.Catalog enrichment teams call print to get one print in full.print_id, also_viewed, max_rotations
price_historyA print's daily price history for one store: TCGplayer back to 2012 (USD: low, average, market, foil, market foil), Cardmarket back to 2017 (EUR), Card Kingdom and Star City Games (USD retail: average and foil). One series per price type with min, max and change over the window; cut it by days or dates.Retail analysts call price_history to get a print's daily price history for one store.print_id, store, series, days, date_from, ...
sellersCurrent offers for a print across the stores MTGStocks tracks (Card Kingdom, Star City Games, ABU Games, ManaPool, CardTrader, Hareruya and more): condition, foil, sell price, buy price, buying quantity, stock and the store's own link. Each row states its own currency (USD, EUR, GBP, CAD, JPY).Pricing teams call sellers to get current offers for a print across the stores MTGStocks tracks (Card Kingdom, Star City Games,….print_id, store, condition, foil, currency, ...
interestsThe price-movers table MTGStocks publishes each day: every print whose price moved today or this week (about 7,000 rows), with the current and past price and the percent change. Choose average or market price, regular or foil, USD (TCGplayer) or EUR (Cardmarket, average only); filter by direction, percent and amount, price, set, set type, format legality, Reserved List and release state.Marketplace operators call interests to get the price-movers table MTGStocks publishes each day.price_type, card_type, currency, period, direction, ...
setsEvery Magic set MTGStocks tracks (about 450): id, code, type, release date, and whether it has sealed product and expected value. Newest first; filter by name or type.Catalog enrichment teams call sets to get every Magic set MTGStocks tracks (about 450).query, set_type, has_sealed, has_expected_value, max_rotations
setOne set's card list with each print's latest prices at TCGplayer (USD), Cardmarket (EUR) and Card Kingdom (USD), plus the set's biggest 7-day gainers and losers. Filter by rarity, name, foil or Reserved List; sort by price.Retail analysts call set to get one set's card list with each print's latest prices at TCGplayer (USD), Cardmarket (EUR) and….set_id, query, rarity, reserved, sort, ...
set_marketThe total market value of every set today, with its 7-day and 30-day change: what the whole set is worth at TCGplayer prices (USD), on the site's own daily snapshot. Regular or foil.Pricing teams call set_market to get the total market value of every set today, with its 7-day and 30-day change.foil, set_type, sort, limit, max_rotations
set_market_historyThe last 30 days of the whole-market value of Magic singles at TCGplayer prices (USD), and optionally one set's value on each of those days.Marketplace operators call set_market_history to get the last 30 days of the whole-market value of Magic singles at TCGplayer prices (USD), and op….set_id, max_rotations
sealedSealed product (booster boxes, packs, bundles, Commander decks) with its latest TCGplayer price. Search the whole catalogue by name or list one set.Catalog enrichment teams call sealed to get sealed product (booster boxes, packs, bundles, Commander decks) with its latest TCGplayer price.query, set_id, page, limit, max_rotations
sealed_productOne sealed product: latest prices at TCGplayer (USD), Cardmarket (EUR), Card Kingdom, Star City Games, ManaPool and CardTrader where published, all-time high and low, and the percent change over a day, week and month.Retail analysts call sealed_product to get one sealed product.sealed_id, max_rotations
sealed_historyA sealed product's daily price history at TCGplayer (USD) or Cardmarket (EUR), or the daily history of its expected value: what the contents were worth at singles prices (USD), with averages by rarity.Pricing teams call sealed_history to get a sealed product's daily price history at TCGplayer (USD) or Cardmarket (EUR), or the daily h….sealed_id, store, kind, series, days, ...
expected_valueExpected value of sealed product against its market price: how much the cards inside are worth versus what the box sells for. One row per set, or a set's full product tree (case, box, pack). USD.Marketplace operators call expected_value to get expected value of sealed product against its market price.set_id, query, max_rotations
all_timePrints that have just hit an all-time high or all-time low at TCGplayer average price (USD), with the price and the date.Catalog enrichment teams call all_time to get prints that have just hit an all-time high or all-time low at TCGplayer average price (USD),….kind, foil, page, limit, max_rotations
indicesMTGStocks market indices (Reserved List, Power Nine, formats, sets, Commander and more) with value, 1-day, 7-day, 30-day and 1-year change, equal-weight and price-weight, separately in USD and EUR.Retail analysts call indices to get mTGStocks market indices (Reserved List, Power Nine, formats, sets, Commander and more) with….max_rotations
indexOne index with its full daily history since 2021 (USD and EUR separately), its children, and the cards in it with price, 30-day change and weight in each currency.Pricing teams call index to get one index with its full daily history since 2021 (USD and EUR separately), its children, and….slug, include_constituents, days, max_rotations
listsMTGStocks' curated card lists: Reserved List, Commander Game Changers, cycling lands and others.Marketplace operators call lists to get mTGStocks' curated card lists.max_rotations
listOne curated list with every print's latest TCGplayer (USD), Cardmarket (EUR) and Card Kingdom (USD) price.Catalog enrichment teams call list to get one curated list with every print's latest TCGplayer (USD), Cardmarket (EUR) and Card Kingdom….list_id, query, sort, page, limit, ...
popularThe five prints most viewed or most bought on MTGStocks right now, with each store's price.Retail analysts call popular to get the five prints most viewed or most bought on MTGStocks right now, with each store's price..kind, max_rotations
premium_previewThe free teaser rows MTGStocks shows for its Premium screens (trends, penny stocks, underpriced cards, price compare, Secret Lair value and others). About five rows each: the complete screens need a paid MTGStocks account and are not available here.Pricing teams call premium_preview to get the free teaser rows MTGStocks shows for its Premium screens (trends, penny stocks, underpric….name, max_rotations
formatsThe tournament formats MTGStocks tracks, with the id that metagame, most_played and archetypes accept.Marketplace operators call formats to get the tournament formats MTGStocks tracks, with the id that metagame, most_played and archetype….max_rotations
metagameThe current metagame of a tournament format: each archetype's share of top placings.Catalog enrichment teams call metagame to get the current metagame of a tournament format.format, max_rotations
most_playedThe most played cards of a tournament format, with share of decks and the current price of their cheapest print.Retail analysts call most_played to get the most played cards of a tournament format, with share of decks and the current price of th….format, max_rotations
archetypesThe named deck archetypes of a tournament format.Pricing teams call archetypes to get the named deck archetypes of a tournament format..format, max_rotations
Code samples

Call print from your stack

curl -X POST https://api.reefapi.com/mtgstocks/v1/print \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"print_id":"15770"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.mtgstocks.print with {"print_id":"15770"}.
Use cases

Who uses this API and why

  • Price alerts: today's biggest moves in USD or EUR, filtered to cards worth more than a set amount
  • Investment research: 14 years of daily prices per print, Reserved List and index movement
  • Arbitrage: TCGplayer against Card Kingdom, Star City Games and Cardmarket for one print, or store buy prices against sell prices
  • Collection value: price by printing and finish, with set-level value and 30-day change
  • Sealed product: booster box price history against the expected value of its contents
FAQ

Questions developers ask before integrating

How far back does the price history go?

Per print and per store: TCGplayer daily data goes back to 2012 for older cards (Black Lotus Unlimited has 5,234 daily points from June 2012), Cardmarket to 2017, Card Kingdom to 2022 and Star City Games to 2025. Series are low, average, market, foil and market foil, as far as the store publishes them. Use days or a date range to cut the window.

Which currency are the prices in?

Each store block and each history response names its currency. TCGplayer, Card Kingdom, Star City Games and ManaPool are USD; Cardmarket and CardTrader are EUR. Store offers from sellers carry the currency of that row (USD, EUR, GBP, CAD, JPY). Nothing is converted, and USD and EUR are never mixed in one field.

What are interests?

MTGStocks' daily table of biggest price moves: each print whose price moved today or this week with its current price, its past price and the percent change. Choose average or market price, regular or foil, and USD or EUR (EUR has the average table only). A move from a near-zero price can show a huge percentage, so use price_min if you want cards with real value.

Does it include foils?

Yes. Prints with both finishes return foil prices alongside regular ones and separate foil history series; foil-only prints return null for the regular fields rather than a zero.

Can I get what stores are buying cards for?

Yes, from sellers. Each store's offers show sell price, buy price, buying quantity and stock by condition and finish, with the store's own link.

Are the Premium screens included?

Only the five-row free teaser MTGStocks shows for each, through premium_preview (trends, penny stocks, underpriced cards, price compare, Secret Lair value and others). The full Premium screens need a paid MTGStocks account.

How do I find a print id?

suggest takes part of a card name and returns the closest prints; search returns every printing of a name, 25 per page, with the total. A print id also works as the number at the start of a mtgstocks.com print URL.

What is the MTGStocks API?

MTGStocks API is a ReefAPI endpoint group for magic: the gathering daily price history per print since 2012, price movers, store offers, sets and sealed value. It returns live JSON through POST requests under /mtgstocks/v1.

Is the MTGStocks API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. MTGStocks calls use the same shared credit balance as every other ReefAPI engine.

Do I need a MTGStocks login or account?

No login to MTGStocks is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the MTGStocks data?

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the MTGStocks API use?

MTGStocks actions currently cost 1-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

Can I call MTGStocks from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call mtgstocks actions with the same key, credit pool and JSON envelope used by normal REST requests.

Is the MTGStocks API a MTGStocks scraper?

It is the managed alternative to a DIY MTGStocks scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same magic: the gathering daily price history per print since 2012, price movers, store offers, sets and sealed value back as clean JSON.

docs / mtgstocks

MTGStocks

Magic: The Gathering daily price history per print since 2012, price movers, store offers, sets and sealed value.

base /mtgstocks/v125 endpoints
post/mtgstocks/v1/suggest1 credit

Search-as-you-type: the closest prints for a partial card name, with set, foil availability and similarity score, plus plain matching card names. The quickest way to turn a name into a print_id.

ParameterAllowed / rangeDescription
queryrequired—Start of a card name.
max_rotations = 3optional1–5How many fresh exits to try before giving up.
Try in playground →
post/mtgstocks/v1/print1 credit

One print in full: the latest low / average / high / market / foil prices at every store MTGStocks tracks (TCGplayer, Card Kingdom, Star City Games, ManaPool in USD; Cardmarket, CardTrader in EUR) with previous-day, week-ago and month-ago prices and percent changes, the all-time high and low, buylist prices, oracle text and format legality, ids for Scryfall and Gatherer, every other printing of the card with its price, and the sealed products that contain it.

ParameterAllowed / rangeDescription
print_idrequired—MTGStocks print id from search, the id-slug (88425-black-lotus) or the print's URL on mtgstocks.com. A print is one printing of a card in one set.
also_viewed = falseoptional—Also return the prints other users viewed with this one.
max_rotations = 3optional1–5How many fresh exits to try before giving up.
Try in playground →
post/mtgstocks/v1/price_history3 credits

A print's daily price history for one store: TCGplayer back to 2012 (USD: low, average, market, foil, market foil), Cardmarket back to 2017 (EUR), Card Kingdom and Star City Games (USD retail: average and foil). One series per price type with min, max and change over the window; cut it by days or dates.

ParameterAllowed / rangeDescription
print_idrequired—MTGStocks print id from search, the id-slug (88425-black-lotus) or the print's URL on mtgstocks.com. A print is one printing of a card in one set.
store = tcgplayeroptionaltcgplayer · cardmarket · cardkingdom · starcitygamesWhose prices. Each store has one currency, stated in the response.
seriesoptional—Comma-separated series to return: low, average, high, market, foil, market_foil. Default: every series the store publishes.
daysoptional1–20000Only the last N days (default: the whole history MTGStocks has).
date_fromoptional—Only points on or after this date (YYYY-MM-DD).
date_tooptional—Only points on or before this date (YYYY-MM-DD).
max_rotations = 3optional1–5How many fresh exits to try before giving up.
Try in playground →
post/mtgstocks/v1/sellers1 credit

Current offers for a print across the stores MTGStocks tracks (Card Kingdom, Star City Games, ABU Games, ManaPool, CardTrader, Hareruya and more): condition, foil, sell price, buy price, buying quantity, stock and the store's own link. Each row states its own currency (USD, EUR, GBP, CAD, JPY).

ParameterAllowed / rangeDescription
print_idrequired—MTGStocks print id from search, the id-slug (88425-black-lotus) or the print's URL on mtgstocks.com. A print is one printing of a card in one set.
storeoptional—Only this store.
conditionoptional—Only this condition (NM, LP, MP, HP, DMG).
foiloptional—true = foil only, false = non-foil only.
currencyoptional—Only offers in this currency.
max_rotations = 3optional1–5How many fresh exits to try before giving up.
Try in playground →
post/mtgstocks/v1/interests3 credits

The price-movers table MTGStocks publishes each day: every print whose price moved today or this week (about 7,000 rows), with the current and past price and the percent change. Choose average or market price, regular or foil, USD (TCGplayer) or EUR (Cardmarket, average only); filter by direction, percent and amount, price, set, set type, format legality, Reserved List and release state.

ParameterAllowed / rangeDescription
price_type = averageoptionalaverage · marketWhich price moved.
card_type = regularoptionalregular · foilFinish.
currency = USDoptionalUSD · EURWhich market's table.
period = alloptionalall · day · weekComparison window.
direction = alloptionalall · gainers · losersDirection of the move.
min_percentoptional0–Smallest absolute percent change.
min_differenceoptional0–Smallest absolute price change, in the table's currency.
price_minoptional0–Lowest current price. Use it to drop near-zero prints whose percentages are huge.
price_maxoptional0–Highest current price.
set_codeoptional—Only this set (code, e.g. MH3).
set_typeoptional—Only this set type (expansion, masters, commander, ...).
formatoptionalstandard · pioneer · modern · legacy · vintage · commander · pauper · premodern · oldschool · alchemy · historic · explorer · timeless · brawl · standardbrawl · competitivebrawl · penny · duel · oathbreaker · paupercommander · predh · future · gladiator · tlrOnly cards legal (or restricted) in this format.
reserved = alloptionalall · only · excludeReserved List filter.
released = alloptionalall · only · exclude_recentRelease state.
tournament_legal = alloptionalall · legal · not_legalTournament-legal printings.
include_hidden = falseoptional—Include prints the site hides from its default view (promos, oddities).
sort = siteoptionalsite · percent_desc · percent_asc · amount_desc · amount_asc · price_desc · price_ascOrder of rows.
page = 1optional1–Page number.
limit = 50optional1–500Rows per page (1-500).
max_rotations = 3optional1–5How many fresh exits to try before giving up.
Try in playground →
post/mtgstocks/v1/sets2 credits

Every Magic set MTGStocks tracks (about 450): id, code, type, release date, and whether it has sealed product and expected value. Newest first; filter by name or type.

ParameterAllowed / rangeDescription
queryoptional—Part of a set name or code.
set_typeoptional—Only this set type.
has_sealedoptional—Only sets with sealed product.
has_expected_valueoptional—Only sets with expected-value data.
max_rotations = 3optional1–5How many fresh exits to try before giving up.
Try in playground →
post/mtgstocks/v1/set2 credits

One set's card list with each print's latest prices at TCGplayer (USD), Cardmarket (EUR) and Card Kingdom (USD), plus the set's biggest 7-day gainers and losers. Filter by rarity, name, foil or Reserved List; sort by price.

ParameterAllowed / rangeDescription
set_idrequired—Set id from `sets`, id-slug (4-innistrad) or the set's URL.
queryoptional—Part of a card name.
rarityoptionalC · U · R · M · L · SOnly this rarity.
reservedoptional—Only Reserved List cards.
sort = siteoptionalsite · price_desc · price_asc · name_ascOrder of rows.
page = 1optional1–Page number.
limit = 100optional1–1000Rows per page (1-1000).
max_rotations = 3optional1–5How many fresh exits to try before giving up.
Try in playground →
post/mtgstocks/v1/set_market2 credits

The total market value of every set today, with its 7-day and 30-day change: what the whole set is worth at TCGplayer prices (USD), on the site's own daily snapshot. Regular or foil.

ParameterAllowed / rangeDescription
foil = falseoptional—true = the foil value table.
set_typeoptional—Only this set type.
sort = value_descoptionalvalue_desc · change_7d_desc · change_7d_asc · change_30d_desc · change_30d_ascOrder of rows.
limit = 100optional1–1000Rows per page (1-1000).
max_rotations = 3optional1–5How many fresh exits to try before giving up.
Try in playground →
post/mtgstocks/v1/set_market_history3 credits

The last 30 days of the whole-market value of Magic singles at TCGplayer prices (USD), and optionally one set's value on each of those days.

ParameterAllowed / rangeDescription
set_idoptional—Also return this set's value on each day.
max_rotations = 3optional1–5How many fresh exits to try before giving up.
Try in playground →
post/mtgstocks/v1/sealed3 credits

Sealed product (booster boxes, packs, bundles, Commander decks) with its latest TCGplayer price. Search the whole catalogue by name or list one set.

ParameterAllowed / rangeDescription
queryoptional—Part of a product or set name.
set_idoptional—Only this set's products.
page = 1optional1–Page number.
limit = 100optional1–500Rows per page (1-500).
max_rotations = 3optional1–5How many fresh exits to try before giving up.
Try in playground →
post/mtgstocks/v1/sealed_product1 credit

One sealed product: latest prices at TCGplayer (USD), Cardmarket (EUR), Card Kingdom, Star City Games, ManaPool and CardTrader where published, all-time high and low, and the percent change over a day, week and month.

ParameterAllowed / rangeDescription
sealed_idrequired—Sealed product id from `sealed`, id-slug or the product's URL.
max_rotations = 3optional1–5How many fresh exits to try before giving up.
Try in playground →
post/mtgstocks/v1/sealed_history3 credits

A sealed product's daily price history at TCGplayer (USD) or Cardmarket (EUR), or the daily history of its expected value: what the contents were worth at singles prices (USD), with averages by rarity.

ParameterAllowed / rangeDescription
sealed_idrequired—Sealed product id, id-slug or URL.
kind = priceoptionalprice · expected_valuePrice, or expected value.
store = tcgplayeroptionaltcgplayer · cardmarketStore, for kind=price.
seriesoptional—Comma-separated series to return: low, average, high, market, foil, market_foil. Default: every series the store publishes.
daysoptional1–20000Only the last N days (default: the whole history MTGStocks has).
date_fromoptional—Only points on or after this date (YYYY-MM-DD).
date_tooptional—Only points on or before this date (YYYY-MM-DD).
max_rotations = 3optional1–5How many fresh exits to try before giving up.
Try in playground →
post/mtgstocks/v1/expected_value2 credits

Expected value of sealed product against its market price: how much the cards inside are worth versus what the box sells for. One row per set, or a set's full product tree (case, box, pack). USD.

ParameterAllowed / rangeDescription
set_idoptional—Return this set's full product tree instead of the summary.
queryoptional—Filter the summary by set name.
max_rotations = 3optional1–5How many fresh exits to try before giving up.
Try in playground →
post/mtgstocks/v1/all_time3 credits

Prints that have just hit an all-time high or all-time low at TCGplayer average price (USD), with the price and the date.

ParameterAllowed / rangeDescription
kind = alloptionalall · high · lowHigh or low.
foiloptional—true = foil prints only, false = non-foil only.
page = 1optional1–Page number.
limit = 100optional1–500Rows per page (1-500).
max_rotations = 3optional1–5How many fresh exits to try before giving up.
Try in playground →
post/mtgstocks/v1/indices2 credits

MTGStocks market indices (Reserved List, Power Nine, formats, sets, Commander and more) with value, 1-day, 7-day, 30-day and 1-year change, equal-weight and price-weight, separately in USD and EUR.

ParameterAllowed / rangeDescription
max_rotations = 3optional1–5How many fresh exits to try before giving up.
Try in playground →
post/mtgstocks/v1/index3 credits

One index with its full daily history since 2021 (USD and EUR separately), its children, and the cards in it with price, 30-day change and weight in each currency.

ParameterAllowed / rangeDescription
slugrequired—Index slug from `indices`.
include_constituents = trueoptional—Include the cards in the index.
daysoptional1–20000Only the last N days (default: the whole history MTGStocks has).
max_rotations = 3optional1–5How many fresh exits to try before giving up.
Try in playground →
post/mtgstocks/v1/lists1 credit

MTGStocks' curated card lists: Reserved List, Commander Game Changers, cycling lands and others.

ParameterAllowed / rangeDescription
max_rotations = 3optional1–5How many fresh exits to try before giving up.
Try in playground →
post/mtgstocks/v1/list3 credits

One curated list with every print's latest TCGplayer (USD), Cardmarket (EUR) and Card Kingdom (USD) price.

ParameterAllowed / rangeDescription
list_idrequired—List id from `lists`, id-slug or URL.
queryoptional—Part of a card name.
sort = siteoptionalsite · price_desc · price_asc · name_ascOrder of rows.
page = 1optional1–Page number.
limit = 100optional1–1000Rows per page (1-1000).
max_rotations = 3optional1–5How many fresh exits to try before giving up.
Try in playground →
post/mtgstocks/v1/premium_preview1 credit

The free teaser rows MTGStocks shows for its Premium screens (trends, penny stocks, underpriced cards, price compare, Secret Lair value and others). About five rows each: the complete screens need a paid MTGStocks account and are not available here.

ParameterAllowed / rangeDescription
namerequiredtrends · penny_stocks · higher_market · direct_low_differential · secret_lair_value · price_compare · cardkingdom_rapid_richesWhich teaser.
max_rotations = 3optional1–5How many fresh exits to try before giving up.
Try in playground →
post/mtgstocks/v1/formats1 credit

The tournament formats MTGStocks tracks, with the id that metagame, most_played and archetypes accept.

ParameterAllowed / rangeDescription
max_rotations = 3optional1–5How many fresh exits to try before giving up.
Try in playground →
post/mtgstocks/v1/metagame2 credits

The current metagame of a tournament format: each archetype's share of top placings.

ParameterAllowed / rangeDescription
formatrequired—Tournament format by name (modern, legacy, pioneer, standard, pauper, ...) or id from `formats`.
max_rotations = 3optional1–5How many fresh exits to try before giving up.
Try in playground →
post/mtgstocks/v1/most_played1 credit

The most played cards of a tournament format, with share of decks and the current price of their cheapest print.

ParameterAllowed / rangeDescription
formatrequired—Tournament format by name (modern, legacy, pioneer, standard, pauper, ...) or id from `formats`.
max_rotations = 3optional1–5How many fresh exits to try before giving up.
Try in playground →
post/mtgstocks/v1/archetypes1 credit

The named deck archetypes of a tournament format.

ParameterAllowed / rangeDescription
formatrequired—Tournament format by name (modern, legacy, pioneer, standard, pauper, ...) or id from `formats`.
max_rotations = 3optional1–5How many fresh exits to try before giving up.
Try in playground →
Built for volume
5M+ requests a day

Measured at 60 requests a second across the fleet, with no central bottleneck. Volume pricing is on request, and per-key limits are raised for high-volume accounts.

Missing a source?
We build it

Tell us a site we do not cover yet and it becomes an engine. A customer asked for bestprice.gr on a Sunday and it was in the catalog the next day.

Support
2 minute median reply

Median time from a question in the live chat to the first answer, measured across every answered conversation. Setup help included, no support tier to buy.

One key, one balance
Every API included

No per-site plans and no separate subscriptions. One key and one credit pool across the whole catalog, so adding a source costs nothing up front.

Planning something large? Tell us the volume and the sources and we will come back with what it costs and what we would have to build.