Magic Card API
Updated . Plan numbers are the ones on the developers page that day; the live plans table wins if they ever disagree.
Quick answer
The HobbyCardIndex Magic card API returns raw and graded prices, set lists, sold sales, daily price history and photo identification for about 133,000 Magic: The Gathering cards over REST, keyed with an X-API-Key header. Plans start at $99 a month, and a free setup month is available by application.
What the MTG card API returns
Everything lives under https://hobbycardindex.com/api/v1/ and takes your key in an X-API-Key header (an Authorization: Bearer header works too). Every successful response is wrapped as {"success": true, "data": {...}}; the examples on this page show what sits inside data. Prices are US dollars with two decimals.
GET /sets?category=magic-tcg: every Magic set with its id, language, year and card count; addq=dominariato search set names.GET /prices/search: a card by name, set and collector number, or a whole set paged 25 at a time in card-number order. Each result carries raw, PSA 10, 9, 8 and 7, BGS 9.5, CGC 10 and SGC 10 prices, withnullfor lanes we don't hold.GET /prices/{cardId},/salesand/history: one card's prices with volume and last update, its sold sales, and its daily price history for charts.POST /scan: identify a Magic card or a graded slab from a photo, withcategory: "magic-tcg"to narrow the match.GET /market/movers?category=magic-tcg: the biggest risers and fallers over a day, week or month.POST /watchlistandPUT /webhook: follow cards or whole sets and get one signed POST a day with every price that changed.
Try it: one card by name
curl 'https://hobbycardindex.com/api/v1/prices/search?q=Sheoldred%20the%20Apocalypse%20Dominaria%20United' \
-H 'X-API-Key: hci_live_...'
{
"results": [
{
"id": 34567,
"externalId": "45678",
"name": "Sheoldred, the Apocalypse #107",
"year": 2022,
"setName": "Magic Dominaria United",
"cardNumber": "107",
"printRun": null,
"category": "Magic: The Gathering",
"playerName": "Sheoldred, the Apocalypse",
"imageUrl": "https://hobbycardindex.com/api/v1/images/proxy?i=...",
"addedAt": "2022-09-12T10:40:00Z",
"prices": {
"loose": 58,
"psa10": 210,
"psa9": 95,
"psa8": null,
"psa7": null,
"bgs10": 190,
"cgc10": 150,
"sgc10": null,
"volume": 820
},
"hciUrl": "https://hobbycardindex.com/cards/34567"
}
],
"count": 10
}
Example values, not live prices. The category value in filters is magic-tcg; GET /api/v1/market/categories lists every slug.
Magic: The Gathering in the catalog, honestly
About 133,000 Magic cards are in the catalog, which makes it the largest single game we hold, ahead of Pokémon at about 96,000. Raw prices cover the bulk of it. Graded Magic is a thinner market than graded Pokémon, so a common or uncommon will usually return a raw price and null graded lanes, while chase mythics, Reserved List cards and the older sets carry PSA, BGS and CGC prices and sales. If you're building a binder or deck valuer, raw is the lane you'll lean on; if you're building for graded singles, filter to the cards that have them rather than assuming every card does.
The same key covers Pokémon, Yu-Gi-Oh, One Piece, Lorcana and the rest; see the trading card API page for the whole list. To look at the data by hand first, the Magic: The Gathering card values hub runs on the same catalog, and the TCG overview shows how the games trade against each other.
What you get
- Raw and graded prices in US dollars on about 133,000 Magic cards, refreshed daily.
- Set lists with ids, years and card counts, and whole-set paging in collector-number order.
- Sold sales per card, by grade, with sale type, bids, the marketplace and the listing link. Details on the sold comps page.
- Daily price history at every grade for up to ten years.
- Photo identification of raw cards and graded slabs. Details on the card scanner page.
- Cert lookups for PSA, BGS, CGC and SGC slabs on every commercial plan.
- Market movers by game, a watch list and a once-a-day signed webhook.
Plans and prices
| Plan | Price | Requests a month | Photo scans | Sold-sale lookups | Cert lookups | Lookups a second | Past the requests and scans (up to 3x) |
|---|---|---|---|---|---|---|---|
| Lite | $99 a month | 25,000 | 25,000 | 5,000 | 150 | 10 | $1 per 250 more |
| Growth Lite | $249 a month | 125,000 | 125,000 | 25,000 | 750 | 15 | $1 per 500 more |
| Growth | $499 a month | 500,000 | 500,000 | 100,000 | 3,000 | 20 | $1 per 1,000 more |
| Platform | from $1,500 a month | 2,000,000 | 1,500,000 | 500,000 | 50,000, plus 50,000 pop reports | 50 | Set up with Sean, invoiced; bulk price files included |
Price history comes with every size. Sold-sale, cert and pop lookups stop at the plan's number and never run over. Two add-ons: pop reports plus cert lookups for $100 a month, which brings 32,000 of each to Lite, Growth Lite or Growth, and the daily price files for $450 a month on Growth Lite or Growth (included in Platform, not offered on Lite). Lite, Growth Lite and Growth are month to month by card, cancelled any time in Settings, API Access, and run to the end of the paid month.
The free setup month is 30 days on real data with no card: 1,000 requests and 1,000 photo scans a day, 500 sold-sale lookups and 100 cert lookups for the month. You apply in Settings, API Access once you're signed in, and Sean reviews each one. When the 30 days end, the first month of the plan you applied with is invoiced, and paying it keeps the key going. Full plan details are on the developers page.
Credit and data use
A commercial plan licenses the data for a product your users see. You can store the prices and price history you pull while the plan is active and use them on card pages, in charts, collection values and your own estimates. Sold-sale records can be shown to your users and kept in your product, but not turned into a standalone sales database, copied by the category or offered as a download. Card recognition stays with the scan endpoint: show our identifications, don't use them to build a recognizer of your own.
The terms ask for one link back to us somewhere on your site, such as "Prices and API supplied by Hobby Card Index". It does not need to be beside the prices or on your main page. When a plan ends, stored copies go within 30 days. The full wording is in the Terms of Service, section 8, and the shorter version is under Data use on the developers page.
Common questions
Is there a Magic: The Gathering card API with prices?
Yes. The HobbyCardIndex API returns prices for about 133,000 Magic: The Gathering cards at eight lanes: raw, PSA 10, 9, 8 and 7, BGS 9.5, CGC 10 and SGC 10, in US dollars, plus each card's sold sales, daily price history, set lists and photo identification. The key goes in an X-API-Key header on every call.
Does the MTG card API return graded prices?
Yes, where we hold them. Each card returns raw, PSA 10, 9, 8 and 7, BGS 9.5, CGC 10 and SGC 10 lanes, with null for a lane we have no price in. Graded Magic is a thinner market than graded Pokémon, so expect null graded lanes on commons, while chase mythics and older sets carry more graded data.
How do I get prices for every card in an MTG set?
Call GET /api/v1/sets?category=magic-tcg to get the set ids, then GET /api/v1/prices/search?category=magic-tcg&set=<set id>&limit=25 with no q. Results come in card-number order, 100 a page, with hasMore telling you when to fetch the next offset. Each card carries its raw and graded prices and a link to its card page.
Does the API return MTG price history?
Yes. GET /api/v1/prices/{cardId}/history returns the card's daily price at every grade for up to 3,650 days, built for charts. A grade with no price on a day is null, never zero, and days we hold no prices for are left out, so dates can skip. Individual sold sales live on the separate sales endpoint.
How much does the Magic card API cost?
Commercial plans start at $99 a month for Lite: 25,000 requests, 25,000 photo scans, 5,000 sold-sale lookups and 150 cert lookups. Growth Lite is $249 and Growth $499, both month to month by card. Platform starts at $1,500 a month, invoiced, with bulk price files. A free setup month on real data is available by application.
Can I identify a Magic card from a photo?
Yes. POST /api/v1/scan with the photo as base64 and category magic-tcg, and the response names the card with its set, collector number, a confidence score from 0 to 1, its prices and up to seven alternatives. A graded slab also returns the grader, grade and cert number read from the label. Lite includes 25,000 scans a month.