{"openapi":"3.1.0","info":{"title":"Cardmarket monitor API","version":"1.0.0","description":"Read-only access to the Cardmarket monitor: the watchlist the browser monitor tracks, and the full Pokémon catalogue with Cardmarket's price guide plus the lowest price under the seller filter `sellerCountry=23&language=1`. Every Cardmarket URL returned carries that filter.\n\nAuthenticate with a personal API key (`cm_live_...`) as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Each key may make 120 requests per minute unless configured otherwise; over the limit you get 429 with `Retry-After`. Errors are always `{\"error\": {\"code\": \"...\", \"message\": \"...\"}}`."},"servers":[{"url":"https://api.cardseekers.nl"}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"paths":{"/api/v1/me":{"get":{"summary":"The API key making the request","operationId":"getMe","responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Key"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/status":{"get":{"summary":"Freshness of the watchlist monitor, catalogue and filtered-price scrape","operationId":"getStatus","responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/watchlist":{"get":{"summary":"Tracked products with latest price and 24h / 7d change","operationId":"listWatchlist","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"description":"Page size."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0},"description":"Rows to skip."}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","pagination"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WatchlistItem"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/watchlist/{slug}":{"get":{"summary":"One tracked product","operationId":"getWatchlistItem","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"Watchlist slug (case-insensitive), or a part of the product URL that matches one product."}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchlistItem"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"description":"The slug matches more than one product","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/watchlist/{slug}/history":{"get":{"summary":"Price history of a tracked product (average of the lowest price per day/week/month)","operationId":"getWatchlistHistory","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"Watchlist slug (case-insensitive), or a part of the product URL that matches one product."},{"name":"view","in":"query","required":false,"schema":{"type":"string","enum":["daily","weekly","monthly"],"default":"daily"},"description":"Bucket size."},{"name":"range","in":"query","required":false,"schema":{"type":"string","enum":["all","30d","90d","365d"],"default":"all"},"description":"Time range."}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string"},"view":{"type":"string"},"range":{"type":"string"},"points":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"price":{"type":["number","null"]}}}},"change_pct_over_range":{"type":["number","null"]}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/watchlist/{slug}/offers":{"get":{"summary":"Current offers of a tracked product (latest monitor check)","operationId":"getWatchlistOffers","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"Watchlist slug (case-insensitive), or a part of the product URL that matches one product."}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string"},"cardmarket_url":{"type":"string"},"as_of":{"type":["string","null"]},"offers":{"type":"array","items":{"type":"object","properties":{"seller":{"type":["string","null"]},"condition":{"type":["string","null"]},"quantity":{"type":["string","null"]},"price":{"type":["number","null"]},"comment":{"type":["string","null"]}}}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/cards":{"get":{"summary":"Search the catalogue (every Pokémon single and sealed product)","operationId":"searchCards","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":100},"description":"Words that must all appear in the name."},{"name":"set","in":"query","required":false,"schema":{"type":"string"},"description":"Expansion id (number) or exact expansion name."},{"name":"number","in":"query","required":false,"schema":{"type":"string"},"description":"Collector number; `4` also matches `004`."},{"name":"rarity","in":"query","required":false,"schema":{"type":"string"},"description":"Rarity, e.g. `Ultra Rare`."},{"name":"kind","in":"query","required":false,"schema":{"type":"string","enum":["all","single","sealed"],"default":"all"},"description":"Product kind."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["trend","low","avg","filtered","name","number","newest"],"default":"trend"},"description":"`filtered` sorts on the lowest price under the seller filter."},{"name":"order","in":"query","required":false,"schema":{"type":"string","enum":["asc","desc"]},"description":"Defaults to desc for prices and newest, asc for name and number."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50},"description":"Page size."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0},"description":"Rows to skip."}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","pagination"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Card"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/cards/{idProduct}":{"get":{"summary":"One product with its price history","operationId":"getCard","parameters":[{"name":"idProduct","in":"path","required":true,"schema":{"type":"integer"},"description":"Cardmarket idProduct."},{"name":"days","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":3650},"description":"Only history from the last N days (default: all)."}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Card"},{"type":"object","properties":{"history":{"type":"object","properties":{"price_guide":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"low":{"type":["number","null"]},"avg":{"type":["number","null"]},"trend":{"type":["number","null"]},"low_holo":{"type":["number","null"]},"avg_holo":{"type":["number","null"]},"trend_holo":{"type":["number","null"]}}}},"filtered":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"lowest":{"type":["number","null"]},"offers":{"type":"integer"}}}},"listing":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"available":{"type":["integer","null"]},"from_price":{"type":["number","null"]},"available_foil":{"type":["integer","null"]},"from_price_foil":{"type":["number","null"]}}}}}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/sets":{"get":{"summary":"Expansions with product counts","operationId":"listSets","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string"},"description":"Part of the expansion name."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":1000,"default":100},"description":"Page size."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0},"description":"Rows to skip."}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","pagination"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Set"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/fingerprints":{"get":{"summary":"Card fingerprint index for photo recognition (CSFP1)","description":"Every reference card image with its CSFP1 fingerprint (see fingerprints/csfp.py in the cardmarketv3 repo) and the Cardmarket idProducts it belongs to. Fingerprint a card photo with the same recipe and pick the entry with the smallest distance. The image is image_url with {key} filled in. Changes at most daily.","operationId":"fingerprintIndex","responses":{"200":{"description":"The index","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"string","example":"CSFP1"},"count":{"type":"integer"},"image_url":{"type":"string","example":"https://images.pokemontcg.io/{key}.png"},"entries":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","example":"xy6/20"},"art_p":{"type":"string","description":"64-bit hex: perceptual hash of the artwork"},"art_d":{"type":"string","description":"64-bit hex: difference hash of the artwork"},"card_p":{"type":"string","description":"64-bit hex: perceptual hash of the whole card"},"colour":{"type":"string","description":"48 bytes hex: 4x4 RGB grid of the artwork"},"products":{"type":"array","items":{"type":"integer"},"description":"Cardmarket idProducts"}}}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"`Authorization: Bearer cm_live_...`"},"apiKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed per minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left in this minute."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix time the window resets."}},"responses":{"BadRequest":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Unauthorized":{"description":"Missing, invalid, revoked or expired API key","headers":{"WWW-Authenticate":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"RateLimited":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","examples":["unauthorized","invalid_api_key","revoked_api_key","expired_api_key","insufficient_scope","rate_limited","invalid_parameter","not_found","ambiguous_slug","method_not_allowed","internal_error"]},"message":{"type":"string"}}}}},"Pagination":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"returned":{"type":"integer"},"has_more":{"type":"boolean"},"next_offset":{"type":["integer","null"]}}},"Key":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"prefix":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"rate_limit":{"type":"integer"},"created_at":{"type":"string"},"expires_at":{"type":["string","null"]}}},"WatchlistItem":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"game":{"type":["string","null"]},"cardmarket_url":{"type":"string","description":"Product page with ?sellerCountry=23&language=1."},"lowest_price":{"type":["number","null"]},"num_offers":{"type":["integer","null"]},"last_checked":{"type":["string","null"]},"change_24h_pct":{"type":["number","null"]},"change_7d_pct":{"type":["number","null"]},"sparkline_14d":{"type":"array","items":{"type":["number","null"]}}}},"Card":{"type":"object","properties":{"id_product":{"type":"integer"},"name":{"type":"string"},"kind":{"type":"string","enum":["single","sealed"]},"category":{"type":["string","null"]},"set":{"type":"object","properties":{"id":{"type":["integer","null"]},"name":{"type":["string","null"]}}},"rarity":{"type":["string","null"]},"number":{"type":["string","null"]},"image":{"type":["string","null"],"description":"Card image (Pokémon TCG API), when matched."},"image_large":{"type":["string","null"]},"cardmarket_url":{"type":["string","null"],"description":"Card page with ?sellerCountry=23&language=1 (null if not scraped yet)."},"filtered_price":{"type":["object","null"],"description":"Lowest offer under the seller filter (`sellerCountry=23&language=1`: sellers in the Netherlands, English cards); null if not checked yet. `lowest` null = no offers.","properties":{"filter":{"type":"string"},"lowest":{"type":["number","null"]},"offers":{"type":"integer","description":"Number of offers under the filter."},"cheapest_seller":{"type":["string","null"]},"cheapest_condition":{"type":["string","null"]},"cheapest_offers":{"type":"array","description":"The 5 cheapest offers, cheapest first: the price spread. Empty until the card is re-checked.","items":{"type":"object","properties":{"price":{"type":"number","description":"EUR"},"condition":{"type":"string","description":"MT, NM, EX, GD, LP, PL or PO"},"quantity":{"type":["integer","null"]},"seller":{"type":"string"}}}},"cheapest_offers_by_condition":{"type":"object","description":"Per condition (MT, NM, EX, GD, LP, PL, PO) its 5 cheapest offers, cheapest first. Only conditions with offers are present. Empty until the card is re-checked.","additionalProperties":{"type":"array","items":{"type":"object","properties":{"price":{"type":"number","description":"EUR"},"quantity":{"type":["integer","null"]},"seller":{"type":"string"}}}}},"checked_at":{"type":"string"}}},"price_guide":{"type":["object","null"],"description":"Cardmarket's EU-wide daily price guide (all languages and conditions).","properties":{"day":{"type":"string"},"low":{"type":["number","null"]},"avg":{"type":["number","null"]},"trend":{"type":["number","null"]},"avg1":{"type":["number","null"]},"avg7":{"type":["number","null"]},"avg30":{"type":["number","null"]},"holo":{"type":"object","properties":{"low":{"type":["number","null"]},"avg":{"type":["number","null"]},"trend":{"type":["number","null"]},"avg1":{"type":["number","null"]},"avg7":{"type":["number","null"]},"avg30":{"type":["number","null"]}}}}},"listing":{"type":["object","null"],"description":"From the expansion's list page.","properties":{"available":{"type":["integer","null"]},"from_price":{"type":["number","null"]},"available_foil":{"type":["integer","null"]},"from_price_foil":{"type":["number","null"]},"scraped_at":{"type":"string"}}}}},"Set":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"products":{"type":"integer"},"singles":{"type":"integer"},"cardmarket_url":{"type":["string","null"]}}}}}}