JSON for the canteen menus on this site, with each day's dishes split into hot and soup. v3 lists them as Kanpla does; v1 is older still.
| Method | Path | Returns |
|---|---|---|
| GET | /api/v2/canteens | Every canteen with a menu |
| GET | /api/v2/canteens/{canteen_id} | One canteen and its menu, week by week |
GET.
YYYY-MM-DD.
200 with {"data": ...}
400 for a ?week that is not an ISO week.
404 for an unknown canteen_id.
{"detail": "Canteen not found"}
/api/v2/canteens
Every canteen with a menu.
| Field | Type | Meaning |
|---|---|---|
canteen_id |
string | The canteen's identifier; the {canteen_id} in the path below. |
name |
string | Display name. |
provider |
string | Where the menu comes from; kanpla. |
{
"data": [
{
"canteen_id": "jonsvollsgaten2",
"name": "Jonsvollsgaten 2",
"provider": "kanpla"
}
]
}
/api/v2/canteens/{canteen_id}
One canteen and this week's menu. From Friday, next week's too, once Kanpla has published it.
{canteen_id}
canteen_id from the canteen list.
?week=YYYY-WW
2026-40.
With no menu stored for it, days is empty and
fetched_at null.
Also canteen_id, name and provider, as in
the list.
| Field | Type | Meaning |
|---|---|---|
weeks |
object[] | The weeks, oldest first. |
weeks[].week_start |
string | The week's Monday. |
weeks[].week_number |
integer | The ISO week number. |
weeks[].fetched_at |
string | null | The last update from Kanpla. Null before the first. |
weeks[].days |
object[] | The days with a menu: date, hot, soup. |
days[].hot, days[].soup |
object[] |
The dishes, in the canteen menu's order. Kanpla has no field for soup;
a dish is soup when its name or Kanpla category mentions soup
(suppe, soup), and hot otherwise.
|
dish.name |
string | The dish. |
dish.description |
string | null | More about the dish. |
dish.allergens |
string[] | Kanpla's allergen keys, in English, such as fish. |
dish.labels |
string[] | Diets, such as pescatarian. |
dish.pictograms |
string[] | Contents, such as pork. |
{
"data": {
"canteen_id": "jonsvollsgaten2",
"name": "Jonsvollsgaten 2",
"provider": "kanpla",
"weeks": [
{
"week_start": "2026-09-28",
"week_number": 40,
"fetched_at": "2026-10-01T07:17:07+00:00",
"days": [
{
"date": "2026-10-01",
"hot": [
{
"name": "Fiskekaker med potet og hvitsaus",
"description": "Fiskekaker med deilig saus, potet og salat",
"allergens": ["fish", "milk"],
"labels": ["pescatarian"],
"pictograms": []
}
],
"soup": [
{
"name": "Løksuppe med brød",
"description": null,
"allergens": ["sulphurdioxide"],
"labels": [],
"pictograms": []
}
]
}
]
}
]
}
}