Skip to main content

Recipes

List Recipes​

GET /api/v1/recipes

Returns a paginated list of recipes. Supports search, filtering, sorting, and ingredient search.

Query Parameters​

ParameterTypeDescription
langstringResponse language (en, fr, es). Defaults to en.
servingsintegerScale ingredient quantities to this number of servings (1 to 100). See Servings & Units.
unitsstringUnit system for ingredient quantities: metric (default) or imperial.
searchstringSearch recipes by name (case-insensitive). Searches in the requested language with English fallback.
search_instringWhere to search: name (default), description, or both
ingredientsstringFilter by ingredients: comma-separated names (case-insensitive partial match). When set without an explicit sort, results are ordered by the number of matching ingredients (most matches first).
cuisinestringFilter by cuisine (e.g. italian, french, asian)
meal_typestringFilter by meal type (e.g. main, dessert, starter)
difficultystringFilter by difficulty (easy, medium, hard)
dietary_tagsstringFilter by dietary tags (e.g. vegetarian, vegan, gluten_free). Currently supports a single value only; multiple values coming soon.
prep_time_minintegerMinimum preparation time (minutes)
prep_time_maxintegerMaximum preparation time (minutes)
cook_time_minintegerMinimum cooking time (minutes)
cook_time_maxintegerMaximum cooking time (minutes)
calories_per_serving_minintegerMinimum calories per serving
calories_per_serving_maxintegerMaximum calories per serving
protein_minintegerMinimum protein (grams)
protein_maxintegerMaximum protein (grams)
sortstringSort field: name, prep_time, cook_time, calories_per_serving, protein (default: name)
orderstringSort order: asc or desc (default: asc)
per_pageintegerItems per page (default: 10, max depends on your plan)
pageintegerPage number (default: 1)

Enum Values​

Cuisine​

american, chinese, french, greek, italian, japanese, mexican, portuguese, spanish, thai, turkish

Meal Type​

starter, main, dessert, appetizer, breakfast, brunch, snack, side_dish, soup, drink, sauce

Difficulty​

easy, medium, hard

Dietary Tags​

vegetarian, vegan, gluten_free, dairy_free, nut_free, halal, kosher

note

The dietary_tags filter currently accepts a single value only (e.g. dietary_tags=vegan). Support for filtering by multiple values is coming soon.

Example Request​

curl "https://recipeapi.io/api/v1/recipes?cuisine=italian&difficulty=easy&per_page=5" \
-H "Authorization: Bearer sk_live_..."

Search by Ingredients​

Use the ingredients parameter to find recipes that contain specific ingredients. By default, results are sorted by the number of matching ingredients (recipes matching the most ingredients appear first). Pass an explicit sort parameter to override this behavior.

curl "https://recipeapi.io/api/v1/recipes?ingredients=tomato,basil" \
-H "Authorization: Bearer sk_live_..."

This returns recipes where at least one ingredient matches (case-insensitive partial match). You can combine it with any other filter.

Example Response​

{
"data": [
{
"id": 449,
"name": "Beef Tostadas",
"description": "Beef tostadas are a popular Mexican dish featuring crispy fried tortillas topped with seasoned ground beef and fresh toppings for a delicious and satisfying meal.",
"difficulty": "easy",
"meal_type": "main",
"cuisine": "american",
"dietary_tags": [
"nut_free"
],
"servings": 6,
"prep_time": 15,
"cook_time": 15,
"calories_per_serving": 450,
"protein": 25,
"instructions": [
"Heat the vegetable oil in a frying pan over medium heat until hot.",
"Add the beef and cook, stirring occasionally, until browned and cooked through.",
"Add chopped onion and minced garlic to the beef, cook until the onion is translucent.",
"..."
],
"ingredients": [
{
"id": 58,
"name": "Chili powder",
"category": "spice",
"quantity": 1,
"unit": "tsp",
"optional": false
},
{
"id": 37,
"name": "Garlic",
"category": "vegetable",
"quantity": 2,
"unit": "clove",
"optional": false
},
"..."
]
},
{
"..."
},
{
"..."
}
],
"links": {
"first": "https://recipeapi.io/api/v1/recipes?page=1&per_page=3",
"last": "https://recipeapi.io/api/v1/recipes?page=10&per_page=3",
"prev": null,
"next": "https://recipeapi.io/api/v1/recipes?page=2&per_page=3"
},
"meta": {
"current_page": 1,
"last_page": 10,
"path": "https://recipeapi.io/api/v1/recipes",
"per_page": 3,
"total": 30,
"language": "en"
}
}

Localization​

All text fields (name, description, instructions) are translatable. Use the lang parameter to get content in a specific language:

