Manual or Assigned Intakes
Plan & Token Requirements
Feature available in the following LogMeal Plans:
Accessible by the following User Types:
What It Does
Manual Intakes allow creating a meal intake without image-based prediction. For each food item, provide either an existing dish ID and/or, optionally, omit the dish id and provide an ingredient breakdown. You may also supply quantity (serving size) and easy-to-modulate ingredient levels (salt, sugar, oil).
This is ideal when users forget to take a photo, when recording historic meals, or when professionals need to log meals on behalf of users.


Creating Custom Dishes From Scratch
Optionally, an APIUser or APIUserManager can create a one-off food item from scratch without relying on a pre-existing catalog dish ID.
To execute this workflow, follow these 3 steps:
1. Define the Ingredient List
Retrieve valid ingredient IDs through GET /dataset/ingredients, then determine the ingredients and quantities. You may preview the resulting nutrition by calling POST /nutrition/recipe/compute_nutrients.
2. Create the Intake
Call POST /v2/intake/manualInput/{userId}. Omit the dish id and provide a non-empty ingredients list containing valid ingredientId values. You can provide a custom name for the complete intake using the root-level intake_name parameter.
3. Modify the Name
If the user wants to rename their custom dish after it has been created, use POST /intake/{imageId}/modify_name.
For ingredient-only food items, dish-specific fields such as
id,dish_id,foodName, and the per-itemnameare returned asnull. Ingredients, serving size, measures, ingredient-derived food groups, nutritional information, and Nutri-Score are still returned normally.
Related use case: Create a Custom Dish from Scratch with a Manual Intake
When to Use It / Outcomes
- Users donāt have a photo or prefer manual entry.
- Professionals need to add meals for their managed users, individually or in bulk.
- You want to recreate meals from a known dish ID and optionally customize ingredients and quantity.
- You want to create a one-off food item from scratch using ingredient IDs, without creating or selecting an existing dish.
- Output: JSON with the created intake (ID, timestamp, dish list) and any overrides applied; on bulk/assign endpoints, creation results per user.
Feature-Specific Details
- Add one or more food items to record what was eaten.
- For each food item, provide either a valid dish
idor a non-emptyingredientslist with validingredientIdvalues. - Specify easy-to-modulate ingredient levels (salt, sugar, oil) as high, medium, low, or none.
- Include a serving size in grams for each dish so the system can scale ingredient quantities automatically.
- Add a timestamp for when the meal was eaten (defaults to the current time if not provided).
- If both a dish
idandingredientsare provided, the supplied ingredients replace the default recipe for that dish. - If the dish
idis omitted, the supplied ingredients define the complete recipe and are used to calculate serving size, food groups, nutritional information, and Nutri-Score. - The system automatically adjusts nutrition based on your quantities and levels.
- Managers can quickly log or assign meals for one or many users at once.
Related Endpoints
Use the following endpoints to create and manage manual intakes:
-
POST /intake/manualInput/{userId} ā š“ šµ Create a manual intake for a specific user.
-
POST /intake/manualInput/bulkAssign ā šµ **Create manual intakes in bulk for one or multiple users.
-
Maintenance helpers:
- POST /intake/modifyNutritionalInfo ā š“ šµ Modify the nutritional info of an uploaded intake.
- POST /intake/modifyTimestamp ā ā« šµ š“ Set/override the intake timestamp.
- DELETE /intake/{imageId} ā ā« šµ š“ Remove an uploaded intake. This is applicable for any kind of intake (image-based, manual, barcode-based, etc.)
-
Optional lookup helpers:
- GET /dataset/ingredients ā ā« š“ šµ List available ingredients (IDs, names, measures).
Typical Workflow
- Collect inputs: for each food item, provide either a dish
idand/or, optionally, a non-empty ingredients list. Optionally include levels, quantity, timestamp, and a root-levelintake_name. - Single user: call POST /intake/manualInput/{userId}.
- Bulk/assignment (managers): call POST /intake/manualInput/bulkAssign.
- (Optional) Adjust via POST /intake/modifyNutritionalInfo and/or POST /intake/modifyTimestamp.
- Store & display the new intake in History and progress dashboards.
Updated 24 days ago
