Skip to content

Tools

One section per tool: what it does, its parameters, and — for destructive tools — the two-step confirmation flow.

52 tools in total. The 17 read tools are always registered; the 35 write and import tools are omitted when MEALIE_READ_ONLY=true.

Recipe references: slug or UUID

Wherever a parameter is described as a recipe slug or UUID, both work — Mealie splits its identifier space (recipe CRUD uses the slug, meal plans, ratings and timeline events use the UUID), and the tools resolve whichever they are given. Both are returned by search_recipes.

Confirmation tokens

Tools marked Requires a confirmation token run a two-step flow: call once to receive a token together with a description of what is about to happen, then call again with the same arguments plus confirm_token to perform it. Tokens are single-use, expire after a few minutes and are bound to the specific target.

Recipes

search_recipes

Searches the recipe collection. Returns summaries — name, slug, id, times, rating, tags and categories — without ingredients or steps; use get_recipe for those. All filters combine with AND; within one filter the entries are OR unless the matching require_all_* flag is set.

ParameterTypeRequiredDescription
searchstringnoFull-text search over names, descriptions and ingredients
tagsstring[]noRestrict to recipes carrying these tags — names, slugs or UUIDs
categoriesstring[]noRestrict to recipes carrying these categories
toolsstring[]noRestrict to recipes carrying these tools
foodsstring[]noRestrict to recipes carrying these foods
cookbookstringnoRestrict the result to a cookbook, by slug or UUID
require_all_tagsbooleannoRequire every listed tag instead of any of them
require_all_categoriesbooleannoSame, for categories
require_all_toolsbooleannoSame, for tools
require_all_foodsbooleannoSame, for foods
order_byenumnoname | rating | created_at | updated_at | last_made | random; default created_at
order_directionenumnoasc | desc, default desc
pagenumberno1-based page number, default 1
per_pagenumbernoEntries to return, default 25, max 100

get_recipe

Fetches one recipe with everything needed to cook it: ingredients, steps, times, yield, notes and nutrition. Accepts the slug or the UUID.

ParameterTypeRequiredDescription
recipestringyesRecipe slug or UUID
detailenumnodefault returns the cleaned-up recipe; raw returns Mealie's untouched object including settings, assets, extras and inline comments

suggest_recipes

Suggests recipes that can be cooked from the foods and tools marked as "on hand" in Mealie, ranked by how little is missing. This only produces anything on an instance that actually maintains structured foods, units and an on-hand pantry — on a collection of plain-text ingredients it returns nothing; use search_recipes there.

ParameterTypeRequiredDescription
foodsstring[] (UUIDs)noFood UUIDs to treat as available, from list_foods
toolsstring[] (UUIDs)noTool UUIDs to treat as available, from list_organizers
max_missing_foodsnumbernoHow many ingredients a suggestion may be missing, default 5
max_missing_toolsnumbernoSame, for tools
limitnumbernoNumber of suggestions, default 10, max 50

create_recipe

Creates a recipe from the given fields. To add one from a website use import_recipe_from_url instead — it fills in far more.

ParameterTypeRequiredDescription
namestringyesRecipe name. Mealie derives the slug from it and rejects a duplicate
descriptionstringnoRecipe description
ingredientsstring[]noIngredient lines as free text, e.g. "500 g quark". They replace the existing list; use parse_ingredients first if structured food and unit references are wanted
instructionsstring[]noPreparation steps, in order. They replace the existing list
tagsstring[]noTag names. They replace the existing tags; unknown names are created
categoriesstring[]noCategory names. They replace the existing categories
prep_timestringnoPreparation time
cook_timestringnoCooking time
total_timestringnoTotal time
servingsnumbernoNumber of servings
recipe_yieldstringnoYield as text
notes{ title, text }[]noNotes attached to the recipe
source_urlstringnoOriginal source of the recipe, stored as orgURL

update_recipe

Changes individual fields of a recipe. Only the fields given are touched; everything else keeps its value. Passing an empty array for ingredients, instructions, tags or categories clears that list. Uses PATCH — Mealie's PUT route, which replaces the whole 33-field object, is deliberately not exposed.

