TCGplayer sales and listings
GET /tcgplayer/sold returns TCGplayer completed sales with optional market price history, and GET /tcgplayer/listings returns current listings, for Pokemon, Magic, Yu-Gi-Oh, One Piece and other trading cards.
Two endpoints for trading cards and sealed products on TCGplayer. Both use your normal API key, monthly quota and rate limit, each call counts as one request, and failed calls are never charged.
Sales
/tcgplayer/soldcost 1 requestcurl "https://api.ebaysoldlistingsapi.com/tcgplayer/sold?keyword=charizard+ex+obsidian+flames+223&count=100" \
-H "Authorization: Bearer YOUR_API_KEY"Send a keyword (card or product name, set and card number) or an exact TCGplayer productId. With a keyword, the
best matching product is used and other close matches are listed in otherMatches, so you can repeat the call with
the right productId. The productId is the number in a TCGplayer product link, for example
https://www.tcgplayer.com/product/123456/... has productId=123456.
Search by the product's TCGplayer name, not an eBay listing title. Words like "sealed", "mint" or lot sizes usually match no product.
| Parameter | Values | Default |
|---|---|---|
keyword | Card or product name, up to 300 characters | Required unless productId is sent |
productId | TCGplayer product ID | None |
count | 1 to 250 sales | 100 |
condition | For example Near Mint, Lightly Played | All conditions |
variant | For example Normal, Holofoil, Reverse Holofoil | All variants |
language | For example English, Japanese | All languages |
history | none, month, quarter, annual (market price history buckets) | none |
soldAfter | YYYY-MM-DD: only sales on or after this date (UTC) | None |
soldBefore | YYYY-MM-DD: only sales on or before this date (UTC) | None |
fresh | true fetches the newest sales live instead of a recent saved copy | false |
productobjectproductId, name, productLine, setName, number, rarity, marketPrice, lowestPrice, totalListings and url.otherMatchesarrayproductId.itemsarraytitle, condition, variant, language, quantity, price, shipping, totalPrice, soldAt (ISO date and time) and listingType.priceHistoryarrayhistory is set.summaryobjectsoldAfter and soldBefore trim the returned sales to a date window, so a daily job can ask only for what it has not
stored yet. They filter the newest sales available for the product (up to 250) and do not reach further back, so send
count=250 with a date window.
Listings
/tcgplayer/listingscost 1 requestcurl "https://api.ebaysoldlistingsapi.com/tcgplayer/listings?keyword=charizard+ex+obsidian+flames+223&count=25" \
-H "Authorization: Bearer YOUR_API_KEY"| Parameter | Values | Default |
|---|---|---|
keyword | Card or product name, up to 300 characters | Required unless productId is sent |
productId | TCGplayer product ID | None |
count | 1 to 50 listings per page | 25 |
page | 1 to 50 | 1 |
condition | For example Near Mint | All conditions |
variant | For example Holofoil | All variants |
language | For example English | All languages |
Each listing has its price, shipping, totalPrice, condition, variant, language, quantity and seller details (sellerName, sellerRating, sellerSales, sellerLocation, and the goldSeller, verifiedSeller and directSeller flags). Follow the next page
while hasNextPage is true.
Pacing
Keep TCGplayer calls to about one per second and spread them evenly rather than sending large parallel bursts. Calls
above that pace wait briefly and may return 503 server_busy; retry after a few seconds. These calls are not charged.
| Status | code | Meaning |
|---|---|---|
| 400 | invalid_params | A parameter is missing or invalid; the message says which |
| 502 | upstream_blocked | TCGplayer did not complete this call; retry after a short pause |
| 503 | server_busy | TCGplayer is busy right now; retry after a few seconds |
PSA population and graded prices
PSA graded card prices by grade, population reports for a single card or a whole set, card search and a full list of PSA sets per game, with one API key.
Auction house sold prices (Goldin, Fanatics Collect, Pristine Auction, MySlabs)
GET /goldin/sold, /fanatics/sold, /pristine/sold and /myslabs/sold return graded card and collectibles auction results by keyword, with the price the buyer paid (buyer's premium included), sale date, sale type, grading company and grade.