The spoonacular Nutrition, Recipe, and Food API allows you to access over thousands of recipes, thousands of ingredients, 800,000 food products, over 100,000 menu items, and restaurants.
Bring your own key. This API needs your own Spoonacular key - get one from the provider, add it once below, and the proxy injects it on every call. Your OmniStream plan covers the unified SDK, key storage, and proxy - the provider's own rate limits still apply to your key.
This is a community listing. If you own this API, you can request ownership.
npm install omnistream-sdkimport { OmniClient } from "omnistream-sdk";
const omni = new OmniClient({ token: process.env.OMNI_KEY! });
// One key reaches every API on the marketplace.
const data = await omni.call("spoonacular/talkToChatbot");One install, one key - the same client calls every API on the marketplace.
The request / question / answer from the user to the chatbot.
An arbitrary globally unique id for your conversation. The conversation can contain states so you should pass your context id if you want the bot to be able to remember the conversation.
Talk to Chatbot
Conversation Suggests
Search Custom Foods
Detect Food in Text
Image Analysis by URL
Image Classification by URL
/**
* Spoonacular - generated by OmniStream from Spoonacular's OpenAPI spec.
* One typed method per endpoint. A single Omni key reaches the API.
*/
const DEFAULT_BASE = "https://grid.skinvaults.online/v1/proxy/spoonacular";
export class SpoonacularError extends Error {
status: number;
code?: string;
constructor(status: number, code: string | undefined, message?: string) {
super(message || `Spoonacular error ${status}`);
this.name = "SpoonacularError";
this.status = status;
this.code = code;
}
}
export interface SpoonacularOptions {
baseUrl?: string;
fetch?: typeof fetch;
timeoutMs?: number;
}
export class Spoonacular {
/** @param token Your OmniStream key (one key for every API). */
constructor(private token: string, private opts: SpoonacularOptions = {}) {
if (!token) throw new Error("Spoonacular: token is required");
}
rateLimit: { remainingMinute?: number; remainingDay?: number } | null = null;
private async _request(method: string, path: string, { params, body }: { params?: Record<string, unknown>; body?: unknown } = {}): Promise<any> {
const f = this.opts.fetch ?? globalThis.fetch;
const url = new URL((this.opts.baseUrl ?? DEFAULT_BASE).replace(/\/+$/, "") + path);
if (params) for (const [k, v] of Object.entries(params)) if (v != null) url.searchParams.set(k, String(v));
const headers: Record<string, string> = { "x-omni-key": this.token };
if (body !== undefined) headers["content-type"] = "application/json";
const res = await f(url, { method, headers, body: body !== undefined ? JSON.stringify(body) : undefined });
this.rateLimit = {
remainingMinute: Number(res.headers.get("x-ratelimit-remaining-minute")) || undefined,
remainingDay: Number(res.headers.get("x-ratelimit-remaining-day")) || undefined,
};
const data = await res.json().catch(() => ({}));
if (!res.ok) throw new SpoonacularError(res.status, data?.error?.code, data?.error?.message);
return data.data ?? data;
}
/** Talk to Chatbot */
talkToChatbot(params: { "text": string; "contextId"?: string }): Promise<any> {
return this._request("GET", "/food/converse", { params });
}
/** Conversation Suggests */
getConversationSuggests(params: { "query": string; "number"?: number }): Promise<any> {
return this._request("GET", "/food/converse/suggest", { params });
}
/** Search Custom Foods */
searchCustomFoods(params: { "username": string; "hash": string; "query"?: string; "offset"?: number; "number"?: number }): Promise<any> {
return this._request("GET", "/food/customFoods/search", { params });
}
/** Detect Food in Text */
detectFoodInText(params: { "Content-Type"?: string }): Promise<any> {
return this._request("POST", "/food/detect", { params });
}
/** Image Analysis by URL */
imageAnalysisByURL(params: { "imageUrl": string }): Promise<any> {
return this._request("GET", "/food/images/analyze", { params });
}
/** Image Classification by URL */
imageClassificationByURL(params: { "imageUrl": string }): Promise<any> {
return this._request("GET", "/food/images/classify", { params });
}
/** Autocomplete Ingredient Search */
autocompleteIngredientSearch(params: { "query"?: string; "number"?: number; "metaInformation"?: boolean; "intolerances"?: string; "language"?: string }): Promise<any> {
return this._request("GET", "/food/ingredients/autocomplete", { params });
}
/** Compute Glycemic Load */
computeGlycemicLoad(body: unknown, params: { "language"?: string }): Promise<any> {
return this._request("POST", "/food/ingredients/glycemicLoad", { body, params });
}
/** Map Ingredients to Grocery Products */
mapIngredientsToGroceryProducts(body: unknown): Promise<any> {
return this._request("POST", "/food/ingredients/map", { body });
}
/** Ingredient Search */
ingredientSearch(params: { "query"?: string; "addChildren"?: boolean; "minProteinPercent"?: number; "maxProteinPercent"?: number; "minFatPercent"?: number; "maxFatPercent"?: number; "minCarbsPercent"?: number; "maxCarbsPercent"?: number; "metaInformation"?: boolean; "intolerances"?: string; "sort"?: string; "sortDirection"?: string; "offset"?: number; "number"?: number; "language"?: string }): Promise<any> {
return this._request("GET", "/food/ingredients/search", { params });
}
/** Get Ingredient Substitutes */
getIngredientSubstitutes(params: { "ingredientName": string }): Promise<any> {
return this._request("GET", "/food/ingredients/substitutes", { params });
}
/** Compute Ingredient Amount */
computeIngredientAmount(params: { "id": number; "nutrient": string; "target": number; "unit"?: string }): Promise<any> {
return this._request("GET", "/food/ingredients/{id}/amount", { params });
}
/** Get Ingredient Information */
getIngredientInformation(params: { "id": number; "id": number; "amount"?: number; "unit"?: string }): Promise<any> {
return this._request("GET", "/food/ingredients/{id}/information", { params });
}
/** Get Ingredient Substitutes by ID */
getIngredientSubstitutesByID(params: { "id": number; "id": number }): Promise<any> {
return this._request("GET", "/food/ingredients/{id}/substitutes", { params });
}
/** Random Food Joke */
getARandomFoodJoke(): Promise<any> {
return this._request("GET", "/food/jokes/random", {});
}
/** Search Menu Items */
searchMenuItems(params: { "query"?: string; "minCalories"?: number; "maxCalories"?: number; "minCarbs"?: number; "maxCarbs"?: number; "minProtein"?: number; "maxProtein"?: number; "minFat"?: number; "maxFat"?: number; "addMenuItemInformation"?: boolean; "offset"?: number; "number"?: number }): Promise<any> {
return this._request("GET", "/food/menuItems/search", { params });
}
/** Autocomplete Menu Item Search */
autocompleteMenuItemSearch(params: { "query": string; "number"?: number }): Promise<any> {
return this._request("GET", "/food/menuItems/suggest", { params });
}
/** Get Menu Item Information */
getMenuItemInformation(params: { "id": number; "id": number }): Promise<any> {
return this._request("GET", "/food/menuItems/{id}", { params });
}
/** Menu Item Nutrition Label Widget */
menuItemNutritionLabelWidget(params: { "id": string; "id": number; "defaultCss"?: boolean; "showOptionalNutrients"?: boolean; "showZeroValues"?: boolean; "showIngredients"?: boolean }): Promise<any> {
return this._request("GET", "/food/menuItems/{id}/nutritionLabel", { params });
}
/** Menu Item Nutrition Label Image */
menuItemNutritionLabelImage(params: { "id": string; "id": number; "showOptionalNutrients"?: boolean; "showZeroValues"?: boolean; "showIngredients"?: boolean }): Promise<any> {
return this._request("GET", "/food/menuItems/{id}/nutritionLabel.png", { params });
}
/** Menu Item Nutrition by ID Widget */
visualizeMenuItemNutritionByID(params: { "id": number; "id": number; "defaultCss"?: boolean; "Accept"?: string }): Promise<any> {
return this._request("GET", "/food/menuItems/{id}/nutritionWidget", { params });
}
/** Menu Item Nutrition by ID Image */
menuItemNutritionByIDImage(params: { "id": string; "id": number }): Promise<any> {
return this._request("GET", "/food/menuItems/{id}/nutritionWidget.png", { params });
}
/** Classify Grocery Product */
classifyGroceryProduct(body: unknown, params: { "locale"?: string }): Promise<any> {
return this._request("POST", "/food/products/classify", { body, params });
}
/** Classify Grocery Product Bulk */
classifyGroceryProductBulk(body: unknown, params: { "locale"?: string }): Promise<any> {
return this._request("POST", "/food/products/classifyBatch", { body, params });
}
/** Search Grocery Products */
searchGroceryProducts(params: { "query"?: string; "minCalories"?: number; "maxCalories"?: number; "minCarbs"?: number; "maxCarbs"?: number; "minProtein"?: number; "maxProtein"?: number; "minFat"?: number; "maxFat"?: number; "addProductInformation"?: boolean; "offset"?: number; "number"?: number }): Promise<any> {
return this._request("GET", "/food/products/search", { params });
}
/** Autocomplete Product Search */
autocompleteProductSearch(params: { "query": string; "number"?: number }): Promise<any> {
return this._request("GET", "/food/products/suggest", { params });
}
/** Search Grocery Products by UPC */
searchGroceryProductsByUPC(params: { "upc": string; "upc": number }): Promise<any> {
return this._request("GET", "/food/products/upc/{upc}", { params });
}
/** Get Comparable Products */
getComparableProducts(params: { "upc": string; "upc": number }): Promise<any> {
return this._request("GET", "/food/products/upc/{upc}/comparable", { params });
}
/** Get Product Information */
getProductInformation(params: { "id": number; "id": number }): Promise<any> {
return this._request("GET", "/food/products/{id}", { params });
}
/** Product Nutrition Label Widget */
productNutritionLabelWidget(params: { "id": string; "id": number; "defaultCss"?: boolean; "showOptionalNutrients"?: boolean; "showZeroValues"?: boolean; "showIngredients"?: boolean }): Promise<any> {
return this._request("GET", "/food/products/{id}/nutritionLabel", { params });
}
/** Product Nutrition Label Image */
productNutritionLabelImage(params: { "id": string; "id": number; "showOptionalNutrients"?: boolean; "showZeroValues"?: boolean; "showIngredients"?: boolean }): Promise<any> {
return this._request("GET", "/food/products/{id}/nutritionLabel.png", { params });
}
/** Product Nutrition by ID Widget */
visualizeProductNutritionByID(params: { "id": number; "id": number; "defaultCss"?: boolean; "Accept"?: string }): Promise<any> {
return this._request("GET", "/food/products/{id}/nutritionWidget", { params });
}
/** Product Nutrition by ID Image */
productNutritionByIDImage(params: { "id": string; "id": number }): Promise<any> {
return this._request("GET", "/food/products/{id}/nutritionWidget.png", { params });
}
/** Search Restaurants */
searchRestaurants(params: { "query"?: string; "lat"?: number; "lng"?: number; "distance"?: number; "budget"?: number; "cuisine"?: string; "min-rating"?: number; "is-open"?: boolean; "sort"?: string; "page"?: number }): Promise<any> {
return this._request("GET", "/food/restaurants/search", { params });
}
/** Search All Food */
searchAllFood(params: { "query": string; "offset"?: number; "number"?: number }): Promise<any> {
return this._request("GET", "/food/search", { params });
}
/** Search Site Content */
searchSiteContent(params: { "query": string }): Promise<any> {
return this._request("GET", "/food/site/search", { params });
}
/** Random Food Trivia */
getRandomFoodTrivia(): Promise<any> {
return this._request("GET", "/food/trivia/random", {});
}
/** Search Food Videos */
searchFoodVideos(params: { "query"?: string; "type"?: string; "cuisine"?: string; "diet"?: string; "includeIngredients"?: string; "excludeIngredients"?: string; "minLength"?: number; "maxLength"?: number; "offset"?: number; "number"?: number }): Promise<any> {
return this._request("GET", "/food/videos/search", { params });
}
/** Wine Description */
getWineDescription(params: { "wine": string }): Promise<any> {
return this._request("GET", "/food/wine/description", { params });
}
/** Dish Pairing for Wine */
getDishPairingForWine(params: { "wine": string }): Promise<any> {
return this._request("GET", "/food/wine/dishes", { params });
}
/** Wine Pairing */
getWinePairing(params: { "food": string; "maxPrice"?: number }): Promise<any> {
return this._request("GET", "/food/wine/pairing", { params });
}
/** Wine Recommendation */
getWineRecommendation(params: { "wine": string; "maxPrice"?: number; "minRating"?: number; "number"?: number }): Promise<any> {
return this._request("GET", "/food/wine/recommendation", { params });
}
/** Generate Meal Plan */
generateMealPlan(params: { "timeFrame"?: string; "targetCalories"?: number; "diet"?: string; "exclude"?: string }): Promise<any> {
return this._request("GET", "/mealplanner/generate", { params });
}
/** Clear Meal Plan Day */
clearMealPlanDay(params: { "username": string; "date": string; "username": string; "date": string; "hash": string }): Promise<any> {
return this._request("DELETE", "/mealplanner/{username}/day/{date}", { params });
}
/** Add to Meal Plan */
addToMealPlan(body: unknown, params: { "username": string; "username": string; "hash": string }): Promise<any> {
return this._request("POST", "/mealplanner/{username}/items", { body, params });
}
/** Delete from Meal Plan */
deleteFromMealPlan(params: { "username": string; "id": number; "username": string; "id": number; "hash": string }): Promise<any> {
return this._request("DELETE", "/mealplanner/{username}/items/{id}", { params });
}
/** Get Shopping List */
getShoppingList(params: { "username": string; "username": string; "hash": string }): Promise<any> {
return this._request("GET", "/mealplanner/{username}/shopping-list", { params });
}
/** Add to Shopping List */
addToShoppingList(body: unknown, params: { "username": string; "username": string; "hash": string }): Promise<any> {
return this._request("POST", "/mealplanner/{username}/shopping-list/items", { body, params });
}
/** Delete from Shopping List */
deleteFromShoppingList(params: { "username": string; "id": number; "username": string; "id": number; "hash": string }): Promise<any> {
return this._request("DELETE", "/mealplanner/{username}/shopping-list/items/{id}", { params });
}
/** Generate Shopping List */
generateShoppingList(params: { "username": string; "start-date": string; "end-date": string; "username": string; "start-date": string; "end-date": string; "hash": string }): Promise<any> {
return this._request("POST", "/mealplanner/{username}/shopping-list/{start-date}/{end-date}", { params });
}
/** Get Meal Plan Templates */
getMealPlanTemplates(params: { "username": string; "username": string; "hash": string }): Promise<any> {
return this._request("GET", "/mealplanner/{username}/templates", { params });
}
/** Add Meal Plan Template */
addMealPlanTemplate(params: { "username": string; "username": string; "hash": string }): Promise<any> {
return this._request("POST", "/mealplanner/{username}/templates", { params });
}
/** Get Meal Plan Template */
getMealPlanTemplate(params: { "username": string; "id": number; "username": string; "id": number; "hash": string }): Promise<any> {
return this._request("GET", "/mealplanner/{username}/templates/{id}", { params });
}
/** Delete Meal Plan Template */
deleteMealPlanTemplate(params: { "username": string; "id": number; "username": string; "id": number; "hash": string }): Promise<any> {
return this._request("DELETE", "/mealplanner/{username}/templates/{id}", { params });
}
/** Get Meal Plan Week */
getMealPlanWeek(params: { "username": string; "start-date": string; "username": string; "start-date": string; "hash": string }): Promise<any> {
return this._request("GET", "/mealplanner/{username}/week/{start-date}", { params });
}
/** Analyze Recipe */
analyzeRecipe(body: unknown, params: { "language"?: string; "includeNutrition"?: boolean; "includeTaste"?: boolean }): Promise<any> {
return this._request("POST", "/recipes/analyze", { body, params });
}
/** Analyze Recipe Instructions */
analyzeRecipeInstructions(params: { "Content-Type"?: string }): Promise<any> {
return this._request("POST", "/recipes/analyzeInstructions", { params });
}
/** Autocomplete Recipe Search */
autocompleteRecipeSearch(params: { "query"?: string; "number"?: number }): Promise<any> {
return this._request("GET", "/recipes/autocomplete", { params });
}
/** Search Recipes */
searchRecipes(params: { "query"?: string; "cuisine"?: string; "excludeCuisine"?: string; "diet"?: string; "intolerances"?: string; "equipment"?: string; "includeIngredients"?: string; "excludeIngredients"?: string; "type"?: string; "instructionsRequired"?: boolean; "fillIngredients"?: boolean; "addRecipeInformation"?: boolean; "addRecipeNutrition"?: boolean; "author"?: string; "tags"?: string; "recipeBoxId"?: number; "titleMatch"?: string; "maxReadyTime"?: number; "ignorePantry"?: boolean; "sort"?: string; "sortDirection"?: string; "minCarbs"?: number; "maxCarbs"?: number; "minProtein"?: number; "maxProtein"?: number; "minCalories"?: number; "maxCalories"?: number; "minFat"?: number; "maxFat"?: number; "minAlcohol"?: number; "maxAlcohol"?: number; "minCaffeine"?: number; "maxCaffeine"?: number; "minCopper"?: number; "maxCopper"?: number; "minCalcium"?: number; "maxCalcium"?: number; "minCholine"?: number; "maxCholine"?: number; "minCholesterol"?: number; "maxCholesterol"?: number; "minFluoride"?: number; "maxFluoride"?: number; "minSaturatedFat"?: number; "maxSaturatedFat"?: number; "minVitaminA"?: number; "maxVitaminA"?: number; "minVitaminC"?: number; "maxVitaminC"?: number; "minVitaminD"?: number; "maxVitaminD"?: number; "minVitaminE"?: number; "maxVitaminE"?: number; "minVitaminK"?: number; "maxVitaminK"?: number; "minVitaminB1"?: number; "maxVitaminB1"?: number; "minVitaminB2"?: number; "maxVitaminB2"?: number; "minVitaminB5"?: number; "maxVitaminB5"?: number; "minVitaminB3"?: number; "maxVitaminB3"?: number; "minVitaminB6"?: number; "maxVitaminB6"?: number; "minVitaminB12"?: number; "maxVitaminB12"?: number; "minFiber"?: number; "maxFiber"?: number; "minFolate"?: number; "maxFolate"?: number; "minFolicAcid"?: number; "maxFolicAcid"?: number; "minIodine"?: number; "maxIodine"?: number; "minIron"?: number; "maxIron"?: number; "minMagnesium"?: number; "maxMagnesium"?: number; "minManganese"?: number; "maxManganese"?: number; "minPhosphorus"?: number; "maxPhosphorus"?: number; "minPotassium"?: number; "maxPotassium"?: number; "minSelenium"?: number; "maxSelenium"?: number; "minSodium"?: number; "maxSodium"?: number; "minSugar"?: number; "maxSugar"?: number; "minZinc"?: number; "maxZinc"?: number; "offset"?: number; "number"?: number; "limitLicense"?: boolean }): Promise<any> {
return this._request("GET", "/recipes/complexSearch", { params });
}
/** Convert Amounts */
convertAmounts(params: { "ingredientName": string; "sourceAmount": number; "sourceUnit": string; "targetUnit": string }): Promise<any> {
return this._request("GET", "/recipes/convert", { params });
}
/** Classify Cuisine */
classifyCuisine(params: { "Content-Type"?: string }): Promise<any> {
return this._request("POST", "/recipes/cuisine", { params });
}
/** Extract Recipe from Website */
extractRecipeFromWebsite(params: { "url": string; "forceExtraction"?: boolean; "analyze"?: boolean; "includeNutrition"?: boolean; "includeTaste"?: boolean }): Promise<any> {
return this._request("GET", "/recipes/extract", { params });
}
/** Search Recipes by Ingredients */
searchRecipesByIngredients(params: { "ingredients"?: string; "number"?: number; "limitLicense"?: boolean; "ranking"?: number; "ignorePantry"?: boolean }): Promise<any> {
return this._request("GET", "/recipes/findByIngredients", { params });
}
/** Search Recipes by Nutrients */
searchRecipesByNutrients(params: { "minCarbs"?: number; "maxCarbs"?: number; "minProtein"?: number; "maxProtein"?: number; "minCalories"?: number; "maxCalories"?: number; "minFat"?: number; "maxFat"?: number; "minAlcohol"?: number; "maxAlcohol"?: number; "minCaffeine"?: number; "maxCaffeine"?: number; "minCopper"?: number; "maxCopper"?: number; "minCalcium"?: number; "maxCalcium"?: number; "minCholine"?: number; "maxCholine"?: number; "minCholesterol"?: number; "maxCholesterol"?: number; "minFluoride"?: number; "maxFluoride"?: number; "minSaturatedFat"?: number; "maxSaturatedFat"?: number; "minVitaminA"?: number; "maxVitaminA"?: number; "minVitaminC"?: number; "maxVitaminC"?: number; "minVitaminD"?: number; "maxVitaminD"?: number; "minVitaminE"?: number; "maxVitaminE"?: number; "minVitaminK"?: number; "maxVitaminK"?: number; "minVitaminB1"?: number; "maxVitaminB1"?: number; "minVitaminB2"?: number; "maxVitaminB2"?: number; "minVitaminB5"?: number; "maxVitaminB5"?: number; "minVitaminB3"?: number; "maxVitaminB3"?: number; "minVitaminB6"?: number; "maxVitaminB6"?: number; "minVitaminB12"?: number; "maxVitaminB12"?: number; "minFiber"?: number; "maxFiber"?: number; "minFolate"?: number; "maxFolate"?: number; "minFolicAcid"?: number; "maxFolicAcid"?: number; "minIodine"?: number; "maxIodine"?: number; "minIron"?: number; "maxIron"?: number; "minMagnesium"?: number; "maxMagnesium"?: number; "minManganese"?: number; "maxManganese"?: number; "minPhosphorus"?: number; "maxPhosphorus"?: number; "minPotassium"?: number; "maxPotassium"?: number; "minSelenium"?: number; "maxSelenium"?: number; "minSodium"?: number; "maxSodium"?: number; "minSugar"?: number; "maxSugar"?: number; "minZinc"?: number; "maxZinc"?: number; "offset"?: number; "number"?: number; "random"?: boolean; "limitLicense"?: boolean }): Promise<any> {
return this._request("GET", "/recipes/findByNutrients", { params });
}
/** Guess Nutrition by Dish Name */
guessNutritionByDishName(params: { "title": string }): Promise<any> {
return this._request("GET", "/recipes/guessNutrition", { params });
}
/** Get Recipe Information Bulk */
getRecipeInformationBulk(params: { "ids": string; "includeNutrition"?: boolean }): Promise<any> {
return this._request("GET", "/recipes/informationBulk", { params });
}
/** Parse Ingredients */
parseIngredients(params: { "Content-Type"?: string; "language"?: string }): Promise<any> {
return this._request("POST", "/recipes/parseIngredients", { params });
}
/** Analyze a Recipe Search Query */
analyzeARecipeSearchQuery(params: { "q": string }): Promise<any> {
return this._request("GET", "/recipes/queries/analyze", { params });
}
/** Quick Answer */
quickAnswer(params: { "q": string }): Promise<any> {
return this._request("GET", "/recipes/quickAnswer", { params });
}
/** Get Random Recipes */
getRandomRecipes(params: { "limitLicense"?: boolean; "tags"?: string; "number"?: number }): Promise<any> {
return this._request("GET", "/recipes/random", { params });
}
/** Equipment Widget */
visualizeEquipment(params: { "Content-Type"?: string; "Accept"?: string }): Promise<any> {
return this._request("POST", "/recipes/visualizeEquipment", { params });
}
/** Ingredients Widget */
visualizeIngredients(params: { "Content-Type"?: string; "language"?: string; "Accept"?: string }): Promise<any> {
return this._request("POST", "/recipes/visualizeIngredients", { params });
}
/** Recipe Nutrition Widget */
visualizeRecipeNutrition(params: { "Content-Type"?: string; "Accept"?: string; "language"?: string }): Promise<any> {
return this._request("POST", "/recipes/visualizeNutrition", { params });
}
/** Price Breakdown Widget */
visualizePriceBreakdown(params: { "Content-Type"?: string; "Accept"?: string; "language"?: string }): Promise<any> {
return this._request("POST", "/recipes/visualizePriceEstimator", { params });
}
/** Create Recipe Card */
createRecipeCard(params: { "Content-Type"?: string }): Promise<any> {
return this._request("POST", "/recipes/visualizeRecipe", { params });
}
/** Recipe Taste Widget */
visualizeRecipeTaste(params: { "language"?: string; "Content-Type"?: string; "Accept"?: string; "normalize"?: boolean; "rgb"?: string }): Promise<any> {
return this._request("POST", "/recipes/visualizeTaste", { params });
}
/** Get Analyzed Recipe Instructions */
getAnalyzedRecipeInstructions(params: { "id": number; "id": number; "stepBreakdown"?: boolean }): Promise<any> {
return this._request("GET", "/recipes/{id}/analyzedInstructions", { params });
}
/** Create Recipe Card */
createRecipeCardGet(params: { "id": number; "mask"?: string; "backgroundImage"?: string; "backgroundColor"?: string; "fontColor"?: string }): Promise<any> {
return this._request("GET", "/recipes/{id}/card", { params });
}
/** Equipment by ID Widget */
visualizeRecipeEquipmentByID(params: { "id": number; "id": number; "defaultCss"?: boolean }): Promise<any> {
return this._request("GET", "/recipes/{id}/equipmentWidget", { params });
}
/** Equipment by ID */
getRecipeEquipmentByID(params: { "id": number; "id": number }): Promise<any> {
return this._request("GET", "/recipes/{id}/equipmentWidget.json", { params });
}
/** Equipment by ID Image */
equipmentByIDImage(params: { "id": string; "id": number }): Promise<any> {
return this._request("GET", "/recipes/{id}/equipmentWidget.png", { params });
}
/** Get Recipe Information */
getRecipeInformation(params: { "id": number; "id": number; "includeNutrition"?: boolean }): Promise<any> {
return this._request("GET", "/recipes/{id}/information", { params });
}
/** Ingredients by ID Widget */
visualizeRecipeIngredientsByID(params: { "id": number; "id": number; "defaultCss"?: boolean; "measure"?: string }): Promise<any> {
return this._request("GET", "/recipes/{id}/ingredientWidget", { params });
}
/** Ingredients by ID */
getRecipeIngredientsByID(params: { "id": number; "id": number }): Promise<any> {
return this._request("GET", "/recipes/{id}/ingredientWidget.json", { params });
}
/** Ingredients by ID Image */
ingredientsByIDImage(params: { "id": string; "id": number; "measure"?: string }): Promise<any> {
return this._request("GET", "/recipes/{id}/ingredientWidget.png", { params });
}
/** Recipe Nutrition Label Widget */
recipeNutritionLabelWidget(params: { "id": string; "id": number; "defaultCss"?: boolean; "showOptionalNutrients"?: boolean; "showZeroValues"?: boolean; "showIngredients"?: boolean }): Promise<any> {
return this._request("GET", "/recipes/{id}/nutritionLabel", { params });
}
/** Recipe Nutrition Label Image */
recipeNutritionLabelImage(params: { "id": string; "id": number; "showOptionalNutrients"?: boolean; "showZeroValues"?: boolean; "showIngredients"?: boolean }): Promise<any> {
return this._request("GET", "/recipes/{id}/nutritionLabel.png", { params });
}
/** Recipe Nutrition by ID Widget */
visualizeRecipeNutritionByID(params: { "id": number; "id": number; "defaultCss"?: boolean; "Accept"?: string }): Promise<any> {
return this._request("GET", "/recipes/{id}/nutritionWidget", { params });
}
/** Nutrition by ID */
getRecipeNutritionWidgetByID(params: { "id": number; "id": number }): Promise<any> {
return this._request("GET", "/recipes/{id}/nutritionWidget.json", { params });
}
/** Recipe Nutrition by ID Image */
recipeNutritionByIDImage(params: { "id": string; "id": number }): Promise<any> {
return this._request("GET", "/recipes/{id}/nutritionWidget.png", { params });
}
/** Price Breakdown by ID Widget */
visualizeRecipePriceBreakdownByID(params: { "id": number; "id": number; "defaultCss"?: boolean }): Promise<any> {
return this._request("GET", "/recipes/{id}/priceBreakdownWidget", { params });
}
/** Price Breakdown by ID */
getRecipePriceBreakdownByID(params: { "id": number; "id": number }): Promise<any> {
return this._request("GET", "/recipes/{id}/priceBreakdownWidget.json", { params });
}
/** Price Breakdown by ID Image */
priceBreakdownByIDImage(params: { "id": string; "id": number }): Promise<any> {
return this._request("GET", "/recipes/{id}/priceBreakdownWidget.png", { params });
}
/** Get Similar Recipes */
getSimilarRecipes(params: { "id": number; "id": number; "number"?: number; "limitLicense"?: boolean }): Promise<any> {
return this._request("GET", "/recipes/{id}/similar", { params });
}
/** Summarize Recipe */
summarizeRecipe(params: { "id": number; "id": number }): Promise<any> {
return this._request("GET", "/recipes/{id}/summary", { params });
}
/** Recipe Taste by ID Widget */
visualizeRecipeTasteByID(params: { "id": number; "id": number; "normalize"?: boolean; "rgb"?: string }): Promise<any> {
return this._request("GET", "/recipes/{id}/tasteWidget", { params });
}
/** Taste by ID */
getRecipeTasteByID(params: { "id": number; "id": number; "normalize"?: boolean }): Promise<any> {
return this._request("GET", "/recipes/{id}/tasteWidget.json", { params });
}
/** Recipe Taste by ID Image */
recipeTasteByIDImage(params: { "id": string; "id": number; "normalize"?: boolean; "rgb"?: string }): Promise<any> {
return this._request("GET", "/recipes/{id}/tasteWidget.png", { params });
}
/** Connect User */
connectUser(body: unknown): Promise<any> {
return this._request("POST", "/users/connect", { body });
}
}
export default Spoonacular;
No reviews yet. Be the first to rate this API.
Yes. Spoonacular uses apiKey authentication, so you bring your own key from the provider. You store it once on OmniStream and the proxy injects it into every call, so your code only ever sends your Omni key.
The spoonacular Nutrition, Recipe, and Food API allows you to access over thousands of recipes, thousands of ingredients, 800,000 food products, over 100,000 menu items, and restaurants. It exposes 99 endpoints over GET, POST, DELETE, including GET /food/converse, GET /food/converse/suggest, GET /food/customFoods/search.
Install the OmniStream SDK for your language and call Spoonacular through it. The client is generated from this API's OpenAPI spec, so parameters and responses are fully typed, and the same client also calls every other API in the marketplace.
You can start on the free plan. OmniStream charges for the unified SDK, key storage and proxy rather than for Spoonacular itself, and Spoonacular's own rate limits still apply to your provider key.
TheCocktailDB: A free, keyless database of cocktail recipes - search, look up, filter, and get random drinks with ingredients and instructions.
Autocomplete Ingredient Search
Compute Glycemic Load
Map Ingredients to Grocery Products
Ingredient Search
Get Ingredient Substitutes
Compute Ingredient Amount
Get Ingredient Information
Get Ingredient Substitutes by ID
Random Food Joke
Search Menu Items
Autocomplete Menu Item Search
Get Menu Item Information
Menu Item Nutrition Label Widget
Menu Item Nutrition Label Image
Menu Item Nutrition by ID Widget
Menu Item Nutrition by ID Image
Classify Grocery Product
Classify Grocery Product Bulk
Search Grocery Products
Autocomplete Product Search
Search Grocery Products by UPC
Get Comparable Products
Get Product Information
Product Nutrition Label Widget
Product Nutrition Label Image
Product Nutrition by ID Widget
Product Nutrition by ID Image
Search Restaurants
Search All Food
Search Site Content
Random Food Trivia
Search Food Videos
Wine Description
Dish Pairing for Wine
Wine Pairing
Wine Recommendation
Generate Meal Plan
Clear Meal Plan Day
Add to Meal Plan
Delete from Meal Plan
Get Shopping List
Add to Shopping List
Delete from Shopping List
Generate Shopping List
Get Meal Plan Templates
Add Meal Plan Template
Get Meal Plan Template
Delete Meal Plan Template
Get Meal Plan Week
Analyze Recipe
Analyze Recipe Instructions
Autocomplete Recipe Search
Search Recipes
Convert Amounts
Classify Cuisine
Extract Recipe from Website
Search Recipes by Ingredients
Search Recipes by Nutrients
Guess Nutrition by Dish Name
Get Recipe Information Bulk
Parse Ingredients
Analyze a Recipe Search Query
Quick Answer
Get Random Recipes
Equipment Widget
Ingredients Widget
Recipe Nutrition Widget
Price Breakdown Widget
Create Recipe Card
Recipe Taste Widget
Get Analyzed Recipe Instructions
Create Recipe Card
Equipment by ID Widget
Equipment by ID
Equipment by ID Image
Get Recipe Information
Ingredients by ID Widget
Ingredients by ID
Ingredients by ID Image
Recipe Nutrition Label Widget
Recipe Nutrition Label Image
Recipe Nutrition by ID Widget
Nutrition by ID
Recipe Nutrition by ID Image
Price Breakdown by ID Widget
Price Breakdown by ID
Price Breakdown by ID Image
Get Similar Recipes
Summarize Recipe
Recipe Taste by ID Widget
Taste by ID
Recipe Taste by ID Image
Connect User