ParameterTypeRequiredDescription
recipestringyesRecipe slug or UUID
namestringnoNew recipe name
…same optional fields as create_recipedescription, ingredients, instructions, tags, categories, prep_time, cook_time, total_time, servings, recipe_yield, notes, source_url

duplicate_recipe

Creates a copy of a recipe under a new name, leaving the original untouched. Useful as a starting point for a variation.

ParameterTypeRequiredDescription
recipestringyesRecipe slug or UUID
namestringnoName of the copy; Mealie appends a counter when omitted

set_recipe_last_made

Records when a recipe was last cooked. Mealie shows this on the recipe and sorts by it.

ParameterTypeRequiredDescription
recipestringyesRecipe slug or UUID
timestampstringyesISO 8601 date or date-time, e.g. 2026-08-18 or 2026-08-18T19:30:00Z

delete_recipe

Deletes a recipe permanently, together with its comments, timeline and images. Requires a confirmation token: call once to receive one, call again with it. The token is keyed to the resolved UUID, so a token issued for a slug cannot be replayed against a different recipe that has since taken that slug.

ParameterTypeRequiredDescription
recipestringyesRecipe slug or UUID
confirm_tokenstringnoConfirmation token from the first call; omit on the first call

Import

preview_recipe_url

Fetches a URL and reports what Mealie would extract from it, without saving anything. Use this to check a page before importing it, or to find out why an import came out empty.

ParameterTypeRequiredDescription
urlstringyesAddress of the recipe page to test — public http/https only

import_recipe_from_url

Has Mealie fetch a recipe page and save it as a new recipe. The fetch happens on the Mealie server, not here. Everything the page contains — name, description, ingredients, steps — ends up in the collection as written by whoever controls that site.

ParameterTypeRequiredDescription
urlstringyesAddress of the recipe to import — public http/https only
include_tagsbooleannoAdopt the page's keywords as tags, default false
include_categoriesbooleannoAdopt the page's categories, default false

import_recipe_from_html_or_json

Creates a recipe from HTML or schema.org recipe JSON supplied directly, without Mealie fetching anything. Useful for a page that needs a login, or one that import_recipe_from_url could not parse.

ParameterTypeRequiredDescription
datastringyesThe page HTML, or a schema.org Recipe JSON document (max 2 MB)

import_recipe_from_image

Creates a recipe from a photo of one — a cookbook page, a handwritten card — by having Mealie run it through its configured AI provider. Requires an AI provider set up in Mealie; without one the call fails, and the setting itself is only visible to a group manager or admin.

ParameterTypeRequiredDescription
image_base64stringyesThe image, base64-encoded, without a data: URI prefix (max 8 MB)
formatenumyesjpeg | jpg | png | webp — used for the upload filename and content type
translate_languagestringnoTranslate the extracted recipe into this language, e.g. "de" or "German"

Organizing

Tags, categories and recipe tools share one CRUD shape in Mealie, so each of these tools takes a kind parameter: tag (free-form labels), category (the primary classification, one recipe usually has few) or tool (equipment a recipe needs).

list_organizers

Lists the tags, categories or tools defined in the group, with their ids and slugs. These are the values search_recipes filters on.

ParameterTypeRequiredDescription
kindenumyestag | category | tool
searchstringnoFilter by name
pagenumberno1-based page number, default 1
per_pagenumbernoEntries to return, default 100, max 100
order_directionenumnoasc | desc, default asc

create_organizer

Creates a tag, category or recipe tool. Assigning one to a recipe with update_recipe already creates it on the fly — this tool is for defining one up front.

ParameterTypeRequiredDescription
kindenumyestag | category | tool
namestringyesName of the new organizer

update_organizer

Renames a tag, category or tool. Mealie regenerates the slug from the new name, so anything referring to the old slug stops matching.

ParameterTypeRequiredDescription
kindenumyestag | category | tool
idstring (UUID)yesUUID from list_organizers
namestringyesThe new name

delete_organizer

Deletes a tag, category or tool. The recipes themselves are kept, but they lose the assignment. Requires a confirmation token: call once to receive one, call again with it.

ParameterTypeRequiredDescription
kindenumyestag | category | tool
idstring (UUID)yesUUID from list_organizers
confirm_tokenstringnoConfirmation token from the first call; omit on the first call

