MTGStocks API

Every printing of every Magic card: price, history and what is moving today

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

This page covers what the MTGStocks API returns, who uses it, a real response and pricing. Every parameter and response field is in MTGStocks API parameters and responses →

endpoints
25
credits per call
1–3

1 credit per call≈ $1/1,000 calls1,000 free credits, no card

POST/mtgstocks/v1/print200
  1. Black Lotus
    collector_number
    525
    rarity
    R
    tcgplayer_average_usd
    7750
  2. Black Lotus
    collector_number
    228
    rarity
    R
    tcgplayer_average_usd
    5999.99
  3. Black Lotus
    collector_number
    232
    rarity
    R
    tcgplayer_average_usd
    74,981
Real result, captured Nov 8, 2026
Try it live

Run the call yourself, on the real endpoint

Change a parameter and press Try it. The response on the right is what your code will receive.

MTGStocks API

3 of 25 endpoints, ready to run

View docs ↗

One printing with its price at six stores in their own currency, the all-time high and low, legality and every other printing.

1 credit1 required · 0 optional
POST/mtgstocks/v1/print
idle
// Press "Try it" and this pane shows exactly what the
// live site returned this second — including an empty
// result, if that is the truth. No key, no account.

Try every endpoint in the playground

Endpoints

What MTGStocks endpoints does ReefAPI ship?

25 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

25 endpoints

search

1 cr

Find Magic.

required
query
optional
page, limit, max_rotations

suggest

1 cr

Search-as-you-type.

required
query
optional
max_rotations

print

1 cr

One print in full.

required
print_id
optional
also_viewed, max_rotations

price_history

3 cr

A print's daily price history for one store.

required
print_id
optional
store, series, days, date_from, date_to, max_rotations

sellers

1 cr

