Sports Card Database 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 sports card database API lets you search a 16 million-plus card catalog by player, year, set and card number, list every set in a category, page through a whole set and pull the cards added since any date, each record carrying raw and graded prices. Plans start at $99 a month, with a free setup month by application.
What a card database API needs to do
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.
A price lookup answers one question about one card. A database API has to let you find the card in the first place, walk a set from card 1 to the end, know what's new, and keep your copy current without pulling everything again. That's what these endpoints are for.
GET /prices/search?q=: the ten best matches for a name, year, set and number, base cards first.GET /prices/searchwith filters:category,set,language,year,min_price,max_price,sort,limit(up to 25) andoffset. A set with noqpages to its end in card-number order; aqsearch pages through its best 2,000 matches.GET /prices/search?added_since=: only the cards added to the catalog since a date or time, oldest first, each withaddedAt. Run it daily with your lastaddedAtand you never miss a new card.GET /sets?category=: a category's sets with id, language, year and card count, up to 5,000 a call.GET /market/categories: the category list with card counts, which is also where the category slugs come from.GET /watchlist/prices: current prices for every card on your watch list in one download, JSON or CSV, once a day.GET /bulk/prices: full-category price files, rebuilt daily, on Platform or with the price files add-on.
Try it: the baseball cards added since a date
curl 'https://hobbycardindex.com/api/v1/prices/search?category=baseball&added_since=2026-11-01&limit=25&offset=0' \
-H 'X-API-Key: hci_live_...'
{
"results": [
{
"id": 56789,
"externalId": "67891",
"name": "Roman Anthony #BCP-45",
"year": 2025,
"setName": "Bowman Chrome Prospects",
"cardNumber": "BCP-45",
"printRun": null,
"category": "Baseball",
"playerName": "Roman Anthony",
"imageUrl": "https://hobbycardindex.com/api/v1/images/proxy?i=...",
"addedAt": "2026-10-03T06:41:27Z",
"prices": {
"loose": 12,
"psa10": 85,
"psa9": 30,
"psa8": null,
"psa7": null,
"bgs10": 70,
"cgc10": null,
"sgc10": null,
"volume": 190
},
"hciUrl": "https://hobbycardindex.com/cards/56789"
}
],
"count": 100,
"limit": 25,
"offset": 0,
"hasMore": true
}
Example values, not live prices. Results come in the order they were added, so setting added_since to the last addedAt you saw is faster than a large offset.
What's in the database
More than 16 million card records across 25-plus categories, more than 22 million prices across grades and more than 8 million card images. Baseball, basketball, football and hockey are the deepest. Every record carries id, externalId, name, year, setName, cardNumber, printRun, category, playerName, imageUrl, addedAt, the eight price lanes and a link to its card page. A parallel shows its finish in brackets in the name; printRun is the number for a numbered card and null otherwise. Set names are plain ("Topps Update", "Bowman Chrome Prospects") and set ids are stable slugs you can store.
The trading card games are in the same database, so a trading card database API is the same key with category=pokemon or magic-tcg. The sports card database hub and the trading card database hub let you look at it without a key.
Keeping your copy current
Two ways, and most people use both. First, run added_since on a schedule for new cards. Second, put the cards or whole sets you care about on the watch list (POST /watchlist with ids, a set, or a whole category) and set a webhook with PUT /webhook: once a day, at the hour you pick, we POST every watched card whose price changed, signed with your secret, and a cards.added event for new cards in sets you follow. Deliveries don't count against your requests. GET /watchlist/prices gives the same cards' current prices in one call when you'd rather pull than receive.
What you get
- Search by name, filter by category, set, year, language and price, and page whole sets in card-number order.
- Set lists per category with stable ids, and a category list with card counts.
- New-card discovery with
added_sinceandaddedAt. - Raw and graded prices on every record, plus sold sales, history and cert lookups on the same key.
- A watch list with a once-a-day signed webhook and a one-call price download.
- Full-category price files on Platform, or as a $450 a month add-on on Growth Lite and Growth.
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 sports card database API?
Yes. The HobbyCardIndex API exposes a 16 million-plus card catalog: search by player, year, set and card number, filter by category, set, year, language and price, list every set in a category, page through a whole set in card-number order, and pull the cards added since any date. Every record carries raw and graded prices.
How many cards are in the database?
More than 16 million card records across 25-plus categories, with more than 22 million prices across grades and more than 8 million card images. Baseball, basketball, football and hockey are the deepest; Pokémon, Magic, Yu-Gi-Oh, One Piece, Lorcana and the other games add more than 350,000 cards to the same database.
Can I download the whole database?
Not through the search endpoints, which page at 100 cards a call. Full-category price files rebuilt daily come with Platform, or as a $450 a month add-on on Growth Lite and Growth, as CSV in parts of up to 500,000 rows. Lite doesn't get the files, and no plan includes a bulk download of sold sales.
How do I keep my copy of the database current?
Two ways. Search with added_since set to a date to fetch what joined the catalog after your last run, or put cards or whole sets on the watch list and set a webhook: once a day you get a signed POST with every watched card whose price changed, plus a cards.added event for new cards in sets you follow.
How much does the sports card database 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, and includes the full-category price files. A free setup month is available by application.
Does each card come with a picture?
Most do. Each record carries imageUrl, a link to the card's picture through our image service, or null when we don't hold a usable picture yet; the catalog carries over 8 million pictures. A link can answer 404 later if a picture is withdrawn, so show your own placeholder when that happens rather than a broken image.