Foodashi API
The complete recipe API for modern food applications. Search by flavor, nutrient, or ingredient with vector-powered semantic search.
# Get your first recipes curl -X GET "https://api.foodashi.com/api/recipes?cuisine=italian&limit=5" \ -H "X-Api-Key: YOUR_API_KEY"
Authentication
All API requests require authentication via the X-Api-Key header.
You can register a new API key at our developer portal.
Security Best Practices
Your API keys carry many privileges, so be sure to keep them secure! Do not share your secret API keys in publicly accessible areas such as GitHub, client-side code, or blog posts.
X-Api-Key: rcpt_indie_xK9d8sL2mN...
Tier Access
Endpoints are gated by your subscription tier. If you call an endpoint above your plan, you'll receive a 403 response with upgrade details.
{
"error": "Upgrade required",
"message": "This endpoint requires the pro plan or higher. Your current plan: hobby.",
"current_tier": "hobby",
"required_tier": "pro",
"upgrade_url": "https://foodashi.com/pricing"
}
Plans & Rate Limits
Rate limits and endpoint access are tiered by subscription plan. Monthly quotas reset on your billing anchor date.
| Plan | Price | Monthly Requests | RPM | API Keys |
|---|---|---|---|---|
| Hobby | Free | 10,000 | 30 | 1 |
| Indie | $25/mo · $250/yr | 150,000 | 600 | 3 |
| Pro | $90/mo · $900/yr | 1,000,000 | 3,000 | 10 |
| Enterprise | Custom | 10,000,000+ | 10,000+ | Unlimited |
Yearly billing = 10× monthly (two months free). Overage: $0.50/1K on Indie, $0.30/1K on Pro.
What each tier unlocks
Hobby
26 endpoints — core browsing & reference.
- • Recipe browse (by cuisine, diet, meal-type, time, difficulty)
- • Ingredient search & food groups
- • Nutrient & daily-value reference
- • Utilities (convert, allergens, diets, cuisines)
Indie
+ all Hobby50 endpoints — search & matching.
- • Full-text search & autocomplete
- • Bulk lookup & similar recipes
- • Browse by cooking method / equipment / occasion / season
- • Recipes by ingredients (what's in my fridge)
- • Recipe nutrition / allergens / beverages / scale
- • Ingredient details, substitutes, portions, conversions
- • Meal plan templates & basic shopping lists
Pro
+ AIAll 70+ endpoints — everything + AI.
- • AI meal plan generation + customization
- • Food photo recognition (Vision): dish + ingredient detection
- • Recipe analysis from text or URL
- • Semantic vector search (ingredients)
- • NutriMetric scoring + FDA/EU nutrition labels
- • AI beverage pairing (sommelier)
- • Recipe compare + taste / sustainability / medical profiles
- • AI-optimized shopping lists
403 with required_tier and upgrade_url fields so your app can handle upgrades gracefully.
Error Handling
| Status | Meaning |
|---|---|
| 200 | Success |
| 400 | Bad Request - Invalid parameters |
| 401 | Unauthorized - Missing or invalid API key |
| 403 | Forbidden - Quota exceeded or restricted endpoint |
| 404 | Not Found - Endpoint doesn't exist |
| 429 | Too Many Requests - Rate limit exceeded. Slow down and retry after the window resets. |
| 500 | Server Error - Something went wrong on our end |
{
"error": "Monthly Quota Exceeded.
Upgrade your plan."
}
/api/recipes
Hobby+
1 call
Get Recipes
Retrieve a list of recipes with powerful filtering options. Supports pagination, dietary filters, cuisine selection, and detailed metadata filtering.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| page | integer | Page number for pagination, 1-based (default: 1). Ignored when random=true. |
| limit | integer | Results per page (default: 20, max: 100). |
| random | boolean | Return a shuffled sample instead of stable pagination. Aliases: sort=random, shuffle=true. See browse conventions. |
| cuisine | string |
Filter by cuisine. Title-case match (case-insensitive accepted).
Browse all 78 supported cuisines ▾🥡 East / Southeast Asia
JapaneseChineseKoreanThaiVietnameseIndonesianMalaysianFilipinoSingaporeanBurmeseCambodianLaotian
🍛 South / Central Asia
IndianPakistaniSri LankanBangladeshiNepaleseTibetanAfghan
🥙 Middle East
TurkishLebanesePersianSyrianIraqiIsraeliSaudi ArabianYemeni
🌶️ North Africa
MoroccanTunisianEgyptian
🥖 Europe
ItalianFrenchSpanishGreekPortugueseGermanBritishIrishPolishRussianUkrainianHungarianGeorgianAustrianBelgianCzech
❄️ Nordic
DanishSwedishNorwegianFinnishIcelandic
🌎 Americas
AmericanMexicanBrazilianPeruvianArgentineColombianVenezuelanChileanBolivianEcuadorian
🏝️ Caribbean
CubanJamaicanHaitianDominicanPuerto RicanTrinidadianBarbadian
🌺 Pacific
HawaiianAustralian
🥘 Sub-Saharan Africa
EthiopianNigerianSouth AfricanGhanaianSenegaleseTanzanianKenyan
🌐 Catch-all
Global
|
| diet | string | Filter by dietary tag (e.g., "Vegetarian", "Keto") |
| exclude_alg | string | Comma-separated list of allergens to exclude. Case-sensitive, must be exact EU 14 allergen names: Gluten, Crustaceans, Eggs, Fish, Peanuts, Soybeans, Dairy, Tree Nuts, Celery, Mustard, Sesame, Sulfites, Lupin, Molluscs. Invalid names return 400 (no silent ignore). |
| meal_type | string |
Filter by when/how it's eaten. Recipes carry 1-5 values (multi-value array); matches if any value matches.
Browse all 16 meal_type values ▾🕐 Time of day
BreakfastBrunchLunchDinnerLate Night
🍽️ Course position
AppetizerSideMain CourseDessert
☕ Between-meal & context
SnackTea TimeAperitifDrinkStreet Food
🧂 Non-meal accessory
CondimentComponent
|
| dish_type | string |
Filter by structural identity — what the dish IS in form. Recipes carry 1-3 values (multi-value array); matches if any value matches.
Browse all 107 dish_type values ▾💧 Liquid
SoupStewCurryPorridge
🌯 Hand-held SandwichWrapBurgerHot DogSpring Roll 🍝 Pasta & Noodle PastaNoodle DishStuffed Pasta 🍚 Rice Rice DishFried RiceSushi 🌾 Grain Grain Dish 🥗 Salad & Raw SaladSlawCevicheTartare 🔥 Cooking method Stir-FryGrilled DishRoastBraised DishSteamed DishBarbecueSkewerFried Dish 🍳 Fritter family FritterCutletCroquette 🥘 Baked savory CasseroleGratinQuicheSavory PieSoufflé 🥟 Filled dough DumplingEmpanadaHand Pie 🍕 Pizza & Flatbread PizzaCalzoneStuffed Flatbread 🍞 Bread BreadFlatbreadCornbread 🥞 Pancake PancakeCrepeWaffle 🥚 Egg OmeletScrambled EggsEgg Dish 🫘 Legume Bean DishLentil DishTofu Dish 🥕 Vegetable Vegetable DishStuffed Vegetable 🧀 Cheese FondueCheese Plate 🧂 Cured & Sausage SausageCharcuterieCured FishJerky 🥩 Meat SteakRoast MeatRibsMeatballGround Meat Dish 🐠 Seafood Fish FilletWhole FishShellfish 🍰 Sweet families CakeCheesecakeCookieSweet PiePastryPuddingCustardFrozenConfectionJellyAssembledCrumble 🥛 Yogurt Yogurt Dish 🥄 Sauce & Condiment SauceDressingMarinadeDipSpreadSpice Paste 🥒 Pickle & Preserve PickleJamCompote 🥤 Beverage (use with meal_type=Drink) SmoothieMilkshakeJuiceCocktailMocktailTeaCoffeeHot ChocolateFermented Beverage 🥨 Pantry & Snack CrackerGranolaEnergy BarPopcorn 🍱 Plate format Mixed PlateBowl |
| difficulty | string | Filter by difficulty ("Easy", "Medium", "Hard") |
| equipment | string | Filter by required equipment (e.g., "Blender", "Air Fryer") |
| tag | string | Filter by specific custom tags (e.g., "Authentic", "Spicy") |
| time | integer | Maximum cook time in minutes |
| total_time | integer | Maximum total time (prep + cook) in minutes |
| min_nutrimetric | integer | Minimum NutriMetric score (0-100) |
| cost_tier | string | Filter by estimated cost ("cheap", "moderate", "expensive") |
| search | string | Text search in recipe titles |
curl -X GET "https://api.foodashi.com/api/recipes?cuisine=Mexican&exclude_alg=Peanuts&limit=2" \ -H "X-Api-Key: YOUR_API_KEY"
Example Response
{
"data": [
{
"id": "a1b2c3d4-...",
"title": "Spaghetti Carbonara",
"cuisine": "Italian",
"meal_types": ["Dinner", "Main Course"],
"dish_types": ["Pasta"],
"difficulty": "Medium",
"total_time_minutes": 30,
"servings": 4,
"image_url": "https://...",
"dietary_tags": ["Nut-Free"],
"tags": ["pasta", "comfort-food"]
}
],
"pagination": { "page": 0, "limit": 10, "total": 86 }
}
/api/recipes/details
Hobby+
1 call
Recipe Details
Get complete details for a single recipe including full ingredients, step-by-step instructions, nutrition info, taste profile, and storage metadata.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| id Required | string (UUID)Required | The recipe ID, a UUID (e.g. b1a2c3d4-e5f6-7890-abcd-ef1234567890) |
curl -X GET "https://api.foodashi.com/api/recipes/details?id=b1a2c3d4-e5f6-7890-abcd-ef1234567890" \ -H "X-Api-Key: YOUR_API_KEY"
Example Response
{
"id": "a1b2c3d4-...",
"title": "Truffle Risotto",
"description": "Creamy arborio rice with...",
"cuisine": "Italian",
"ingredients": [
{ "name": "Arborio Rice", "amount": "300g" },
{ "name": "Truffle Oil", "amount": "2 tbsp" }
],
"instructions": ["Toast rice in butter...", "Add broth gradually..."],
"nutrition": {
"calories": 420,
"protein_g": 12,
"fat_g": 18,
"carbs_g": 52
},
"nutrimetric": {
"grade": "B",
"score": 72,
"label": "Good",
"version": "nutrimetric-1.0"
}
}
/api/random
Hobby+
1 call
Random Recipe
Returns a single random recipe, great for "Surprise Me" features.
| Parameter | Type | Description |
|---|---|---|
| tags | string | Optional tag filter (e.g. "dinner") |
curl -X GET "https://api.foodashi.com/api/random?tags=dinner" \ -H "X-Api-Key: YOUR_API_KEY"
Browse conventions (read once, applies everywhere)
Every /api/recipes/by-* endpoint — plus /api/recipes, /api/recipes/filter, /api/ingredients/by-food-group, and /api/ingredients/:id/recipes — supports the same set of query conventions. Learn these once, use them everywhere.
Pagination (default behaviour)
| Parameter | Type | Description |
|---|---|---|
| page | integer | Page number, 1-based (default: 1). |
| limit | integer | Results per page (default: 20, max: 100). For ingredient endpoints max is 50. |
Default ordering: newest-published first. Every response includes a pagination object with page, limit, total, and total_pages.
Random mode — new 2026-05-10
When you want a fresh sample on every request (e.g. "surprise me" / "explore" UI), pass any of:
| Parameter | Value | Notes |
|---|---|---|
| random | true | Most common form. |
| sort | random | Alternative spelling (consistent with the sort param on /api/recipes/filter). |
| shuffle | true | Alternative spelling. |
All three forms are accepted — pick whichever fits your code style. Under the hood we fetch a wider window (up to 10× the limit, capped at 500) of matching recipes, Fisher-Yates shuffle in memory, and return the first limit. Pagination is meaningless in random mode — each request is its own independent shuffle.
curl -X GET "https://api.foodashi.com/api/recipes/by-cuisine?cuisine=Italian&random=true&limit=5" \ -H "X-Api-Key: YOUR_API_KEY" # Same call again returns 5 DIFFERENT Italian recipes curl -X GET "https://api.foodashi.com/api/recipes/by-cuisine?cuisine=Italian&random=true&limit=5" \ -H "X-Api-Key: YOUR_API_KEY"
Year-Round is a wildcard for season queries
A recipe explicitly tagged Year-Round is good in every season — so it surfaces in any specific-season query (Spring/Summer/Fall/Winter). The recipe’s seasons array doesn’t need to contain "Spring" for it to appear when you query ?season=Spring; if it contains Year-Round, it qualifies.
- •
?season=Spring→ matches recipes whoseseasons[]overlaps[Spring, Year-Round] - •
?season=Summer→ matches[Summer, Year-Round] - •
?season=Fall→ matches[Fall, Year-Round]— alias:?season=Autumn - •
?season=Winter→ matches[Winter, Year-Round] - •
?season=Year-Round→ strict: only recipes explicitly tagged Year-Round
This semantic applies to both /api/recipes/by-season and /api/recipes/filter?season=….
String matching — case & plural tolerance
Ingredient-based endpoints (/api/recipes/by-ingredients, /api/ingredients/:id/recipes text fallback) normalise input before matching:
- • Case-insensitive:
red onion=Red Onion=RED ONION - • Whitespace collapsed:
red onion(double space) =red onion - • Plural-tolerant:
onion=onions,tomato=tomatoes,cherry=cherries - • Substring match:
chickenmatches "chicken breast", "ground chicken", etc. Use longer phrases for specificity. - • Typo-intolerant:
red ononreturns 0 — call/api/ingredients/autocompletefirst if you need fuzzy/typo handling.
/api/recipes/by-cuisine
Hobby+
1 call
Browse by Cuisine
Browse recipes filtered by cuisine type. Returns lightweight recipe cards with pagination.
| Parameter | Type | Description |
|---|---|---|
| cuisine Required | stringRequired | Cuisine name (e.g., "Italian", "Mexican", "Japanese") |
| page | integer | Page number (default: 1) |
| limit | integer | Results per page (default: 20, max: 100) |
curl -X GET "https://api.foodashi.com/api/recipes/by-cuisine?cuisine=Italian&limit=10" \ -H "X-Api-Key: YOUR_API_KEY"
/api/recipes/by-region
Hobby+
1 call
Browse by Region
Group recipes by sub-continental region (e.g. Southeast Asia covers Thai + Vietnamese + Malaysian + Indonesian + Filipino in one call). Perfect for regional food landing pages.
| Parameter | Type | Description |
|---|---|---|
| regionRequired | string | One of: East Asia, Southeast Asia, South Asia, Central Asia, Middle East, North Africa, Sub-Saharan Africa, Southern Europe, Western Europe, Northern Europe, Eastern Europe, North America, Latin America, Caribbean, Oceania, Global |
| page | integer | Page number (default: 1) |
| limit | integer | Results per page (default: 20, max: 100) |
curl -X GET "https://api.foodashi.com/api/recipes/by-region?region=Southeast%20Asia&limit=20" \ -H "X-Api-Key: YOUR_API_KEY"
Response shape: { recipes: [...], filter: { region }, pagination: { page, limit, total } }
/api/recipes/by-continent
Hobby+
1 call
Browse by Continent
Broadest geographic filter. Useful for top-level navigation like “Asian cuisine” or “European cuisine”.
| Parameter | Type | Description |
|---|---|---|
| continentRequired | string | One of: Asia, Europe, Africa, Americas, Oceania, Global |
| page | integer | Page number (default: 1) |
| limit | integer | Results per page (default: 20, max: 100) |
curl -X GET "https://api.foodashi.com/api/recipes/by-continent?continent=Asia&limit=30" \ -H "X-Api-Key: YOUR_API_KEY"
/api/recipes/by-country
Hobby+
1 call
Browse by Country
Filter recipes by a specific country using its ISO-3166-1 alpha-2 code (e.g. JP for Japan, IT for Italy, MX for Mexico). Perfect for country-flag navigation UIs.
| Parameter | Type | Description |
|---|---|---|
| countryRequired | string | ISO-3166-1 alpha-2 country code (case-insensitive). Example: JP, IT, BR, MX, IN, MY. |
| page | integer | Page number (default: 1) |
| limit | integer | Results per page (default: 20, max: 100) |
curl -X GET "https://api.foodashi.com/api/recipes/by-country?country=JP&limit=25" \ -H "X-Api-Key: YOUR_API_KEY"
Response includes filter.cuisines_in_country — the list of cuisines mapped to that country, so you can display them as sub-filters in your UI.
/api/recipes/filter
Indie+
1 call
Multi-Filter Search
The power user’s endpoint. Combine any subset of the 28 filters below in a single call — location, diet, time, cost, equipment, tags, nutrition, sort. All filters are optional and AND-combined. Empty filter values are ignored.
?season=Spring&dish_type=Salad&max_time_minutes=30&diet=Vegan&min_servings=4
For valid values of each param, jump to the Reference: Valid values section.
Filters — Location
| Parameter | Type | Description |
|---|---|---|
| cuisine | string | Exact cuisine name. See 73 valid cuisines. Example: Italian, Thai, Sri Lankan. |
| region | string | Sub-continental region. See 14 valid regions. Example: Southeast Asia, Southern Europe. |
| continent | string | Africa, Americas, Asia, Europe, or Oceania. |
| country | string | ISO-3166-1 alpha-2 code. Maps to all cuisines for that country. Example: JP, IT, MX. |
Filters — Type, Style & Difficulty
| Parameter | Type | Description |
|---|---|---|
| meal_type | string | WHEN it’s eaten. See 16 valid meal types. Example: Breakfast, Dinner, Snack. |
| dish_type | string | WHAT it structurally is. See 107 valid dish types. Example: Salad, Soup, Curry, Pasta, Cake. Different from meal_type — a Salad can be a Lunch, a Side, or a Main. |
| difficulty | string | Easy, Medium, or Hard. |
Filters — Diet, Tags & Allergens
| Parameter | Type | Description |
|---|---|---|
| diet | string | One dietary tag the recipe must satisfy. See 11 dietary tags. Example: Vegan, Gluten-Free. |
| tag | string | Single free-form tag the recipe must have. Example: weeknight-dinner, comfort-food. |
| include_tags | CSV | Comma-separated tags — recipe must contain all of them. Example: comfort-food,weeknight-dinner. |
| exclude_tags | CSV | Comma-separated tags — recipe must contain none of them. |
| exclude_allergens | CSV | EU-14 allergens to filter out. See 14 valid allergens. Example: Eggs,Dairy,Nuts. |
Filters — Time, Servings & Cost
| Parameter | Type | Description |
|---|---|---|
| max_time_minutes | integer | Max total time (prep + cook + rest), in minutes. |
| min_time_minutes | integer | Min total time. Combine with max_time_minutes for a range. |
| min_servings | integer | Minimum servings (useful for batch cooking). |
| max_servings | integer | Maximum servings. |
| cost_level_max | integer | 1 (cheap), 2 (medium), or 3 (expensive). |
Filters — Technique & Context
| Parameter | Type | Description |
|---|---|---|
| cooking_method | string | Single technique. See 59 valid methods. Example: baked, grilled, steamed, stir-fried. |
| equipment | string | Single piece of equipment the recipe uses. Example: wok, cast iron skillet, oven, slow cooker. |
| occasion | string | See 7 valid occasions. Example: Weeknight, Holiday, Barbecue. |
| season | string | Spring, Summer, Fall (or alias Autumn), Winter, or Year-Round. Year-Round acts as a wildcard — year-round recipes appear in every specific-season query. See browse conventions. |
Filters — Nutrition & Quality
| Parameter | Type | Description |
|---|---|---|
| max_calories | number | Max kcal per serving. |
| min_protein_g | number | Min grams of protein per serving. |
| min_fiber_g | number | Min grams of fiber per serving. |
| max_sodium_mg | number | Max milligrams of sodium per serving. |
| nutrimetric_min_grade | string | Foodashi NutriMetric grade gate. A, B, C, D, or E. Value passes if recipe’s grade is ≥ requested grade (A is best). |
| has_image | boolean | true = only recipes with images; false = only without. |
Sort & Pagination
| Parameter | Type | Description |
|---|---|---|
| sort | string | recent (default, newest first), time_asc (fastest first), time_desc, nutrimetric (best score first), or random. |
| random | boolean | Shuffle results — see browse conventions. |
| limit | integer | Results per page (default: 20, max: 100). |
| page | integer | Page number (default: 1). |
Examples
Quick weeknight dinners (under 30 min, max difficulty medium)
curl -X GET "https://api.foodashi.com/api/recipes/filter?meal_type=Dinner&max_time_minutes=30&difficulty=Easy&sort=time_asc&limit=50" \ -H "X-Api-Key: YOUR_API_KEY"
Healthy high-protein vegan meals (Grade B+, min 25g protein)
curl -X GET "https://api.foodashi.com/api/recipes/filter?diet=Vegan&min_protein_g=25&nutrimetric_min_grade=B&sort=nutrimetric&limit=30" \ -H "X-Api-Key: YOUR_API_KEY"
Mediterranean cuisine, no eggs or nuts, with image, Grade A nutrition
curl -X GET "https://api.foodashi.com/api/recipes/filter?region=Southern%20Europe&exclude_allergens=Eggs,Nuts&has_image=true&nutrimetric_min_grade=A&limit=100" \ -H "X-Api-Key: YOUR_API_KEY"
Response Shape
{
"recipes": [
{ "id", "title", "cuisine", "region", "country_code",
"image_url", "total_time_minutes", "difficulty",
"dietary_tags", "servings", "tags", ... }
],
"filters_applied": { // Echoed back so you can verify your query was parsed correctly
"cuisine": "Italian",
"max_time_minutes": 30,
"sort": "time_asc"
},
"pagination": { "page": 1, "limit": 50, "total": 342, "has_more": true }
}
Performance tips
- • All filters resolve to indexed columns — even combining 10 filters returns in <200ms.
- • Use
include_tagssparingly; it performs a GIN array-contains scan. Max 10 tags. - •
limit=100is the ceiling. For >100 results, paginate withpage=2, etc. - •
filters_appliedin the response tells you which parameters the server actually honoured — useful for debugging typos.
Reference: Valid values
Every filter param above expects an exact value from one of the catalogues below. Case-sensitive unless noted. Copy-paste straight into your query string.
dish_type — 107 valid values
Pass to dish_type=. Describes what the dish structurally is — different from meal_type (when it's eaten). A "Salad" can be a Lunch, a Side, or a Main.
SoupStewCurryPorridgeSandwichWrapBurgerHot DogSpring RollPastaNoodle DishStuffed PastaRice DishFried RiceSushiGrain DishSaladSlawCevicheTartareStir-FryGrilled DishRoastBraised DishSteamed DishBarbecueSkewerFried DishFritterCutletCroquetteCasseroleGratinQuicheSavory PieSouffléDumplingEmpanadaHand PiePizzaCalzoneStuffed FlatbreadBreadFlatbreadCornbreadPancakeCrepeWaffleOmeletScrambled EggsEgg DishBean DishLentil DishTofu DishVegetable DishStuffed VegetableFondueCheese PlateSausageCharcuterieCured FishJerkySteakRoast MeatRibsMeatballGround Meat DishFish FilletWhole FishShellfishCakeCheesecakeCookieSweet PiePastryPuddingCustardFrozenConfectionJellyAssembledCrumbleSauceDressingMarinadeDipSpreadSpice PasteYogurt DishPickleJamCompoteSmoothieMilkshakeJuiceCocktailMocktailTeaCoffeeHot ChocolateFermented BeverageCrackerGranolaEnergy BarPopcornMixed PlateBowlmeal_type — 16 valid values
Pass to meal_type=. Describes WHEN it's eaten or its role at the table. Different recipes can share a dish_type but have different meal_types (a Salad can be Lunch, Side, or Main).
BreakfastBrunchLunchDinnerLate NightAppetizerSideMain CourseDessertSnackTea TimeAperitifDrinkStreet FoodCondimentComponentcuisine — 73 valid values
Pass to cuisine=. Case-sensitive exact match.
AustrianBelgianBritishCzechDanishFinnishFrenchGeorgianGermanGreekHungarianIcelandicIrishItalianNorwegianPolishPortugueseRussianSpanishSwedishUkrainianChineseJapaneseKoreanTibetanBurmeseCambodianFilipinoIndonesianLaotianMalaysianSingaporeanThaiVietnameseBangladeshiIndianNepalesePakistaniSri LankanEgyptianIraqiIsraeliLebaneseMoroccanPersianSaudi ArabianSyrianTunisianTurkishEthiopianGhanaianKenyanNigerianSenegaleseSouth AfricanTanzanianAmericanHawaiianMexicanArgentineBarbadianBolivianBrazilianChileanColombianCubanDominicanEcuadorianJamaicanPeruvianPuerto RicanTrinidadianVenezuelanAustralianregion — 14 valid values
Pass to region=. Sub-continental grouping.
CaribbeanEast AsiaEastern EuropeLatin AmericaMiddle EastNorth AfricaNorth AmericaNorthern EuropeOceaniaSouth AsiaSoutheast AsiaSouthern EuropeSub-Saharan AfricaWestern Europecontinent — 5 valid values
AfricaAmericasAsiaEuropeOceaniadiet — 11 dietary tags
Pass to diet=. Recipe must satisfy this dietary constraint. Note: include_tags / exclude_tags use a different (free-form) tag namespace; this diet param is the curated dietary-restriction list.
VeganVegetarianPescatarianGluten-FreeDairy-FreeEgg-FreeNut-FreeSoy-FreeLow-FODMAPPaleoWhole30exclude_allergens — EU-14 list
Pass a CSV like exclude_allergens=Eggs,Dairy,Nuts. Mapped to EU Regulation 1169/2011 — recipes containing any listed allergen are filtered out.
GlutenCrustaceansEggsFishPeanutsSoybeansDairyTree NutsCeleryMustardSesameSulfitesLupinMolluscscooking_method — 59 valid values
Pass to cooking_method=. Lowercase. Single value (intersect with other filters for AND).
bakedblanchedblendedboiledbraisedbriningbrowningcaramelizingchillingcookedcoolingcrystallizingcuringdeep fryingdeep-frieddry-frieddum-cookingfermentedfermentingfriedgriddle-cookinggriddlinggrilledgrindingkneadingmarinatedmarinatingmashingmeltingmixingno-cookoven dryingpan-friedpar-fryingpickledpicklingpoachedproofingrawreducingrisingroastedsauteedscorchingsearedsettingsimmeredsmokedsoakingsteamedstir-friedtemperingtoastedtoastingtossingwater-bathwhippedwhiskingoccasion — 7 valid values
Pass to occasion=. Title-case.
EverydayWeeknightFamily MealMeal PrepBarbecuePartyHolidayseason — 5 valid values
Pass to season=. Case-insensitive. Autumn is accepted as an alias for Fall. Year-Round acts as a wildcard — year-round recipes appear in every specific-season query.
SpringSummerFallWinterYear-Roundequipment — 300+ values (free-form)
Pass to equipment=. The catalog has 300+ distinct equipment names — pass any specific one for an exact match. Common values:
wokovenblenderfood processorgrillgrill pancast iron skilletdutch ovenslow cookerrice cookermortar and pestlestand mixerhand mixersteamertagineclaypotdeep fryermicrowavewaffle ironrolling pinmandolinecountry — ISO 3166-1 alpha-2 codes
Pass an ISO country code to country=. Foodashi maps it to all cuisines with that flag (e.g. US covers American, Hawaiian, Cajun, Creole). Common examples:
JPITFRMXCNINTHVNGRESPTBRARUSGBDEKRTR/api/recipes/by-diet
Hobby+
1 call
Browse by Diet
Filter recipes by dietary tag. Searches within the recipe's dietary_tags array.
| Parameter | Type | Description |
|---|---|---|
| diet Required | stringRequired | Dietary tag (e.g., "Vegan", "Keto", "Gluten-Free") |
| page | integer | Page number (default: 1) |
| limit | integer | Results per page (default: 20, max: 100) |
curl -X GET "https://api.foodashi.com/api/recipes/by-diet?diet=Vegan&limit=10" \ -H "X-Api-Key: YOUR_API_KEY"
/api/recipes/by-meal-type
Hobby+
1 call
Browse by Meal Type
Filter recipes by meal type such as Breakfast, Lunch, Dinner, Snack, or Dessert.
| Parameter | Type | Description |
|---|---|---|
| type Required | stringRequired | Meal type (e.g., "Breakfast", "Dinner", "Dessert") |
| page | integer | Page number (default: 1) |
| limit | integer | Results per page (default: 20, max: 100) |
curl -X GET "https://api.foodashi.com/api/recipes/by-meal-type?type=Breakfast" \ -H "X-Api-Key: YOUR_API_KEY"
/api/recipes/by-time
Hobby+
1 call
Browse by Time
Find quick recipes by specifying a maximum total cook time in minutes.
| Parameter | Type | Description |
|---|---|---|
| maxMinutes | integerRequired | Maximum total time in minutes (e.g., 30) |
| page | integer | Page number (default: 1) |
| limit | integer | Results per page (default: 20, max: 100) |
curl -X GET "https://api.foodashi.com/api/recipes/by-time?maxMinutes=30" \ -H "X-Api-Key: YOUR_API_KEY"
/api/recipes/by-difficulty
Hobby+
1 call
Browse by Difficulty
Filter recipes by difficulty level: Easy, Medium, or Hard.
| Parameter | Type | Description |
|---|---|---|
| difficulty Required | stringRequired | Difficulty level: "Easy", "Medium", or "Hard" |
| page | integer | Page number (default: 1) |
| limit | integer | Results per page (default: 20, max: 100) |
curl -X GET "https://api.foodashi.com/api/recipes/by-difficulty?difficulty=Easy" \ -H "X-Api-Key: YOUR_API_KEY"
/api/recipes/count
Hobby+
1 call
Recipe Count
Get the total number of published recipes. Supports optional filters to count subsets.
| Parameter | Type | Description |
|---|---|---|
| cuisine | string | Filter by cuisine |
| diet | string | Filter by dietary tag |
| difficulty | string | Filter by difficulty |
curl -X GET "https://api.foodashi.com/api/recipes/count?cuisine=Italian" \ -H "X-Api-Key: YOUR_API_KEY"
/api/recipes/cuisines
Hobby+
1 call
List Cuisines
Get all cuisines that have published recipes, with recipe counts for each.
curl -X GET "https://api.foodashi.com/api/recipes/cuisines" \ -H "X-Api-Key: YOUR_API_KEY"
/api/recipes/diets
Hobby+
1 call
List Dietary Tags
Get all dietary tags with recipe counts. Useful for dietary filter UIs.
curl -X GET "https://api.foodashi.com/api/recipes/diets" \ -H "X-Api-Key: YOUR_API_KEY"
/api/autocomplete
Indie+
1 call
Autocomplete
Extremely fast search for UI search bars. Returns lightweight titles matching the query.
| Parameter | Type | Description |
|---|---|---|
| query | stringRequired | Search text (min 2 chars) |
| limit | integer | Max results (default 5, max 10) |
curl -X GET "https://api.foodashi.com/api/autocomplete?query=chick" \ -H "X-Api-Key: YOUR_API_KEY"
/api/bulk-lookup
Indie+
2 calls
Bulk Lookup
Fetch details for multiple recipes in a single API call. Essential for "Favorites" lists.
| Parameter | Type | Description |
|---|---|---|
| ids | stringRequired | Comma-separated list of IDs (e.g. 101,102) |
curl -X GET "https://api.foodashi.com/api/bulk-lookup?ids=501,892,120" \ -H "X-Api-Key: YOUR_API_KEY"
/api/similar
Indie+
1 call
Similar Recipes
Uses Vector embeddings to find recipes that are semantically similar to the provided ID. Perfect for "You might also like" features.
| Parameter | Type | Description |
|---|---|---|
| id | integerRequired | Source Recipe ID |
| limit | integer | Max results (default 3) |
curl -X GET "https://api.foodashi.com/api/similar?id=5291" \ -H "X-Api-Key: YOUR_API_KEY"
/api/recipes/by-cooking-method
Indie+
1 call
Browse by Cooking Method
Find recipes by cooking technique such as grilling, baking, stir-frying, or slow cooking.
| Parameter | Type | Description |
|---|---|---|
| method | stringRequired | Cooking method (e.g., "grilling", "baking", "stir-frying") |
| page | integer | Page number (default: 1) |
| limit | integer | Results per page (default: 20, max: 100) |
curl -X GET "https://api.foodashi.com/api/recipes/by-cooking-method?method=grilling" \ -H "X-Api-Key: YOUR_API_KEY"
/api/recipes/by-equipment
Indie+
1 call
Browse by Equipment
Find recipes that use specific kitchen equipment like air fryer, slow cooker, or wok.
| Parameter | Type | Description |
|---|---|---|
| equipment | stringRequired | Equipment name (e.g., "oven", "air fryer", "slow cooker") |
| page | integer | Page number (default: 1) |
| limit | integer | Results per page (default: 20, max: 100) |
curl -X GET "https://api.foodashi.com/api/recipes/by-equipment?equipment=air+fryer" \ -H "X-Api-Key: YOUR_API_KEY"
/api/recipes/by-occasion
Indie+
1 call
Browse by Occasion
Find recipes perfect for holidays and events like Christmas, Thanksgiving, BBQ parties, or date night.
| Parameter | Type | Description |
|---|---|---|
| occasion | stringRequired | Occasion name (e.g., "Christmas", "BBQ", "Date Night") |
| page | integer | Page number (default: 1) |
| limit | integer | Results per page (default: 20, max: 100) |
curl -X GET "https://api.foodashi.com/api/recipes/by-occasion?occasion=Christmas" \ -H "X-Api-Key: YOUR_API_KEY"
/api/recipes/by-season
Indie+
1 call
Browse by Season
Find seasonal recipes for a given time of year. Returns recipes whose seasons array contains the requested season OR Year-Round — so year-round dishes surface in every season filter. See browse conventions for full details.
| Parameter | Type | Description |
|---|---|---|
| season | stringRequired | One of: Spring, Summer, Fall (or alias Autumn), Winter, Year-Round. Case-insensitive. |
| random | boolean | Shuffle results — see browse conventions. Aliases: sort=random, shuffle=true. |
| page | integer | Page number (default: 1). |
| limit | integer | Results per page (default: 20, max: 100). |
curl -X GET "https://api.foodashi.com/api/recipes/by-season?season=Spring&limit=20" \ -H "X-Api-Key: YOUR_API_KEY"
curl -X GET "https://api.foodashi.com/api/recipes/by-season?season=Spring&random=true&limit=10" \ -H "X-Api-Key: YOUR_API_KEY" # Each request returns a different 10 — fresh shuffle every time.
/api/search
Indie+
5 calls
Smart Search
Vector-powered semantic search. Find recipes by describing what you want in natural language — e.g. "spicy dinner under 500 cals", "comfort food for winter", "easy weeknight pasta".
Always returns results
If the embedding service is temporarily unavailable (rate limit, quota, network), this endpoint automatically falls back to a text match on title / title_english / description so your app keeps working. When this happens the response includes meta.mode = "text_fallback" with a note explaining the degradation. Vector-mode and text-fallback responses share the same shape.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| q Required | stringRequired | Natural language search query (e.g. "spicy dinner under 500 cals") |
| limit | integer | Not configurable — returns a fixed top-N set (no client limit). |
curl -X GET "https://api.foodashi.com/api/search?q=comfort+food+for+winter&limit=5" \ -H "X-Api-Key: YOUR_API_KEY"
/api/recipes/by-nutrients
Pro+
1 call
Browse by Nutrients
Filter recipes by nutrient ranges. Find high-protein, low-calorie, or custom macro recipes.
| Parameter | Type | Description |
|---|---|---|
| minCalories | number | Minimum calories per serving |
| maxCalories | number | Maximum calories per serving |
| minProtein | number | Minimum protein (g) per serving |
| maxProtein | number | Maximum protein (g) per serving |
| minCarbs | number | Minimum carbs (g) per serving |
| maxCarbs | number | Maximum carbs (g) per serving |
| minFat | number | Minimum fat (g) per serving |
| maxFat | number | Maximum fat (g) per serving |
| page | integer | Page number (default: 1) |
| limit | integer | Results per page (default: 20, max: 100) |
curl -X GET "https://api.foodashi.com/api/recipes/by-nutrients?minProtein=25&maxCalories=500" \ -H "X-Api-Key: YOUR_API_KEY"
/api/recipes/by-ingredients
Indie+
2 calls
Browse by Ingredients
Find recipes that contain (or avoid) specific ingredients. Just send ingredient names — no need to look up UUIDs first. Powers "what’s in my fridge", allergen-avoidance, and pantry-based recipe discovery.
When to use this vs /api/ingredients/:id/recipes
Use this endpoint when you have an ingredient name (typical case — user types into a search box). Use /api/ingredients/:id/recipes only when you already have a specific canonical UUID from the autocomplete endpoint and want recipes that link to that exact entry.
| Parameter | Type | Description |
|---|---|---|
| include | stringRequired* | Comma-separated ingredient names to include. Each term is matched independently. Multi-term acts as AND — recipes must contain all listed terms. Examples: chicken, chicken,rice, red onion,garlic. |
| exclude | string | Comma-separated ingredient names to exclude. Recipes containing any excluded term are filtered out. Example: nuts,dairy. |
| random | boolean | Shuffle results — see browse conventions. |
| page | integer | Page number (default: 1). |
| limit | integer | Results per page (default: 20, max: 100). |
* At least one of include or exclude is required.
Matching rules — no surprises
- • Case-insensitive:
Red Onion,red onion,RED ONIONall match identically. - • Whitespace-normalized:
red onion(extra spaces) matches the same asred onion. - • Plural-tolerant:
onion=onions,tomato=tomatoes,cherry=cherries. No need to guess what form the catalogue uses. - • Substring match:
chickenmatches "chicken breast", "ground chicken", "chicken thigh", etc. To be more specific, use a longer phrase likechicken breast. - • Typo-intolerant:
red ononreturns 0. For fuzzy/typo matching, hit/api/ingredients/autocompletefirst and pass the corrected name. - • Resolver-aware: even when the catalogue stores a recipe’s ingredient as generic ("Onions, raw") rather than the specific variant ("Red Onions"), this endpoint still finds recipes that mention
red onionin their original ingredient text. You get the result you expect without having to know about internal canonical IDs.
curl -X GET "https://api.foodashi.com/api/recipes/by-ingredients?include=red%20onion&limit=10" \ -H "X-Api-Key: YOUR_API_KEY"
curl -X GET "https://api.foodashi.com/api/recipes/by-ingredients?include=chicken,rice&limit=20" \ -H "X-Api-Key: YOUR_API_KEY"
curl -X GET "https://api.foodashi.com/api/recipes/by-ingredients?include=chicken,rice&exclude=nuts,dairy" \ -H "X-Api-Key: YOUR_API_KEY"
{
"recipes": [
{
"id": "03905874-4035-4754-9418-13c687d7f429",
"title": "আলু ভর্তা",
"title_english": "Mashed Potato Bhorta",
"image_url": "https://.../recipe-...-1776634763681.png",
"cuisine": "Bangladeshi",
"cuisine_code": "BD",
"total_time_minutes": 22,
"difficulty": "Easy",
"servings": 4,
"dietary_tags": ["Vegan", "Gluten-Free", "Nut-Free", "Soy-Free"],
"tags": ["comfort-food", "dinner", "side-dish"],
"published_at": "2026-05-06T11:33:35.731+00:00"
}
],
"filter": {
"include": ["red onion"],
"exclude": []
},
"pagination": {
"page": 1,
"limit": 10,
"total": 10,
"total_pages": 1
}
}
Error responses
| Status | Body | When |
|---|---|---|
400 | {"error":"At least one of include or exclude parameter required"} | Neither include nor exclude provided. |
400 | {"error":"Maximum 10 ingredients per include/exclude list"} | Too many comma-separated terms. |
200 | {"recipes":[],"pagination":{"total":0,...}} | No matches. Empty result, not an error. |
/api/recipes/:id/nutrition
Indie+
2 calls
Recipe Nutrition
Get a full nutrition breakdown for a recipe, computed live from its ingredients. Includes macros, vitamins, and minerals per serving.
| Parameter | Type | Description |
|---|---|---|
| :id | uuidRequired | Recipe UUID |
curl -X GET "https://api.foodashi.com/api/recipes/{id}/nutrition" \ -H "X-Api-Key: YOUR_API_KEY"
/api/recipes/:id/allergens
Indie+
1 call
Recipe Allergens
EU-compliant allergen declaration with all 14 regulated allergens, hidden allergen sources, and cross-contamination warnings.
curl -X GET "https://api.foodashi.com/api/recipes/{id}/allergens" \ -H "X-Api-Key: YOUR_API_KEY"
/api/recipes/:id/beverages
Indie+
1 call
Beverage Pairing
AI-generated beverage pairing suggestions including wine, beer, cocktails, and non-alcoholic options.
curl -X GET "https://api.foodashi.com/api/recipes/{id}/beverages" \ -H "X-Api-Key: YOUR_API_KEY"
/api/recipes/:id/scale
Indie+
1 call
Scale Servings
Recalculate all ingredient quantities for a different number of servings.
| Parameter | Type | Description |
|---|---|---|
| :id | uuidRequired | Recipe UUID |
| servings | integerRequired | Target number of servings (1-100) |
curl -X GET "https://api.foodashi.com/api/recipes/{id}/scale?servings=8" \ -H "X-Api-Key: YOUR_API_KEY"
/api/recipes/:id/taste
Pro+
1 call
Taste Profile
6-axis taste profile rated 0-10: sweetness, saltiness, sourness, bitterness, savoriness, and spiciness.
curl -X GET "https://api.foodashi.com/api/recipes/{id}/taste" \ -H "X-Api-Key: YOUR_API_KEY"
/api/recipes/:id/sustainability
Pro+
1 call
Sustainability
Environmental impact data including Eco-Score (A-E), carbon footprint estimate, and sustainability tips.
curl -X GET "https://api.foodashi.com/api/recipes/{id}/sustainability" \ -H "X-Api-Key: YOUR_API_KEY"
/api/recipes/:id/medical
Pro+
1 call
Medical Cautions
Medical caution flags for conditions like diabetes, hypertension, gout, and kidney disease.
curl -X GET "https://api.foodashi.com/api/recipes/{id}/medical" \ -H "X-Api-Key: YOUR_API_KEY"
/api/recipes/compare
Pro+
1 call
Compare Recipes
Side-by-side nutritional comparison of 2-5 recipes.
| Parameter | Type | Description |
|---|---|---|
| ids | stringRequired | Comma-separated recipe UUIDs (2-5 IDs) |
curl -X GET "https://api.foodashi.com/api/recipes/compare?ids=uuid1,uuid2" \ -H "X-Api-Key: YOUR_API_KEY"
Ingredients API — which endpoint do I use?
Foodashi exposes several ingredient endpoints. Pick by use case:
| I want to… | Endpoint | Why |
|---|---|---|
| Find recipes that use a specific ingredient (typed by user) | /api/recipes/by-ingredients?include=<name> | Single call. Handles case, plural, whitespace, generic-vs-variant collapse. Default choice for search bars. |
| Power a typeahead/autocomplete UI | /api/ingredients/autocomplete?q=<prefix> | Fast prefix + substring search. Quality-ranked. Returns UUIDs for follow-up calls. |
| Get nutrition/details for a specific ingredient | /api/ingredients/:id | Full nutrition breakdown + portions. Requires UUID from autocomplete. |
| Get recipes that link to one exact canonical UUID | /api/ingredients/:id/recipes | Use only when you already have the UUID. For name lookup, see the top row. |
| Find ingredients in a food group (Produce, Dairy, …) | /api/ingredients/by-food-group?group=<name> | Browse by category. |
| Convert units (cups ↔ grams) for an ingredient | /api/ingredients/:id/convert | Uses ingredient-specific portion weights. |
3-minute quick start
curl "https://api.foodashi.com/api/recipes/by-ingredients?include=red%20onion&limit=10" \ -H "X-Api-Key: YOUR_API_KEY"
That’s it. One call, name → recipes. No UUID dance required.
/api/ingredients/search
Hobby+
1 call
Search Ingredients
Search through 340,000+ ingredients from our curated ingredient database. Supports filtering by type (ingredients vs branded products).
| Parameter | Type | Description |
|---|---|---|
| q Required | stringRequired | Search query (e.g., "chicken", "tomato") |
| limit | integer | Results per page (default: 20, max: 100) |
| offset | integer | Pagination offset (default: 0) |
| filter | string | Filter type: "all", "ingredients", or "branded" (default: all) |
curl -X GET "https://api.foodashi.com/api/ingredients/search?q=chicken&limit=5" \ -H "X-Api-Key: YOUR_API_KEY"
/api/ingredients/autocomplete
Hobby+
1 call
Ingredient Autocomplete
Fast prefix & substring autocomplete for ingredient search bars. Returns canonical name, UUID, food group, category, and type. Quality-ranked so the most authoritative match comes first.
Tip
You usually don’t need to call autocomplete + then a recipe lookup. /api/recipes/by-ingredients?include=<name> handles the name → recipe lookup in a single call with built-in case & plural tolerance. Use autocomplete only when you need to surface a typeahead UI to the user.
| Parameter | Type | Description |
|---|---|---|
| q | stringRequired | Search query (min 2 chars). |
| limit | integer | Max results (default: 10, max: 20). |
curl -X GET "https://api.foodashi.com/api/ingredients/autocomplete?q=red%20onion" \ -H "X-Api-Key: YOUR_API_KEY"
{
"results": [
{
"id": "d642a69d-3c98-4c55-83a5-f231cde9eebd",
"name": "Red Onion",
"food_group": "11",
"category": "Produce",
"ingredient_type": "raw"
},
{
"id": "f67dbb93-479b-4ea1-8a50-d6dc2cc33771",
"name": "Red Onions",
"food_group": "11",
"category": "Produce",
"ingredient_type": "raw"
}
],
"query": "red onion",
"count": 2
}
/api/ingredients/food-groups
Hobby+
1 call
List Food Groups
Get all food groups with ingredient counts. Useful for building category navigation.
curl -X GET "https://api.foodashi.com/api/ingredients/food-groups" \ -H "X-Api-Key: YOUR_API_KEY"
/api/ingredients/:id
Indie+
1 call
Ingredient Details
Get detailed nutrition information for a specific ingredient including macros, vitamins, minerals, and available portion sizes.
| Parameter | Type | Description |
|---|---|---|
| :id | uuidRequired | Ingredient UUID from search results |
{
"id": "abc123-def456...",
"name": "Chicken breast, raw",
"food_group": "Poultry Products",
"nutrition_per_100g": {
"calories": 165,
"protein": 31,
"fat": 3.6,
"carbohydrates": 0
},
"portions": [
{ "unit": "breast", "grams": 174 }
]
}
/api/ingredients/:id/convert
Indie+
1 call
Unit Conversion
Convert between different units for a specific ingredient using real portion data.
| Parameter | Type | Description |
|---|---|---|
| :id | uuidRequired | Ingredient UUID |
| amount | numberRequired | Amount to convert |
| from_unit | stringRequired | Source unit (e.g., "cup", "tbsp") |
| to_unit | stringRequired | Target unit (e.g., "g", "ml") |
curl -X GET "https://api.foodashi.com/api/ingredients/{id}/convert?amount=2&from_unit=cup&to_unit=g" \ -H "X-Api-Key: YOUR_API_KEY"
/api/ingredients/:id/substitutes
Indie+
1 call
Ingredient Substitutes
Find nutritionally similar substitutes for an ingredient based on food group and macro profile.
| Parameter | Type | Description |
|---|---|---|
| :id | uuidRequired | Ingredient UUID from search results |
curl -X GET "https://api.foodashi.com/api/ingredients/{id}/substitutes" \ -H "X-Api-Key: YOUR_API_KEY"
/api/ingredients/:id/recipes
Indie+
1 call
Recipes Using Ingredient (by UUID)
Find all published recipes that use the canonical ingredient identified by UUID. The UUID typically comes from /api/ingredients/autocomplete or /api/ingredients/search.
For a name-based lookup, prefer /api/recipes/by-ingredients
This endpoint matches by exact canonical UUID. If you have an ingredient name (e.g. "red onion"), call /api/recipes/by-ingredients?include=red%20onion instead — it handles case, plural, whitespace, and resolves variants automatically.
| Parameter | Type | Description |
|---|---|---|
| :id | uuidRequired | Ingredient canonical UUID (from autocomplete or search). |
| random | boolean | Shuffle the matched recipes — see browse conventions. |
| page | integer | Page number (default: 1). |
| limit | integer | Results per page (default: 20, max: 50). |
Smart text fallback (2026-05-10)
If 0 recipes link to the exact canonical UUID, this endpoint automatically falls back to a text search using the canonical’s display name. So you get consistent results even when the ingredient resolver collapsed a variant (e.g. recipes mentioning "red onion" linking to generic "Onions, raw"). Hidden from the API consumer — you just see the right recipes.
curl -X GET "https://api.foodashi.com/api/ingredients/d642a69d-3c98-4c55-83a5-f231cde9eebd/recipes?limit=10" \ -H "X-Api-Key: YOUR_API_KEY"
{
"ingredient_id": "d642a69d-3c98-4c55-83a5-f231cde9eebd",
"recipes": [
{
"id": "eb0b3a12-8394-45ac-aa4c-d42f13e09ce5",
"title": "වම්බටු මෝජු",
"title_english": "Sri Lankan Eggplant Moju",
"image_url": "https://.../recipe-...-1776635175073.png",
"cuisine": "Sri Lankan",
"total_time_minutes": 66,
"difficulty": "Medium",
"servings": 6,
"dietary_tags": ["Vegan", "Gluten-Free"]
}
],
"pagination": { "page": 1, "limit": 10, "total": 10, "total_pages": 1 }
}
Behavior notes
- • If 0 direct matches exist on the canonical link, the endpoint falls back to a text search using the canonical’s display name. You don’t need to know whether the recipe linked to the generic or specific variant — the result set is consistent.
- • Returns
400if:idis not a valid UUID. - • Returns
200with emptyrecipesarray when no matches (not a 404).
/api/ingredients/:id/allergens
Indie+
1 call
Ingredient Allergen Check
Check which EU-14 allergens an ingredient contains or may contain.
curl -X GET "https://api.foodashi.com/api/ingredients/{id}/allergens" \ -H "X-Api-Key: YOUR_API_KEY"
/api/ingredients/by-food-group
Indie+
1 call
Browse by Food Group
Browse ingredients within a food group. Accepts either a friendly category name ("Produce", "Dairy", "Bakery", "Pantry") or a USDA numeric food-group code ("11" for Vegetables). Case-insensitive for names.
| Parameter | Type | Description |
|---|---|---|
| group | stringRequired | Category name (e.g. Produce, Dairy) OR USDA numeric code (e.g. 11). Discover available groups via /api/ingredients/food-groups. |
| random | boolean | Shuffle — see browse conventions. |
| page | integer | Page number (default: 1). |
| limit | integer | Results per page (default: 20, max: 100). |
curl -X GET "https://api.foodashi.com/api/ingredients/by-food-group?group=Produce&limit=20" \ -H "X-Api-Key: YOUR_API_KEY"
curl -X GET "https://api.foodashi.com/api/ingredients/by-food-group?group=11&limit=20" \ -H "X-Api-Key: YOUR_API_KEY"
/api/ingredients/:id/portions
Indie+
1 call
Ingredient Portions
Get all available portion sizes for an ingredient with gram weight equivalents.
curl -X GET "https://api.foodashi.com/api/ingredients/{id}/portions" \ -H "X-Api-Key: YOUR_API_KEY"
/api/ingredient-substitute
Hobby+
1 call
Quick Ingredient Substitute
Lightweight ingredient-name substitute lookup (no UUID needed). Pass an ingredient name as a query parameter; receive common substitutes from a curated lookup table. For nutritionally-accurate substitutes use /api/ingredients/:id/substitutes instead.
| Parameter | Type | Description |
|---|---|---|
| ingredient or name or q Required | string | Ingredient name (e.g. "butter", "egg", "buttermilk"). Case-insensitive; partial matches accepted. All three parameter names are accepted — use whichever fits your code style. |
curl -X GET "https://api.foodashi.com/api/ingredient-substitute?ingredient=butter" -H "X-Api-Key: KEY" curl -X GET "https://api.foodashi.com/api/ingredient-substitute?name=butter" -H "X-Api-Key: KEY" curl -X GET "https://api.foodashi.com/api/ingredient-substitute?q=butter" -H "X-Api-Key: KEY"
/api/ingredients/semantic-search
Pro+
5 calls
Semantic Ingredient Search
Find ingredients by meaning, not just keywords. Powered by vector embeddings — handles synonyms, regional spellings, and culinary equivalents. Searching "cilantro" finds "coriander leaf"; "shrimp" finds "prawn". Useful for cross-locale recipe matching.
| Parameter | Type | Description |
|---|---|---|
| q Required | string | Natural-language ingredient query (e.g. "green peppers used in mexican food"). |
| limit | integer | Max results (default 10, max 50). |
| min_similarity | float | Cosine similarity threshold 0.0–1.0 (default 0.5). |
curl -X GET "https://api.foodashi.com/api/ingredients/semantic-search?q=fish%20sauce%20alternative&limit=5" \ -H "X-Api-Key: YOUR_API_KEY"
/api/recipes/analyze
Pro+
5 calls
Analyze Existing Recipe (by ID)
Run deep analysis on a specific recipe in our database — returns its full classification (meal_types, dish_types, occasions), nutrition breakdown, allergen detection, dietary tag confidence, and NutriMetric score. Use this to enrich recipe metadata in your app without re-running the full /api/analyze/text endpoint.
| Body Field | Type | Description |
|---|---|---|
| recipe_id Required | uuid | Recipe UUID from /api/recipes or /api/search. |
curl -X POST "https://api.foodashi.com/api/recipes/analyze" \ -H "X-Api-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"recipe_id": "a1b2c3d4-e5f6-..."}'
/api/ingredients/batch
Pro+
5 calls
Batch Ingredient Lookup
Look up multiple ingredients at once. Much faster than individual searches for recipes.
{
"ingredients": ["chicken", "rice", "tomato"]
}
curl -X POST "https://api.foodashi.com/api/ingredients/batch" \ -H "X-Api-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"ingredients": ["chicken", "rice", "tomato"]}'
/api/ingredients/by-nutrient
Pro+
1 call
Ingredients by Nutrient
Find ingredients high or low in a specific nutrient. Great for meal planning and dietary goals.
| Parameter | Type | Description |
|---|---|---|
| nutrient | stringRequired | Nutrient name (e.g., "protein", "iron", "vitamin_c") |
| min | number | Minimum amount per 100g |
| max | number | Maximum amount per 100g |
| limit | integer | Results per page (default: 20, max: 100) |
curl -X GET "https://api.foodashi.com/api/ingredients/by-nutrient?nutrient=protein&min=20" \ -H "X-Api-Key: YOUR_API_KEY"
/api/ingredients/compare
Pro+
2 calls
Compare Ingredients
Side-by-side nutritional comparison of 2-5 ingredients per 100g.
| Parameter | Type | Description |
|---|---|---|
| ids | stringRequired | Comma-separated ingredient UUIDs (2-5 IDs) |
curl -X GET "https://api.foodashi.com/api/ingredients/compare?ids=uuid1,uuid2" \ -H "X-Api-Key: YOUR_API_KEY"
/api/nutrition/nutrients
Hobby+
1 call
Nutrient List
Get all tracked nutrients with their units and categories (macros, vitamins, minerals, etc.).
curl -X GET "https://api.foodashi.com/api/nutrition/nutrients" \ -H "X-Api-Key: YOUR_API_KEY"
/api/nutrition/daily-values
Hobby+
1 call
Daily Reference Values
FDA and EU daily reference intakes (DRI/RDI) for 30+ nutrients based on a 2,000 calorie diet.
curl -X GET "https://api.foodashi.com/api/nutrition/daily-values" \ -H "X-Api-Key: YOUR_API_KEY"
/api/nutrition/label
Pro+
3 calls
Nutrition Label
Generate FDA or EU format nutrition label data from custom ingredient lists. Returns structured label data with %DV calculations.
| Body Field | Type | Description |
|---|---|---|
| nutrition_per_serving | objectRequired | Pre-computed per-serving nutrients. Keys: calories, total_fat_g, saturated_fat_g, trans_fat_g, cholesterol_mg, sodium_mg, total_carbohydrate_g, dietary_fiber_g, total_sugars_g, added_sugars_g, protein_g |
| serving_size | string | Human-readable serving size, e.g. "2/3 cup (55g)" |
| servings_per_container | integer | Servings per container/recipe |
| format | string | "fda" or "eu" (default: "fda") |
curl -X POST "https://api.foodashi.com/api/nutrition/label" \ -H "X-Api-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"nutrition_per_serving":{"calories":250,"total_fat_g":12,"saturated_fat_g":3,"cholesterol_mg":30,"sodium_mg":470,"total_carbohydrate_g":31,"dietary_fiber_g":2,"total_sugars_g":5,"added_sugars_g":2,"protein_g":18},"serving_size":"2/3 cup (55g)","servings_per_container":8,"format":"fda"}'
/api/nutrition/nutrimetric
Pro+
3 calls
NutriMetric Calculator
Calculate NutriMetric nutrition quality score (A–F grade, 0-100 scale) for custom nutrition data. Uses 4 scoring pillars: protein density, calorie density, fat balance, and sodium. Category-aware for beverages, soups, desserts, and more.
| Body Field | Type | Description |
|---|---|---|
| nutrition_per_100g | objectRequired | Nutrients per 100g. Required: energy_kcal, protein_g, fat_g, carbohydrate_g, sodium_mg (sodium in mg). Bonus (improve score): fiber_g, saturated_fat_g, sugars_total_g. Legacy aliases accepted (calories, protein, total_fat, carbohydrate/carbs, sodium). |
| category | string | "main", "beverage", "soup", "salad", "dessert", or "snack" (auto-detected from nutrient profile if omitted) |
curl -X POST "https://api.foodashi.com/api/nutrition/nutrimetric" \ -H "X-Api-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"nutrition_per_100g":{"energy_kcal":190,"protein_g":12,"fat_g":8,"carbohydrate_g":15,"sodium_mg":400,"fiber_g":2,"saturated_fat_g":3,"sugars_total_g":5},"category":"main"}'
/api/convert
Hobby+
1 call
Unit Converter
General-purpose unit conversion with ingredient-specific density adjustments. Supports 30+ units including cups, tablespoons, ounces, and more.
| Parameter | Type | Description |
|---|---|---|
| amount | numberRequired | Amount to convert |
| from | stringRequired | Source unit (e.g., "cup", "tbsp", "oz") |
| to | string | Target unit (default: "g") |
| ingredient | string | Ingredient for density-adjusted conversion (e.g., "flour", "sugar") |
curl -X GET "https://api.foodashi.com/api/convert?amount=1&from=cup&to=g&ingredient=flour" \ -H "X-Api-Key: YOUR_API_KEY"
/api/allergens
Hobby+
1 call
Allergen List
Complete list of EU 14 regulated allergens plus extended allergens, with EU regulation metadata.
curl -X GET "https://api.foodashi.com/api/allergens" \ -H "X-Api-Key: YOUR_API_KEY"
/api/diets
Hobby+
1 call
Diet List
All 50+ canonical dietary tags grouped by category: lifestyle, low-carb, allergen-free, religious, nutritional, and regional.
curl -X GET "https://api.foodashi.com/api/diets" \ -H "X-Api-Key: YOUR_API_KEY"
/api/cuisines
Hobby+
1 call
Cuisine List
All 77 world cuisines grouped by region: East/Southeast Asia, South & Central Asia, Middle East, North Africa, Europe, Nordic, North America, South America, Caribbean, Pacific, and Sub-Saharan Africa.
curl -X GET "https://api.foodashi.com/api/cuisines" \ -H "X-Api-Key: YOUR_API_KEY"
/api/analyze/text
Pro+
30 calls
Analyze Recipe Text
Extract a recipe from raw text using AI, then run the full nutrition pipeline: 8 nutrients with %DV, EU 14 allergens, dietary tags, and NutriMetric scoring.
Request Body
| Field | Type | Description |
|---|---|---|
| text RequiredRequired | string | Raw recipe text (blog post, pasted instructions, typed). Min 20 characters. |
| servings | integer | Override detected servings count. |
Response Highlights
- recipe — Extracted title, servings, ingredients with amounts/units/preparation
- nutrition — per_serving, per_100g, per_recipe with 8 nutrients + %DV
- allergens / may_contain — EU 14 allergen detection with sources
- dietary_tags — 50+ tags (Vegan, Keto, Halal, etc.)
- nutrimetric — Proprietary nutrition grade (A–F, A best)
curl -X POST "https://api.foodashi.com/api/analyze/text" \ -H "X-Api-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"text": "Chicken Parmesan\n\n2 chicken breasts\n1 cup breadcrumbs\n1 cup marinara\n1 cup mozzarella\n\n1. Bread chicken. 2. Fry. 3. Top with sauce and cheese. 4. Bake 375F 20 min."}'
/api/analyze/url
Pro+
35 calls
Analyze Recipe URL
Fetch a recipe from any URL, extract it with AI, then run the full nutrition + allergen + NutriMetric pipeline. Works with most recipe blogs and cooking sites.
Request Body
| Field | Type | Description |
|---|---|---|
| url RequiredRequired | string | Full URL to a recipe page (http/https). |
| servings | integer | Override detected servings count. |
curl -X POST "https://api.foodashi.com/api/analyze/url" \ -H "X-Api-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"url": "https://cooking.nytimes.com/recipes/1015819-chocolate-chip-cookies"}'
/api/recognize/image
Pro+
20 calls
Recognize Dish from Photo
Upload a food photo (base64 or URL) and get dish identification with confidence score, estimated ingredients with gram weights, estimated nutrition, and matching recipes from our database.
Request Body
| Field | Type | Description |
|---|---|---|
| image Required | string | Base64-encoded image (supports data URI). Max 4MB. Provide image OR image_url. |
| image_url | string | URL to fetch the image from (JPEG, PNG, WebP, GIF). |
| include_recipes | boolean | Include matching recipes from database (default: true). |
| max_results | integer | Max recipe matches to return (default: 5, max: 10). |
curl -X POST "https://api.foodashi.com/api/recognize/image" \ -H "X-Api-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"image_url": "https://example.com/pizza-photo.jpg", "max_results": 3}'
/api/recognize/ingredients
Pro+
25 calls
Recognize Ingredients from Photo
Snap a photo of your fridge, pantry, or counter and get every ingredient identified with estimated quantities, canonical DB matches (for precise nutrition lookup), storage suggestions, and recipe ideas.
Request Body
| Field | Type | Description |
|---|---|---|
| image Required | string | Base64-encoded image. Provide image OR image_url. |
| image_url | string | URL to fetch the image from (JPEG, PNG, WebP, GIF). |
| include_recipes | boolean | Include recipe suggestions using detected ingredients (default: true). |
| max_results | integer | Max recipe suggestions (default: 5, max: 10). |
curl -X POST "https://api.foodashi.com/api/recognize/ingredients" \ -H "X-Api-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"image_url": "https://example.com/fridge-contents.jpg"}'
/api/pairing/beverages
Pro+
15 calls
AI Sommelier — Beverage Pairing
Get expert beverage pairings from an AI Master Sommelier. Supports wine, beer, cocktails, spirits, and culturally-specific non-alcoholic beverages. Accepts dish names, ingredient lists, food photos, or recipe IDs.
Request Body (provide exactly one)
| Field | Type | Description |
|---|---|---|
| dish | string | Dish name (e.g., "Pad Thai", "Feijoada"). |
| ingredients | string[] | Ingredient list — AI identifies the likely dish first. |
| image | string | Base64-encoded food photo. Provide image OR image_url. |
| image_url | string | URL to a food photo (JPEG, PNG, WebP, GIF). |
| recipe_id | string | UUID of a published recipe in the database. |
Optional Preferences
| Field | Type | Description |
|---|---|---|
| preferences.no_alcohol | boolean | Only return non-alcoholic beverages. |
| preferences.budget | string | "low", "medium", or "high" — affects price range of suggestions. |
| preferences.style | string | "casual" or "fine-dining" — affects formality of recommendations. |
Response
Returns 5 beverage categories with specific names, reasoning, and serving details.
| Field | Description |
|---|---|
| pairings.wine[] | Specific varietals with region, price range, serving temp, and alternatives. |
| pairings.beer[] | Beer styles with category, price range, serving temp, and alternatives. |
| pairings.cocktails[] | Culturally-relevant cocktails with base spirit and brief recipe. |
| pairings.spirits[] | Neat pours or simple serves with serving suggestion. |
| pairings.non_alcoholic[] | Culturally-specific beverages (Lassi, Horchata, etc.) with brief recipe. |
| sommelier_note | Overarching pairing philosophy for the dish. |
| confidence | 0.0–1.0 confidence score for the pairing. |
curl -X POST "https://api.foodashi.com/api/pairing/beverages" \ -H "X-Api-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"dish": "Feijoada"}'
curl -X POST "https://api.foodashi.com/api/pairing/beverages" \ -H "X-Api-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"dish": "Biryani", "preferences": {"no_alcohol": true, "style": "fine-dining"}}'
/api/meal-plan/generate
Pro+
75 calls
Generate Meal Plan
AI-powered meal plan generator. Specify calorie targets, macro ratios, dietary restrictions, allergen exclusions, and cuisine preferences. Returns a day-by-day plan with real DB recipes (full nutrition) plus AI-generated suggestions where needed. Includes daily/weekly nutrition totals and a shopping-list-compatible format.
Request Body
| Field | Type | Description |
|---|---|---|
| days | integer | Plan duration, 1-14 (default: 7). |
| goal | string | maintain, lose_weight, gain_weight, or build_muscle. |
| calories_per_day | integer | Override calorie target (auto-set by goal if omitted). |
| dietary_restrictions | string[] | Array of dietary tags: ["Dairy-Free", "Gluten-Free"] |
| allergen_exclusions | string[] | EU 14 allergens to exclude: ["Peanuts", "Tree Nuts"] |
| cuisine_preferences | string[] | Preferred cuisines: ["Japanese", "Italian"] |
| meals_per_day | string[] | Meal types: ["breakfast","lunch","dinner"] (also: snack, brunch). |
| servings | integer | Servings per meal (default: 2). |
curl -X POST "https://api.foodashi.com/api/meal-plan/generate" \ -H "X-Api-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "days": 7, "goal": "lose_weight", "calories_per_day": 1600, "dietary_restrictions": ["Dairy-Free"], "meals_per_day": ["breakfast", "lunch", "dinner"], "servings": 2 }'
/api/meal-plan/customize
Pro+
40 calls
Customize Meal Plan
Modify an existing meal plan: swap a specific meal with a chosen recipe, regenerate all meals for a day, or regenerate a single meal. Pass the plan object from the generate endpoint.
Request Body
| Field | Type | Description |
|---|---|---|
| planRequired | object | The plan object from /api/meal-plan/generate response. |
| actionRequired | string | swap, regenerate_day, or regenerate_meal. |
| day_indexRequired | integer | 0-based day index to modify. |
| meal_index | integer | 0-based meal index (required for swap and regenerate_meal). |
| swap_recipe_id | uuid | Recipe ID to swap in (required for swap action). |
| reason | string | Optional context for AI regeneration. |
curl -X POST "https://api.foodashi.com/api/meal-plan/customize" \ -H "X-Api-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"plan": {...}, "action": "swap", "day_index": 0, "meal_index": 2, "swap_recipe_id": "uuid"}'
/api/meal-plan/templates
Indie+
1 call
Meal Plan Templates
Browse 8 pre-built meal plan templates covering common goals: Balanced Weight Loss, Muscle Building, Mediterranean Heart Health, Plant-Based Week, Keto, Family Friendly, Quick Meals, and Clean Bulk.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| goal | string | Filter by goal: lose_weight, maintain, gain_weight, build_muscle. |
curl -X GET "https://api.foodashi.com/api/meal-plan/templates?goal=lose_weight" \ -H "X-Api-Key: YOUR_API_KEY"
/api/shopping-list/from-recipes
Indie+
2 calls
Shopping List from Recipes
Generate a consolidated shopping list from multiple recipe IDs. Ingredients are merged, de-duplicated, and organized by USDA food groups (Produce, Protein, Dairy, Grains, Pantry, Beverages, Other).
curl -X POST "https://api.foodashi.com/api/shopping-list/from-recipes" \ -H "X-Api-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"recipe_ids": ["uuid-1", "uuid-2"], "unit_system": "metric"}'
/api/shopping-list/from-meal-plan
Pro+
2 calls
Shopping List from Meal Plan
Generate a shopping list directly from a meal plan (the shopping_list_compatible field from /api/meal-plan/generate). Automatically extracts all recipe IDs and applies per-meal servings overrides.
curl -X POST "https://api.foodashi.com/api/shopping-list/from-meal-plan" \ -H "X-Api-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"meal_plan": {"days": [{"meals": [{"recipe_id": "uuid", "servings": 2}]}]}}'
/api/shopping-list/optimize
Pro+
30 calls
Optimize Shopping List
AI-powered shopping list optimization. Groups items by store aisle, suggests cheaper substitutions, estimates total cost, and provides storage tips.
curl -X POST "https://api.foodashi.com/api/shopping-list/optimize" \ -H "X-Api-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"shopping_list": {"categories": [...]}, "preferences": {"budget": "medium"}}'
/api/tips
Indie+
8 calls
Cooking & Prep Tips
AI-powered cooking and preparation tips for any ingredient or recipe name. Supports any language. Choose between cooking tips, prepping tips, or both. When a match is found in the database, tips are enriched with allergen, cuisine, and nutritional context for more specific advice.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Ingredient or recipe name (any language, 1-200 chars) |
type |
string | Yes | "ingredient" or "recipe" |
tip_type |
string | No | "cooking", "prepping", or "both" (default: "both") |
curl -X POST "https://api.foodashi.com/api/tips" \ -H "X-Api-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"name": "chicken thigh", "type": "ingredient", "tip_type": "cooking"}'
{
"success": true,
"data": {
"name": "chicken thigh",
"name_english": "Chicken Thigh",
"type": "ingredient",
"tip_type": "cooking",
"tips": [
{
"category": "temperature",
"title": "Optimal Internal Temperature",
"tip": "Cook to 74°C (165°F) internal..."
}
],
"tip_count": 5,
"db_enriched": true
}
}
/stats
API Stats
Get aggregated statistics about the recipe database including counts by cuisine, dietary tags, allergens, equipment, and NutriMetric grades.
{
"total_recipes": 12847,
"total_ingredients": 340000,
"api_version": "3.0-pipeline",
"status": "operational"
}
Response Schema
Example response from /api/recipes/details. Fields like nutrimetric, wine_pairing, eco_score, and medical_cautions are Pro+ only (null on Hobby).
{
"id": "a1b2c3d4-e5f6-...",
"title": "Caldo de Res",
"title_english": "Mexican Beef Soup",
"description": "A hearty Mexican beef soup...",
"image_url": "https://...",
"prep_time_minutes": 25,
"cook_time_minutes": 90,
"rest_time_minutes": 0,
"total_time_minutes": 115,
"servings": 4,
"cuisine": "Mexican",
"cuisine_code": "MX",
"meal_types": ["Dinner", "Main Course"],
"dish_types": ["Stew"],
"difficulty": "Medium",
"cost_level": 2,
"protein_source": ["Beef"],
"tags": ["authentic", "comfort-food"],
"cooking_methods": ["Braising", "Simmering"],
"occasions": ["Weeknight Dinner"],
"seasons": ["Winter", "Fall"],
"equipment": ["Dutch Oven", "Knife"],
"dietary_tags": ["Gluten-Free"],
"allergens": ["Celery"],
"allergen_declaration": { "compliance": "EU-1169", "declaration": "Contains celery." },
"nutrition": {
"calories": 455,
"protein_g": 35.2,
"fat_g": 18.1,
"saturated_fat_g": 5.2,
"carbohydrate_g": 43.0,
"fiber_g": 8.3,
"sugars_total_g": 6.1,
"sodium_mg": 850,
"per_100g": { "calories": 98, "protein_g": 7.6, "fat_g": 3.9, "carbohydrate_g": 9.3, "sodium_mg": 183 }
},
"nutrimetric": {
"grade": "B",
"score": 68,
"label": "Good",
"version": "nutrimetric-1.0"
},
"taste_profile": {
"spicy": 3,
"salty": 5,
"sweet": 2,
"umami": 7,
"bitter": 1,
"sour": 2
},
"storage": {
"refrigerator_days": 3,
"freezer_friendly": true,
"reheating_instructions": "Reheat on stovetop..."
},
"beverage_pairing": { "pairings": [ { "name": "Malbec", "category": "Red Wine", "alcoholic": true, "why": "Bold tannins stand up to the rich braise" } ] },
"ingredients": [
{
"text": "450 g Beef chuck",
"name": "Beef chuck",
"quantity": "450",
"unit": "g",
"is_main": true,
"preparation": "cubed",
"optional": false,
"gram_weight": 450
}
],
"steps": [
{
"step": 1,
"text": "Sear the beef...",
"duration_minutes": 8,
"temperature": null,
"tip": "Pat dry for better sear"
}
]
}
Available Cuisines (78)
East Asia
Southeast Asia
South & Central Asia
Middle East
North Africa
Europe
Nordic
North America
South America
Caribbean
Pacific
Sub-Saharan Africa
Meal Types
Common Allergens (EU 14)
Track and filter recipes based on the 14 EU-regulated food allergens. Each recipe includes both confirmed allergens (detectedAllergens) and uncertain traces (mayContainAllergens).
Kitchen Equipment (125)
Filter recipes by required kitchen equipment. Equipment is auto-detected from recipe instructions across all 78 world cuisines.
Pots & Pans
Bakeware
Appliances
Knives & Cutting
Prep Tools
Measuring
World Cuisine Specialty
Changelog
What's new in the Foodashi API. We ship data-quality and capability improvements continuously.
- Improved More accurate nutrition: gram-weighted nutrient coverage and consistent per-serving math across the catalog.
- Added Two-axis taxonomy on every recipe:
dish_types[](what a dish is) andmeal_types[](when it's eaten). - Improved Higher recipe authenticity — canonical-dish fidelity checks at generation and native dish names.
- Improved Stronger EU-14 allergen and dietary-tag accuracy, with confirmed vs. may-contain flags.
- Added AI Vision endpoints: Recognize Dish and Recognize Ingredients (Pro).
- Added Beverage Pairing AI Sommelier endpoint.
- Improved Variable endpoint costs (AI endpoints cost 3–25 credits) and clearer error messages with debug hints.
- Added Meal Planning (Generate, Customize, Templates) and Shopping List generation.
- Added NutriMetric scoring system (A–F nutrition grades).
- Improved Overage billing for Indie/Pro tiers.
- Added Vector-powered semantic search (Smart Search) and 70+ endpoints across 11 categories.
- Improved Complete API rewrite on Cloudflare Workers (5× faster).
- Added Tier-based access control (Hobby / Indie / Pro).