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.
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)
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

french, italian, asian, mexican, indian, mediterranean, american, japanese, chinese, thai, moroccan, spanish, greek, british, german, other

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:

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

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.

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."
}
}