Menu calories
POST /v1/food/menu · $0.01 a call
Send a photo of a menu. A vision model reads every dish as printed (name, description, section and price) and estimates what a typical serving contains. Each component is matched to our reference nutrition database, and the dish gets a typical calorie figure with a low to high range, since restaurant portions vary.
For calorie trackers, restaurant ordering, diet coaches.
Request
Send the photo as image (multipart), image_base64 or image_url, as described in the overview. These fields go alongside it:
| Field | Type | Description |
|---|---|---|
context | string, up to 500 characters | Anything about the restaurant or the diner, e.g. "this is a fast food chain" or "large portions". |
Photo tips. Photograph the whole menu page flat and in focus, without glare. One page per call; up to 20 dishes are read.
curl https://truelens.keronlabs.com/v1/food/menu \
-H "Authorization: Bearer $TRUELENS_KEY" \
-F image=@lunch.jpg \
-F context="example"
Response
| Field | Description |
|---|---|
summary | One line, e.g. "14 dishes, 380 to 1,450 kcal". |
is_menu | false when the photo is not a menu; dishes is then empty. |
dishes[].name | The dish name as printed. |
dishes[].description, section, price | As printed, or null when the menu does not show them. |
dishes[].calories | low, typical and high estimates for one serving. The range is 0.8x to 1.25x the typical estimate. |
dishes[].nutrition | calories, protein_g, carbs_g, fat_g, fiber_g for a typical serving. |
dishes[].components | What the estimate assumes: each ingredient with its grams and calories. |
dishes[].confidence | 0 to 1. Short names with no description score lower. |
notes | Warnings, e.g. when only some dishes could be read. |
Example
Output of this API’s own code on a sample photo. Values will differ for your photos.
{
"metadata": {
"id": "req_9cf4da08fe7f40dab71a",
"engine": "food/menu",
"status": "success",
"cached": false,
"credits_used": 1,
"created_at": "2026-10-19T09:30:00.000Z",
"processing_ms": 3400
},
"summary": "3 dishes, 127 to 249 kcal",
"is_menu": true,
"dishes": [
{
"name": "Beetroot",
"description": "Feta, Pine-nut",
"section": "6 Course",
"price": null,
"calories": {
"low": 100,
"typical": 127,
"high": 160
},
"nutrition": {
"calories": 127,
"protein_g": 5.2,
"carbs_g": 4.8,
"fat_g": 10.4,
"fiber_g": 2.9
},
"components": [
{
"name": "roasted beetroot",
"grams": 70,
"calories": 34
},
{
"name": "feta",
"grams": 20,
"calories": 53
},
{
"name": "pine nuts",
"grams": 6,
"calories": 40
}
],
"confidence": 0.6
},
{
"name": "Venison",
"description": "Carrot, Tarragon, Mushroom",
"section": "6 Course",
"price": null,
"calories": {
"low": 170,
"typical": 209,
"high": 260
},
"nutrition": {
"calories": 209,
"protein_g": 22.3,
"carbs_g": 8.5,
"fat_g": 9.4,
"fiber_g": 1.9
},
"components": [
{
"name": "venison loin",
"grams": 70,
"calories": 105
},
{
"name": "carrot",
"grams": 40,
"calories": 39
},
{
"name": "mushrooms",
"grams": 30,
"calories": 8
},
{
"name": "butter",
"grams": 8,
"calories": 57
}
],
"confidence": 0.6
},
{
"name": "Apple",
"description": "Puff Pastry, Caramel, Vanilla",
"section": "6 Course",
"price": null,
"calories": {
"low": 200,
"typical": 249,
"high": 310
},
"nutrition": {
"calories": 249,
"protein_g": 2.5,
"carbs_g": 34.5,
"fat_g": 11.6,
"fiber_g": 1.7
},
"components": [
{
"name": "apple",
"grams": 60,
"calories": 39
},
{
"name": "puff pastry",
"grams": 30,
"calories": 167
},
{
"name": "caramel sauce",
"grams": 20,
"calories": 43
}
],
"confidence": 0.5
}
],
"notes": []
}