HobbyCardIndex API

Programmatic access to trading card prices and market data.

Build integrations with 16M+ card prices, market movers, and portfolio analytics.

Getting Started

Authentication

All API endpoints require an API key for authentication. API keys are exclusive to Enterprise tier customers.

Authentication Methods:

  • Include the X-API-Key header
  • Use Authorization: Bearer header

X-API-Key Header

Recommended for backend services.

curl 'https://hobbycardindex.com/api/v1/prices/search?q=Mike%20Trout' \ -H 'X-API-Key: hci_live_a1b2c3d4e5f6...'

Bearer Token

Works with Authorization header.

curl 'https://hobbycardindex.com/api/v1/prices/search' \ -H 'Authorization: Bearer hci_live_a1b2c3d4e5f6...'

Get Your API Key: Sign in to your Enterprise account and generate a key under Settings, API Access. Save it right away, because it is only shown once. Each account has one active key, and generating a new key replaces the old one.

Rate Limits

Enterprise Tier: 1 request per second per key, up to 100,000 requests a day (the daily count resets at UTC midnight)

Rate Limit Headers:
  • X-RateLimit-Remaining: requests left in the current one-second window
  • X-RateLimit-Reset: when that window resets. The standard RateLimit-* headers are sent as well.

Pricing Data Format

All prices are returned in USD dollars with 2 decimal places. Example: 12.50

Every successful response is wrapped as {"success": true, "data": {...}}. The examples below show what sits inside data.

Supported card grades:

  • loose: raw, ungraded card
  • psa10, psa9, psa8: PSA 10, 9 and 8
  • bgs10: BGS 9.5, or BGS 10 when there is no 9.5 price. cgc10, sgc10: CGC 10 and SGC 10

API Endpoints

GET /api/v1/prices/search

Search card prices by name. Returns top 10 matching cards with all grade prices.

Query Parameters

Parameter Type Required Description
q string Yes Search query (min. 2 characters). Example: "Mike Trout 2011"
Example Request (cURL)
curl 'https://hobbycardindex.com/api/v1/prices/search?q=Mike%20Trout%202011' \ -H 'X-API-Key: hci_live_...'
Example Request (JavaScript)
fetch('https://hobbycardindex.com/api/v1/prices/search?q=Mike%20Trout%202011', { headers: { 'X-API-Key': 'hci_live_...' } }) .then(r => r.json()) .then(d => console.log(d));
Example Request (Python)
import requests response = requests.get( 'https://hobbycardindex.com/api/v1/prices/search?q=Mike%20Trout', headers={'X-API-Key': 'hci_live_...'} ) print(response.json())
Example Response
{ "results": [ { "id": 12345, "name": "2011 Topps Mike Trout RC #175", "year": 2011, "setName": "Topps", "category": "Baseball", "playerName": "Mike Trout", "prices": { "loose": 4500.00, "psa10": 15000.00, "psa9": 8500.00, "psa8": 4200.00, "bgs10": 12000.00, "cgc10": null, "sgc10": null } } ], "count": 1 }
GET /api/v1/prices/:cardId

Get detailed price information for a specific card across all grades and grading companies.

Path Parameters

Parameter Type Description
cardId integer Unique card ID from HCI catalog. Get from search results.
Example Request (cURL)
curl 'https://hobbycardindex.com/api/v1/prices/12345' \ -H 'X-API-Key: hci_live_...'
Example Response
{ "card": { "id": 12345, "name": "2011 Topps Mike Trout RC #175", "year": 2011, "setName": "Topps", "category": "Baseball", "playerName": "Mike Trout", "imageUrl": "https://..." }, "prices": { "loose": 4500.00, "psa10": 15000.00, "psa9": 8500.00, "psa8": 4200.00, "bgs10": 12000.00, "cgc10": null, "sgc10": null, "volume": 34, "updated": "2026-03-20T12:00:00Z" } }
GET /api/v1/prices/:cardId/sales

List verified sold sales for a specific card: individual sale records with price, date, grade and marketplace, plus summary stats for the period. Requires a Commercial Data License; other keys get REQUIRES_COMMERCIAL_LICENSE. How to apply.

Parameters

Parameter Type Description
cardId integer Unique card ID from HCI catalog. Get from search results.
days integer Lookback window in days, 1–365. Default 90. Up to 500 most recent sales returned.
Example Request (cURL)
curl 'https://hobbycardindex.com/api/v1/prices/12345/sales?days=90' \ -H 'X-API-Key: hci_live_...'
Example Response
{ "card": { "id": 12345, "name": "2011 Topps Mike Trout RC #175", "playerName": "Mike Trout" }, "periodDays": 90, "summary": { "count": 14, "average": 2350.75, "low": 1900.00, "high": 2800.00 }, "sales": [ { "soldAt": "2026-06-28T17:04:00Z", "price": 2500.00, "grade": "PSA 10", "gradingCompany": "PSA", "title": "2011 Topps Update Mike Trout RC #US175 PSA 10", "auction": true, "source": "ebay" } ] }
GET /api/v1/collection

Retrieve your portfolio collection with current values and performance metrics.

Example Request (cURL)
curl 'https://hobbycardindex.com/api/v1/collection' \ -H 'X-API-Key: hci_live_...'
Example Response
{ "items": [ { "id": 1, "cardId": 12345, "name": "2011 Topps Mike Trout RC #175", "grade": "PSA 9", "quantity": 1, "purchasePrice": 1200.00, "notes": "Great condition", "addedAt": "2025-06-15T10:30:00Z" } ], "total": 1 }
GET /api/v1/market/movers

