{"openapi":"3.1.0","info":{"title":"Supplementscanner Catalog API","version":"1.0.0","description":"Read-only access to Dutch supplement prices, normalized to price-per-unit (per kg \/ serving \/ capsule) across 48 stores. Money is integer cents plus a preformatted nl-NL string. Every product carries a source-tagged affiliate buy_url; show it as the purchase link and relay affiliate_disclosure alongside prices."},"servers":[{"url":"https:\/\/api.supplementscanner.eu\/v1"}],"paths":{"\/search":{"get":{"operationId":"searchProducts","summary":"Typo-tolerant catalog search by name or brand, cheapest-per-unit first.","parameters":[{"name":"q","in":"query","required":true,"description":"Search term (name or brand).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Max results (1-50, default 20).","schema":{"type":"integer"}},{"name":"in_stock","in":"query","required":false,"description":"Only in-stock products.","schema":{"type":"boolean"}},{"name":"category_slug","in":"query","required":false,"description":"Restrict to this category and all of its subcategories, so a parent slug works too. Must be a slug from \/categories; an unknown slug is rejected with a 422.","schema":{"type":"string"}},{"name":"max_unit_price_cents","in":"query","required":false,"description":"Cap on normalized unit price (cents).","schema":{"type":"integer"}},{"name":"market","in":"query","required":false,"description":"Country market to query (nl, be). Defaults to the requested domain's market.","schema":{"type":"string","enum":["nl","be"]}}],"responses":{"200":{"description":"Success. A JSON object carrying the results plus last_scraped_at and affiliate_disclosure.","content":{"application\/json":{"schema":{"type":"object"}}}}}}},"\/categories":{"get":{"operationId":"listCategories","summary":"Browsable categories with live counts and lowest unit price.","parameters":[{"name":"market","in":"query","required":false,"description":"Country market to query (nl, be). Defaults to the requested domain's market.","schema":{"type":"string","enum":["nl","be"]}}],"responses":{"200":{"description":"Success. A JSON object carrying the results plus last_scraped_at and affiliate_disclosure.","content":{"application\/json":{"schema":{"type":"object"}}}}}}},"\/categories\/{category}\/cheapest":{"get":{"operationId":"cheapestInCategory","summary":"Cheapest products by normalized unit price across a category subtree.","parameters":[{"name":"category","in":"path","required":true,"description":"Category slug (see \/categories).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Max results (1-50, default 10).","schema":{"type":"integer"}},{"name":"in_stock","in":"query","required":false,"description":"Only in-stock products.","schema":{"type":"boolean"}},{"name":"market","in":"query","required":false,"description":"Country market to query (nl, be). Defaults to the requested domain's market.","schema":{"type":"string","enum":["nl","be"]}}],"responses":{"200":{"description":"Success. A JSON object carrying the results plus last_scraped_at and affiliate_disclosure.","content":{"application\/json":{"schema":{"type":"object"}}}}}}},"\/products\/{product}":{"get":{"operationId":"getProduct","summary":"One product with detail and recent price history.","parameters":[{"name":"product","in":"path","required":true,"description":"Numeric product id.","schema":{"type":"integer"}},{"name":"market","in":"query","required":false,"description":"Country market to query (nl, be). Defaults to the requested domain's market.","schema":{"type":"string","enum":["nl","be"]}}],"responses":{"200":{"description":"Success. A JSON object carrying the results plus last_scraped_at and affiliate_disclosure.","content":{"application\/json":{"schema":{"type":"object"}}}},"404":{"description":"Product not found or not currently listable."}}}}}}