{"openapi":"3.1.0","info":{"title":"OpenCatering Public Price Estimator","version":"1.0.0","description":"Read public catering catalog and calculate a non-binding estimate. No login, checkout, or customer data access."},"servers":[{"url":"https://opencatering.app"}],"paths":{"/ai/catalog.json":{"get":{"operationId":"getOpenCateringCatalog","summary":"Get the current public services, menus, prices, images, add-ons, rental deposits and delivery zones","responses":{"200":{"description":"Public catalog"}}}},"/ai/calculate":{"post":{"operationId":"calculateOpenCateringEstimate","summary":"Calculate a read-only estimated total","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["serviceKey","foodSubtotal"],"properties":{"serviceKey":{"type":"string","enum":["tray-buffet","merit-self-setup","food-box"]},"foodSubtotal":{"type":"number","minimum":0},"province":{"type":"string"},"serviceDate":{"type":"string","format":"date"},"serviceTime":{"type":"string","pattern":"^\\d{2}:\\d{2}$"},"includeCeremonyPackage":{"type":"boolean","default":false},"addOns":{"type":"array","items":{"type":"object","required":["id","quantity"],"properties":{"id":{"type":"string"},"quantity":{"type":"integer","minimum":1}}}}}}}}},"responses":{"200":{"description":"Read-only estimate including VAT, deposits and payment total"},"400":{"description":"Invalid selection"}}}}}}