Quick start

Get up and running with the API in under 5 minutes. Access real-time pricing data for over 70,000 Pokemon cards including PSA, BGS, and CGC graded values.

1

Get an API key

Sign up and create a key in the dashboard.

2

Add the header

Include your API key in requests.

3

Query data

Access cards, sets, and pricing.

bash
curl -H "X-API-Key: YOUR_API_KEY" \
"https://api.pkmnprices.com/v1/cards?name=charizard&per_page=5"

Authentication

All API requests require your API key in the X-API-Key header. Get your free API key at the dashboard.

http
X-API-Key: YOUR_API_KEY

SDKs

Official SDKs for JavaScript / TypeScript and Python. Typed methods for every endpoint, API-key auth handled for you, auto-paginating iterators, and editor autocomplete on params and responses.

npm install @pkmnprices/sdk
typescript
import { PkmnPrices } from "@pkmnprices/sdk";
const client = new PkmnPrices({
apiKey: process.env.PKMNPRICES_API_KEY
});
// Search cards — fully typed params and response
const { data } = await client.cards.list({
name: "charizard",
per_page: 5
});
// Fetch one card with TCGplayer (USD) or Cardmarket (EUR) prices
const charizard = await client.cards.get(data[0].id, {
currency: "usd"
});
// Every row has one market_price for its exact condition and printing variant
console.log(charizard.prices[0].market_price); // 285
// Cursor-paginated Cardmarket offers are language-matched to the card
const offers = await client.cards.listings.cardmarket(charizard.id, {
condition: "Near Mint",
variant: "Reverse Holo"
});
console.log(offers.data[0]?.seller, offers.data[0]?.price);
// Sealed products support the same currency filter
const box = await client.sealed.get(5678, { currency: "eur" });
console.log(box.cardmarket_url, box.prices[0]?.market_price);

LLM Integration

Point coding agents at /llm.md for a concise markdown reference, or /openapi.json for the full machine-readable schema. Drop the prompt below into an LLM system prompt so it knows how to query card prices, filter by set or condition, and parse responses correctly.

System prompt
Loading…

Cards

GET/v1/cards1 credit per item returned

Search and filter Pokemon cards across all sets and languages. Supports full-text name search, price range filtering, and sorting. Does not return price data — fetch a single card via GET /v1/cards/:id for prices. Free tier is limited to English cards: Japanese and German require Pro or Business.

Parameters

namestring

Filter by card name (partial match supported).

numberstring

Filter by card number within the set.

total_set_numberstring

Filter by total set number (e.g. "102" for Base Set).

set_idstring

Filter by set ID.

tcg_player_idinteger

Filter by TCGPlayer product ID.

languagestring

Card language (e.g. "English", "Japanese", "German"). Free tier: English only; Japanese and German require Pro or Business.

raritystring

Card rarity (e.g. "Rare Holo", "Common").

stagestring

Evolution stage (e.g. "Basic", "Stage 1", "Stage 2").

card_typestring

Card type (e.g. "Fire", "Water", "Trainer").

weaknessstring

Weakness type (e.g. "Water").

energy_typestring

Attack energy type the card uses (e.g. "Fire"). Matches cards whose energy types include the value.

currencystring

Price currency used by price filters and sorting. "usd" uses TCGPlayer; "eur" uses Cardmarket and requires Pro or higher.

conditionstring

Card condition (e.g. "Near Mint", "Lightly Played", "Moderately Played").

variantstring

Card variant (e.g. "Normal", "Reverse Holo", "1st Edition").

gradestring

PSA/BGS/CGC grade value.

min_pricenumber

Minimum market price in the selected currency.

max_pricenumber

Maximum market price in the selected currency.

sortstring

Sort order. One of "price_asc", "price_desc", "name_asc", "name_desc".

pagenumber

Page number for pagination. Defaults to 1.

per_pagenumber

Results per page. Maximum 100. Defaults to 50.

Try it

