Skip to content

The meal object

What a meal holds, its items, and how its nutrition is added up.

A meal is an entry in your journal’s timeline: what you ate, or plan to eat, at a moment on a day. Every meal endpoint returns meals in this shape.

{
"id": "6f1c2a8e-3b7d-4c5e-9a1f-2d8b7e4c9a10",
"state": "logged",
"category": "meals",
"day": "2026-10-02",
"eatenAt": "2026-10-02T06:30:00.000Z",
"timezone": "Europe/Berlin",
"name": "Breakfast",
"notes": null,
"images": [],
"plannedVia": null,
"loggedVia": "api",
"nutrition": {
"caloriesKcal": { "value": 80.85, "complete": true },
"proteinG": { "value": 0.945, "complete": true },
"carbsG": { "value": 8.625, "complete": true },
"fatG": { "value": 4.635, "complete": true },
"saturatedFatG": { "value": 1.59, "complete": true },
"sugarsG": { "value": 8.445, "complete": true },
"fibreG": { "value": null, "complete": false },
"saltG": { "value": 0.0165, "complete": true }
},
"createdAt": "2026-10-02T06:31:12.000Z",
"updatedAt": "2026-10-02T06:31:12.000Z",
"items": [
{
"id": "0b9e4d2c-7a51-4f8e-b3c6-5d1a9e2f7c48",
"position": 0,
"quantity": 15,
"unit": "g",
"caloriesKcal": 80.85,
"proteinG": 0.945,
"carbsG": 8.625,
"fatG": 4.635,
"saturatedFatG": 1.59,
"sugarsG": 8.445,
"fibreG": null,
"saltG": 0.0165,
"food": { "library": "off", "key": "3017620422003", "version": 1, "name": "Nutella", "brand": "Ferrero", "barcode": "3017620422003", "data": { "base": "g", "nutrition": { "basisAmount": 100, "values": { "kcal": 539, "protein": 6.3, "carbs": 57.5, "fat": 30.9, "saturatedFat": 10.6, "sugars": 56.3, "salt": 0.11 } } } }
}
]
}
FieldTypeDescription
idstringThe meal's id.
statestringlogged for food eaten, planned for a meal planned ahead. One of planned or logged.
categorystringThe kind of entry in the journal's timeline: meals.
daydateThe calendar day it belongs to, in its own timezone.
eatenAtdate-timeWhen it was eaten, or will be for a plan, in UTC.
timezonestringThe IANA timezone it was eaten in.
namestring or nullIts name, such as Breakfast.
notesstring or nullIts notes.
imagesarrayPhotos: { "path" } for photos saved in Splot, { "url" } for links.
plannedViastring or nullWhere it was planned. One of app, api, chatgpt, claude or assistant.
loggedViastring or nullWhere it was logged. One of app, api, chatgpt, claude or assistant.
nutritionobjectThe meal's totals, each { "value", "complete" }. complete is false when an item, or an ingredient of a recipe item, lacks that nutrient.
createdAtdate-timeWhen it was created.
updatedAtdate-timeWhen it last changed.
itemsarrayWhat was eaten, in order.

Each item is one food and the portion eaten. quantity and unit are the portion, in the food’s base unit or one of its measures; both are null for an entry without a portion. The nutrient fields are that portion’s amounts, and food is the food as it was when the meal was saved, so later changes to a food never change past meals.

FieldTypeDescription
idstringThe item's id.
positionintegerIts place in the meal, from 0.
quantitynumber or nullHow much was eaten, in unit, or null for an entry without a portion.
unitstring or nullThe food's base unit or one of its measures.
caloriesKcalnumber or nullThe portion's energy, in kcal.
proteinGnumber or nullThe portion's protein, in grams.
carbsGnumber or nullThe portion's carbs, in grams.
fatGnumber or nullThe portion's fat, in grams.
saturatedFatGnumber or nullThe portion's saturated fat, in grams.
sugarsGnumber or nullThe portion's sugars, in grams.
fibreGnumber or nullThe portion's fibre, in grams.
saltGnumber or nullThe portion's salt, in grams.
foodobjectThe food as it was when the meal was saved.

Splot works out every amount from the foods and portions; you never send totals. A meal’s nutrition adds up its items. complete is false when any item lacks that nutrient, or is a recipe with an ingredient that lacks it, so the value covers only what lists it.

Last updated