{"openapi":"3.1.0","info":{"title":"BergdorfBio Storefront API","version":"1.0.0","summary":"Public REST endpoints of the BergdorfBio peptide storefront.","description":"Public, unauthenticated REST surface of BergdorfBio (https://bergdorfbio.com).\n\nBrowsable content is organized as https://bergdorfbio.com/{locale}/{channel}/... with channels `eu` (EUR) and `us` (USD).\nA Markdown site overview for agents lives at https://bergdorfbio.com/llms.txt, the XML sitemap at https://bergdorfbio.com/sitemap.xml.\n\nPurchases are completed on the website checkout — this API does not expose cart or checkout operations.","contact":{"name":"Bergdorf Bioscience","email":"info@bergdorfservice.com","url":"https://bergdorfbio.com"}},"externalDocs":{"description":"AI-friendly site overview (llms.txt)","url":"https://bergdorfbio.com/llms.txt"},"servers":[{"url":"https://bergdorfbio.com","description":"Storefront"}],"tags":[{"name":"catalog","description":"Product discovery"},{"name":"notifications","description":"Stock notifications (consented email capture)"}],"paths":{"/api/search/index":{"get":{"tags":["catalog"],"operationId":"getSearchIndex","summary":"Product search index","description":"Lightweight index of all purchasable products in a channel, including localized names and prices. Product detail pages live at `/{locale}/{channel}/products/{slug}`. Successful responses are fresh at the shared edge for 60 seconds and require browser revalidation (`max-age=0`).","parameters":[{"name":"channel","in":"query","required":false,"description":"Sales channel. `eu` prices in EUR, `us` in USD.","schema":{"type":"string","enum":["eu","us"],"default":"eu"}}],"responses":{"200":{"description":"Array of indexed products.","headers":{"Cache-Control":{"description":"Browser and shared-edge freshness contract.","schema":{"type":"string","const":"public, max-age=0, s-maxage=60"}},"X-Search-Index-Status":{"description":"Signals that the returned array is complete.","schema":{"type":"string","const":"complete"}}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SearchIndexProduct"}}}}},"400":{"description":"The query is invalid: channel must be omitted or supplied exactly once as `eu` or `us`, with no additional query parameters. The response is not cached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Upstream catalog unavailable; body is an empty array and is not cached.","content":{"application/json":{"schema":{"type":"array","items":{},"maxItems":0}}}}}}},"/api/back-in-stock":{"post":{"tags":["notifications"],"operationId":"requestBackInStockNotification","summary":"Request a notification when a product is back in stock","description":"Idempotent per (email, productSlug). Rate limit: 5 per minute per IP.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email","productSlug"],"properties":{"email":{"type":"string","format":"email"},"productSlug":{"type":"string","maxLength":255},"variantId":{"type":"string","maxLength":255},"locale":{"type":"string","maxLength":10},"channel":{"type":"string","maxLength":20}}}}}},"responses":{"200":{"description":"Request stored; a confirmation mail is sent for new requests.","content":{"application/json":{"schema":{"type":"object","required":["success"],"properties":{"success":{"type":"boolean","const":true}}}}}},"400":{"description":"Validation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in the Retry-After header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Machine-readable error code."}},"additionalProperties":true},"SearchIndexProduct":{"type":"object","required":["id","name","slug","price","currency","isAvailable","aliases","translations"],"properties":{"id":{"type":"string","description":"Product ID."},"name":{"type":"string"},"slug":{"type":"string","description":"Use in `/{locale}/{channel}/products/{slug}`."},"thumbnailUrl":{"type":["string","null"]},"thumbnailAlt":{"type":["string","null"]},"price":{"type":"number","description":"Lowest currently indexed variant price in channel currency; this is not a checkout price guarantee."},"currency":{"type":"string","description":"EUR (eu) or USD (us)."},"categoryName":{"type":["string","null"]},"categoryTranslations":{"type":"object","additionalProperties":{"type":"string"}},"isAvailable":{"type":"boolean"},"aliases":{"type":"array","items":{"type":"string"}},"translations":{"type":"object","additionalProperties":{"type":"string"},"description":"Localized product names keyed by locale."}},"additionalProperties":true}}}}