Food Entries reference
List, log, update and delete what the user ate, with nutrition totals for each entry.
The DailyGoal API is not available on the Free plan. It works with a paid plan or during a free trial. See plans.
Operations
list_food_entries: List food entrieslog_food_entry: Log food entryupdate_food_entry: Update food entrydelete_food_entry: Delete food entry
list_food_entries
GET https://api.dailygoal.fit/v1/food-entries
MCP tool list_food_entries · Read-only
List the food entries the user logged between two Activity Days, oldest first, in pages. To find a food to log, use search_foods instead.
Input
| Field | Type | Description |
|---|---|---|
| fromoptional | string (YYYY-MM-DD) | First Activity Day, YYYY-MM-DD. Defaults to today. |
| tooptional | string (YYYY-MM-DD) | Last Activity Day, YYYY-MM-DD, inclusive. Defaults to today. |
| limitoptional | integer | Most entries per page. Default 50. |
| cursoroptional | string | nextCursor from the previous page. Only valid with the same from and to. |
Output
| Field | Type | Description |
|---|---|---|
| entries | object[] | |
| entries[].id | string | |
| entries[].date | string (YYYY-MM-DD) | |
| entries[].mealType | "breakfast" | "lunch" | "dinner" | "snack" | |
| entries[].servings | number | |
| entries[].food | object | |
| entries[].food.id | string | |
| entries[].food.kind | "food" | "custom_food" | "saved_meal" | food: the DailyGoal catalogue. custom_food: a food the user created. saved_meal: a meal the user saved, logged as one entry. |
| entries[].food.name | string | |
| entries[].food.brandNameoptional | string | |
| entries[].nutrition | object | Totals for this entry's servings. |
| entries[].nutrition.calories | number | kcal |
| entries[].nutrition.protein | number | grams |
| entries[].nutrition.carbs | number | grams |
| entries[].nutrition.fat | number | grams |
| entries[].nutrition.alcohol | number | grams |
| from | string (YYYY-MM-DD) | |
| to | string (YYYY-MM-DD) | |
| timezone | string | IANA timezone that defines the Activity Day. |
| hasMore | boolean | True when more entries exist in the window. Pass nextCursor to get them. |
| nextCursor | string | null |
Example request
curl "https://api.dailygoal.fit/v1/food-entries?from=2026-09-14&to=2026-09-14&limit=50" \
-H "Authorization: Bearer $DAILYGOAL_API_TOKEN"{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_food_entries",
"arguments": {
"from": "2026-09-14",
"to": "2026-09-14",
"limit": 50
}
}
}Example response
Synthetic data. REST returns this object as the body; MCP returns it as structuredContent.
{
"entries": [
{
"id": "kd7a1b4c7d0e3f6g9h2j5k8m1n4p7q0r",
"date": "2026-09-14",
"mealType": "breakfast",
"servings": 1,
"food": {
"id": "j57c2m8k4q1x9v3d6n0r5t7w2b8y4h1a",
"kind": "food",
"name": "Rolled oats"
},
"nutrition": {
"calories": 152,
"protein": 5.3,
"carbs": 27.1,
"fat": 2.6,
"alcohol": 0
}
},
{
"id": "kd7b2c5d8e1f4g7h0j3k6m9n2p5q8r1s",
"date": "2026-09-14",
"mealType": "snack",
"servings": 1,
"food": {
"id": "j572k9d3m6q8x1v4n7r0t2w5b8y3h6ca",
"kind": "custom_food",
"name": "Greek yoghurt 2%"
},
"nutrition": {
"calories": 110,
"protein": 14.9,
"carbs": 5.9,
"fat": 3,
"alcohol": 0
}
}
],
"from": "2026-09-14",
"to": "2026-09-14",
"timezone": "Europe/London",
"hasMore": false,
"nextCursor": null
}Errors
unauthorized(401)origin_not_allowed(403)misdirected_request(421)subscription_required(403)rate_limited(429)validation_failed(400)internal_error(500)
log_food_entry
POST https://api.dailygoal.fit/v1/food-entries
MCP tool log_food_entry · Changes data · Accepts Idempotency-Key
Log what the user ate as a new food entry. Pass exactly one of foodId, customFoodId or savedMealId, using an id from search_foods. It always creates a separate entry; to change an existing entry use update_food_entry. To add a food the catalogue lacks, use save_custom_food first.
Input
| Field | Type | Description |
|---|---|---|
| foodIdoptional | string | A catalogue food id (kind food) from search_foods. |
| customFoodIdoptional | string | One of the user's custom food ids (kind custom_food) from search_foods. |
| savedMealIdoptional | string | One of the user's saved meal ids (kind saved_meal) from search_foods. |
| servings | number | Number of servings. One serving is the food's serving.size in serving.unit. |
| mealType | "breakfast" | "lunch" | "dinner" | "snack" | |
| dateoptional | string (YYYY-MM-DD) | Activity Day, YYYY-MM-DD. Defaults to today in the user's timezone. |
| idempotency_keyoptional | string | Optional. A unique value for this create, for example a UUID. Retrying with the same key and arguments within 24 hours returns the first result instead of creating a duplicate. |
Output
| Field | Type | Description |
|---|---|---|
| entry | object | |
| entry.id | string | |
| entry.date | string (YYYY-MM-DD) | |
| entry.mealType | "breakfast" | "lunch" | "dinner" | "snack" | |
| entry.servings | number | |
| entry.food | object | |
| entry.food.id | string | |
| entry.food.kind | "food" | "custom_food" | "saved_meal" | food: the DailyGoal catalogue. custom_food: a food the user created. saved_meal: a meal the user saved, logged as one entry. |
| entry.food.name | string | |
| entry.food.brandNameoptional | string | |
| entry.nutrition | object | Totals for this entry's servings. |
| entry.nutrition.calories | number | kcal |
| entry.nutrition.protein | number | grams |
| entry.nutrition.carbs | number | grams |
| entry.nutrition.fat | number | grams |
| entry.nutrition.alcohol | number | grams |
| date | string (YYYY-MM-DD) | The Activity Day the entry is on. |
| timezone | string | IANA timezone that defines the Activity Day. |
Example request
curl -X POST "https://api.dailygoal.fit/v1/food-entries" \
-H "Authorization: Bearer $DAILYGOAL_API_TOKEN" \
-H "Idempotency-Key: 3f1c9a52-7d4e-4b8a-9e21-5c6d7e8f9a01" \
-H "Content-Type: application/json" \
-d '{"customFoodId":"j572k9d3m6q8x1v4n7r0t2w5b8y3h6ca","servings":1,"mealType":"snack","date":"2026-09-14"}'{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "log_food_entry",
"arguments": {
"customFoodId": "j572k9d3m6q8x1v4n7r0t2w5b8y3h6ca",
"servings": 1,
"mealType": "snack",
"date": "2026-09-14"
}
}
}Example response
Synthetic data. REST returns this object as the body; MCP returns it as structuredContent.
{
"entry": {
"id": "kd7b2c5d8e1f4g7h0j3k6m9n2p5q8r1s",
"date": "2026-09-14",
"mealType": "snack",
"servings": 1,
"food": {
"id": "j572k9d3m6q8x1v4n7r0t2w5b8y3h6ca",
"kind": "custom_food",
"name": "Greek yoghurt 2%"
},
"nutrition": {
"calories": 110,
"protein": 14.9,
"carbs": 5.9,
"fat": 3,
"alcohol": 0
}
},
"date": "2026-09-14",
"timezone": "Europe/London"
}Errors
unauthorized(401)origin_not_allowed(403)misdirected_request(421)subscription_required(403)rate_limited(429)validation_failed(400)not_found(404)idempotency_conflict(409)internal_error(500)
update_food_entry
PATCH https://api.dailygoal.fit/v1/food-entries
MCP tool update_food_entry · Changes data · Destructive
Change the servings, meal type or date of one existing food entry. Omitted fields keep their value. To record something newly eaten, use log_food_entry instead.
Input
| Field | Type | Description |
|---|---|---|
| id | string | Food entry id from list_food_entries or log_food_entry. |
| servingsoptional | number | Number of servings. One serving is the food's serving.size in serving.unit. |
| mealTypeoptional | "breakfast" | "lunch" | "dinner" | "snack" | |
| dateoptional | string (YYYY-MM-DD) | Move the entry to this Activity Day, YYYY-MM-DD. |
Output
| Field | Type | Description |
|---|---|---|
| entry | object | |
| entry.id | string | |
| entry.date | string (YYYY-MM-DD) | |
| entry.mealType | "breakfast" | "lunch" | "dinner" | "snack" | |
| entry.servings | number | |
| entry.food | object | |
| entry.food.id | string | |
| entry.food.kind | "food" | "custom_food" | "saved_meal" | food: the DailyGoal catalogue. custom_food: a food the user created. saved_meal: a meal the user saved, logged as one entry. |
| entry.food.name | string | |
| entry.food.brandNameoptional | string | |
| entry.nutrition | object | Totals for this entry's servings. |
| entry.nutrition.calories | number | kcal |
| entry.nutrition.protein | number | grams |
| entry.nutrition.carbs | number | grams |
| entry.nutrition.fat | number | grams |
| entry.nutrition.alcohol | number | grams |
| date | string (YYYY-MM-DD) | The Activity Day the entry is on. |
| timezone | string | IANA timezone that defines the Activity Day. |
Example request
curl -X PATCH "https://api.dailygoal.fit/v1/food-entries" \
-H "Authorization: Bearer $DAILYGOAL_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"id":"kd7a1b4c7d0e3f6g9h2j5k8m1n4p7q0r","servings":1.5}'{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "update_food_entry",
"arguments": {
"id": "kd7a1b4c7d0e3f6g9h2j5k8m1n4p7q0r",
"servings": 1.5
}
}
}Example response
Synthetic data. REST returns this object as the body; MCP returns it as structuredContent.
{
"entry": {
"id": "kd7a1b4c7d0e3f6g9h2j5k8m1n4p7q0r",
"date": "2026-09-14",
"mealType": "breakfast",
"servings": 1.5,
"food": {
"id": "j57c2m8k4q1x9v3d6n0r5t7w2b8y4h1a",
"kind": "food",
"name": "Rolled oats"
},
"nutrition": {
"calories": 228,
"protein": 8,
"carbs": 40.6,
"fat": 3.9,
"alcohol": 0
}
},
"date": "2026-09-14",
"timezone": "Europe/London"
}Errors
unauthorized(401)origin_not_allowed(403)misdirected_request(421)subscription_required(403)rate_limited(429)validation_failed(400)not_found(404)internal_error(500)
delete_food_entry
DELETE https://api.dailygoal.fit/v1/food-entries
MCP tool delete_food_entry · Changes data · Destructive
Delete one logged food entry by id. It leaves the food itself alone; to delete a custom food, use delete_custom_food.
Input
| Field | Type | Description |
|---|---|---|
| id | string | Food entry id from list_food_entries or log_food_entry. |
Output
| Field | Type | Description |
|---|---|---|
| id | string | |
| date | string (YYYY-MM-DD) | |
| timezone | string | IANA timezone that defines the Activity Day. |
Example request
curl -X DELETE "https://api.dailygoal.fit/v1/food-entries?id=kd7b2c5d8e1f4g7h0j3k6m9n2p5q8r1s" \
-H "Authorization: Bearer $DAILYGOAL_API_TOKEN"{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "delete_food_entry",
"arguments": {
"id": "kd7b2c5d8e1f4g7h0j3k6m9n2p5q8r1s"
}
}
}Example response
Synthetic data. REST returns this object as the body; MCP returns it as structuredContent.
{
"id": "kd7b2c5d8e1f4g7h0j3k6m9n2p5q8r1s",
"date": "2026-09-14",
"timezone": "Europe/London"
}Errors
unauthorized(401)origin_not_allowed(403)misdirected_request(421)subscription_required(403)rate_limited(429)validation_failed(400)not_found(404)internal_error(500)