TCGplayer listings

Live TCGplayer offers in USD for Pokémon cards and sealed products, cursor-paginated.

TCGplayer Live Listings

GET/v1/cards/:id/listings/tcgplayer1 credit per item returned

Live TCGplayer marketplace offers for a card: current asking prices in USD, not completed sales. Includes seller reputation (rating, sales count, Gold/Direct/Verified badges) and shipping cost. Cursor-based pagination.

updated_at isn't a freshness signal. It only moves when a listing's own price, quantity, or seller details change, so an unchanged listing keeps a month-old timestamp no matter how recently we checked it. Use snapshot_at instead: when the product's listings were last confirmed against TCGplayer, the same value on every row in a response. Listings refresh daily, so a snapshot_at more than a day old means the last fetch failed and you're seeing the previous snapshot. It's null if no snapshot has succeeded since the field shipped.

We collect from a US vantage point with no shipping-destination filter, so a snapshot can include offers TCGplayer's own site hides from a non-US browser.

A snapshot holds at most the 500 cheapest in-stock, English listings, sorted by price plus shipping at collection time. Above that, quantity sums to those 500 listings, not TCGplayer's own Current Quantity. price_asc (default) orders by item price; total_asc matches the site's own order.

Parameters

idstringrequired

The unique card ID.

conditionstring

Condition filter (e.g. "Near Mint", "Lightly Played", "Moderately Played").

languagestring

Listing language filter (e.g. "English", "German", "Japanese"). This is the language of the marketplace offer, not of the card.

printingstring

Printing/variant filter (e.g. "Holofoil", "Normal", "Reverse Holofoil").

min_pricenumber

Minimum offer price (USD).

max_pricenumber

Maximum offer price (USD).

sortstring

Sort order. One of "price_asc", "price_desc", "total_asc", "total_desc". The price sorts order by item price alone. The total sorts order by price plus shipping_price, which is what a buyer pays, how TCGplayer's own site orders offers, and the order the snapshot was collected in, so total_asc reproduces the site's list and its first row is the true cheapest offer. A cursor is bound to the sort family it was issued under; replaying a total cursor under a price sort, or the reverse, returns 400. min_price and max_price filter item price under every sort. Defaults to price_asc.

limitnumber

Number of listings to return per page (max 20). Defaults to 20.

cursorstring

Pagination cursor returned from a previous response.

Try it

curl -H "X-API-Key: YOUR_API_KEY" \
https://api.pkmnprices.com/v1/cards/{id}/listings/tcgplayer
Response
{
  "data": [
    {
      "id": 7890,
      "listing_id": 1234567890,
      "printing": "Holofoil",
      "condition": "Near Mint",
      "language": "English",
      "price": 279.99,
      "shipping_price": 0,
      "seller_name": "TopTierCards",
      "seller_id": "a1b2c3d4",
      "seller_rating": 99.8,
      "seller_sales": "50,000+",
      "quantity": 3,
      "listing_type": "standard",
      "direct_seller": true,
      "gold_seller": true,
      "verified_seller": true,
      "custom_title": "PSA-ready, pack fresh",
      "updated_at": "2026-06-10T14:22:00+00:00",
      "snapshot_at": "2026-09-03T02:41:12Z"
    }
  ],
  "pagination": {
    "has_more": true,
    "next_cursor": "Nzg5MA==",
    "count": 20
  }
}

TCGplayer Sealed Listings

GET/v1/sealed/:id/listings/tcgplayer1 credit per item returned

Live TCGplayer marketplace offers for a sealed product: current asking prices in USD, not completed sales. Same shape, filters, and cursor pagination as the card endpoint. Sealed offers are normally condition "Unopened" with an empty printing, so those two filters rarely narrow anything here.

snapshot_at works the same way as the card endpoint: read it for freshness, not updated_at.

Parameters

idstringrequired

The unique sealed product ID.

conditionstring

Condition filter. Sealed offers are normally "Unopened".

languagestring

Listing language filter (e.g. "English", "German", "Japanese"). This is the language of the marketplace offer, not of the card.

printingstring

Printing/variant filter. Normally empty for sealed products.

min_pricenumber

Minimum offer price (USD).

max_pricenumber

Maximum offer price (USD).

sortstring

Sort order. One of "price_asc", "price_desc", "total_asc", "total_desc". The price sorts order by item price alone. The total sorts order by price plus shipping_price, which is what a buyer pays, how TCGplayer's own site orders offers, and the order the snapshot was collected in, so total_asc reproduces the site's list and its first row is the true cheapest offer. A cursor is bound to the sort family it was issued under; replaying a total cursor under a price sort, or the reverse, returns 400. min_price and max_price filter item price under every sort. Defaults to price_asc.

limitnumber

Number of listings to return per page (max 20). Defaults to 20.

cursorstring

Pagination cursor returned from a previous response.

Try it

curl -H "X-API-Key: YOUR_API_KEY" \
https://api.pkmnprices.com/v1/sealed/{id}/listings/tcgplayer
Response
{
  "data": [
    {
      "id": 9912,
      "listing_id": 991122334,
      "printing": "",
      "condition": "Unopened",
      "language": "English",
      "price": 128.99,
      "shipping_price": 0,
      "seller_name": "SealedVault",
      "seller_id": "b7c1d2e3",
      "seller_rating": 99.2,
      "seller_sales": "10,000+",
      "quantity": 4,
      "listing_type": "standard",
      "direct_seller": false,
      "gold_seller": true,
      "verified_seller": true,
      "custom_title": null,
      "updated_at": "2026-08-13T09:10:00+00:00",
      "snapshot_at": "2026-09-03T02:44:38Z"
    }
  ],
  "pagination": {
    "has_more": true,
    "next_cursor": "OTkxMg==",
    "count": 20
  }
}