Most “recipe API” products on the market are thin wrappers around scraped or licensed third-party recipe content, which carries real legal risk for anyone building on top of them — you inherit whatever licensing terms (or lack thereof) the underlying data has. /recipes takes a different approach: every recipe is originally authored for APlicious, with zero third-party licensing risk for anything you build on it.
The four endpoints
// Search by query, cuisine, or dietary tag
fetch("https://aplicious.com/api/v1/recipes/search?cuisine=Thai&diet=vegan", {
headers: { "X-API-Key": "lapi_live_••••" },
});
// One random recipe (the "what should I cook" mechanic)
fetch("https://aplicious.com/api/v1/recipes/random", {
headers: { "X-API-Key": "lapi_live_••••" },
});
// Full ingredients + instructions for one recipe
fetch("https://aplicious.com/api/v1/recipes/detail?slug=butter-chicken", {
headers: { "X-API-Key": "lapi_live_••••" },
});
// All available cuisines + categories, for populating filter UI
fetch("https://aplicious.com/api/v1/recipes/cuisines", {
headers: { "X-API-Key": "lapi_live_••••" },
});The random endpoint is the product, not a gimmick
“What should I cook tonight” is a top-searched food query, and decision fatigue is a real driver of people ordering takeout instead of cooking what's already in their fridge. A single-tap “surprise me” button backed by /random, optionally filtered by cuisine or category, is a complete app concept on its own — not a demo feature bolted onto a search app.
How the dataset grows
New recipes are added through an internal ingestion script, not a live scrape of an external site — every addition is hand-authored and goes through the same data-ownership review as everything else on the platform. That's slower than scraping, but it's the only way to guarantee zero licensing exposure for anyone building a commercial product on top of this namespace.
Putting together a meal-planning feature
async function weeklyMealPlan(cuisine: string) {
const headers = { "X-API-Key": process.env.APLICIOUS_KEY! };
const days = await Promise.all(
Array.from({ length: 7 }, () =>
fetch(`https://aplicious.com/api/v1/recipes/random?cuisine=${cuisine}`, { headers })
.then(r => r.json())
)
);
return days.map(d => d.data);
}