{"openapi":"3.1.0","info":{"title":"PRENOTO Menu – Agent API","version":"1.0.0","description":"Digital QR menus for restaurants, bars, cafés and hotels. The menu opens in the guest's phone language, shows allergens per dish and can be updated any time without reprinting the QR code. Free: no credit card, no commitment, no automatic charges. Any future paid feature will be optional and announced in advance. Create a private, claimable preview of a venue's digital QR menu from its existing menu."},"servers":[{"url":"https://www.prenotomenu.com"}],"paths":{"/api/agent/menus":{"get":{"operationId":"getMenuFormat","summary":"Instructions, JSON schema and example for creating a menu","responses":{"200":{"description":"Format, instructions and product facts"}}},"post":{"operationId":"createMenuPreview","summary":"Create a free digital QR menu preview from a venue's menu","description":"Read the venue's menu (photo, PDF or text), keep names and prices exactly as written, and send it as JSON. Returns a private preview link that the owner opens to review and activate the menu for free. Translated automatically into 6 languages.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["business","categories"],"additionalProperties":false,"properties":{"business":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string","maxLength":160,"description":"Venue name, exactly as on the menu or sign."},"defaultLanguage":{"type":"string","enum":["es","it","en","fr","de","pt"],"description":"Language the menu is written in. PRENOTO translates it to the other 5 languages automatically."},"currency":{"type":"string","maxLength":8,"description":"ISO code such as EUR, CHF, USD, GBP. Default EUR."},"businessType":{"type":"string","enum":["restaurant","wine_bar","hotel","beach_club","food_truck","event"],"description":"Use wine_bar for bars, cafés and wine bars. Default restaurant."},"description":{"type":"string","maxLength":500,"description":"One short sentence about the venue (optional)."},"address":{"type":"string","maxLength":500},"phone":{"type":"string","maxLength":100},"whatsapp":{"type":"string","maxLength":100,"description":"International format, e.g. +41 79 123 45 67."},"instagram":{"type":"string","maxLength":200,"description":"Username without @."},"openingHours":{"type":"string","maxLength":500}}},"categories":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","required":["name","products"],"additionalProperties":false,"properties":{"name":{"type":"string","maxLength":160},"station":{"type":"string","enum":["kitchen","bar"],"description":"kitchen for food, bar for drinks."},"products":{"type":"array","minItems":1,"items":{"type":"object","required":["name","price"],"additionalProperties":false,"properties":{"name":{"type":"string","maxLength":200},"price":{"type":"number","minimum":0,"description":"Number with up to 2 decimals, without currency symbol. Use 0 only if the menu shows no price."},"description":{"type":"string","maxLength":1000},"ingredients":{"type":"string","maxLength":1000},"allergens":{"type":"array","items":{"type":"string","enum":["gluten","crustaceans","eggs","fish","peanuts","soy","milk","nuts","celery","mustard","sesame","sulphites","lupin","molluscs"]},"description":"Only allergens stated on the menu. Never guess."},"available":{"type":"boolean"}}}}}}},"notes":{"type":"array","maxItems":50,"items":{"type":"string","maxLength":1000},"description":"Doubts while reading the menu (illegible prices, unclear items). The owner sees them as warnings."}}},"example":{"business":{"name":"Bar Aurora","defaultLanguage":"it","currency":"EUR","businessType":"wine_bar","whatsapp":"+39 333 123 4567"},"categories":[{"name":"Cocktail","station":"bar","products":[{"name":"Aurora Spritz","price":9,"description":"Spritz della casa, agrumato e floreale","allergens":["sulphites"]}]},{"name":"Cucina","station":"kitchen","products":[{"name":"Focaccia","price":7.5,"allergens":["gluten","milk"]}]}]}}}},"responses":{"201":{"description":"Preview created","content":{"application/json":{"schema":{"type":"object","properties":{"preview_url":{"type":"string"},"expires_at":{"type":"string"},"products":{"type":"integer"},"categories":{"type":"integer"},"next_steps":{"type":"string"},"price":{"type":"string"}}}}}},"400":{"description":"Invalid menu (the message explains what to fix)"},"429":{"description":"Too many menus created recently"}}}}}}