List meals (with embedded log when present)
Paginated list of meals for the member, plan-associated and ad-hoc. Each entry carries an embedded `log` when the member has logged the meal so partners can render scheduled-vs-eaten without an extra fetch. Filter by log presence (`logged=true` or `false`) or by `scheduled_time` window (`start_date` / `end_date`, inclusive); `start_date` defaults to today when omitted, `end_date` is open-ended.
Authorization
MemberBearer Member-scoped JWT minted by POST /v1/auth/token. Required on every /v1/users/{user_id}/... route; the token's sub claim must match the path user_id.
In: header
Path Parameters
uuidQuery Parameters
When true, only meals with a log; when false, only meals without a log.
Inclusive lower bound on scheduled_time (calendar date). Defaults to today.
Inclusive upper bound on scheduled_time (calendar date). Open-ended when omitted.
251 <= value <= 10000 <= valueHeader Parameters
Response Body
application/json
application/json
curl -X GET "https://loading/v1/users/497f6eca-6276-4993-bfeb-53cbbbba6f08/meals"{
"data": [
{
"meal_id": "e8f91bba-a1fd-4250-b513-e8e22cf6d4ad",
"nutrition_plan_id": "4aad14a6-572f-4d4e-b565-85a0adb6117b",
"meal_type": "breakfast",
"scheduled_time": "2019-08-24T14:15:22Z",
"title": "string",
"calories": 0,
"log": {}
}
],
"pagination": {
"limit": 25,
"offset": 0,
"total": 0
}
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string"
}
]
}Read one week of a nutrition plan with embedded meals
Returns one week (zero-based index from the parent plan's `weeks[]` array) with embedded meals. The embedded array is paginated via `limit`/`offset`. Meals here are the same `Meal` rows reachable via `/users/{user_id}/meals/{meal_id}` — this endpoint is the plan-scoped view.
Create a meal
Creates a partner-authored meal under an existing nutrition plan. Coach-generated meals arrive as part of the nutrition-plan generation job and do not flow through this endpoint. `nutrition_plan_id` is required — ad-hoc plan-less meals are not yet supported (a missing field returns `422`).