This section documents the AI-powered menu inspiration endpoints of the MiseOS API.
Menu inspiration suggestions are generated using the following inputs:
- Current week’s weather forecast in Copenhagen
- The requesting user’s station
- The company’s ISO standards
- Previously published dishes from recent weeks
Results are non-deterministic and vary between requests.
Inspiration generation flow#
flowchart LR Staff -->|Request inspiration| API API -->|User + station + dish history lookup| Database Database --> API API -->|Fetch forecast| WeatherAPI WeatherAPI --> API API -->|Prompt generation| AIModel AIModel -->|Dish suggestions| API API -->|Return suggestions| Staff
Menu Inspirations Endpoints#
| Method | URL | Auth |
|---|---|---|
GET | /menu-inspirations/daily | KITCHEN_STAFF |
SSE (Server-Sent Events) | /menu-inspirations/stream | KITCHEN_STAFF |
AiDishSuggestion object#
Suggestions are currently generated in Danish (DA). Translation can be applied later if suggestion is approved to a Dish object.
{
"nameDA": "Grillet Laks med Dild",
"descriptionDA": "Frisk atlanterhavslaks grillet med citron og frisk dild"
}GET /menu-inspirations/daily#
Returns 10 AI-generated dish suggestions tailored to the authenticated user’s kitchen station.
Example Request#
curl -H "Authorization: Bearer <token>" \
https://miseos.corral.dk/api/v1/menu-inspirations/dailyResponse 200 — array of 10 AiDishSuggestion objects.
Example response for a chef working at the cold station during cold weather:
[
{
"nameDA": "Rimmet kuller med dildolie",
"descriptionDA": "Saltet og rimmet dansk kuller serveret med en emulsion på dild og syrnede agurker for at minimere madspild fra fraskær."
},
{
"nameDA": "Rugkerne-knækbrød med malt",
"descriptionDA": "Artisan knækbrød bagt med mask fra lokal ølproduktion og toppet med fermenterede frø for optimal udnyttelse af råvarer."
},
{
"nameDA": "Braiseret knoldselleri med svampeglace",
"descriptionDA": "Hele selleri braiseret i grøntsagsfond, glaseret med en kraftig reduktion af tørrede danske svampe og serveret med hasselnødde-crumble."
},
{
"nameDA": "Grønærte-hummus med dukkah",
"descriptionDA": "En proteinrig hummus baseret på danske ærter, toppet med en krydret dukkah lavet af afskårne nødder og kerner."
},
{
"nameDA": "Ovnbagt kyllingebryst med urtesauce",
"descriptionDA": "Bryst af frilandsfjerkræ serveret med en sauce monté på grønne urter og rodfrugter fra regionalt landbrug."
},
{
"nameDA": "Perlebygsalat med bagte rødbeder",
"descriptionDA": "Lun salat af perlebyg vendt med ovnbagte rødbeder og en vinaigrette på sennep og æblecidereddike."
},
{
"nameDA": "Confiteret svamperilette",
"descriptionDA": "En grov rillette på danskdyrkede østershatte og løg, smagt til med timian og serveret med syltede sennepsfrø."
},
{
"nameDA": "Røget makrelmousse med peberrod",
"descriptionDA": "Mousse på røget makrel fra Nordsøen monteret med yoghurt og revet peberrod for en klassisk smagsprofil."
},
{
"nameDA": "Kål- og æblesalat med ristede græskarkerner",
"descriptionDA": "Fintsnittet hvidkål blandet med danske æbler og en emulsion af rapsolie for en sprød, sæsonbetonet struktur."
},
{
"nameDA": "Linsesalat med bagt græskar",
"descriptionDA": "Belugalinser vendt med ovnbagte græskartern og en urteolie baseret på persillestilke for at sikre nul-spild."
}
]Errors
| Status | Cause |
|---|---|
404 | User not found or user has no station assigned |
502 | Weather provider unavailable |
502 | AI provider unavailable |
SSE /menu-inspirations/stream#
Streams dish suggestions progressively using Server-Sent Events (text/event-stream).
The stream emits:
statusevents (progress messages during generation)dishevents (one suggestion at a time)donewhen completederrorif generation fails
Example Request#
curl -N \
-H "Accept: text/event-stream" \
-H "Authorization: Bearer <token>" \
https://miseos.corral.dk/api/v1/menu-inspirations/streamExample Event Stream#
event: status
data: Analyserer køkkenstationens udstyr...
event: status
data: Henter vejrdata for din lokation...
event: status
data: Genererer menuforslag baseret på bæredygtighed...
event: dish
data: {"nameDA":"Rimmet kuller med dild-emulsion","descriptionDA":"Saltet kuller serveres med en kold emulsion på dildolie og dildstængler for minimalt madspild."}
event: dish
data: {"nameDA":"Grillet knoldselleri-tatar","descriptionDA":"Hakket bagt knoldselleri vendt med fermenteret sennep og purløgsolie toppet med sprøde selleriskræller."}
event: dish
data: {"nameDA":"Rugkernebrød med surdej","descriptionDA":"Langtidshævet rugbrød bagt med knækkede rugkerner og brug af overskydende surdej for maksimal udnyttelse."}
event: dish
data: {"nameDA":"Kardemommeknuder med fuldkorn","descriptionDA":"Klassisk bagværk med 30% erstatning af hvedemel med lokalt formalet fuldkornshvedemel for bedre næringsprofil."}
event: dish
data: {"nameDA":"Braiserede linser med ovnbagte beder","descriptionDA":"Belugalinser braiseret i grøntsagsbouillon toppet med ovnbagte danske beder og dild-vinaigrette."}
event: dish
data: {"nameDA":"Langtidsstegt svinenakke med kålrabi","descriptionDA":"Skiver af svinenakke glaceret i æblemost serveret med puré af kålrabi og bagt grønkål."}
event: dish
data: {"nameDA":"Perlebyg med bagte jordskokker","descriptionDA":"Perlebyg vendt med urtepesto af persillestilke og toppet med sprødstegte jordskokker."}
event: dish
data: {"nameDA":"Salat på vinterkål og æble","descriptionDA":"Snittet grønkål og rød kål masseret med æbleeddike, toppet med syrnede æbler og ristede kerner."}
event: dish
data: {"nameDA":"Røget fiskesalat med radiser","descriptionDA":"Røget hvidfisk rørt med rygeost og dild, toppet med tynde skiver af danske radiser og dild-olie."}
event: dish
data: {"nameDA":"Hummus af gule ærter","descriptionDA":"Dansk-dyrkede gule ærter blendet med koldpresset rapsolie og fermenteret hvidløg for en lokal variant af klassisk hummus."}
event: done
data: completeErrors
- Errors are sent as SSE events:
event: errordata: <message>
Notes#
- Suggestions are not automatically saved as dishes or suggestions.
- Output depends on real-time weather and model behavior.
- SSE stream closes automatically after
doneorerror.