Ingredients

list_foods

Lists the structured foods of the group — the ingredient vocabulary Mealie matches ingredient lines against. Many instances leave this empty and keep ingredients as plain text; an empty result means exactly that, not a failure.

ParameterTypeRequiredDescription
searchstringnoFilter by name
pagenumberno1-based page number, default 1
per_pagenumbernoEntries to return, default 100, max 100
order_directionenumnoasc | desc, default asc

create_food

Adds a food to the group vocabulary so ingredient lines can be matched against it.

ParameterTypeRequiredDescription
namestringyesName of the food
plural_namestringnoPlural form
descriptionstringnoDescription
label_idstring (UUID)noShopping-list label to file this food under

merge_foods

Points every ingredient that uses one food at another one and deletes the source food. Requires a confirmation token: call once to receive one, call again with it. The token is bound to the ordered pair — swapping the two arguments would destroy the wrong record, so a token for one direction cannot confirm the other.

ParameterTypeRequiredDescription
from_idstring (UUID)yesUUID of the food to merge away — this one is deleted
to_idstring (UUID)yesUUID of the food to keep — references end up here
confirm_tokenstringnoConfirmation token from the first call; omit on the first call

list_units

Lists the measurement units of the group, with their abbreviations. Like foods, this is empty on an instance that never seeded them.

ParameterTypeRequiredDescription
searchstringnoFilter by name
pagenumberno1-based page number, default 1
per_pagenumbernoEntries to return, default 100, max 100
order_directionenumnoasc | desc, default asc

create_unit

Adds a measurement unit to the group vocabulary.

ParameterTypeRequiredDescription
namestringyesName of the unit
plural_namestringnoPlural form
abbreviationstringnoAbbreviation, e.g. tbsp
use_abbreviationbooleannoRender the abbreviation instead of the name
fractionbooleannoShow quantities as fractions (½ cup) rather than decimals
descriptionstringnoDescription

merge_units

Points every ingredient that uses one unit at another one and deletes the source unit. Requires a confirmation token: call once to receive one, call again with it. As with merge_foods, the token is bound to the merge direction.

ParameterTypeRequiredDescription
from_idstring (UUID)yesUUID of the unit to merge away — this one is deleted
to_idstring (UUID)yesUUID of the unit to keep — references end up here
confirm_tokenstringnoConfirmation token from the first call; omit on the first call

parse_ingredients

Splits free-text ingredient lines into quantity, unit, food and note, and reports how confident Mealie is about each part. Nothing is saved. Use it to check how a line will be understood before writing it to a recipe or a shopping list.

ParameterTypeRequiredDescription
ingredientsstring[]yesIngredient lines, e.g. "2 tbsp olive oil" (1–100 lines)
parserenumnonlp (default) uses the trained model, brute a rule-based split. Mealie's openai parser is not exposed — it sends every line to an external provider

Meal plans

list_mealplans

Lists the meal plan of the household in a date range. Each entry is either a recipe reference or a free-text note.

ParameterTypeRequiredDescription
start_datestringnoFirst day to include, YYYY-MM-DD
end_datestringnoLast day to include, YYYY-MM-DD
pagenumberno1-based page number, default 1
per_pagenumbernoEntries to return, default 50, max 100

get_todays_meals

Returns the recipes planned for today, as Mealie computes "today" for the household. Answers with a bare list, not a paginated envelope. Takes no parameters.

create_mealplan_entry

Puts a recipe or a free-text note on the meal plan for one day. Give either a recipe or a title, not both — Mealie stores a plan entry as one or the other.

ParameterTypeRequiredDescription
datestringyesDay of the meal, YYYY-MM-DD
entry_typeenumyesbreakfast | lunch | dinner | side | snack | drink | dessert
recipestringno*Recipe slug or UUID to plan
titlestringno*Free-text entry, for a meal that is not a stored recipe
textstringnoAdditional note shown under the title

* exactly one of recipe or title must be given.

create_random_meal

Lets Mealie pick a recipe for a day and slot, honouring the meal plan rules configured in the household.

ParameterTypeRequiredDescription
datestringyesDay of the meal, YYYY-MM-DD
entry_typeenumyesbreakfast | lunch | dinner | side | snack | drink | dessert

