TCGplayer product search
GET /v1/tcgplayer/search finds products by keyword, including catalog identity, market-price estimate and current asking-price snapshots.
https://api.soldgraph.com/v1/tcgplayer/searchSearch TCGplayer's catalog by keyword. A result is a product, not a sold or active listing. Use its product_id in recent sales. market_price is TCGplayer's calculated estimate from completed transactions; lowest_ask, listed_median, and each offer's asking_price are active seller asks. These prices have different meanings and should not be combined into one unexplained valuation.
| Parameter | Type | Default | Description |
|---|---|---|---|
q | string | Required | Search keywords, 1–200 characters, as you'd type them into the marketplace's search box. Be specific: model, size, grade, edition. |
page | integer, 1–100 | 1 | Source page to fetch. On Poshmark, Mercari and Depop, pages after 1 also need cursor. |
country | us | us | Only us is supported. |
marketplace | tcgplayer | tcgplayer | Optional; must match the path. |
count | integer, 1–24 | 24 | Products per source page. |
curl -G https://api.soldgraph.com/v1/tcgplayer/search \ -H "Authorization: Bearer $SOLDGRAPH_KEY" \ --data-urlencode "q=lugia vstar" \ -d page=1 \ -d count=1A cache miss returns 202 with a job to poll. Completed requests cost one credit; failures are free. Results are cached for 15 minutes. See search jobs.
page and count select a source page with up to 24 products. next_page is null at the end; ranking can change and products may repeat between pages, so deduplicate by product_id. reported_total is the source's match count, not a promise of complete coverage. Search is for US checkout context; source catalog results can include multiple games and product types.
The offers array contains up to three seller ask snapshots. Shipping is reported separately. Product-level low and market prices may reflect different conditions or printings than an individual offer. Exact variant and condition matching belongs at the product/SKU level; this endpoint does not claim to perform it.
TCGplayer is the source of these product and price fields. This product uses TCGplayer data but is not endorsed or certified by TCGplayer. TCGplayer's API terms restrict automated collection and commercial redistribution; technical access does not grant rights to republish the data.
#Example response
Illustrative result captured October 1, 2026. Prices and availability change.
{ "request_id": "example-tcgplayer-search", "status": "complete", "credits": 1, "cached": false, "result": { "provider": "tcgplayer", "country": "us", "page": 1, "next_cursor": null, "collected_at": "2026-10-01T12:00:00+00:00", "schema_version": 2, "query": "lugia vstar", "page_size": 1, "count": 1, "reported_total": 13, "next_page": 2, "completeness": "provider_page_only", "data": [ { "product_id": 451396, "name": "Lugia VSTAR", "link": "https://www.tcgplayer.com/product/451396", "product_line": "Pokemon", "set_name": "SWSH12: Silver Tempest", "set_code": "SWSH12", "card_number": "139/195", "rarity": "Ultra Rare", "market_price": { "amount": 6.96, "currency": "USD" }, "lowest_ask": { "amount": 3.19, "currency": "USD" }, "lowest_ask_with_shipping": { "amount": 3.19, "currency": "USD" }, "listed_median": null, "active_listing_count": 215, "offers": [ { "listing_id": 354256735, "seller": "CardNAll Gaming", "condition": "Near Mint", "variant": "Holofoil", "language": "English", "asking_price": { "amount": 7, "currency": "USD" }, "shipping_price": { "amount": 3.99, "currency": "USD" } } ] } ], "field_notes": "Catalog prices and seller asks are distinct from actual sales." }}| Field | Type | Description |
|---|---|---|
request_id | string | ID of this request. Poll it at /v1/jobs/{request_id}. |
status | string | pending, complete or failed. Always check it, even on HTTP 200. |
credits | integer | Requests charged: 1 when complete, 0 while pending or when failed. |
cached | boolean | True when the result came from the 15-minute cache. |
poll_url | string | Only while pending. A path like /v1/jobs/{id}: join it to https://api.soldgraph.com, not to the /v1 base URL. |
error.code | string | Only when failed. See failed job codes. |
result | object | Only when complete. One source page from the marketplace. |
result.provider | string | Marketplace ID, like ebay or poshmark. |
result.country | string | Always us. |
result.query | string | The q you sent, with extra spaces removed. |
result.page | integer | The page you asked for. |
result.count | integer | Rows in result.data on this page. |
result.reported_total | integer | Total matches the marketplace reports for the search. It may be rounded or capped. |
result.next_page | integer | null | Send this as page to get the next page. Null on the last page, and on page 100, the deepest page served. |
result.collected_at | string | When we collected the page, as an ISO 8601 timestamp. |
result.schema_version | integer | Version of this response shape. Currently 2. |
result.completeness | string | Always provider_page_only: one page, not a full sales history. |
result.field_notes | string | Plain-text notes on how to read this page's fields. |
result.page_size | integer | Number of source rows in this response. |
result.reported_total | integer | Source-reported result count for this response. |
result.next_cursor | string | null | Always null; use next_page for offset pagination. |
result.data[].product_id | integer | Canonical TCGplayer product ID. |
result.data[].name | string | Product title. |
result.data[].link | string | Public product page. |
result.data[].product_line | string | null | TCGplayer game or product line. |
result.data[].set_name | string | null | Set name. |
result.data[].set_code | string | null | Set code. |
result.data[].card_number | string | null | Card number when supplied. |
result.data[].rarity | string | null | Source rarity when supplied. |
result.data[].market_price | object | null | TCGplayer estimate calculated from completed sales, not an individual sale. |
result.data[].lowest_ask | object | null | Lowest advertised seller ask, before shipping. |
result.data[].lowest_ask_with_shipping | object | null | Source estimate of lowest ask including shipping. |
result.data[].listed_median | object | null | Median advertised ask when available. |
result.data[].active_listing_count | integer | Source-reported number of active listings. |
result.data[].offers | object[] | Up to three current seller-offer snapshots with asking and shipping prices. |