Developer Reference
REST endpoints for Ugandan recipes, ingredients and cultural taxonomy. Authenticated via API key.
Getting started
Sign up for a free account, generate an API key, and send your first request.
Authentication
Pass your API key as either Authorization: Bearer <key> or x-api-key: <key>. Generate keys at /dashboard/api-keys. Keys are shown once at creation — copy them then.
# Either header works: curl -H "Authorization: Bearer lapi_your_key_here" .../v1/recipes curl -H "x-api-key: lapi_your_key_here" .../v1/recipes
Rate limits & quotas
Each plan ships per-minute and per-month limits. Hitting either returns 429 with X-RateLimit-Limit, X-RateLimit-Remaining and Retry-After headers.
| Plan | Per minute | Per month |
|---|---|---|
| Free | 10 | 5,000 |
| Starter | 60 | 50,000 |
| Growth | 150 | 150,000 |
| Pro | 300 | 350,000 |
| Scale | 1,000 | 1,000,000 |
Search and filter recipes
/api/v1/recipesDiscovery endpoint. Combine region, tribe, district, dietary, ingredients on hand, max prep/cook time, max calories, cost tier and more.
Query parameters
| q | string | Free-text search across name, description and local names |
| region | string (CSV) | Filter by region name(s) — e.g. 'central,western' |
| tribe | string (CSV) | Filter by tribe — e.g. 'baganda,acholi' |
| dietary | string (CSV) | vegan, vegetarian, gluten_free, halal, dairy_free, peanut_free |
| max_prep_time | integer | Cap prep time in minutes |
| ingredients | string (CSV) | Recipe must contain ALL listed ingredients |
| exclude_ingredients | string (CSV) | Recipe must NOT contain any of these |
| sort | string | popularity | prep_time | calories | cost | rating |
| limit | integer | 1-100 (default 20) |
curl -X GET "https://ugafoodapi.vercel.app/api/v1/recipes?region=central&dietary=vegan&max_prep_time=30" \ -H "x-api-key: lapi_your_api_key_here"
Sample response
{
"status": "success",
"total_results": 35,
"page": 1,
"limit": 20,
"recipes": [
{
"id": "rec_matoke_steamed",
"name": "Matooke (Steamed Highland Banana)",
"local_names": { "luganda": "Matooke", "runyankole": "Embiire" },
"tribe_origin": "Baganda",
"region_origin": "Central (Buganda)",
"difficulty": "beginner",
"prep_time_minutes": 25,
"cook_time_minutes": 75,
"servings": 6,
"nutrition": { "calories": 245, "protein_grams": 3.1, "health_score": 7.2 },
"cost_analysis": { "cost_per_serving_ugx": 850, "affordability_tier": "economy" }
}
]
}Full recipe by ID
/api/v1/recipes/rec_luwombo_nkokoReturns the complete record — ingredients with substitutes, numbered instructions, nutrition, cost analysis, seasonality, district popularity and variations.
curl -X GET "https://ugafoodapi.vercel.app/api/v1/recipes/rec_luwombo_nkoko" \ -H "x-api-key: lapi_your_api_key_here"
Sample response
{
"status": "success",
"recipe": {
"id": "rec_luwombo_nkoko",
"name": "Luwombo lwa Nkoko (Chicken Luwombo)",
"ingredients": [
{ "name": "Chicken (free-range, kienyeji)", "quantity": 1.5, "unit": "kg", "average_cost_ugx": 33000 },
{ "name": "Groundnut paste (peanut butter)", "quantity": 0.3, "unit": "kg", "average_cost_ugx": 3600 }
],
"instructions": [
{ "step": 1, "heading": "Joint and clean the chicken", "description": "...", "time_estimate_minutes": 10 }
],
"nutrition": { "calories": 1293, "protein_grams": 114.2, "health_score": 6.6 },
"cost_analysis": { "total_cost_ugx": 42180, "cost_per_serving_ugx": 10545, "affordability_tier": "moderate" }
}
}Trending recipes
/api/v1/recipes/trendingTop dishes by category (overall, street_food, ceremonial, budget) plus per-region, per-tribe and seasonal-spike views.
curl -X GET "https://ugafoodapi.vercel.app/api/v1/recipes/trending" \ -H "x-api-key: lapi_your_api_key_here"
Sample response
{
"status": "success",
"trending_by_category": {
"overall": { "name": "Rolex (Chapati and Egg Roll)", "trend_score": 99.5 },
"street_food": { "name": "Rolex", "trend_score": 99.5 },
"ceremonial": { "name": "Luwombo lwa Nkoko", "trend_score": 9.6 },
"budget_friendly_under_5000": { "name": "Atap (Sorghum Porridge)", "trend_score": 88.0 }
},
"trending_by_region": { "Central (Buganda)": { "name": "Matooke" } },
"seasonal_spikes": { "month": "apr", "recipes": [] }
}List ingredients
/api/v1/ingredientsBrowse the master ingredient catalog with local names, per-100g nutrition and storage info.
Query parameters
| q | string | Free-text on name, scientific name and local names |
| category | string | staple_carb, protein, vegetable, fruit, legume, spice, dairy, fat, seed, beverage, other |
| in_season | boolean | Restrict to ingredients available this calendar month |
| limit | integer | 1-200 (default 50) |
curl -X GET "https://ugafoodapi.vercel.app/api/v1/ingredients?category=protein&in_season=true" \ -H "x-api-key: lapi_your_api_key_here"
Sample response
{
"status": "success",
"total_results": 17,
"current_month": "apr",
"ingredients": [
{
"id": "ing_chicken_free-range_kienyeji",
"name": "Chicken (free-range, kienyeji)",
"scientific_name": "Gallus gallus domesticus",
"category": "protein",
"local_names": { "luganda": "Nkoko", "acholi": "Gweno", "runyankole": "Enkoko" },
"nutrition_per_100g": { "calories": 215, "protein_grams": 25, "fat_grams": 13 }
}
]
}Cultural taxonomy of Uganda
/api/v1/cultureReturns the regions / tribes / districts tree with each tribe's signature dishes plus national holiday food associations.
curl -X GET "https://ugafoodapi.vercel.app/api/v1/culture" \ -H "x-api-key: lapi_your_api_key_here"
Sample response
{
"status": "success",
"country": "Uganda",
"regions": [
{
"name": "Central (Buganda)",
"tribes": [
{
"name": "Baganda",
"language": "Luganda",
"signature_dishes": [
{ "recipe_id": "rec_luwombo_nkoko", "name": "Luwombo lwa Nkoko" },
{ "recipe_id": "rec_matoke_steamed", "name": "Matooke" }
]
}
]
}
]
}Need every endpoint, parameter and response field? Open the live Scalar reference.
Open API reference