update_mealplan_entry

Moves an entry to another day or slot, or replaces the recipe behind it. The current entry is read first and the changes merged onto it, because Mealie's route is a full-object PUT.

ParameterTypeRequiredDescription
entry_idnumberyesPlan entry id from list_mealplans — an integer, not a UUID
datestringnoNew day, YYYY-MM-DD
entry_typeenumnoNew slot
recipestringnoRecipe slug or UUID
titlestringnoNew title
textstringnoNew note

delete_mealplan_entry

Removes one entry from the meal plan. The recipe itself is not touched. Requires a confirmation token: call once to receive one, call again with it.

ParameterTypeRequiredDescription
entry_idnumberyesPlan entry id from list_mealplans — an integer, not a UUID
confirm_tokenstringnoConfirmation token from the first call; omit on the first call

Shopping

list_shopping_lists

Lists the shopping lists of the household, without their items.

ParameterTypeRequiredDescription
pagenumberno1-based page number, default 1
per_pagenumbernoEntries to return, default 50, max 100

get_shopping_list

Fetches one shopping list with all of its items, checked and unchecked.

ParameterTypeRequiredDescription
list_idstring (UUID)yesShopping list UUID, from list_shopping_lists
include_checkedbooleannoInclude items already ticked off, default true

create_shopping_list

Creates an empty shopping list in the household.

ParameterTypeRequiredDescription
namestringyesName of the new list

delete_shopping_list

Deletes a shopping list and everything on it. Requires a confirmation token: call once to receive one, call again with it.

ParameterTypeRequiredDescription
list_idstring (UUID)yesShopping list UUID, from list_shopping_lists
confirm_tokenstringnoConfirmation token from the first call; omit on the first call

add_shopping_list_items

Adds items to a shopping list as free text ("2 tbsp olive oil"). Mealie does not split these into food and unit automatically — run parse_ingredients first if that matters.

ParameterTypeRequiredDescription
list_idstring (UUID)yesShopping list UUID, from list_shopping_lists
itemsstring[]yesThe lines to add, one item each (1–100)

update_shopping_list_items

