TCGPlayer APItcgplayer.com ↗
Search TCGPlayer trading cards, get per-condition market prices, and retrieve seller listings with ratings and shipping costs via a simple REST API.
What is the TCGPlayer API?
The TCGPlayer API provides 3 endpoints to search trading cards across all games and sets, retrieve per-condition pricing breakdowns, and pull live seller listings. The search_cards endpoint returns market price, lowest price, and top listings in a single call, while get_card_details exposes condition-level pricing with fields like sku_id, market_price, lowest_price, and highest_price for conditions ranging from Near Mint to Damaged.
curl -X GET 'https://api.parse.bot/scraper/5d1e8a71-43a6-400a-9f41-6f2a4ad5cbe7/search_cards?limit=10&query=charizard&offset=0' \ -H 'X-API-Key: $PARSE_API_KEY'
Full-text search over TCGPlayer's catalog of trading cards and sealed products. query matches product names and set names. Returns cards with current market prices, listing counts, and up to 3 top seller listings per card. Paginates via offset. Each card exposes a product_id usable with get_card_details and get_card_listings for deeper data.
| Param | Type | Description |
|---|---|---|
| limit | integer | Maximum number of results to return (max 50) |
| queryrequired | string | Search query (e.g. 'black lotus', 'dark magician', 'charizard base set') |
| offset | integer | Offset for pagination (0-based) |
| rarity | string | Filter results by card rarity (e.g. 'Rare', 'Common', 'Uncommon', 'Promo', 'Ultra Rare', 'Secret Rare'). Omitting returns all rarities. |
{
"type": "object",
"fields": {
"cards": "array of card summary objects with product_id, name, set_name, rarity, market_price, lowest_price, total_listings, top_listings",
"total_results": "integer, total number of matching cards",
"available_sets": "array of {name, url_value, count} for filtering by set"
},
"sample": {
"data": {
"cards": [
{
"name": "Mega Charizard X ex Ultra Premium Collection",
"rarity": "",
"set_name": "Miscellaneous Cards & Products",
"image_url": "https://tcgplayer-cdn.tcgplayer.com/product/654213_200w.jpg",
"product_id": 654213,
"card_number": null,
"product_url": "https://www.tcgplayer.com/product/654213",
"lowest_price": 39.89,
"market_price": 219.14,
"product_line": "Pokemon",
"top_listings": [
{
"price": 7.99,
"printing": "Normal",
"quantity": 95,
"condition": "Unopened",
"seller_name": "DrZard",
"seller_sales": "286",
"seller_rating": 100,
"shipping_price": 0,
"verified_seller": false
}
],
"total_listings": 206
}
],
"limit": 10,
"query": "charizard",
"offset": 0,
"total_results": 878,
"available_sets": [
{
"name": "SV4a: Shiny Treasure ex",
"count": 5,
"url_value": "sv4a-shiny-treasure-ex"
}
]
},
"status": "success"
}
}About the TCGPlayer API
Searching Cards
The search_cards endpoint accepts a query string (card name, set name, or keyword) and returns an array of card objects, each containing product_id, name, set_name, rarity, market_price, lowest_price, and total_listings. Results also include an available_sets array of {name, url_value, count} objects you can use to understand set distribution across a result set. Pagination is handled via limit (max 50) and offset parameters.
Per-Condition Pricing
Passing a product_id to get_card_details returns a pricing_by_condition array where each entry carries a sku_id, condition label (e.g. "Near Mint", "Lightly Played"), variant, market_price, lowest_price, and highest_price. This is the primary way to compare a card's value across grades without querying individual listings. The response also includes card metadata like set_code, set_name, rarity, and an attacks array for games like Pokémon and Magic.
Seller Listings
The get_card_listings endpoint retrieves individual seller offers for a given product_id. Each listing in the listings array includes seller_name, price, shipping_price, total_price, condition, seller_rating, and verified_seller status. You can filter by condition ('Near Mint', 'Lightly Played', 'Moderately Played', 'Heavily Played', 'Damaged') and sort by price+shipping in ascending or descending order. The response includes a condition_breakdown array showing listing counts per condition, useful for gauging supply before iterating pages.
The TCGPlayer API is a managed, monitored endpoint for tcgplayer.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when tcgplayer.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official tcgplayer.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a price alert tool that monitors
market_pricechanges for a watchlist ofproduct_idvalues. - Compare Near Mint vs. Lightly Played pricing using
pricing_by_conditionto calculate the grade discount for grading arbitrage decisions. - Aggregate
total_listingsandcondition_breakdowndata to assess market liquidity for a given card before purchasing. - Power a deck-building app with live
lowest_priceandmarket_pricefields for each card in a user's list. - Rank seller offers by
total_price(price + shipping) usingget_card_listingswithsort_by=price+shippingandsort_order=asc. - Track
available_setscounts fromsearch_cardsto build a set-completion checklist with current pricing context. - Validate card values for insurance or collection appraisal by pulling
highest_priceandmarket_priceper condition.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does TCGPlayer have an official developer API?+
What does `get_card_details` return that `search_cards` does not?+
get_card_details returns a full pricing_by_condition array with sku_id, market_price, lowest_price, and highest_price broken out for each condition grade (Near Mint through Damaged). search_cards returns a single aggregate market_price and lowest_price per card without condition-level granularity.Can I filter `get_card_listings` to only see verified sellers?+
verified_seller field, so you can apply that filter client-side after retrieving results. You can fork this API on Parse and revise it to add a server-side verified_only parameter.Does the API cover card buylist or buy prices from stores?+
Are all trading card games covered, or only specific ones?+
search_cards endpoint is query-driven and returns results across TCGPlayer's full catalog, which includes Magic: The Gathering, Pokémon, Yu-Gi-Oh!, and other games stocked on the platform. There is no game-type filter parameter exposed, so results for a broad query may span multiple games. You can fork this API on Parse and add a game-filter parameter to scope results to a single game.