{"openapi":"3.1.0","info":{"title":"TCGComps API","version":"1.0.0","description":"The market data API for trading cards: SKU-level prices, sold comps, price history, movers and a canonical card catalog across Magic, Pokémon, Yu-Gi-Oh!, Lorcana, One Piece and every other TCGplayer category.\n\nAll prices are USD. Authenticate with `x-api-key`. Errors use `{ error: { code, message, request_id } }`.","contact":{"name":"TCGComps","url":"https://tcgcomps.dev","email":"support@tcgcomps.dev"}},"servers":[{"url":"https://api.tcgcomps.dev","description":"Production"}],"tags":[{"name":"Catalog","description":"Games, sets, products, canonical cards and search"},{"name":"Products"},{"name":"Prices","description":"Current SKU prices, batch lookups and history"},{"name":"Sales","description":"Sold comps"},{"name":"Market","description":"Movers"},{"name":"Bulk","description":"Parquet snapshots for paid plans"},{"name":"Account"},{"name":"Status"}],"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","in":"header","name":"x-api-key","description":"Your TCGComps API key (`tcgc_…`). Create one at https://tcgcomps.dev/dashboard/keys"},"Bearer":{"type":"http","scheme":"bearer","description":"Alternatively send the key as `Authorization: Bearer tcgc_…`"}},"schemas":{"Status":{"type":"object","properties":{"ok":{"type":"boolean"},"games":{"type":"array","items":{"type":"object","properties":{"game_id":{"type":"integer"},"game":{"type":"string"},"sets":{"type":"integer"},"stale_sets":{"type":"integer"},"newest_price_check":{"type":["string","null"]},"oldest_price_check":{"type":["string","null"]}},"required":["game_id","game","sets","stale_sets","newest_price_check","oldest_price_check"]}},"jobs":{"type":"array","items":{"type":"object","properties":{"job":{"type":"string"},"status":{"type":"string"},"finished_at":{"type":["string","null"]}},"required":["job","status","finished_at"]}}},"required":["ok","games","jobs"]},"Game":{"type":"object","properties":{"id":{"type":"integer","example":3,"description":"TCGplayer category id"},"slug":{"type":"string","example":"pokemon"},"name":{"type":"string","example":"Pokemon"},"display_name":{"type":["string","null"]},"tracked":{"type":"boolean","description":"Prices and sales are collected for this game"},"canonical_mapping":{"type":"boolean","description":"Products are mapped to canonical cards/printings"},"set_count":{"type":"integer"}},"required":["id","slug","name","display_name","tracked","canonical_mapping","set_count"]},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_request","rate_limited","quota_exceeded","plan_required","unavailable","internal"],"example":"not_found"},"message":{"type":"string","example":"Product not found"},"request_id":{"type":["string","null"],"example":"f3b2…"},"details":{}},"required":["code","message","request_id"]}},"required":["error"]},"SetList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Set"}},"page":{"type":"object","properties":{"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"}},"required":["next_cursor","has_more"]}},"required":["data","page"]},"Set":{"type":"object","properties":{"id":{"type":"integer","example":23237,"description":"TCGplayer group id"},"game_id":{"type":"integer"},"game":{"type":"string","example":"pokemon"},"name":{"type":"string","example":"SV: Scarlet & Violet 151"},"slug":{"type":"string"},"abbreviation":{"type":["string","null"],"example":"MEW"},"is_supplemental":{"type":"boolean"},"release_date":{"type":["string","null"],"example":"2023-09-22"},"product_count":{"type":"integer"},"prices_checked_at":{"type":["string","null"],"description":"Last time every SKU price in this set was verified"}},"required":["id","game_id","game","name","slug","abbreviation","is_supplemental","release_date","product_count","prices_checked_at"]},"ProductList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Product"}},"page":{"type":"object","properties":{"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"}},"required":["next_cursor","has_more"]}},"required":["data","page"]},"Product":{"type":"object","properties":{"id":{"type":"integer","example":517045,"description":"TCGplayer product id"},"name":{"type":"string","example":"Charizard ex - 199/165"},"clean_name":{"type":["string","null"]},"kind":{"type":"string","enum":["single","sealed","other"]},"game":{"type":"object","properties":{"id":{"type":"integer"},"slug":{"type":"string"}},"required":["id","slug"]},"set":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"}},"required":["id","name"]},"number":{"type":["string","null"],"example":"199/165"},"rarity":{"type":["string","null"],"example":"Special Illustration Rare"},"image_url":{"type":["string","null"]},"tcgplayer_url":{"type":["string","null"]},"released_on":{"type":["string","null"]},"is_presale":{"type":"boolean"},"card_id":{"type":["string","null"],"description":"Canonical card (gameplay identity), when mapped"},"printing_id":{"type":["string","null"],"description":"Canonical printing, when mapped"},"market_price":{"type":["number","null"],"example":334.14,"description":"Near Mint (or Unopened) market price of the primary finish"},"low_price":{"type":["number","null"],"example":334.14,"description":"Lowest listing for that SKU"},"attributes":{"type":"object","additionalProperties":{"type":"string"},"description":"Game-specific attributes (Number, Rarity, HP, …)"},"prices_checked_at":{"type":["string","null"]},"updated_at":{"type":"string"}},"required":["id","name","clean_name","kind","game","set","number","rarity","image_url","tcgplayer_url","released_on","is_presale","card_id","printing_id","market_price","low_price","attributes","prices_checked_at","updated_at"]},"SearchResults":{"type":"object","properties":{"data":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Product"},{"type":"object","properties":{"score":{"type":"number"}},"required":["score"]}]}},"query":{"type":"string"}},"required":["data","query"]},"Card":{"type":"object","properties":{"id":{"type":"string"},"game_id":{"type":"integer"},"name":{"type":"string"},"printings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"set_code":{"type":"string"},"set_id":{"type":["integer","null"]},"number":{"type":"string"},"variant":{"type":"string"},"language":{"type":"string"},"rarity":{"type":["string","null"]},"product_ids":{"type":"array","items":{"type":"integer"}}},"required":["id","set_code","set_id","number","variant","language","rarity","product_ids"]}}},"required":["id","game_id","name","printings"]},"ProductPrices":{"type":"object","properties":{"product_id":{"type":"integer"},"currency":{"type":"string","enum":["USD"]},"checked_at":{"type":["string","null"]},"skus":{"type":"array","items":{"$ref":"#/components/schemas/SkuPrice"}},"reference":{"type":"array","items":{"$ref":"#/components/schemas/ReferencePrice"},"description":"TCGplayer's daily per-finish price summary"}},"required":["product_id","currency","checked_at","skus","reference"]},"SkuPrice":{"type":"object","properties":{"sku_id":{"type":"integer"},"tcgplayer_sku_id":{"type":["integer","null"]},"condition":{"type":"string","example":"NM"},"condition_name":{"type":"string","example":"Near Mint"},"finish":{"type":"string","example":"Holofoil"},"language":{"type":"string","example":"en"},"market_price":{"type":["number","null"],"example":334.14,"description":"USD; null when unknown"},"low_price":{"type":["number","null"],"example":334.14,"description":"USD; null when unknown"},"previous_market_price":{"type":["number","null"],"example":334.14,"description":"USD; null when unknown"},"change":{"type":["number","null"],"example":334.14,"description":"market_price − previous_market_price"},"change_pct":{"type":["number","null"]},"changed_at":{"type":["string","null"]}},"required":["sku_id","tcgplayer_sku_id","condition","condition_name","finish","language","market_price","low_price","previous_market_price","change","change_pct","changed_at"]},"ReferencePrice":{"type":"object","properties":{"finish":{"type":"string"},"as_of":{"type":"string"},"low_price":{"type":["number","null"],"example":334.14,"description":"USD; null when unknown"},"mid_price":{"type":["number","null"],"example":334.14,"description":"USD; null when unknown"},"high_price":{"type":["number","null"],"example":334.14,"description":"USD; null when unknown"},"market_price":{"type":["number","null"],"example":334.14,"description":"USD; null when unknown"},"direct_low_price":{"type":["number","null"],"example":334.14,"description":"USD; null when unknown"}},"required":["finish","as_of","low_price","mid_price","high_price","market_price","direct_low_price"]},"BatchPrices":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"product":{"$ref":"#/components/schemas/Product"},"skus":{"type":"array","items":{"$ref":"#/components/schemas/SkuPrice"}}},"required":["product","skus"]}},"missing":{"type":"array","items":{"type":"integer"}}},"required":["data","missing"]},"BatchPricesRequest":{"type":"object","properties":{"product_ids":{"type":"array","items":{"type":"integer","exclusiveMinimum":0},"minItems":1,"maxItems":100}},"required":["product_ids"]},"PriceHistory":{"type":"object","properties":{"product_id":{"type":"integer"},"sku":{"$ref":"#/components/schemas/SkuPrice"},"days":{"type":"integer"},"limited_by_plan":{"type":"boolean"},"points":{"type":"array","items":{"$ref":"#/components/schemas/HistoryPoint"}},"sales_buckets":{"type":"array","items":{"$ref":"#/components/schemas/SalesBucket"}}},"required":["product_id","sku","days","limited_by_plan","points","sales_buckets"]},"HistoryPoint":{"type":"object","properties":{"date":{"type":"string","example":"2026-10-06"},"open":{"type":["number","null"],"example":334.14,"description":"USD; null when unknown"},"high":{"type":["number","null"],"example":334.14,"description":"USD; null when unknown"},"low":{"type":["number","null"],"example":334.14,"description":"USD; null when unknown"},"close":{"type":["number","null"],"example":334.14,"description":"USD; null when unknown"},"min_listing":{"type":["number","null"],"example":334.14,"description":"USD; null when unknown"}},"required":["date","open","high","low","close","min_listing"]},"SalesBucket":{"type":"object","properties":{"start":{"type":"string"},"days":{"type":"integer"},"market_price":{"type":["number","null"],"example":334.14,"description":"USD; null when unknown"},"quantity_sold":{"type":["integer","null"]},"transactions":{"type":["integer","null"]},"low_sale":{"type":["number","null"],"example":334.14,"description":"USD; null when unknown"},"high_sale":{"type":["number","null"],"example":334.14,"description":"USD; null when unknown"}},"required":["start","days","market_price","quantity_sold","transactions","low_sale","high_sale"]},"ProductSales":{"type":"object","properties":{"product_id":{"type":"integer"},"days":{"type":"integer"},"limited_by_plan":{"type":"boolean"},"summary":{"type":"array","items":{"$ref":"#/components/schemas/SalesSummary"}},"sales":{"type":"array","items":{"$ref":"#/components/schemas/Sale"}},"next_before":{"type":["string","null"]}},"required":["product_id","days","limited_by_plan","summary","sales","next_before"]},"SalesSummary":{"type":"object","properties":{"condition":{"type":["string","null"]},"finish":{"type":["string","null"]},"sales":{"type":"integer"},"units":{"type":"integer"},"average":{"type":["number","null"],"example":334.14,"description":"USD; null when unknown"},"median":{"type":["number","null"],"example":334.14,"description":"USD; null when unknown"},"min":{"type":["number","null"],"example":334.14,"description":"USD; null when unknown"},"max":{"type":["number","null"],"example":334.14,"description":"USD; null when unknown"},"last_sold_at":{"type":["string","null"]},"last_price":{"type":["number","null"],"example":334.14,"description":"USD; null when unknown"}},"required":["condition","finish","sales","units","average","median","min","max","last_sold_at","last_price"]},"Sale":{"type":"object","properties":{"sold_at":{"type":"string"},"condition":{"type":["string","null"]},"finish":{"type":["string","null"]},"language":{"type":["string","null"]},"quantity":{"type":"integer"},"price":{"type":"number"},"shipping":{"type":["number","null"],"example":334.14,"description":"USD; null when unknown"},"listing_type":{"type":["string","null"]},"title":{"type":["string","null"]}},"required":["sold_at","condition","finish","language","quantity","price","shipping","listing_type","title"]},"Sku":{"allOf":[{"$ref":"#/components/schemas/SkuPrice"},{"type":"object","properties":{"product_id":{"type":"integer"}},"required":["product_id"]}]},"Movers":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Mover"}}},"required":["data"]},"Mover":{"type":"object","properties":{"rank":{"type":"integer"},"product_id":{"type":"integer"},"sku_id":{"type":"integer"},"name":{"type":"string"},"set_name":{"type":"string"},"number":{"type":["string","null"]},"finish":{"type":"string"},"image_url":{"type":["string","null"]},"from_price":{"type":"number"},"to_price":{"type":"number"},"change_pct":{"type":"number"},"computed_at":{"type":"string"}},"required":["rank","product_id","sku_id","name","set_name","number","finish","image_url","from_price","to_price","change_pct","computed_at"]},"Usage":{"type":"object","properties":{"plan":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"monthly_requests":{"type":"integer"},"rate_per_minute":{"type":"integer"},"history_days":{"type":["integer","null"]}},"required":["id","name","monthly_requests","rate_per_minute","history_days"]},"period_start":{"type":"string"},"requests_this_period":{"type":"integer"},"daily":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"requests":{"type":"integer"},"errors":{"type":"integer"}},"required":["date","requests","errors"]}}},"required":["plan","period_start","requests_this_period","daily"]},"BulkExports":{"type":"object","properties":{"daily":{"type":["object","null"],"properties":{"period":{"type":"string"},"generated_at":{"type":"string"},"files":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","example":"products"},"rows":{"type":"integer"},"url":{"type":"string","description":"Presigned download URL (zstd Parquet)"},"expires_at":{"type":"string"}},"required":["name","rows","url","expires_at"]}}},"required":["period","generated_at","files"]},"hourly":{"type":["object","null"],"properties":{"period":{"type":"string"},"generated_at":{"type":"string"},"files":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","example":"products"},"rows":{"type":"integer"},"url":{"type":"string","description":"Presigned download URL (zstd Parquet)"},"expires_at":{"type":"string"}},"required":["name","rows","url","expires_at"]}}},"required":["period","generated_at","files"]}},"required":["daily","hourly"]}},"parameters":{}},"paths":{"/v1/status":{"get":{"tags":["Status"],"summary":"Data freshness","description":"Per-game price freshness and the most recent ingest runs. No API key required.","responses":{"200":{"description":"Status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}}}}}},"/v1/games":{"get":{"tags":["Catalog"],"summary":"List games","description":"Every TCGplayer category, with whether prices are tracked and cards are canonically mapped.","security":[{"ApiKey":[]},{"Bearer":[]}],"parameters":[{"schema":{"type":"string","enum":["true","false"]},"required":false,"name":"tracked","in":"query"}],"responses":{"200":{"description":"Games","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Game"}}},"required":["data"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit or monthly quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/sets":{"get":{"tags":["Catalog"],"summary":"List sets","description":"Sets (TCGplayer groups), newest first. Filter by game and name.","security":[{"ApiKey":[]},{"Bearer":[]}],"parameters":[{"schema":{"type":"string","example":"pokemon","description":"Game slug or id"},"required":false,"description":"Game slug or id","name":"game","in":"query"},{"schema":{"type":"string","maxLength":100,"description":"Name contains / exact abbreviation"},"required":false,"description":"Name contains / exact abbreviation","name":"q","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Sets","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetList"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit or monthly quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/sets/{id}":{"get":{"tags":["Catalog"],"summary":"Get a set","security":[{"ApiKey":[]},{"Bearer":[]}],"parameters":[{"schema":{"type":["integer","null"],"example":23237},"required":false,"name":"id","in":"path"}],"responses":{"200":{"description":"Set","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Set"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit or monthly quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/sets/{id}/products":{"get":{"tags":["Catalog"],"summary":"List products in a set","description":"Every active product in a set with its headline Near Mint price.","security":[{"ApiKey":[]},{"Bearer":[]}],"parameters":[{"schema":{"type":["integer","null"],"example":23237},"required":false,"name":"id","in":"path"},{"schema":{"type":"string","enum":["single","sealed","other"]},"required":false,"name":"kind","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Products","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductList"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit or monthly quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/search":{"get":{"tags":["Catalog"],"summary":"Search products","description":"Fuzzy search by name, or exact collector number (e.g. `199/165`, `OP01-120`, `BLRR-EN084`).","security":[{"ApiKey":[]},{"Bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":2,"maxLength":120,"example":"charizard ex"},"required":true,"name":"q","in":"query"},{"schema":{"type":"string","example":"pokemon"},"required":false,"name":"game","in":"query"},{"schema":{"type":["integer","null"]},"required":false,"name":"set","in":"query"},{"schema":{"type":"string","enum":["single","sealed","other"]},"required":false,"name":"kind","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"required":false,"name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"maximum":1000,"default":0},"required":false,"name":"offset","in":"query"}],"responses":{"200":{"description":"Ranked results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResults"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit or monthly quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/cards/{id}":{"get":{"tags":["Catalog"],"summary":"Get a canonical card","description":"A canonical card (gameplay identity) with every printing and the TCGplayer products mapped to each — the answer to “one card, many listings”.","security":[{"ApiKey":[]},{"Bearer":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Card","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Card"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit or monthly quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/products/{id}":{"get":{"tags":["Products"],"summary":"Get a product","security":[{"ApiKey":[]},{"Bearer":[]}],"parameters":[{"schema":{"type":"integer","exclusiveMinimum":0,"example":517045},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Product","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Product"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit or monthly quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/products/{id}/prices":{"get":{"tags":["Prices"],"summary":"Current SKU prices","description":"Market and lowest-listing price for every condition × finish × language SKU, plus TCGplayer's daily per-finish summary (low/mid/high/market/direct low).","security":[{"ApiKey":[]},{"Bearer":[]}],"parameters":[{"schema":{"type":"integer","exclusiveMinimum":0,"example":517045},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Prices","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductPrices"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit or monthly quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/prices/batch":{"post":{"tags":["Prices"],"summary":"Batch prices (up to 100 products)","description":"One call for a whole collection or storefront page. Counts as a single request.","security":[{"ApiKey":[]},{"Bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchPricesRequest"}}}},"responses":{"200":{"description":"Prices keyed by product id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchPrices"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit or monthly quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/products/{id}/history":{"get":{"tags":["Prices"],"summary":"Price history (daily OHLC)","description":"Daily open/high/low/close of the market price for one SKU (defaults to the product's Near Mint primary-finish SKU), plus TCGplayer's own sales buckets for longer lookbacks. Depth is limited by plan.","security":[{"ApiKey":[]},{"Bearer":[]}],"parameters":[{"schema":{"type":"integer","exclusiveMinimum":0,"example":517045},"required":true,"name":"id","in":"path"},{"schema":{"type":"integer","exclusiveMinimum":0},"required":false,"name":"sku","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":3650,"default":90},"required":false,"name":"days","in":"query"}],"responses":{"200":{"description":"History","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceHistory"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit or monthly quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/products/{id}/sales":{"get":{"tags":["Sales"],"summary":"Sold comps","description":"Individual completed sales (price, shipping, condition, finish, language, time) with per condition × finish summary statistics (median, average, range).","security":[{"ApiKey":[]},{"Bearer":[]}],"parameters":[{"schema":{"type":"integer","exclusiveMinimum":0,"example":517045},"required":true,"name":"id","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":3650,"default":30},"required":false,"name":"days","in":"query"},{"schema":{"type":"string","enum":["NM","LP","MP","HP","DMG","SEALED"]},"required":false,"name":"condition","in":"query"},{"schema":{"type":"string","maxLength":40},"required":false,"name":"finish","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","format":"date-time","description":"Pagination: only sales before this time"},"required":false,"description":"Pagination: only sales before this time","name":"before","in":"query"}],"responses":{"200":{"description":"Sales","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductSales"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit or monthly quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/skus/{id}":{"get":{"tags":["Prices"],"summary":"Get a SKU","security":[{"ApiKey":[]},{"Bearer":[]}],"parameters":[{"schema":{"type":"integer","exclusiveMinimum":0},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"SKU with current price","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Sku"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit or monthly quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/movers":{"get":{"tags":["Market"],"summary":"Top movers","description":"Biggest Near Mint / sealed price moves (≥ $1, ≥ $0.50 change) over 1, 7 or 30 days. Refreshed every 30 minutes.","security":[{"ApiKey":[]},{"Bearer":[]}],"parameters":[{"schema":{"type":"string","example":"pokemon"},"required":true,"name":"game","in":"query"},{"schema":{"type":"string","enum":["1","7","30"],"default":"7"},"required":false,"name":"window","in":"query"},{"schema":{"type":"string","enum":["up","down"],"default":"up"},"required":false,"name":"direction","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":50,"default":25},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Movers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Movers"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit or monthly quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/usage":{"get":{"tags":["Account"],"summary":"Your plan and usage","description":"Current plan limits, requests used this month, and daily usage for the last 30 days. Free to call.","security":[{"ApiKey":[]},{"Bearer":[]}],"responses":{"200":{"description":"Usage","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Usage"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit or monthly quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/bulk":{"get":{"tags":["Bulk"],"summary":"Bulk Parquet exports","description":"Download links for the latest bulk snapshots (zstd Parquet, readable by DuckDB, Polars, pandas, Spark). **Daily** (Starter and up): games, sets, products, SKUs, canonical card mappings and the previous UTC day's per-SKU price OHLC. **Hourly** (Pro and Business): the latest price for every SKU. Links expire after one hour.","security":[{"ApiKey":[]},{"Bearer":[]}],"responses":{"200":{"description":"Snapshots","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkExports"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Your plan does not include bulk exports","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit or monthly quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Bulk exports are not available yet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"webhooks":{}}