Changes items on a shopping list — most often ticking them off. Only the given fields are changed; the rest of each item is preserved (the server reads the list first, because Mealie's bulk update replaces every field it does not receive). At least one of checked, quantity or note must be given.

ParameterTypeRequiredDescription
list_idstring (UUID)yesShopping list UUID
item_idsstring[] (UUIDs)yesItem UUIDs from get_shopping_list (1–100)
checkedbooleannoTick the items off (true) or put them back (false)
quantitynumbernoSet the quantity of every listed item
notestringnoReplace the text of every listed item

delete_shopping_list_items

Removes items from a shopping list for good. To merely tick something off, use update_shopping_list_items with checked=true. Requires a confirmation token: call once to receive one, call again with it. The token is bound to a fingerprint of the whole sorted id set, so a confirmation for three items cannot delete a fourth appended between the two calls.

ParameterTypeRequiredDescription
item_idsstring[] (UUIDs)yesItem UUIDs from get_shopping_list (1–100)
confirm_tokenstringnoConfirmation token from the first call; omit on the first call

add_recipe_to_shopping_list

Adds a recipe's ingredients to a shopping list, merging them with what is already there. Mealie remembers the recipe on the list, so remove_recipe_from_shopping_list can take exactly these ingredients back off again.

ParameterTypeRequiredDescription
list_idstring (UUID)yesShopping list UUID
recipestringyesRecipe slug or UUID
servings_multipliernumbernoScale the ingredient quantities, default 1

remove_recipe_from_shopping_list

Takes a recipe's ingredients back off a shopping list. Items that were also needed by another recipe on the list stay, with their quantity reduced.

ParameterTypeRequiredDescription
list_idstring (UUID)yesShopping list UUID
recipestringyesRecipe slug or UUID
servings_multipliernumbernoHow much of the recipe to remove, default 1

Cookbooks

list_cookbooks

Lists the cookbooks of the household. A cookbook is a saved filter over the recipe collection, not a fixed set of recipes.

ParameterTypeRequiredDescription
pagenumberno1-based page number, default 1
per_pagenumbernoEntries to return, default 50, max 100

get_cookbook

Fetches a cookbook and the recipes it currently matches. Accepts the slug or the UUID.

ParameterTypeRequiredDescription
cookbookstringyesCookbook slug or UUID, from list_cookbooks
per_pagenumbernoRecipes to return, default 50, max 100

create_cookbook

Creates a cookbook — a named, saved view of the recipe collection. Without a filter it matches every recipe; the filter itself is written in Mealie's own query language and is easiest to build in the web UI.

ParameterTypeRequiredDescription
namestringyesName of the cookbook
descriptionstringnoDescription
query_filterstringnoMealie query filter, e.g. tags.name IN ["Dessert"]. Passed through verbatim; an invalid expression is rejected by Mealie with a 422
is_publicbooleannoMake the cookbook readable without a login, default false

delete_cookbook

Deletes a cookbook. The recipes it matched are not touched — a cookbook is only a saved filter. Requires a confirmation token: call once to receive one, call again with it.

ParameterTypeRequiredDescription
cookbook_idstring (UUID)yesCookbook UUID, from list_cookbooks
confirm_tokenstringnoConfirmation token from the first call; omit on the first call

Notes & sharing

set_recipe_rating

Sets the personal rating of a recipe and/or marks it as a favourite. Ratings in Mealie are per user, not per recipe. At least one of rating or is_favorite must be given.

ParameterTypeRequiredDescription
recipestringyesRecipe slug or UUID
ratingnumbernoStars from 0 to 5; 0 clears the rating
is_favoritebooleannoMark or unmark as a favourite

add_recipe_comment

Adds a comment to a recipe. Comments are visible to everyone in the group and are attributed to the user the API token belongs to.

ParameterTypeRequiredDescription
recipestringyesRecipe slug or UUID
textstringyesThe comment text

delete_recipe_comment

Deletes a comment. Requires a confirmation token: call once to receive one, call again with it.

ParameterTypeRequiredDescription
comment_idstring (UUID)yesComment UUID, from list_recipe_comments
confirm_tokenstringnoConfirmation token from the first call; omit on the first call

list_recipe_comments

Lists the comments other users of the instance left on a recipe.

ParameterTypeRequiredDescription
recipestringyesRecipe slug or UUID

list_recipe_timeline

Lists the timeline of a recipe: when it was created, updated and each time it was cooked, with the notes attached to those events.

ParameterTypeRequiredDescription
recipestringyesRecipe slug or UUID
pagenumberno1-based page number, default 1
per_pagenumbernoEntries to return, default 50, max 100

create_timeline_event

Adds an entry to a recipe's timeline — typically a note about having cooked it and how it turned out. Pair it with set_recipe_last_made, which is what the recipe view sorts on.

ParameterTypeRequiredDescription
recipestringyesRecipe slug or UUID
subjectstringyesShort headline, e.g. "Cooked it"
messagestringnoThe note itself
timestampstringnoISO 8601 date or date-time; defaults to now

list_share_tokens

Lists the public share links that currently exist, with the recipe each one exposes and when it expires. Anyone holding such a link can read the recipe without an account.

ParameterTypeRequiredDescription
recipestringnoRestrict the result to one recipe (slug or UUID)

create_share_token

Creates a link that lets anyone read one recipe without logging in. Requires a confirmation token: call once to receive one, call again with it — guarded like a destructive operation even though it destroys nothing, because it is the one tool that widens who can see the data.

ParameterTypeRequiredDescription
recipestringyesRecipe slug or UUID
expires_atstringnoISO 8601 date or date-time when the link stops working. Omitted, it never expires — prefer setting a date
confirm_tokenstringnoConfirmation token from the first call; omit on the first call

delete_share_token

Revokes a share link, so the recipe is no longer readable through it. Needs no confirmation — this narrows access rather than widening it.

ParameterTypeRequiredDescription
token_idstring (UUID)yesShare token UUID, from list_share_tokens

Instance

get_about

Reports the Mealie version and the identity the API token acts as: user, group, household and the permission flags that decide which write tools will actually succeed. Start here when a call fails with a 403. Takes no parameters.

Released under the MIT License.