eBay sold listings
Individual graded and ungraded eBay sales for Pokémon cards and sealed products, each linking to the listing it came from.
eBay Sold Listings
/v1/cards/:id/listings/ebay1 credit per item returnedRecent eBay sold comps for a card, graded and ungraded. Each row carries its own currency ("USD" or "EUR"): read it per row rather than assuming USD. Cursor-based pagination for large result sets.
attribution is "exact", "shared", or "unknown". A variant can share one source page with its base card; when it does, both get the same sales, titled for whichever printing actually sold. "shared" marks those rows as evidence for the group, not this card specifically. "unknown" means the comp predates us recording which printing it came from.
To poll for new comps, track the highest ingested_at you've seen and pass it back as since. That's collection time, not sold_at: a collection run can bring in sales weeks old, so filtering by sale date would skip them. The bound is exclusive, and the timestamp already ends in Z, so send it straight into the query string. To price from recent sales instead, pass period=90d, which filters on sold_at.
grade_qualifier names the tier when a grader issues more than one at the same number: "Pristine" is a CGC Pristine 10, and "Black Label" is a BGS Black Label 10. It is null for everything else, including CGC Gem Mint 10 and plain BGS 10. grade still reads "10" for all of them, so grade=10 returns every tier. To get one tier, add the grade_qualifier filter: grader=BGS&grade=10&grade_qualifier=black_label returns Black Labels, and grade_qualifier=none returns plain BGS 10s. A Pristine 10 usually sells well above a Gem Mint 10.
sale_type is how the item sold: "auction", "fixed_price" or "best_offer_accepted". Fixed price includes listings that allowed offers but sold at the listed price. For "best_offer_accepted", price is what the buyer paid, which we read off the item page because eBay's search results show only the asking price. Multi-quantity listings sold by offer are left out, since their page shows no accepted amount. sale_type is null for comps collected before it existed, so a null row can still carry an accepted offer's asking price. It is also null for comps mirrored from PriceCharting and for sealed comps.
seller_country is the seller's location as a two-letter ISO code such as "US", "JP" or "GB". Puerto Rico is "PR", so seller_country=US,PR covers both. It is null when we don't know the location: older comps, some comps mirrored from PriceCharting, and locations we can't match to a country.
Parameters
idstringrequiredThe unique card ID.
gradedbooleantrue = graded only; false = ungraded only; omit = both. The two values are exact complements: every comp is returned by exactly one of them.
graderstringGrading company filter (e.g. "PSA", "BGS", "CGC").
gradestringGrade value filter (e.g. "10", "9.5", "9").
grade_qualifierstringOnly comps in one tier of their grade: "pristine" (CGC Pristine 10), "black_label" (BGS Black Label 10), or "none" for comps with no named tier, which includes plain CGC and BGS 10s. "none" also returns comps collected before the tier was recorded.
sale_typestringOnly comps that sold this way, as comma-separated values from "auction", "fixed_price" and "best_offer_accepted" (e.g. "auction,best_offer_accepted"). Case-insensitive. Comps with no known sale type are left out, so passing all three values keeps every comp whose sale type is known. An unknown value returns 400.
seller_countrystringOnly comps from sellers in these countries, as comma-separated ISO 3166-1 alpha-2 codes (e.g. "US,JP"). Case-insensitive, at most 30. Comps with no known seller country are left out.
exclude_seller_countrystringLeave out comps from sellers in these countries, in the same format (e.g. "CN,HK"). Comps with no known seller country stay in.
min_pricenumberMinimum sale price.
max_pricenumberMaximum sale price.
variantstringFilter by the printing the comp was collected under (e.g. "Holofoil", "Reverse Holofoil").
sincestringOnly comps ingested after this instant. Accepts an RFC 3339 timestamp or YYYY-MM-DD (midnight UTC). A malformed value returns 400 rather than being ignored. Filters on ingested_at, not sold_at.
periodstringOnly comps sold in the last N days: "90d", or a bare "90" (1 to 365). Filters on sold_at, where since filters on ingested_at.
sortstringSort order. One of "date_desc", "date_asc", "price_desc", "price_asc". Defaults to date_desc.
limitnumberNumber of listings to return per page (max 20). Defaults to 20.
cursorstringPagination cursor returned from a previous response.
Try it
curl -H "X-API-Key: YOUR_API_KEY" \https://api.pkmnprices.com/v1/cards/{id}/listings/ebay
eBay Sealed Sold Listings
/v1/sealed/:id/listings/ebay1 credit per item returnedRecent eBay sold comps for a sealed product. currency is always "USD" here. Same shape as card listings, minus the grading filters. Cursor-based pagination. Paid plans only.
attribution means the same thing, but a sealed product maps to one source page with no printing to distinguish, so the value describes the whole product, identical on every row. variant is always null; there's no variant filter.
Parameters
idstringrequiredThe unique sealed product ID.
min_pricenumberMinimum sale price.
max_pricenumberMaximum sale price.
sincestringOnly comps ingested after this instant. Accepts an RFC 3339 timestamp or YYYY-MM-DD (midnight UTC). Filters on ingested_at, not sold_at.
periodstringOnly comps sold in the last N days: "90d", or a bare "90" (1 to 365). Filters on sold_at, where since filters on ingested_at.
sortstringSort order. One of "date_desc", "date_asc", "price_desc", "price_asc". Defaults to date_desc.
limitnumberNumber of listings to return per page (max 20). Defaults to 20.
cursorstringPagination cursor returned from a previous response.
Try it
curl -H "X-API-Key: YOUR_API_KEY" \https://api.pkmnprices.com/v1/sealed/{id}/listings/ebay