GET /api/v1/recipes?lang=fr&search=poulet
  • Supported languages: en, fr, es
  • The meta.language field in every response indicates the requested language
  • Passing an unsupported language returns a 422 error with the list of supported languages
  • Free plan users passing lang (other than en) receive a 402 error with code PLAN_FEATURE_UNAVAILABLE

Servings & Units​

Ingredient quantities are returned in metric units by default. Use servings to scale every quantity to the number of servings you need, and units=imperial to get imperial units. Both work on all recipe endpoints and can be combined:

GET /api/v1/recipes/42?servings=6&units=imperial
  • servings in the response reflects the requested value. calories_per_serving and protein stay per serving.
  • pinch and dash are never scaled.
  • Countable units (piece, slice, clove, bunch, sprig, leaf, can, packet) are never converted.
  • imperial: g/kg become oz (under 1 lb) or lb, ml/l become tsp (under 15 ml), tbsp (under 60 ml) or cup.
  • metric (default): quantities use g, kg, ml and l. tsp and tbsp are kept, as they are used in both systems.
  • Scaled or converted quantities are rounded to amounts you can measure: from 1 upwards, cup, tbsp, tsp and lb go to the nearest quarter, from 2 upwards oz and countable units go to the nearest half, and from 10 upwards g, ml and oz go to whole numbers. Smaller quantities keep 2 decimals, or 2 significant digits below 1 (1 g is 0.035 oz). Converted units can include oz, lb and l.
  • An invalid value returns a 422 error with code INVALID_PARAMETER.
  • Free plan users passing servings or units=imperial receive a 402 error with code PLAN_FEATURE_UNAVAILABLE.

Search Scope​

By default, search only searches recipe names. Use search_in to expand the search scope:

GET /api/v1/recipes?search=spicy&search_in=description
GET /api/v1/recipes?search=chicken&search_in=both
search_in valueSearches in
name (default)Recipe name only
descriptionRecipe description only
bothRecipe name and description

Get Recipe​

GET /api/v1/recipes/{id}

Returns a single recipe with its full details, including instructions and ingredients.

Path Parameters​

ParameterTypeDescription
idintegerRecipe ID

Query Parameters​

ParameterTypeDescription
langstringResponse language (en, fr, es). Defaults to en.
servingsintegerScale ingredient quantities to this number of servings (1 to 100).
unitsstringmetric (default) or imperial ().

Example Request​

curl "https://recipeapi.io/api/v1/recipes/449" \
-H "Authorization: Bearer sk_live_..."

Example Response​

{
"data": {
"id": 449,
"name": "Beef Tostadas",
"description": "Beef tostadas are a popular Mexican dish featuring crispy fried tortillas topped with seasoned ground beef and fresh toppings for a delicious and satisfying meal.",
"difficulty": "easy",
"meal_type": "main",
"cuisine": "american",
"dietary_tags": [
"nut_free"
],
"servings": 6,
"prep_time": 15,
"cook_time": 15,
"calories_per_serving": 450,
"protein": 25,
"instructions": [
"Heat the vegetable oil in a frying pan over medium heat until hot.",
"Add the beef and cook, stirring occasionally, until browned and cooked through.",
"Add chopped onion and minced garlic to the beef, cook until the onion is translucent.",
"Stir in tomato paste, cumin, chili powder, salt, and pepper, cooking for a few minutes until well combined.",
"Warm the tostada shells in a separate pan or oven until crisp.",
"Place a generous spoonful of the beef mixture onto each tostada shell.",
"Top the beef with shredded lettuce, diced tomato, sliced avocado, shredded cheese, and a dollop of sour cream.",
"Garnish with chopped cilantro and serve immediately."
],
"ingredients": [
{
"id": 58,
"name": "Chili powder",
"category": "spice",
"quantity": 1,
"unit": "tsp",
"optional": false
},
{
"id": 37,
"name": "Garlic",
"category": "vegetable",
"quantity": 2,
"unit": "clove",
"optional": false
},
{
"id": 8,
"name": "Cheddar cheese",
"category": "dairy",
"quantity": 100,
"unit": "g",
"optional": false
},
"..."
]
},
"meta": {
"language": "en"
}
}

Error Response (404)​

{
"error": {
"code": "NOT_FOUND",
"message": "The requested resource was not found."
}
}

Random Recipe​

GET /api/v1/recipes/random

Returns a single random recipe with full details (instructions + ingredients). Supports the same filters as the List Recipes endpoint to narrow down the random selection, except pagination (page, per_page) and sorting (sort, order) parameters, which are not applicable.

Example Request​

curl "https://recipeapi.io/api/v1/recipes/random?cuisine=italian&difficulty=easy" \
-H "Authorization: Bearer sk_live_..."

Example Response​

Same structure as Get Recipe response.

Error Response (422)​

If no recipe matches the applied filters:

{
"error": {
"code": "NO_RECIPE_FOUND",
"message": "No recipe found matching your filters."
}
}