Current offers for a print across the stores MTGStocks tracks (Card Kingdom, Star City Games,…

required
print_id
optional
store, condition, foil, currency, max_rotations

interests

3 cr

The price-movers table MTGStocks publishes each day.

required
—
optional
price_type, card_type, currency, period, direction, min_percent, min_difference, price_min, price_max, set_code, set_type, format, reserved, released, tournament_legal, include_hidden, sort, page, limit, max_rotations

sets

2 cr

Every Magic set MTGStocks tracks (about 450).

required
—
optional
query, set_type, has_sealed, has_expected_value, max_rotations

set

2 cr

One set's card list with each print's latest prices at TCGplayer (USD), Cardmarket (EUR) and…

required
set_id
optional
query, rarity, reserved, sort, page, limit, max_rotations

set_market

2 cr

The total market value of every set today, with its 7-day and 30-day change.

required
—
optional
foil, set_type, sort, limit, max_rotations

set_market_history

3 cr

The last 30 days of the whole-market value of Magic singles at TCGplayer prices (USD), and op…

required
—
optional
set_id, max_rotations

sealed

3 cr

Sealed product (booster boxes, packs, bundles, Commander decks) with its latest TCGplayer price.

required
—
optional
query, set_id, page, limit, max_rotations

sealed_product

1 cr

One sealed product.

required
sealed_id
optional
max_rotations

sealed_history

3 cr

A sealed product's daily price history at TCGplayer (USD) or Cardmarket (EUR), or the daily h…

required
sealed_id
optional
store, kind, series, days, date_from, date_to, max_rotations

expected_value

2 cr

Expected value of sealed product against its market price.

required
—
optional
set_id, query, max_rotations

all_time

3 cr

Prints that have just hit an all-time high or all-time low at TCGplayer average price (USD),…

required
—
optional
kind, foil, page, limit, max_rotations

indices

2 cr

MTGStocks market indices (Reserved List, Power Nine, formats, sets, Commander and more) with…

required
—
optional
max_rotations

index

3 cr

One index with its full daily history since 2021 (USD and EUR separately), its children, and…

required
slug
optional
include_constituents, days, max_rotations

lists

1 cr

MTGStocks' curated card lists.

required
—
optional
max_rotations

list

3 cr

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

required
list_id
optional
query, sort, page, limit, max_rotations

popular

1 cr

The five prints most viewed or most bought on MTGStocks right now, with each store's price.

required
—
optional
kind, max_rotations

premium_preview

1 cr

The free teaser rows MTGStocks shows for its Premium screens (trends, penny stocks, underpric…

required
name
optional
max_rotations

formats

1 cr

The tournament formats MTGStocks tracks, with the id that metagame, most_played and archetype…

required
—
optional
max_rotations

metagame

2 cr

The current metagame of a tournament format.

required
format
optional
max_rotations

most_played

1 cr

The most played cards of a tournament format, with share of decks and the current price of th…

required
format
optional
max_rotations

archetypes

1 cr

The named deck archetypes of a tournament format.

required
format
optional
max_rotations

Every parameter, every allowed value →

Missing a MTGStocks endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
How it works

How the MTGStocks API works

MTGStocks is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 632 engines.

02
Call
POST /mtgstocks/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
1 or 2 or 3 credits per call

Credits, not seats. Failed and blocked calls are never charged, and nothing is cached: every call reads the source live.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

Recipe

Spot a card that is moving and check it across stores

Three calls from today's movers to one card's full picture.

01interests
POST/mtgstocks/v1/interests
{"period": "day", "direction": "gainers", "price_min": 5, "sort": "percent_desc"}

The biggest moves today for cards over 5 USD.

02print
POST/mtgstocks/v1/print
{"print_id": "<print_id>"}

Price at each store, in each store's currency, and the all-time high and low.

03price_history
POST/mtgstocks/v1/price_history
{"print_id": "<print_id>", "days": 365}

Twelve months of daily prices, to see whether the move is a blip.

Today's mover, its price by store, and the year behind it.

request
curl -X POST https://api.reefapi.com/mtgstocks/v1/print \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"print_id":"1"}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "mtgstocks",
    "endpoint": "print",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}
Fields

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.

Coverage

What MTGStocks publishes, and what it does not

MTGStocks is Magic only, prices are in the store's own currency. Measured 2026-11-08 against an independent card database and across the site's own routes. Some of these lines go against us.

History depth

Black Lotus Unlimited returned 5,234 daily points back to 22 June 2012.

Coverage

454 sets and about 7,238 price-move rows a day in the USD average list.

Against an independent price feed

TCGplayer market was within 30% on 17 of 19 cards, median ratio 1.00. Cardmarket average differs more, 6 of 9 within 30%, median 0.96, because it is a different measure.

Against us: buylist figure

It names no store or currency, so it comes back with currency null. The sellers action has real store prices.

Not published

Premium screens beyond their free 5-row preview, and portfolios (they need a login). Magic only.

Use cases

What people build with MTGStocks

The jobs this data is most often used for.

25

endpoints

1/2/3

credits per call

01

Price alerts: today's biggest moves in USD or EUR, filtered to cards worth more than a set amount

02

Investment research: 14 years of daily prices per print, Reserved List and index movement

03

Arbitrage: TCGplayer against Card Kingdom, Star City Games and Cardmarket for one print, or store buy prices against sell prices

04

Collection value: price by printing and finish, with set-level value and 30-day change

Pricing

What MTGStocks data costs

The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 632 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire
no credit card1,000 free credits · instant API key · pay by card or crypto
Quickstart

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
curl -X POST https://api.reefapi.com/mtgstocks/v1/print \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"print_id":"1"}'
python
import os
import requests

REEF_KEY = os.environ["REEF_KEY"]

r = requests.post(
    "https://api.reefapi.com/mtgstocks/v1/print",
    headers={"x-api-key": REEF_KEY},
    json={
        "print_id": "1"
    },
    timeout=90,
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up MTGStocks.

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.

Contact

Need something this API does not do?

Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.

0/4000

No account needed · we reply from [email protected]

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 631 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-11-08.