Sold comps
Pokemon Card Listings API
| Source | Limit | Plan |
|---|---|---|
eBay sold Completed-sale evidence behind aggregate values. | 1-20 Default 20; cursor pagination for deeper comp review. | Scale Rate limited separately at 30 requests per 30 seconds per account. |
Endpoint
GET /cards/:id/listings
curl -H "X-API-Key: YOUR_KEY" \
"https://api.poketrace.com/v1/cards/019bff77.../listings?grader=PSA&grade=10&sort=price_desc"Returns eBay sold comps with title, source item ID, price, sold date, grader, grade, condition, URL, anomaly metadata, and pagination.
- Listings require the Scale plan.
- The endpoint only returns eBay sold listings.
- The listings burst limit is 30 requests per 30 seconds per user/account.
Parameters
Path Parameters
id string | PokeTrace card ID from /cards or /cards/:id. 019bff77-befa-771d-bab0-f5909f0a78c9 |
Query Parameters
limit number | Listings per page. Max 20, default 20. 20 |
cursor string | Pagination cursor from pagination.nextCursor. MjA= |
grader string | Filter by grading company. The API normalizes this to uppercase. PSA |
grade string | Filter by numeric grade stored on the listing. 10 |
min_price / max_price number | Positive price bounds for comp review. 1000 / 10000 |
sort enum | sold_at_desc, sold_at_asc, price_desc, or price_asc. price_desc |
Response fields
Listing Fields
Fields returned for each sold eBay listing.
id number | Internal listing row ID. 421012 |
sourceItemId string | Marketplace item identifier. 123456789012 |
listingType string | null | Listing classification when available. auction |
title string | Original listing title used for comp inspection. Pokemon Base Set Charizard PSA 10 |
price / currency number / string | Sold price and currency for the comp. 5200 USD |
listingUrl string | null | URL back to the marketplace listing when available. https://www.ebay.com/itm/123456789012 |
Comp Metadata
Fields used to explain why a listing matched a raw or graded tier.
condition string | null | Raw card condition inferred or stored for the listing. NEAR_MINT |
grader string | null | Detected grading company for slab comps. PSA |
grade string | null | Detected numeric grade for slab comps. 10 |
soldAt string | null | ISO timestamp for completed sale. 2026-01-27T12:00:00.000Z |
anomalyFlag boolean | null | Whether the listing was flagged as suspicious or outlier-like. false |
anomalyReason string | null | Reason attached to anomalyFlag when present. price_outlier |
Examples
const params = new URLSearchParams({
grader: "PSA",
grade: "10",
min_price: "1000",
sort: "price_desc",
})
const response = await fetch(
`https://api.poketrace.com/v1/cards/019bff77.../listings?${params}`,
{ headers: { "X-API-Key": process.env.POKETRACE_API_KEY } },
)
const { data } = await response.json(){
"data": [{
"sourceItemId": "123456789012",
"title": "Pokemon Base Set Charizard PSA 10",
"price": 5200,
"currency": "USD",
"listingUrl": "https://www.ebay.com/itm/123456789012",
"grader": "PSA",
"grade": "10",
"soldAt": "2026-01-27T12:00:00.000Z",
"anomalyFlag": false,
"anomalyReason": null
}],
"pagination": { "hasMore": true, "nextCursor": "MjA=", "count": 20 }
}When to Use It
Use listings for comp evidence, not for normal search. Load /cards first, then fetch /listings only when the UI needs to show why a price is believable.
Audit Trail
Show title, soldAt, price, grader, grade, listingUrl, and anomalyReason together. That gives users enough context to accept or reject a comp.
Filtering Strategy
For slab workflows, pass grader and grade instead of parsing titles client-side. For raw workflows, use price bounds and sort order to review extreme comps.
Frequently asked questions
Can I show sold eBay Pokemon card comps in my app?
Yes, on Scale. The endpoint returns individual sold listings with prices, sold timestamps, grader fields, URLs, and anomaly metadata.
Should I call listings for every search result?
No. Use /cards for search and current pricing. Use /listings when a user opens a card, audits a valuation, or needs high-confidence comp evidence.