TCGplayer API endpoint
Searches TCGplayer's catalog of trading-card and collectible products (Pokemon, Magic, Yu-Gi-Oh!, One Piece, Lorcana and about 70 other product lines) and returns one page of matches: product id, name, set, rarity, card number, market, lowest and median prices, listing count, links and filter facets. Filter by product line, set, product type, rarity, card type and price range, and sort by price, listings, sales or name.
/tcgplayer/searchParameters:
q (optional when product_line is set): the search text, up to 100 characters.product_line (optional): restrict to one product line by its url_name from tcgplayer-product-lines (pokemon, magic, yugioh, one-piece-card-game, ...). An unknown value returns 400.set (optional, needs product_line): restrict to one set by its url_name from tcgplayer-sets. An unknown value returns 400.product_type, rarity, card_type (optional): exact labels, for example Cards, Booster Box, Holo Rare, Pokemon. The labels in use for the current search are returned in facets. They differ by product line.min_price, max_price (optional): bounds on the market price in US dollars.sort (optional): one of market-price, lowest-price, lowest-price-with-shipping, median-price, listings, sales, product-name. Omit it for relevance.order (optional, needs sort): asc or desc. The default is desc, except asc for product-name.limit (optional): page size, 1 to 50; defaults to 24.offset (optional): results to skip; offset plus limit must be 9999 or less.Notable response behavior:
next_offset is the offset of the next page and is omitted on the last page or when the next same-size page would pass the 9999 window.market_price, lowest_price, lowest_price_with_shipping and median_price are omitted for products with no recent sales or listings.facets lists the product lines, sets, rarities, card types, energy types and product types present in the results, with counts. sets[].url_value is the value to pass as set.url and image_url are tcgplayer.com links; images are not downloaded.Example response (long values and lists shortened):
{
"code": 200,
"msg": "OK",
"data": {
"query": "charizard",
"total": 2,
"limit": 3,
"offset": 0,
"products": [
{
"product_id": 42382,
"name": "Charizard",
"url": "https://www.tcgplayer.com/product/42382",
"image_url": "https://product-images.tcgplayer.com/fit-in/437x437/42382.jpg",
"product_line": "Pokemon",
"set_name": "Base Set",
"set_code": "BS",
"rarity": "Holo Rare",
"number": "004/102",
"card_types": [
"Pokemon"
],
"sealed": false,
"foil_only": true,
"market_price": 954.65,
"lowest_price": 207.29,
"lowest_price_with_shipping": 207.3,
"total_listings": 138
},
{
"product_id": 657516,
"name": "Charizard (Black Dot Error)",
"url": "https://www.tcgplayer.com/product/657516",
"image_url": "https://product-images.tcgplayer.com/fit-in/437x437/657516.jpg",
"product_line": "Pokemon",
"set_name": "Base Set",
"set_code": "BS",
"rarity": "Holo Rare",
"number": "004/102",
"card_types": [
"Pokemon"
],
"sealed": false,
"foil_only": true,
"lowest_price": 549.99,
"lowest_price_with_shipping": 549.99,
"total_listings": 6
}
],
"facets": {
"product_lines": [
{
"value": "Pokemon",
"url_value": "pokemon",
"count": 2
}
],
"sets": [
{
"value": "SWSH: Crown Zenith",
"url_value": "swsh-crown-zenith",
"count": 7
},
{
"value": "Base Set",
"url_value": "base-set",
"count": 2
}
],
"rarities": [
{
"value": "Holo Rare",
"count": 2
}
],
"card_types": [
{
"value": "Pokemon",
"count": 2
}
],
"energy_types": [
{
"value": "Fire",
"count": 2
}
],
"product_types": [
{
"value": "Cards",
"count": 2
}
]
}
}
}
| Field | Filled in, of 5 checked | Values in the sample |
|---|---|---|
| product_id | 5 | |
| name | 5 | “Charizard - 3/70 (#39 Charizard Stamped)” and 3 other values |
| url | 5 | tcgplayer.com |
| image_url | 5 | product-images.tcgplayer.com |
| product_line | 5 | Pokemon in all 5 |
| set_name | 5 | “Battle Academy” and 3 other values |
| set_code | 5 | |
| rarity | 3 | “Promo” and 2 other values |
| number | 3 | “003/070” and 2 other values |
| card_types | 3 | median 1 entry |
| sealed | 5 | true in 0 of 5 |
| foil_only | 5 | true in 2 of 5 |
| market_price | 5 | 6.4 to 2,172.24, median 41.37 |
| lowest_price | 5 | 4 to 599.99, median 35 |
| lowest_price_with_shipping | 5 | 4.5 to 950, median 44.97 |
| median_price | 3 | 9 to 50, median 45 |
| total_listings | 5 | 26 to 257, median 64 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| q | string | No | Search text, up to 100 characters; optional when product_line is set | charizard | |
| product_line | string | No | Product line url_name from tcgplayer-product-lines, for example pokemon, magic, yugioh | pokemon | |
| set | string | No | Set url_name from tcgplayer-sets; needs product_line | base-set | |
| product_type | string | No | Exact product type label such as Cards or Booster Box; see facets.product_types | Cards | |
| rarity | string | No | Exact rarity label such as Holo Rare; see facets.rarities | Holo Rare | |
| card_type | string | No | Exact card type label such as Pokemon; see facets.card_types | Pokemon | |
| min_price | number | No | Minimum market price in US dollars | 10 | |
| max_price | number | No | Maximum market price in US dollars | 500 | |
| sort | string | No | Sort field; omit for relevance Allowed values: market-price, lowest-price, lowest-price-with-shipping, median-price, listings, sales, product-name. | market-price | |
| order | string | No | Sort direction, needs sort; default desc (asc for product-name) Allowed values: asc, desc. | desc | |
| limit | integer | No | 24 | Page size, 1 to 50; defaults to 24 | 5 |
| offset | integer | No | Results to skip; offset plus limit must be 9999 or less | 0 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/tcgplayer/search?q=coffee&sort=market-price&order=asc&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"query": "charizard",
"total": 2,
"limit": 3,
"offset": 0,
"products": [
{
"product_id": 42382,
"name": "Charizard",
"url": "https://www.tcgplayer.com/product/42382",
"image_url": "https://product-images.tcgplayer.com/fit-in/437x437/42382.jpg",
"product_line": "Pokemon",
"set_name": "Base Set",
"set_code": "BS",
"rarity": "Holo Rare",
"number": "004/102",
"card_types": [
"Pokemon"
],
"sealed": false,
"foil_only": true,
"market_price": 954.65,
"lowest_price": 207.29,
"lowest_price_with_shipping": 207.3,
"total_listings": 138
},
{
"product_id": 657516,
"name": "Charizard (Black Dot Error)",
"url": "https://www.tcgplayer.com/product/657516",
"image_url": "https://product-images.tcgplayer.com/fit-in/437x437/657516.jpg",
"product_line": "Pokemon",
"set_name": "Base Set",
"set_code": "BS",
"rarity": "Holo Rare",
"number": "004/102",
"card_types": [
"Pokemon"
],
"sealed": false,
"foil_only": true,
"lowest_price": 549.99,
"lowest_price_with_shipping": 549.99,
"total_listings": 6
}
],
"facets": {
"product_lines": [
{
"value": "Pokemon",
"url_value": "pokemon",
"count": 2
}
],
"sets": [
{
"value": "SWSH: Crown Zenith",
"url_value": "swsh-crown-zenith",
"count": 7
},
{
"value": "Base Set",
"url_value": "base-set",
"count": 2
}
],
"rarities": [
{
"value": "Holo Rare",
"count": 2
}
],
"card_types": [
{
"value": "Pokemon",
"count": 2
}
],
"energy_types": [
{
"value": "Fire",
"count": 2
}
],
"product_types": [
{
"value": "Cards",
"count": 2
}
]
}
}
}Request schema
No body schema
Response schema
#/definitions/tcgplayer.searchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | tcgplayer.SearchResponse | No | ||||
| data.facets | tcgplayer.Facets | No | ||||
| data.facets.card_types | array | No | ||||
| data.facets.card_types[].count | integer | No | ||||
| data.facets.card_types[].url_value | string | No | ||||
| data.facets.card_types[].value | string | No | ||||
| data.facets.energy_types | array | No | ||||
| data.facets.energy_types[].count | integer | No | ||||
| data.facets.energy_types[].url_value | string | No | ||||
| data.facets.energy_types[].value | string | No | ||||
| data.facets.product_lines | array | No | ||||
| data.facets.product_lines[].count | integer | No | ||||
| data.facets.product_lines[].url_value | string | No | ||||
| data.facets.product_lines[].value | string | No | ||||
| data.facets.product_types | array | No | ||||
| data.facets.product_types[].count | integer | No | ||||
| data.facets.product_types[].url_value | string | No | ||||
| data.facets.product_types[].value | string | No | ||||
| data.facets.rarities | array | No | ||||
| data.facets.rarities[].count | integer | No | ||||
| data.facets.rarities[].url_value | string | No | ||||
| data.facets.rarities[].value | string | No | ||||
| data.facets.sets | array | No | ||||
| data.facets.sets[].count | integer | No | ||||
| data.facets.sets[].url_value | string | No | ||||
| data.facets.sets[].value | string | No | ||||
| data.limit | integer | No | ||||
| data.next_offset | integer | No | ||||
| data.offset | integer | No | ||||
| data.products | array | No | ||||
| data.products[].card_types | array | No | ||||
| data.products[].foil_only | boolean | No | ||||
| data.products[].image_url | string | No | ||||
| data.products[].lowest_price | number | No | ||||
| data.products[].lowest_price_with_shipping | number | No | ||||
| data.products[].market_price | number | No | ||||
| data.products[].median_price | number | No | ||||
| data.products[].name | string | No | ||||
| data.products[].number | string | No | ||||
| data.products[].product_id | integer | No | ||||
| data.products[].product_line | string | No | ||||
| data.products[].rarity | string | No | ||||
| data.products[].sealed | boolean | No | ||||
| data.products[].set_code | string | No | ||||
| data.products[].set_name | string | No | ||||
| data.products[].total_listings | integer | No | ||||
| data.products[].url | string | No | ||||
| data.query | string | No | ||||
| data.total | integer | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/tcgplayer/search?q=coffee&sort=market-price&order=asc&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"