Get top market movers by category. Shows cards with the highest average sale prices in recent period.

Query Parameters

Parameter Type Default Description
category string baseball Card category: baseball, football, basketball, hockey, pokemon, etc.
period integer 7 Days of history to analyze (1-90)
Example Request (cURL)
curl 'https://hobbycardindex.com/api/v1/market/movers?category=baseball&period=7' \ -H 'X-API-Key: hci_live_...'
Example Response
{ "movers": [ { "id": 54321, "name": "1989 Upper Deck Ken Griffey Jr RC", "playerName": "Ken Griffey Jr", "category": "Baseball", "recentSales": 12, "averagePrice": 2300.00, "period": "7 days" } ], "period": "7 days", "category": "baseball" }
GET /api/v1/market/categories

Get statistics for all card categories. Useful for market analysis and portfolio segmentation.

Example Request (cURL)
curl 'https://hobbycardindex.com/api/v1/market/categories' \ -H 'X-API-Key: hci_live_...'
Example Response
{ "categories": [ { "category": "Baseball", "cardCount": 2100000, "averagePriceLoose": 45.50, "averagePricePsa10": 320.75, "lastSaleAt": "2026-03-20T14:32:00Z" } ], "total": 8 }

Error Handling

All error responses follow a consistent JSON structure:

{ "error": { "code": "ERROR_CODE", "message": "Human-readable error description" } }

Common Error Codes

Code HTTP Status Description
MISSING_API_KEY 401 API key not provided in X-API-Key header or Authorization header
INVALID_API_KEY 401 API key is invalid or malformed
KEY_REVOKED 401 API key has been revoked
REQUIRES_COMMERCIAL_LICENSE 403 The endpoint (individual sold-sale records) is only available under a Commercial Data License. See Data use below.
RATE_LIMITED 429 More than 1 request per second on one key. Wait a second and retry.
RATE_LIMIT_EXCEEDED 429 The key reached its daily ceiling of 100,000 requests. Resets at UTC midnight.
VALIDATION_ERROR 400 A required query parameter is missing or invalid, for example q on search
NOT_FOUND 404 No card with that ID
SERVER_ERROR 500 Internal server error. Try again later.

Pricing & Tiers

Enterprise Tier Required

API access is included with the Enterprise plan, $49.99 a month or $499.99 a year, which also includes 30,000 card scans a month. Each key can make 1 request per second, up to 100,000 requests a day.

Included with Enterprise:

  • One API key per account
  • 1 request per second, up to 100,000 a day
  • Access to all pricing data (16M+ cards)
  • Market movers and category analytics
  • Portfolio API endpoints
  • Priority support
  • Licensed for your own internal use (see Data use below)

Don't have Enterprise? View pricing plans →

Data use & commercial license

What your Enterprise plan covers

Your API key licenses HobbyCardIndex data for your own business's internal use: pricing your own inventory, your own buying and selling decisions, internal reports, and tools only your team uses. Setting your own price on a card using our data counts as internal use.

What needs a Commercial Data License

  • Showing our prices, sold sales or market data to your customers or the public: a website, app, marketplace, widget, stream overlay, point-of-sale screen or printed price list
  • Reselling, sublicensing or redistributing the data, including API responses and bulk price files
  • Building or training a price guide, database or AI model from the data that you sell or offer to others
  • Including the data in a product or service you charge for
  • Sharing your API key, exports or bulk files with another company
  • Individual sold-sale records from /prices/:cardId/sales: this endpoint is only switched on for Commercial Data License holders

How to apply

Email [email protected] with the subject "Commercial Data License". Tell us who you are, what you want to show or build, and your expected monthly volume. Commercial licenses are separate written agreements priced by use and volume, and usually require a visible credit to Hobby Card Index with a link back to the card on our site. Until one is signed, an Enterprise plan covers internal use only.

When your plan ends

Stop using the data and delete stored copies, including cached API responses and bulk files, within 30 days.

Full terms: Terms of Service, section 8.

Common questions

Is there an API for sports card prices?

Yes. The HobbyCardIndex REST API returns current prices by grade: raw, PSA 10, 9 and 8, BGS 9.5, CGC 10 and SGC 10. It also returns real sold-sale history and market data, for baseball, football, basketball, hockey, soccer, Pokémon, Magic: The Gathering, Yu-Gi-Oh, One Piece and more than 25 categories in all.

How much does the HobbyCardIndex API cost?

API access is included with the Enterprise plan: $49.99 a month or $499.99 a year, which also includes 30,000 card scans a month. Each key can make 1 request per second, up to 100,000 requests a day. For higher volume, email [email protected].

How many cards does the API cover?

The catalog holds more than 16 million card records, with more than 22 million prices across grades and more than 8 million card images.

Can I identify a card from a photo with the API?

Photo identification runs our own scanner, which matches a card photo against more than 8 million card images. It is not in the public API documentation yet. To use it in your product, email [email protected].

How current are the prices?

Prices are based on real sold prices, and each card's price record includes the time it was last updated.

Can I show HobbyCardIndex prices on my own website or app?

Not on the standard plan. An Enterprise key licenses the data for your own business's internal use, like pricing your own inventory. Showing our prices to your customers or the public, reselling the data, or building it into a product you offer others needs a Commercial Data License. See how to apply.

How do I get an API key?

Subscribe to the Enterprise plan, then generate a key in Settings under API Access. Each account has one active key, and generating a new one replaces the old one.

Ready to integrate?

Get your API key and start building with HobbyCardIndex pricing data.

Create Free Account