{"openapi":"3.0.0","paths":{"/products":{"get":{"operationId":"ProductsController_findAll","parameters":[],"responses":{"200":{"description":""}},"summary":"List products with translations and variants","tags":["Products"]}},"/products/search-index":{"get":{"operationId":"ProductsController_getSearchIndex","parameters":[{"name":"locale","required":false,"in":"query","description":"ISO 639-1 locale for the product names. Unknown or omitted values fall back to English.","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Lightweight, bestseller-sorted index of active products for the search modal","tags":["Products"]}},"/products/stock-batch":{"post":{"operationId":"ProductsController_getStockBatch","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StockBatchDto"}}}},"responses":{"200":{"description":""}},"summary":"Live stock for a set of variant IDs (cart view)","tags":["Products"]}},"/products/lab-reports":{"get":{"operationId":"ProductsController_getAllLabReports","parameters":[],"responses":{"200":{"description":""}},"summary":"Aggregate of all lab reports (COAs) across active products","tags":["Products"]}},"/products/lab-reports/code/{code}":{"get":{"operationId":"ProductsController_getLabReportByCode","parameters":[{"name":"code","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Resolve a lab report by its public batch code","tags":["Products"]}},"/products/{slug}/stock":{"get":{"operationId":"ProductsController_getStockBySlug","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Live stock for all variants of a product","tags":["Products"]}},"/products/{slug}":{"get":{"operationId":"ProductsController_findBySlug","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}},{"name":"locale","required":false,"in":"query","description":"ISO 639-1 locale. When given, only that locale's FAQs are returned (English ones if the locale has none). Omitted or unknown: FAQs of every locale.","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get product detail by slug","tags":["Products"]}},"/shipping/info":{"get":{"operationId":"ShippingController_getShippingInfo","parameters":[{"name":"country","required":false,"in":"query","description":"ISO 3166-1 alpha-2 country code. Omitted or empty resolves to the EU zone.","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get public shipping rates","tags":["Shipping"]}},"/bulk/config":{"get":{"operationId":"ShippingController_getBulkConfig","parameters":[],"responses":{"200":{"description":""}},"summary":"Get public automatic bulk-discount tiers","tags":["Shipping"]}},"/reviews":{"get":{"operationId":"ReviewsController_findAll","parameters":[],"responses":{"200":{"description":""}},"summary":"List published customer reviews","tags":["Reviews"]}}},"info":{"title":"PeptidesDirect Public Catalogue API","description":"Read-only public endpoints of peptidesdirect.io: product catalogue with variants, EUR prices and live stock, third-party lab reports (Certificates of Analysis), shipping information and customer reviews. Research use only. No authentication required; unauthenticated traffic is rate limited.","version":"1.0.0","contact":{"name":"PeptidesDirect","url":"https://peptidesdirect.io","email":"support@peptidesdirect.io"}},"tags":[],"servers":[{"url":"https://api.peptidesdirect.io","description":"Production"}],"components":{"schemas":{"StockBatchDto":{"type":"object","properties":{"variantIds":{"description":"Variant IDs to look up, 1 to 50 per request.","minItems":1,"maxItems":50,"type":"array","items":{"type":"string","format":"uuid"}},"locale":{"type":"string","description":"ISO 639-1 locale. When set, each entry also carries the localized product name.","pattern":"^[a-z]{2}$"}},"required":["variantIds"]}}},"security":[]}