Recipes
Two endpoints return recipes: a list of the recipes on your account, and the full detail of one recipe.
List recipes
GET /recipes
Returns the recipes you can see in Nutritionist Pro, newest ID first. Recipes in Draft status are left out.
Query parameters
limit. Number of recipes to return, from 1 to 200. The default is 50.offset. Number of recipes to skip. The default is 0.view.summary(the default) orfull. The full view returns every recipe in the same shape as Get one recipe.updated_sinceandupdated_until. Return only recipes changed in a date range.
See Lists and syncing for how these parameters behave.
Example request
curl -H "Authorization: Bearer <API_KEY>" \
"https://dev.nutritionistpro.com/v3/customer/recipes?limit=2"
Example response
{
"status": true,
"code": 200,
"data": [
{
"id": 2000147,
"name": "Banana bread",
"code": "BB-001",
"number_of_servings": 8.0,
"created_at": "2026-03-04T15:20:11Z",
"updated_at": "2026-05-19T09:02:47Z"
},
{
"id": 2000139,
"name": "Tomato soup",
"code": null,
"number_of_servings": 4.0,
"created_at": "2026-02-11T18:45:00Z",
"updated_at": "2026-02-11T18:52:30Z"
}
],
"meta": { "total": 37, "limit": 2, "offset": 0 }
}
Summary fields
id. The recipe ID. Use it with Get one recipe.name. The recipe name.code. The recipe's unique code, ornullwhen none was entered.number_of_servings. How many servings the recipe makes.created_atandupdated_at. Dates and times in UTC.
Get one recipe
GET /recipes/{id}
Returns one recipe in full. A recipe that does not exist, is in Draft status, or belongs to another account returns 404 with the message Recipe not found.
Example request
curl -H "Authorization: Bearer <API_KEY>" \
"https://dev.nutritionistpro.com/v3/customer/recipes/2000147"
Example response
The nutrients list is shortened here. A real response carries every published nutrient that has a value.
{
"status": true,
"code": 200,
"data": {
"id": 2000147,
"name": "Banana bread",
"code": "BB-001",
"number_of_servings": 8.0,
"created_at": "2026-03-04T15:20:11Z",
"updated_at": "2026-05-19T09:02:47Z",
"region": { "id": 1, "name": "USA" },
"preparation_method": "Baked",
"meal_component": "Bread",
"preparation_time": "15 minutes",
"cooking_time_minutes": 60,
"cooking_temperature": "350",
"instructions": "Mash the bananas.\nMix in the remaining ingredients.\nBake for one hour.",
"serving": {
"amount": 1.0,
"unit": "slice(s)",
"gram_weight": 85.0,
"note": null
},
"allergens": [
{ "id": 8, "name": "Milk" },
{ "id": 9, "name": "Eggs" }
],
"nutrient_basis": "per_serving",
"nutrients": [
{ "id": 121, "name": "Weight", "abbreviation": "Wt", "unit": "gram(s)", "value": 85.0 },
{ "id": 1, "name": "Kilocalories", "abbreviation": "Kcal", "unit": "kilocalorie(s)", "value": 210.556 },
{ "id": 2, "name": "Protein", "abbreviation": "Protein", "unit": "gram(s)", "value": 3.4 }
],
"ingredients": [
{
"line": 1,
"ingredient_id": 9012,
"name": "Bananas, raw",
"amount": 300.0,
"unit": "gram(s)",
"text": "3 ripe bananas"
},
{
"line": 2,
"ingredient_id": 2000101,
"name": "House flour blend",
"amount": 250.0,
"unit": "gram(s)",
"text": "2 cups flour blend"
}
],
"creator": { "id": 4210, "name": "Test User" },
"account": { "id": 518, "name": "Test Account" }
}
}
Detail fields
The detail carries every summary field, plus:
region. The recipe's region asidandname, ornull.preparation_methodandmeal_component. Names, ornullwhen none was chosen.preparation_time. Text as entered in the recipe.cooking_time_minutes. A whole number of minutes, ornull.cooking_temperature. Text as entered in the recipe.instructions. The instruction steps in order, separated by line breaks, ornull.serving. The typical serving:amount,unit,gram_weight, andnote.nullwhen the recipe has no serving.allergens. A list ofidandnamepairs. Empty when none are set.nutrient_basis. Alwaysper_serving.nutrients. See Nutrients.ingredients. The ingredient lines in recipe order.creator. The user who created the recipe.account. The account that user belongs to.
Ingredient line fields
line. The position of the line in the recipe.ingredient_id. The ID of the ingredient. Use it with Get one ingredient.name. The ingredient name.amountandunit. The quantity used in the recipe.text. The line as it reads in the recipe.
An ingredient can itself be a recipe (a sub-recipe). Reading it through the ingredients endpoint returns "type": "recipe".