curl -H "X-API-Key: YOUR_API_KEY" \
https://api.pkmnprices.com/v1/cards
Response
{
  "data": [
    {
      "id": 4521,
      "tcg_player_id": 89356,
      "name": "Charizard",
      "image_url": "https://images.pkmnprices.com/cards/4521.jpg",
      "number": "4",
      "total_set_number": "102",
      "rarity": "Rare Holo",
      "artist": "Mitsuhiro Arita",
      "hp": 120,
      "set": {
        "id": 1,
        "name": "Base Set"
      }
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 50,
    "total": 1,
    "total_pages": 1
  }
}
GET/v1/cards/:id1 credit

Retrieve a single Pokemon card by its unique ID, including all price data, Cardmarket mapping identifiers, and gameplay attributes (stage, type, HP, weakness, resistance, retreat cost, energy type, ability, attacks, and flavor text). The nullable cardmarket_url and cardmarket_product_id fields identify the exact mapped Cardmarket product. These fields and gameplay attributes are returned only by this endpoint, not the list endpoints. Prices come from TCGPlayer (USD) and Cardmarket (EUR) — use the currency parameter to select which source is returned. Every price object contains one market_price for its exact condition and printing variant.

Parameters

idintegerrequired

The unique card ID.

currencystring

Price source/currency. "usd" returns TCGPlayer prices, "eur" returns Cardmarket prices. Omit it to receive every currency your plan allows. Cards without Cardmarket data return an empty prices array for "eur".

Try it

curl -H "X-API-Key: YOUR_API_KEY" \
https://api.pkmnprices.com/v1/cards/{id}
Response
{
  "id": 789,
  "tcg_player_id": 519184,
  "name": "Charizard ex",
  "image_url": "https://images.pkmnprices.com/cards/789.jpg",
  "number": "006",
  "total_set_number": "197",
  "rarity": "Double Rare",
  "artist": "PLANETA CG Works",
  "hp": 330,
  "stage": "Stage 2",
  "card_type": "Pokemon",
  "weakness": "R",
  "resistance": null,
  "retreat_cost": 2,
  "energy_type": [
    "Fire"
  ],
  "ability": "<strong>Ability — Infernal Reign</strong> ...",
  "flavor_text": null,
  "attacks": [
    "[2RR] Burning Darkness (180+) ..."
  ],
  "cardmarket_url": "https://www.cardmarket.com/en/Pokemon/Products/Singles/Obsidian-Flames/Charizard-ex-OBF006",
  "cardmarket_product_id": 733537,
  "set": {
    "id": 123,
    "name": "Obsidian Flames"
  },
  "prices": [
    {
      "source": "tcgplayer",
      "currency": "USD",
      "condition": "Near Mint",
      "variant": "Holofoil",
      "market_price": 285,
      "created_at": "2026-04-15T00:00:00Z"
    },
    {
      "source": "cardmarket",
      "currency": "EUR",
      "condition": "Near Mint",
      "variant": "Holofoil",
      "market_price": 247.5,
      "created_at": "2026-08-11T14:22:00Z"
    }
  ]
}

Sets

GET/v1/sets1 credit per item returned

Retrieve a paginated list of all Pokemon card sets. Supports name search and language filtering.

Parameters

namestring

Filter by set name (partial match supported).

languagestring

Filter by language (e.g. "English", "Japanese", "German").

pagenumber

Page number for pagination. Defaults to 1.

per_pagenumber

Results per page. Maximum 100. Defaults to 50.

Try it

curl -H "X-API-Key: YOUR_API_KEY" \
https://api.pkmnprices.com/v1/sets
Response
{
  "data": [
    {
      "id": 1,
      "tcg_player_id": 2477,
      "name": "Base Set",
      "language": "English",
      "card_count": 102
    },
    {
      "id": 284,
      "tcg_player_id": 23456,
      "name": "Crown Zenith",
      "language": "English",
      "card_count": 230
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 50,
    "total": 650,
    "total_pages": 13
  }
}

Sealed Products

GET/v1/sealed1 credit per item returned

Search and filter sealed Pokemon products such as booster boxes, ETBs, and tins. Does not return price data — fetch a single product via GET /v1/sealed/:id for prices. Pro and Business tiers only.

Parameters

namestring

Filter by product name (partial match supported).

set_idstring

Filter by set ID.

languagestring

Product language (e.g. "en", "jp").

currencystring

Price currency for min/max/sort filters. "usd" (TCGPlayer) or "eur" (Cardmarket). EUR requires Pro+.

min_pricenumber

Minimum market price filter (in the requested currency).

max_pricenumber

Maximum market price filter (in the requested currency).

sortstring

Sort order. One of "price_asc", "price_desc", "name_asc", "name_desc".

pagenumber

Page number for pagination. Defaults to 1.

per_pagenumber

Results per page. Maximum 100. Defaults to 50.

Try it

curl -H "X-API-Key: YOUR_API_KEY" \
https://api.pkmnprices.com/v1/sealed
Response
{
  "data": [
    {
      "id": 5678,
      "tcg_player_id": 45123,
      "name": "Crown Zenith Booster Box",
      "image_url": "https://images.pkmnprices.com/sealed_products/5678.jpg",
      "set": {
        "id": 284,
        "name": "Crown Zenith"
      }
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 50,
    "total": 412,
    "total_pages": 9
  }
}
GET/v1/sealed/:id1 credit

Retrieve a single sealed Pokemon product by its unique ID, including price data and Cardmarket mapping identifiers. The nullable cardmarket_url and cardmarket_product_id fields identify the exact mapped Cardmarket product (list endpoints omit them). Prices come from TCGPlayer (USD) and Cardmarket (EUR) — use the currency parameter to select which source is returned. Pro and Business tiers only.

Parameters

idintegerrequired

The unique sealed product ID.

currencystring

Price source/currency. "usd" returns TCGPlayer prices, "eur" returns Cardmarket prices. Products without Cardmarket data return an empty prices array for "eur".

Try it

curl -H "X-API-Key: YOUR_API_KEY" \
https://api.pkmnprices.com/v1/sealed/{id}
Response
{
  "id": 5678,
  "tcg_player_id": 45123,
  "name": "Crown Zenith Booster Box",
  "image_url": "https://images.pkmnprices.com/sealed_products/5678.jpg",
  "cardmarket_url": "https://www.cardmarket.com/en/Pokemon/Products/Sealed-Products/Crown-Zenith-Booster-Box",
  "cardmarket_product_id": 654321,
  "set": {
    "id": 284,
    "name": "Crown Zenith"
  },
  "prices": [
    {
      "source": "tcgplayer",
      "currency": "USD",
      "condition": null,
      "variant": null,
      "market_price": 189.99,
      "created_at": "2026-04-15T00:00:00Z"
    },
    {
      "source": "cardmarket",
      "currency": "EUR",
      "condition": null,
      "variant": null,
      "market_price": 169.99,
      "created_at": "2026-04-15T00:00:00Z"
    }
  ]
}

Price History

GET/v1/cards/:id/prices/history1 credit per item returned

Retrieve daily price aggregates for a card over a specified time period. Use the currency parameter to choose the source: USD history comes from TCGPlayer, EUR history from Cardmarket. Those are the only two sources of price history; eBay sold comps are individual sales and are available on /v1/cards/:id/listings/ebay instead. Both sources are grouped by condition and printing variant, so one date yields several rows. The avg, low, and high fields are historical daily aggregates; current prices use the single market_price field on GET /v1/cards/:id.

Parameters

idstringrequired

The unique card ID.

currencystring

Price source/currency. "usd" returns TCGPlayer history, "eur" returns Cardmarket history. Omit it to receive every currency your plan allows.

periodstring

Time period in days, from "1d" through "365d". Defaults to 30d.

conditionstring

Filter to one condition, matched exactly. TCGPlayer uses "Near Mint", "Lightly Played", "Moderately Played", "Heavily Played", "Damaged"; Cardmarket uses "Mint", "Near Mint", "Excellent", "Good", "Light Played", "Played", "Poor".

variantstring

Filter to one printing variant, matched exactly, e.g. "Holofoil" or "Reverse Holofoil".

limitnumber

Rows per page, not days (max 365). A row is one date/source/currency/condition/variant combination, so a card with five conditions returns five rows per day and the default of 30 covers about six days. Page through with pagination.total_pages, raise this value, or narrow the result with condition and variant. Defaults to 30.

pagenumber

Page number for pagination. Defaults to 1.

Try it

curl -H "X-API-Key: YOUR_API_KEY" \
https://api.pkmnprices.com/v1/cards/{id}/prices/history
Response
{
  "data": [
    {
      "date": "2026-08-10",
      "source": "tcgplayer",
      "currency": "USD",
      "condition": "Near Mint",
      "variant": "Holofoil",
      "avg": 42.5,
      "low": 40,
      "high": 45,
      "sale_count": 8
    },
    {
      "date": "2026-08-10",
      "source": "cardmarket",
      "currency": "EUR",
      "condition": "Near Mint",
      "variant": "Holofoil",
      "avg": 37.25,
      "low": 35,
      "high": 39.5,
      "sale_count": 3
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 30,
    "total": 177,
    "total_pages": 6
  }
}

Cardmarket Listings

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

Retrieve current Cardmarket seller offers in EUR. Results are automatically restricted to the card's set language, so an English card cannot return German listings. Supports price-keyset pagination and native Cardmarket conditions. Reverse Holo and Reverse Holofoil are accepted as equivalent variant filters. Offers flagged signed, altered or graded are returned but do not contribute to the card's market price; grader and grade are parsed from seller comments where possible and may be null on a graded offer.

Parameters

idstringrequired

The unique card ID.

conditionstring

Native Cardmarket condition (e.g. "Mint", "Near Mint", "Excellent", "Good", "Light Played", "Played", "Poor").

variantstring

Printing variant (e.g. "Normal", "Holofoil", "Reverse Holofoil"). "Reverse Holo" is also accepted.

min_pricenumber

Minimum offer price (EUR).

max_pricenumber

Maximum offer price (EUR).

sortstring

Sort order. One of "price_asc", "price_desc". Defaults to price_asc.

limitnumber

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

cursorstring

Opaque 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/cardmarket
Response
{
  "data": [
    {
      "id": 3456,
      "article_id": 1789012345,
      "price": 38.5,
      "variant": "Reverse Holofoil",
      "condition": "Near Mint",
      "seller": "CardKingdomEU",
      "quantity": 2,
      "language": "EN",
      "comment": "Pack fresh, sleeved immediately",
      "signed": false,
      "altered": false,
      "graded": false,
      "grader": null,
      "grade": null,
      "updated_at": "2026-08-11T14:22:00+00:00"
    },
    {
      "id": 3457,
      "article_id": 2123745294,
      "price": 12,
      "variant": "Reverse Holofoil",
      "condition": "Near Mint",
      "seller": "AlteredArtEU",
      "quantity": 1,
      "language": "EN",
      "comment": "signed by the artist, custom border",
      "signed": true,
      "altered": true,
      "graded": false,
      "grader": null,
      "grade": null,
      "updated_at": "2026-08-11T09:04:00+00:00"
    },
    {
      "id": 3458,
      "article_id": 2098117640,
      "price": 410,
      "variant": "Reverse Holofoil",
      "condition": "Near Mint",
      "seller": "SlabHausEU",
      "quantity": 1,
      "language": "EN",
      "comment": "PSA 10 gem mint",
      "signed": false,
      "altered": false,
      "graded": true,
      "grader": "PSA",
      "grade": "10",
      "updated_at": "2026-08-10T18:41:00+00:00"
    }
  ],
  "pagination": {
    "has_more": true,
    "next_cursor": "cDozOC41OjM0NTY=",
    "count": 20
  }
}

Cardmarket Sealed Listings

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

Retrieve current Cardmarket seller offers for a sealed product, in EUR. Two things differ from the card endpoint: there is no variant filter, because every sealed offer is stored with an empty variant; and results are not restricted to one language, because a sealed product owns its offers outright rather than sharing a Cardmarket article across languages — read the language field on each row. Condition is usually null on sealed offers.

Parameters

idstringrequired

The unique sealed product ID.

conditionstring

Native Cardmarket condition. Rarely useful here — sealed offers usually carry no condition.

min_pricenumber

Minimum offer price (EUR).

max_pricenumber

Maximum offer price (EUR).

sortstring

Sort order. One of "price_asc", "price_desc". Defaults to price_asc.

limitnumber

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

cursorstring

Opaque 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/cardmarket
Response
{
  "data": [
    {
      "id": 88214,
      "article_id": 2133609704,
      "price": 289.9,
      "variant": "",
      "condition": null,
      "seller": "SealedVaultEU",
      "quantity": 1,
      "language": "EN",
      "comment": "Factory sealed, stored upright",
      "signed": false,
      "altered": false,
      "graded": false,
      "grader": null,
      "grade": null,
      "updated_at": "2026-08-13T09:56:22+00:00"
    }
  ],
  "pagination": {
    "has_more": true,
    "next_cursor": "cDoyODkuOTo4ODIxNA==",
    "count": 20
  }
}

TCGplayer Listings

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

Retrieve live TCGplayer marketplace offers for a specific card — current asking prices in USD, not completed sales. Includes seller reputation (rating, sales count, Gold/Direct/Verified badges) and shipping cost. Supports cursor-based pagination. updated_at is not a freshness signal. It moves only when a listing's own price, quantity or seller details change, so a listing that has been live and unchanged for a month keeps a month-old value however recently we confirmed it. Read snapshot_at for freshness: it is when the product's listings were last confirmed against TCGplayer, identical for every row in a response because a snapshot replaces a product's listings wholesale. Listings refresh daily, so a snapshot_at well over a day old means that product's last fetch did not succeed and you are seeing the previous snapshot. It is null if no successful snapshot has been recorded since the field was introduced. We collect from a US vantage point with no shipping-destination filter, so a snapshot can contain offers TCGplayer's own site hides from you when you browse it from outside the US.

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". 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

Retrieve live TCGplayer marketplace offers for a specific sealed product — current asking prices in USD, not completed sales. Same response shape, filters, and cursor pagination as the card endpoint. Sealed offers normally carry condition "Unopened" with an empty printing, so those two filters rarely narrow anything here. snapshot_at applies here exactly as it does on the card endpoint: read it for freshness rather than 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". 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
  }
}

eBay Listings

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

Retrieve recent eBay sold comps for a specific card (graded and ungraded), in USD. Sourced from PriceCharting. Supports cursor-based pagination for large result sets. Each row carries an attribution of "exact", "shared" or "unknown". A variant and its base card can map to one source product page, and when they do, both serve the same sales with titles describing whichever printing actually sold. "shared" marks those rows: they are evidence about the group rather than about this specific card. "unknown" means the comp predates the printing being recorded. To poll for new comps, keep the highest ingested_at you have seen for a card and pass it back as since. ingested_at is when we collected the sale, which is not sold_at: collection runs regularly bring in sales that are weeks old, so a sale-date bound would step over them. The bound is exclusive and the timestamp ends in Z, so it goes back into a query string unescaped.

Parameters

idstringrequired

The unique card ID.

gradedboolean

true = graded only; false = ungraded only; omit = both. The two values are exact complements: every comp is returned by exactly one of them.

graderstring

Grading company filter (e.g. "PSA", "BGS", "CGC").

gradestring

Grade value filter (e.g. "10", "9.5", "9").

min_pricenumber

Minimum sale price.

max_pricenumber

Maximum sale price.

variantstring

Filter by the printing the comp was collected under (e.g. "Holofoil", "Reverse Holofoil").

sincestring

Only 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.

sortstring

Sort order. One of "date_desc", "date_asc", "price_desc", "price_asc". Defaults to date_desc.

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/ebay
Response
{
  "data": [
    {
      "id": 5678,
      "title": "PSA 10 Charizard ex 006/197 Obsidian Flames",
      "price": 275,
      "grader": "PSA",
      "grade": "10",
      "variant": "Holofoil",
      "attribution": "exact",
      "sold_at": "2025-01-14",
      "ingested_at": "2025-01-16T04:12:07Z",
      "listing_url": "https://www.ebay.com/itm/123456789012"
    },
    {
      "id": 5679,
      "title": "Charizard ex 006/197 Obsidian Flames",
      "price": 42.5,
      "grader": null,
      "grade": null,
      "variant": "Holofoil",
      "attribution": "shared",
      "sold_at": "2025-01-13",
      "ingested_at": "2025-01-16T04:12:07Z",
      "listing_url": "https://www.ebay.com/itm/123456789013"
    }
  ],
  "pagination": {
    "has_more": true,
    "next_cursor": "NTY3OQ==",
    "count": 20
  }
}

eBay Sealed Listings

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

Retrieve recent eBay sold comps for a specific sealed product, in USD. Sourced from PriceCharting. Same response shape as card eBay listings, without graded/grader/grade filters. Supports cursor-based pagination. Pro and Business tiers only. attribution is returned here too and means the same thing, but a sealed product maps one source page with no printing to distinguish, so the value describes the product and is identical for every row in a response. variant is always null and there is no variant filter.

Parameters

idstringrequired

The unique sealed product ID.

min_pricenumber

Minimum sale price.

max_pricenumber

Maximum sale price.

sincestring

Only comps ingested after this instant. Accepts an RFC 3339 timestamp or YYYY-MM-DD (midnight UTC). Filters on ingested_at, not sold_at.

sortstring

Sort order. One of "date_desc", "date_asc", "price_desc", "price_asc". Defaults to date_desc.

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/ebay
Response
{
  "data": [
    {
      "id": 8901,
      "title": "Pokemon Scarlet Violet Elite Trainer Box Sealed",
      "price": 48.99,
      "grader": null,
      "grade": null,
      "sold_at": "2025-01-14",
      "listing_url": "https://www.ebay.com/itm/123456789014"
    }
  ],
  "pagination": {
    "has_more": false,
    "next_cursor": null,
    "count": 1
  }
}

Errors

The API uses standard HTTP status codes. All error responses include a JSON body with error.code, error.message and error.docs_url fields. docs_url points at the section of these docs that explains how to resolve that class of error, so you can surface it straight from a caught exception.

StatusCodeDescription
400bad_requestInvalid request parameters
401unauthorizedMissing or invalid API key
403forbiddenAPI key lacks permission for this resource
404not_foundResource not found
429rate_limitedToo many requests — slow down
500internal_errorSomething went wrong on our end
json
{
"error": {
"code": "unauthorized",
"message": "Missing or invalid API key. Pass a valid key in the X-API-Key header.",
"docs_url": "https://www.pkmnprices.com/docs#authentication"
}
}

Rate Limiting

Credits are charged based on the number of items returned in each response. Single-item lookups cost 1 credit. List endpoints cost 1 credit per item in the response. Credits reset daily at midnight UTC. Rate limits are per account, not per API key.

PlanDaily creditsRate limitAPI keys
Free50060 req/min1
Pro20,00060 req/min5
Business200,000200 req/minUnlimited

When rate limited, you'll receive a 429 status code. Wait and retry with exponential backoff.

Support

Every error response carries a docs_url pointing at the section that explains it. For anything it doesn't cover, ask us directly.

  • Discord — the fastest route to an answer, and where API questions get discussed.
  • [email protected] — for account, billing and plan questions.
  • Status — uptime, latency, and how recently each pricing source was synced.