{"openapi":"3.1.0","info":{"title":"Molino & Cata Public Catalog API","version":"1.0.0","description":"Read-only public catalog API for Molino & Cata extra virgin olive oils: search products, recommend by sensory profile, list tastings/services and read store info. No authentication required; only public catalog data is returned.\n\nRate limiting: 60 requests/minute per IP. Every response carries `RateLimit-Limit` and `RateLimit-Policy` headers; on HTTP 429 the response adds `RateLimit-Remaining`, `RateLimit-Reset` and `Retry-After` (seconds). Agents should honour these to self-throttle.","x-ratelimit":{"limit":60,"window_seconds":60,"scope":"per-ip","headers":["RateLimit-Limit","RateLimit-Policy","RateLimit-Remaining","RateLimit-Reset","Retry-After"]}},"servers":[{"url":"https://molinoycata.com/api/v1/public","description":"Public catalog API"}],"paths":{"/products":{"get":{"operationId":"listProducts","summary":"Search public products","tags":["Catalog"],"security":[],"parameters":[{"name":"q","in":"query","required":false,"description":"Free-text search over name, tasting notes, pairing, curator note","schema":{"type":"string"}},{"name":"organic","in":"query","required":false,"description":"Only organic oils","schema":{"type":"boolean"}},{"name":"price_max_eur","in":"query","required":false,"description":"Maximum bottle price in EUR","schema":{"type":"number"}},{"name":"format_ml","in":"query","required":false,"description":"Bottle format in millilitres","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"Maximum records to return (1-20)","schema":{"type":"integer","minimum":1,"maximum":20}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductList"}}}}}}},"/products/recommend":{"get":{"operationId":"recommendProducts","summary":"Recommend olive oils by intensity, sensory profile, budget and shipping country","tags":["Catalog"],"security":[],"parameters":[{"name":"intensity","in":"query","required":false,"description":"suave | medio | intenso","schema":{"type":"string","enum":["suave","medio","intenso"]}},{"name":"organic","in":"query","required":false,"description":"Only organic oils","schema":{"type":"boolean"}},{"name":"price_max_eur","in":"query","required":false,"description":"Maximum bottle price in EUR","schema":{"type":"number"}},{"name":"format_ml","in":"query","required":false,"description":"Bottle format in millilitres","schema":{"type":"integer"}},{"name":"pairing","in":"query","required":false,"description":"Free-text pairing or occasion","schema":{"type":"string"}},{"name":"ships_to","in":"query","required":false,"description":"ISO country code to check shipping coverage","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum records to return (1-20)","schema":{"type":"integer","minimum":1,"maximum":20}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecommendationList"}}}}}}},"/products/{slug}":{"get":{"operationId":"getProduct","summary":"Get one public product by slug","tags":["Catalog"],"security":[],"parameters":[{"name":"slug","in":"path","required":true,"description":"Product slug","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductEnvelope"}}}},"404":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/services":{"get":{"operationId":"listServices","summary":"List tastings and services (experiences, training, consulting)","tags":["Catalog"],"security":[],"parameters":[{"name":"type","in":"query","required":false,"description":"experiencia | formacion | asesoramiento","schema":{"type":"string","enum":["experiencia","formacion","asesoramiento"]}},{"name":"limit","in":"query","required":false,"description":"Maximum records to return (1-20)","schema":{"type":"integer","minimum":1,"maximum":20}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceList"}}}}}}},"/store":{"get":{"operationId":"getStoreInfo","summary":"Store information: address, hours, site locales, booking languages, contact, shipping countries","tags":["Store"],"security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoreInfo"}}}}}}}},"components":{"schemas":{"Product":{"type":"object","properties":{"name":{"type":"string"},"slug":{"type":"string"},"url":{"type":"string","format":"uri"},"variety":{"type":"object","properties":{"name":{"type":"string"},"intensity":{"type":"integer","minimum":1,"maximum":5}}},"organic":{"type":"boolean"},"sensory_profile":{"type":"object","description":"Sensory descriptors 0-10 (amargo, picante, frutado_verde, dulce, …)","additionalProperties":{"type":"integer","minimum":0,"maximum":10}},"tasting_notes":{"type":"string"},"pairing":{"type":"string"},"curator_note":{"type":"string"},"formats":{"type":"array","items":{"type":"object","properties":{"size_ml":{"type":"integer"},"price_eur":{"type":"number"},"in_stock":{"type":"boolean"}}}},"awards":{"type":"integer"}}},"ProductList":{"type":"object","properties":{"ok":{"type":"boolean"},"count":{"type":"integer"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Product"}}}},"RecommendationList":{"type":"object","properties":{"ok":{"type":"boolean"},"ships_to":{"type":"string","nullable":true},"shippable":{"type":"boolean"},"count":{"type":"integer"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Product"}}}},"ProductEnvelope":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{"$ref":"#/components/schemas/Product"}}},"Service":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"slug":{"type":"string"},"url":{"type":"string","format":"uri"},"price_eur":{"type":"number"},"currency":{"type":"string"},"duration_minutes":{"type":"integer"},"language":{"type":"string"},"capacity_max":{"type":"integer"},"bookable_slots":{"type":"integer"},"next_slot_at":{"type":"string","format":"date-time","nullable":true},"description":{"type":"string"}}},"ServiceList":{"type":"object","properties":{"ok":{"type":"boolean"},"count":{"type":"integer"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Service"}}}},"StoreInfo":{"type":"object","properties":{"ok":{"type":"boolean"},"name":{"type":"string"},"address":{"type":"string"},"hours":{"type":"string"},"languages":{"type":"array","items":{"type":"string"}},"booking_languages":{"type":"array","items":{"type":"string"}},"site_locales":{"type":"array","items":{"type":"string"}},"email":{"type":"string"},"phone":{"type":"string"},"ships_to":{"type":"array","items":{"type":"string"}},"url":{"type":"string","format":"uri"}}},"Error":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"}}}}}}