{"name":"Youflorist Product API","version":"1.4.0","description":"API for AI agents to browse the Youflorist catalog and discover original editorial-data tools. All prices in EUR. Supports JSON and Markdown content negotiation.","base_url":"/api/aeo","content_negotiation":{"description":"Most endpoints support content negotiation via the Accept header","formats":{"application/json":"JSON response (default)","text/markdown":"Structured Markdown response (product endpoints)"}},"endpoints":{"products":{"method":"GET","path":"/api/aeo/products","description":"List products with filters and pagination","params":{"category":{"type":"string","description":"SEO category slug or legacy category ID"},"color":{"type":"string","description":"Filter by color name"},"min_price":{"type":"number","description":"Minimum price in EUR"},"max_price":{"type":"number","description":"Maximum price in EUR"},"sort":{"type":"string","enum":["name","price_asc","price_desc"],"default":"name"},"locale":{"type":"string","enum":["es","fr","pt"],"default":"es"},"page":{"type":"number","default":1},"per_page":{"type":"number","default":20,"max":50},"mode":{"type":"string","enum":["seo","legacy"],"default":"seo"}}},"product_detail":{"method":"GET","path":"/api/aeo/products/{id}","description":"Get full details for a single product by slug or ID. Supports content negotiation (Accept: text/markdown for Markdown).","params":{"locale":{"type":"string","default":"es"},"mode":{"type":"string","enum":["seo","legacy"],"default":"seo"}},"content_types":{"application/json":"JSON product data (default)","text/markdown":"Structured Markdown with sections: description, price, specs, care tips, variants"}},"product_markdown":{"method":"GET","path":"/api/aeo/products/{id}/markdown","description":"Dedicated Markdown endpoint for a single product. Always returns text/markdown.","params":{"locale":{"type":"string","default":"es"},"mode":{"type":"string","enum":["seo","legacy"],"default":"seo"}}},"categories":{"method":"GET","path":"/api/aeo/categories","description":"List all product categories","params":{"locale":{"type":"string","default":"es"},"mode":{"type":"string","enum":["seo","legacy"],"default":"seo"}}},"category_faq":{"method":"GET","path":"/api/aeo/categories/{id}/faq","description":"Auto-generated FAQ in Markdown for a category. Useful for AI agents answering customer questions.","params":{"locale":{"type":"string","default":"es"}},"content_types":{"text/markdown":"Always returns Markdown (no JSON variant)"}},"docs":{"method":"GET","path":"/api/aeo/docs","description":"This documentation"}},"editorial_tools":{"description":"Public JSON tools backed by the live catalog or Youflorist's documented plant datasets.","endpoints":{"wedding_event_budget":{"method":"GET","path":"/api/herramientas/presupuesto-evento","params":["personal_bouquets","guest_tables","table_size","bud_vases","ceremony_pieces","greenery_percent","room_length","room_width","guests","layout"],"caveat":"Room layout is indicative; material PVP excludes design, labour, vessels, transport, installation and removal."},"wedding_scene_render":{"method":"POST","path":"/api/herramientas/escena-boda","params":["length","width","guests","tableCount","layout","style"],"authentication":"User session required","caveat":"The image is returned only after a second model verifies exact visible table count, layout and floral presence; maximum 24 tables per scene."},"pet_safe_available_plants":{"method":"GET","path":"/api/herramientas/pet-friendly","params":["environment","max_price","locale"],"response":"Versioned JSON with query, observation time, sources and live product links.","caveat":"Closed safe-genus whitelist; unidentified mixes are excluded and non-toxic never means edible."},"plant_photoperiod":{"method":"GET","path":"/api/herramientas/fotoperiodo","params":["city","latitude","longitude","location_name","plant","date","locale"],"response":"Versioned JSON with explicit units, calculation timestamp, sources, biological threshold and catalog search URL.","caveat":"Solar calculation plus documented plant thresholds, not a flowering guarantee."},"vase_bouquet_preflight":{"method":"GET","path":"/api/herramientas/encaje-jarron","params":["flower","stems","stem_length_cm","vase_height_cm","mouth_diameter_cm","base_diameter_cm","dry_vase_g","water_ml","locale"],"response":"Versioned JSON with measured median flower weight, an optional physical preflight, a closed 12-vase geometry study and currently available variants with supplier-declared dimensions and product URLs.","caveat":"The declared-geometry study calculates areas and dimensionless ratios without inferring vessel weight or capacity. A promising physical preflight is not a stability certificate."}},"mcp_endpoint":"/api/mcp"},"rate_limits":{"requests_per_minute":60,"headers":{"X-RateLimit-Remaining":"Requests left in current window","X-RateLimit-Reset":"Unix timestamp when the window resets"}},"examples":{"browse_roses":"GET /api/aeo/products?category=rosas","red_flowers_under_50":"GET /api/aeo/products?color=rojo&max_price=50","product_detail_json":"GET /api/aeo/products/ramo-rosas-rojas","product_detail_markdown":"curl -H 'Accept: text/markdown' /api/aeo/products/ramo-rosas-rojas","product_markdown_endpoint":"GET /api/aeo/products/ramo-rosas-rojas/markdown","category_faq":"GET /api/aeo/categories/1/faq","all_categories":"GET /api/aeo/categories","wedding_material":"GET /api/herramientas/presupuesto-evento?guest_tables=12&table_size=medium","pet_safe_indoor":"GET /api/herramientas/pet-friendly?environment=interior&max_price=50","chrysanthemum_photoperiod":"GET /api/herramientas/fotoperiodo?city=madrid&plant=crisantemo&date=2026-10-15","custom_location_photoperiod":"GET /api/herramientas/fotoperiodo?latitude=41.3874&longitude=2.1686&plant=Dalia&date=2026-08-26","vase_bouquet_preflight":"GET /api/herramientas/encaje-jarron?flower=alstroemeria&stems=12&stem_length_cm=45&vase_height_cm=24&mouth_diameter_cm=8&base_diameter_cm=16&dry_vase_g=900&water_ml=900"}}