Skip to main content

Menu Inspirations

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#

MethodURLAuth
GET/menu-inspirations/dailyKITCHEN_STAFF
SSE (Server-Sent Events)/menu-inspirations/streamKITCHEN_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/daily

Response 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

StatusCause
404User not found or user has no station assigned
502Weather provider unavailable
502AI provider unavailable

SSE /menu-inspirations/stream
#

Streams dish suggestions progressively using Server-Sent Events (text/event-stream).

The stream emits:

  • status events (progress messages during generation)
  • dish events (one suggestion at a time)
  • done when completed
  • error if generation fails

Example Request
#

curl -N \
  -H "Accept: text/event-stream" \
  -H "Authorization: Bearer <token>" \
  https://miseos.corral.dk/api/v1/menu-inspirations/stream

Example 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: complete

Errors

  • Errors are sent as SSE events:
    • event: error
    • data: <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 done or error.