Textual Chef · for developers
Recipes as data, in full.
The Textual Chef catalog as JSON: 4,500+ complete recipes, each with half, standard and double quantities, steps with the amounts written in, estimated nutrition per serving, allergens, diets and cuisine. The keyed API is in beta. A 100-recipe sample is live now: free, no key, no rate limit.
What exists today, and what does not
Live, free, no key
/api/v0/index.json: 100 full records, one per cuisine, as static JSON with CORS open./recipes.json: a lightweight index of every recipe, with links.recipe.mdafter any recipe URL: the recipe as plain markdown.
In beta, not public yet
- Full records for the whole catalog, behind a key.
- Filtering by diet, allergen, cuisine, time and macros.
- A price. It is not set; beta testers get a lifetime discount on it.
What a record holds
| Field | What it is |
|---|---|
id, name, description | Stable slug id, display name, one-sentence description. |
url, text | The HTML page and its plain markdown twin. |
cuisine, region, meal, method, difficulty | Controlled vocabularies: over 100 cuisines, 11 meal types, 18 cooking methods, 3 difficulties. Region is filled on part of the catalog. |
mainIngredient | The ingredient the dish is built around. |
servings, time | Servings at the standard batch; prep, cook and total minutes. |
nutritionPerServing | Calories, protein, carbs, fat, fiber (g) and sodium (mg), with an estimated flag. |
diets, restrictions | 14 diet labels (Vegan, Keto, High Protein...) and 13 restriction labels (Gluten-Free, Nut-Free...). |
allergens | contains: the 9 major allergens found in a required ingredient. avoidable: found only in an optional or substitutable ingredient. |
ingredients | Each with an id, name, prep note, and quantities at half, standard and double. |
steps | The method three times, at half, standard and double, with the quantities already written into each step. |
One record
Kuru Fasulye, trimmed to three restrictions, two ingredients and two steps. The full record, with all eleven ingredients and every step at three batch sizes, is at /api/v0/recipes/kuru-fasulye.json.
{
"id": "kuru-fasulye",
"name": "Kuru Fasulye",
"description": "A classic Turkish stew made with tender white beans, beef, and aromatic red pepper paste in a rich tomato sauce.",
"url": "https://textualchef.com/recipes/kuru-fasulye/",
"text": "https://textualchef.com/recipes/kuru-fasulye/recipe.md",
"cuisine": "Turkish",
"region": null,
"meal": "Dinner",
"method": "Stovetop",
"difficulty": "Medium",
"mainIngredient": "White Beans",
"servings": 4,
"time": {
"prepMinutes": 15,
"cookMinutes": 60,
"totalMinutes": 75
},
"nutritionPerServing": {
"calories": 420,
"proteinG": 28,
"carbsG": 45,
"fatG": 14,
"fiberG": 12,
"sodiumMg": 680,
"estimated": true
},
"diets": [
"High Fiber",
"High Protein",
"Mediterranean"
],
"restrictions": [
"Gluten-Free",
"Nut-Free",
"Dairy-Free"
],
"allergens": {
"contains": [],
"avoidable": []
},
"ingredients": [
{
"id": "navy_beans",
"name": "navy beans",
"prep": "soaked",
"quantities": {
"half": "1 cup",
"standard": "2 cups",
"double": "4 cups"
}
},
{
"id": "beef",
"name": "stew beef",
"prep": "diced",
"quantities": {
"half": "1/2 lb",
"standard": "1 lb",
"double": "2 lbs"
}
}
],
"steps": {
"standard": [
"Heat 2 tbsp olive oil in a large pot over medium-high heat.",
"Add 1 lb diced stew beef and sear for 5 minutes until browned and reaching an internal temperature of at least 145°F."
]
},
"updated": "2026-08-12"
}
Fetch it from anywhere: curl https://textualchef.com/api/v0/recipes/kuru-fasulye.json
Why the quantities come three ways
Most recipe data gives you one ingredient list and leaves scaling to you. Scaling by multiplication is where recipes break: half of one egg, 0.33 cups, a pinch doubled. Every record here carries the amounts a cook would actually use at half, standard and double, and the method is written out at each size, so an app can show a halved recipe without doing arithmetic on text.
Where the recipes come from
The recipes are written with the help of language models and published only after automated schema and culinary checks pass. Every ingredient carries half, standard and double amounts, and the method refers to ingredients by id rather than retyping them, which is how the amounts get written into each step. Nutrition is estimated, not measured in a lab, and every record says so with "estimated": true. Treat it as a planning figure, not a label.
Join the beta
The keyed API opens to a short list first. Beta testers get a lifetime discount on the launch price, whatever it turns out to be, and a say in the record format while it is still v0. The price is not set yet, so there is nothing to pay and nothing to cancel.
We store your email and your two answers, and nothing about your browser or IP address. Reply to the confirmation and we delete your address.