Sold comps

Pokemon Card Listings API

Use this Scale endpoint when aggregate prices are not enough and the user needs the sold listings behind a valuation.

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.
Source
eBay sold

Completed-sale evidence behind aggregate values.

Limit
1-20

Default 20; cursor pagination for deeper comp review.

Plan
Scale

Rate limited separately at 30 requests per 30 seconds per 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

Review high-value PSA 10 comps

javascript
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()

Listing response shape

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.