> For the complete documentation index, see [llms.txt](https://docs.january.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.january.ai/rest-api/food-logs.md).

# Food Logs

Create and query an end user's food diary.

## List a user's food logs in a date range

> Returns the logs between \`start\` and \`end\` (both inclusive UTC calendar days), ordered by timestamp. An empty list is a valid result.

```json
{"openapi":"3.0.0","info":{"title":"January AI - Nutrition Intelligence APIs","version":"1.2"},"tags":[{"name":"food-logs","description":"Create and query an end user's food diary."}],"servers":[{"url":"https://partners.january.ai"}],"security":[{"api-key":[]}],"components":{"securitySchemes":{"api-key":{"scheme":"bearer","bearerFormat":"JWT","type":"http","description":"Your API key (sk-…), minted through the developer portal."}},"schemas":{"FoodLogListResponseDto":{"type":"object","properties":{"total_count":{"type":"number"},"items":{"description":"Logs in the range, ordered by timestamp. An empty list is a valid result.","type":"array","items":{"$ref":"#/components/schemas/FoodLogDto"}}},"required":["total_count","items"]},"FoodLogDto":{"type":"object","properties":{"id":{"type":"string","description":"Save this id to update or delete the log."},"foods":{"type":"array","items":{"$ref":"#/components/schemas/LoggedFoodDto"}},"timestamp_utc":{"type":"string","format":"date-time"},"name":{"type":"string","nullable":true}},"required":["id","foods","timestamp_utc"]},"LoggedFoodDto":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"brand_name":{"type":"string","nullable":true},"image_url":{"type":"string","nullable":true},"glycemic_index":{"type":"number","nullable":true},"glycemic_load":{"type":"number","nullable":true},"nutrients":{"description":"Scaled to the consumed serving.","allOf":[{"$ref":"#/components/schemas/NutrientsDto"}]},"consumed_serving":{"description":"What was logged.","allOf":[{"$ref":"#/components/schemas/ServingSelectionDto"}]},"serving_details":{"description":"The serving definition the quantity refers to.","allOf":[{"$ref":"#/components/schemas/ServingDetailsDto"}]}},"required":["id","name","nutrients","consumed_serving","serving_details"]},"NutrientsDto":{"type":"object","properties":{"calories":{"$ref":"#/components/schemas/NutrientAmountDto"},"protein":{"$ref":"#/components/schemas/NutrientAmountDto"},"carbohydrates":{"$ref":"#/components/schemas/NutrientAmountDto"},"net_carbohydrates":{"$ref":"#/components/schemas/NutrientAmountDto"},"total_fat":{"$ref":"#/components/schemas/NutrientAmountDto"},"trans_fat":{"$ref":"#/components/schemas/NutrientAmountDto"},"saturated_fat":{"$ref":"#/components/schemas/NutrientAmountDto"},"fiber":{"$ref":"#/components/schemas/NutrientAmountDto"},"total_sugars":{"$ref":"#/components/schemas/NutrientAmountDto"},"added_sugars":{"$ref":"#/components/schemas/NutrientAmountDto"},"cholesterol":{"$ref":"#/components/schemas/NutrientAmountDto"},"calcium":{"$ref":"#/components/schemas/NutrientAmountDto"},"iron":{"$ref":"#/components/schemas/NutrientAmountDto"},"potassium":{"$ref":"#/components/schemas/NutrientAmountDto"},"sodium":{"$ref":"#/components/schemas/NutrientAmountDto"},"vitamin_d":{"$ref":"#/components/schemas/NutrientAmountDto"}}},"NutrientAmountDto":{"type":"object","properties":{"value":{"type":"number"},"unit":{"type":"string","description":"Canonical across the API: g, mg, kcal, IU."}},"required":["value","unit"]},"ServingSelectionDto":{"type":"object","properties":{"id":{"type":"number","description":"One of the food's serving ids."},"quantity":{"type":"number","description":"How many of that serving were consumed.","maximum":10000}},"required":["id","quantity"]},"ServingDetailsDto":{"type":"object","properties":{"id":{"type":"number"},"quantity":{"type":"number"},"unit":{"type":"string"},"weight_grams":{"type":"number","nullable":true}},"required":["id","quantity","unit"]},"ApiErrorDto":{"type":"object","properties":{"message":{"type":"string","description":"A developer-facing explanation of what went wrong and how to fix it."},"code":{"type":"string","description":"A stable machine-readable identifier for the class of failure — build retry logic on this, never on message wording. Current values: invalid_request, unauthorized, forbidden, not_found, not_implemented, payload_too_large, rate_limited, internal_error, upstream_error, service_unavailable, upstream_timeout. Only rate_limited, internal_error, upstream_error, service_unavailable, and upstream_timeout are safe to retry (with backoff) — not_implemented is permanent until the feature ships. New codes may be added over time; treat an unknown code according to its HTTP status class."},"docs_url":{"type":"string","description":"Link to the developer documentation."}},"required":["message","code","docs_url"]}}},"paths":{"/v1.2/food-logs":{"get":{"operationId":"listFoodLogs","summary":"List a user's food logs in a date range","description":"Returns the logs between `start` and `end` (both inclusive UTC calendar days), ordered by timestamp. An empty list is a valid result.","parameters":[{"name":"x-end-user-id","in":"header","description":"Your stable ID for the end user this request acts on — the data is per-user. Opaque to January; use the same ID your system already uses.","required":true,"schema":{"type":"string"}},{"name":"x-end-user-timezone","in":"header","description":"Optional: the end user's IANA timezone, forwarded upstream for local-day date handling.","required":false,"schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"First UTC day of the range (inclusive, from 00:00:00 UTC).","schema":{"format":"date","type":"string"}},{"name":"end","required":true,"in":"query","description":"Last UTC day of the range (inclusive, through 23:59:59 UTC). May equal start for a single day.","schema":{"format":"date","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FoodLogListResponseDto"}}}},"400":{"description":"A date is missing, malformed, or the range is inverted; the message names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorDto"}}}},"401":{"description":"The Authorization header is missing or the API key is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorDto"}}}},"429":{"description":"Either a rate limit was exceeded (`code: rate_limited`) or the monthly credit allowance is spent (`code: credit_limit_exceeded`). When Retry-After is present, wait that many seconds; a per-day allowance resets 24 hours after the first request in its window. Credit exhaustion carries no Retry-After and retrying does not help — the allowance returns at the start of the next calendar month. Call `GET /v1.2/credits` for the balance and reset date.","headers":{"Retry-After":{"description":"Seconds to wait before retrying; present when the window is known.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorDto"}}}},"default":{"description":"Any other error: the HTTP status plus { message, code, docs_url }. Retry only rate_limited and the transient 5xx codes — never not_implemented.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorDto"}}}}},"tags":["food-logs"]}}}}
```

## Log foods for a user

> Creates a food log from food + serving ids (from search, scan, or detection results). The response echoes the log hydrated with full nutrition — save its \`id\` to update or delete the log. Not idempotent: verify with the list endpoint before retrying a timed-out create.

```json
{"openapi":"3.0.0","info":{"title":"January AI - Nutrition Intelligence APIs","version":"1.2"},"tags":[{"name":"food-logs","description":"Create and query an end user's food diary."}],"servers":[{"url":"https://partners.january.ai"}],"security":[{"api-key":[]}],"components":{"securitySchemes":{"api-key":{"scheme":"bearer","bearerFormat":"JWT","type":"http","description":"Your API key (sk-…), minted through the developer portal."}},"schemas":{"CreateFoodLogDto":{"type":"object","properties":{"foods":{"maxItems":100,"type":"array","items":{"$ref":"#/components/schemas/FoodSelectionDto"}},"timestamp_utc":{"type":"string","format":"date-time","description":"When the meal was eaten — any ISO-8601 offset; stored and returned in UTC. Omitted = now."},"name":{"type":"string","maxLength":256}},"required":["foods"]},"FoodSelectionDto":{"type":"object","properties":{"id":{"type":"number","description":"Food id from a search, scan, or detection result."},"serving":{"$ref":"#/components/schemas/ServingSelectionDto"}},"required":["id","serving"]},"ServingSelectionDto":{"type":"object","properties":{"id":{"type":"number","description":"One of the food's serving ids."},"quantity":{"type":"number","description":"How many of that serving were consumed.","maximum":10000}},"required":["id","quantity"]},"FoodLogDto":{"type":"object","properties":{"id":{"type":"string","description":"Save this id to update or delete the log."},"foods":{"type":"array","items":{"$ref":"#/components/schemas/LoggedFoodDto"}},"timestamp_utc":{"type":"string","format":"date-time"},"name":{"type":"string","nullable":true}},"required":["id","foods","timestamp_utc"]},"LoggedFoodDto":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"brand_name":{"type":"string","nullable":true},"image_url":{"type":"string","nullable":true},"glycemic_index":{"type":"number","nullable":true},"glycemic_load":{"type":"number","nullable":true},"nutrients":{"description":"Scaled to the consumed serving.","allOf":[{"$ref":"#/components/schemas/NutrientsDto"}]},"consumed_serving":{"description":"What was logged.","allOf":[{"$ref":"#/components/schemas/ServingSelectionDto"}]},"serving_details":{"description":"The serving definition the quantity refers to.","allOf":[{"$ref":"#/components/schemas/ServingDetailsDto"}]}},"required":["id","name","nutrients","consumed_serving","serving_details"]},"NutrientsDto":{"type":"object","properties":{"calories":{"$ref":"#/components/schemas/NutrientAmountDto"},"protein":{"$ref":"#/components/schemas/NutrientAmountDto"},"carbohydrates":{"$ref":"#/components/schemas/NutrientAmountDto"},"net_carbohydrates":{"$ref":"#/components/schemas/NutrientAmountDto"},"total_fat":{"$ref":"#/components/schemas/NutrientAmountDto"},"trans_fat":{"$ref":"#/components/schemas/NutrientAmountDto"},"saturated_fat":{"$ref":"#/components/schemas/NutrientAmountDto"},"fiber":{"$ref":"#/components/schemas/NutrientAmountDto"},"total_sugars":{"$ref":"#/components/schemas/NutrientAmountDto"},"added_sugars":{"$ref":"#/components/schemas/NutrientAmountDto"},"cholesterol":{"$ref":"#/components/schemas/NutrientAmountDto"},"calcium":{"$ref":"#/components/schemas/NutrientAmountDto"},"iron":{"$ref":"#/components/schemas/NutrientAmountDto"},"potassium":{"$ref":"#/components/schemas/NutrientAmountDto"},"sodium":{"$ref":"#/components/schemas/NutrientAmountDto"},"vitamin_d":{"$ref":"#/components/schemas/NutrientAmountDto"}}},"NutrientAmountDto":{"type":"object","properties":{"value":{"type":"number"},"unit":{"type":"string","description":"Canonical across the API: g, mg, kcal, IU."}},"required":["value","unit"]},"ServingDetailsDto":{"type":"object","properties":{"id":{"type":"number"},"quantity":{"type":"number"},"unit":{"type":"string"},"weight_grams":{"type":"number","nullable":true}},"required":["id","quantity","unit"]},"ApiErrorDto":{"type":"object","properties":{"message":{"type":"string","description":"A developer-facing explanation of what went wrong and how to fix it."},"code":{"type":"string","description":"A stable machine-readable identifier for the class of failure — build retry logic on this, never on message wording. Current values: invalid_request, unauthorized, forbidden, not_found, not_implemented, payload_too_large, rate_limited, internal_error, upstream_error, service_unavailable, upstream_timeout. Only rate_limited, internal_error, upstream_error, service_unavailable, and upstream_timeout are safe to retry (with backoff) — not_implemented is permanent until the feature ships. New codes may be added over time; treat an unknown code according to its HTTP status class."},"docs_url":{"type":"string","description":"Link to the developer documentation."}},"required":["message","code","docs_url"]}}},"paths":{"/v1.2/food-logs":{"post":{"operationId":"createFoodLog","summary":"Log foods for a user","description":"Creates a food log from food + serving ids (from search, scan, or detection results). The response echoes the log hydrated with full nutrition — save its `id` to update or delete the log. Not idempotent: verify with the list endpoint before retrying a timed-out create.","parameters":[{"name":"x-end-user-id","in":"header","description":"Your stable ID for the end user this request acts on — the data is per-user. Opaque to January; use the same ID your system already uses.","required":true,"schema":{"type":"string"}},{"name":"x-end-user-timezone","in":"header","description":"Optional: the end user's IANA timezone, forwarded upstream for local-day date handling.","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFoodLogDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FoodLogDto"}}}},"400":{"description":"A field is missing or malformed; the message names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorDto"}}}},"401":{"description":"The Authorization header is missing or the API key is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorDto"}}}},"429":{"description":"Either a rate limit was exceeded (`code: rate_limited`) or the monthly credit allowance is spent (`code: credit_limit_exceeded`). When Retry-After is present, wait that many seconds; a per-day allowance resets 24 hours after the first request in its window. Credit exhaustion carries no Retry-After and retrying does not help — the allowance returns at the start of the next calendar month. Call `GET /v1.2/credits` for the balance and reset date.","headers":{"Retry-After":{"description":"Seconds to wait before retrying; present when the window is known.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorDto"}}}},"default":{"description":"Any other error: the HTTP status plus { message, code, docs_url }. Retry only rate_limited and the transient 5xx codes — never not_implemented.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorDto"}}}}},"tags":["food-logs"]}}}}
```

## Delete a food log

> Idempotent: deleting an unknown or already-deleted log returns the same success response, so it is safe to retry.

```json
{"openapi":"3.0.0","info":{"title":"January AI - Nutrition Intelligence APIs","version":"1.2"},"tags":[{"name":"food-logs","description":"Create and query an end user's food diary."}],"servers":[{"url":"https://partners.january.ai"}],"security":[{"api-key":[]}],"components":{"securitySchemes":{"api-key":{"scheme":"bearer","bearerFormat":"JWT","type":"http","description":"Your API key (sk-…), minted through the developer portal."}},"schemas":{"DeleteFoodLogResponseDto":{"type":"object","properties":{"status":{"type":"string","description":"Deletion is idempotent — an unknown or already-deleted log_id returns the same response."}},"required":["status"]},"ApiErrorDto":{"type":"object","properties":{"message":{"type":"string","description":"A developer-facing explanation of what went wrong and how to fix it."},"code":{"type":"string","description":"A stable machine-readable identifier for the class of failure — build retry logic on this, never on message wording. Current values: invalid_request, unauthorized, forbidden, not_found, not_implemented, payload_too_large, rate_limited, internal_error, upstream_error, service_unavailable, upstream_timeout. Only rate_limited, internal_error, upstream_error, service_unavailable, and upstream_timeout are safe to retry (with backoff) — not_implemented is permanent until the feature ships. New codes may be added over time; treat an unknown code according to its HTTP status class."},"docs_url":{"type":"string","description":"Link to the developer documentation."}},"required":["message","code","docs_url"]}}},"paths":{"/v1.2/food-logs/{log_id}":{"delete":{"operationId":"deleteFoodLog","summary":"Delete a food log","description":"Idempotent: deleting an unknown or already-deleted log returns the same success response, so it is safe to retry.","parameters":[{"name":"x-end-user-id","in":"header","description":"Your stable ID for the end user this request acts on — the data is per-user. Opaque to January; use the same ID your system already uses.","required":true,"schema":{"type":"string"}},{"name":"x-end-user-timezone","in":"header","description":"Optional: the end user's IANA timezone, forwarded upstream for local-day date handling.","required":false,"schema":{"type":"string"}},{"name":"log_id","required":true,"in":"path","description":"The log id returned when the log was created.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteFoodLogResponseDto"}}}},"400":{"description":"log_id is not a UUID.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorDto"}}}},"401":{"description":"The Authorization header is missing or the API key is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorDto"}}}},"429":{"description":"Either a rate limit was exceeded (`code: rate_limited`) or the monthly credit allowance is spent (`code: credit_limit_exceeded`). When Retry-After is present, wait that many seconds; a per-day allowance resets 24 hours after the first request in its window. Credit exhaustion carries no Retry-After and retrying does not help — the allowance returns at the start of the next calendar month. Call `GET /v1.2/credits` for the balance and reset date.","headers":{"Retry-After":{"description":"Seconds to wait before retrying; present when the window is known.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorDto"}}}},"default":{"description":"Any other error: the HTTP status plus { message, code, docs_url }. Retry only rate_limited and the transient 5xx codes — never not_implemented.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorDto"}}}}},"tags":["food-logs"]}}}}
```

## Update a food log

> Replaces any subset of the log: \`foods\`, \`timestamp\_utc\`, \`name\`.

```json
{"openapi":"3.0.0","info":{"title":"January AI - Nutrition Intelligence APIs","version":"1.2"},"tags":[{"name":"food-logs","description":"Create and query an end user's food diary."}],"servers":[{"url":"https://partners.january.ai"}],"security":[{"api-key":[]}],"components":{"securitySchemes":{"api-key":{"scheme":"bearer","bearerFormat":"JWT","type":"http","description":"Your API key (sk-…), minted through the developer portal."}},"schemas":{"UpdateFoodLogDto":{"type":"object","properties":{"foods":{"maxItems":100,"type":"array","items":{"$ref":"#/components/schemas/FoodSelectionDto"}},"timestamp_utc":{"type":"string","description":"UTC consumption time, ending in Z."},"name":{"type":"string","maxLength":256}}},"FoodSelectionDto":{"type":"object","properties":{"id":{"type":"number","description":"Food id from a search, scan, or detection result."},"serving":{"$ref":"#/components/schemas/ServingSelectionDto"}},"required":["id","serving"]},"ServingSelectionDto":{"type":"object","properties":{"id":{"type":"number","description":"One of the food's serving ids."},"quantity":{"type":"number","description":"How many of that serving were consumed.","maximum":10000}},"required":["id","quantity"]},"FoodLogDto":{"type":"object","properties":{"id":{"type":"string","description":"Save this id to update or delete the log."},"foods":{"type":"array","items":{"$ref":"#/components/schemas/LoggedFoodDto"}},"timestamp_utc":{"type":"string","format":"date-time"},"name":{"type":"string","nullable":true}},"required":["id","foods","timestamp_utc"]},"LoggedFoodDto":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"brand_name":{"type":"string","nullable":true},"image_url":{"type":"string","nullable":true},"glycemic_index":{"type":"number","nullable":true},"glycemic_load":{"type":"number","nullable":true},"nutrients":{"description":"Scaled to the consumed serving.","allOf":[{"$ref":"#/components/schemas/NutrientsDto"}]},"consumed_serving":{"description":"What was logged.","allOf":[{"$ref":"#/components/schemas/ServingSelectionDto"}]},"serving_details":{"description":"The serving definition the quantity refers to.","allOf":[{"$ref":"#/components/schemas/ServingDetailsDto"}]}},"required":["id","name","nutrients","consumed_serving","serving_details"]},"NutrientsDto":{"type":"object","properties":{"calories":{"$ref":"#/components/schemas/NutrientAmountDto"},"protein":{"$ref":"#/components/schemas/NutrientAmountDto"},"carbohydrates":{"$ref":"#/components/schemas/NutrientAmountDto"},"net_carbohydrates":{"$ref":"#/components/schemas/NutrientAmountDto"},"total_fat":{"$ref":"#/components/schemas/NutrientAmountDto"},"trans_fat":{"$ref":"#/components/schemas/NutrientAmountDto"},"saturated_fat":{"$ref":"#/components/schemas/NutrientAmountDto"},"fiber":{"$ref":"#/components/schemas/NutrientAmountDto"},"total_sugars":{"$ref":"#/components/schemas/NutrientAmountDto"},"added_sugars":{"$ref":"#/components/schemas/NutrientAmountDto"},"cholesterol":{"$ref":"#/components/schemas/NutrientAmountDto"},"calcium":{"$ref":"#/components/schemas/NutrientAmountDto"},"iron":{"$ref":"#/components/schemas/NutrientAmountDto"},"potassium":{"$ref":"#/components/schemas/NutrientAmountDto"},"sodium":{"$ref":"#/components/schemas/NutrientAmountDto"},"vitamin_d":{"$ref":"#/components/schemas/NutrientAmountDto"}}},"NutrientAmountDto":{"type":"object","properties":{"value":{"type":"number"},"unit":{"type":"string","description":"Canonical across the API: g, mg, kcal, IU."}},"required":["value","unit"]},"ServingDetailsDto":{"type":"object","properties":{"id":{"type":"number"},"quantity":{"type":"number"},"unit":{"type":"string"},"weight_grams":{"type":"number","nullable":true}},"required":["id","quantity","unit"]},"ApiErrorDto":{"type":"object","properties":{"message":{"type":"string","description":"A developer-facing explanation of what went wrong and how to fix it."},"code":{"type":"string","description":"A stable machine-readable identifier for the class of failure — build retry logic on this, never on message wording. Current values: invalid_request, unauthorized, forbidden, not_found, not_implemented, payload_too_large, rate_limited, internal_error, upstream_error, service_unavailable, upstream_timeout. Only rate_limited, internal_error, upstream_error, service_unavailable, and upstream_timeout are safe to retry (with backoff) — not_implemented is permanent until the feature ships. New codes may be added over time; treat an unknown code according to its HTTP status class."},"docs_url":{"type":"string","description":"Link to the developer documentation."}},"required":["message","code","docs_url"]}}},"paths":{"/v1.2/food-logs/{log_id}":{"patch":{"operationId":"updateFoodLog","summary":"Update a food log","description":"Replaces any subset of the log: `foods`, `timestamp_utc`, `name`.","parameters":[{"name":"x-end-user-id","in":"header","description":"Your stable ID for the end user this request acts on — the data is per-user. Opaque to January; use the same ID your system already uses.","required":true,"schema":{"type":"string"}},{"name":"x-end-user-timezone","in":"header","description":"Optional: the end user's IANA timezone, forwarded upstream for local-day date handling.","required":false,"schema":{"type":"string"}},{"name":"log_id","required":true,"in":"path","description":"The log id returned when the log was created.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFoodLogDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FoodLogDto"}}}},"400":{"description":"A field is malformed; the message names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorDto"}}}},"401":{"description":"The Authorization header is missing or the API key is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorDto"}}}},"404":{"description":"No log with this id for this user.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorDto"}}}},"429":{"description":"Either a rate limit was exceeded (`code: rate_limited`) or the monthly credit allowance is spent (`code: credit_limit_exceeded`). When Retry-After is present, wait that many seconds; a per-day allowance resets 24 hours after the first request in its window. Credit exhaustion carries no Retry-After and retrying does not help — the allowance returns at the start of the next calendar month. Call `GET /v1.2/credits` for the balance and reset date.","headers":{"Retry-After":{"description":"Seconds to wait before retrying; present when the window is known.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorDto"}}}},"default":{"description":"Any other error: the HTTP status plus { message, code, docs_url }. Retry only rate_limited and the transient 5xx codes — never not_implemented.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorDto"}}}}},"tags":["food-logs"]}}}}
```
