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'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace tcgplayer-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.tcgplayer_trading_card_api import TCGPlayer, Condition, Sort, CardNotFound
tcg = TCGPlayer()
# Search for Charizard cards
for card in tcg.cardsummaries.search(query="charizard", limit=5):
print(card.name, card.set_name, card.market_price, card.total_listings)
# Navigate from summary to full detail
detail = card.details()
print(detail.set_code, detail.rarity, detail.attacks)
# Browse condition-specific pricing
for cp in detail.pricing_by_condition:
print(cp.condition, cp.variant, cp.market_price, cp.lowest_price)
# List seller listings filtered by condition
for listing in detail.listings.list(condition=Condition.NEAR_MINT, sort_order=Sort.ASC, limit=3):
print(listing.seller_name, listing.total_price, listing.seller_rating, listing.verified_seller)
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) |
{
"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 | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. 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.