Chinese Ingredient Substitutes API
A free JSON feed of every substitute on Chowmi: 52 hard-to-find Chinese ingredients, each with its substitutes ranked by how close they come, the ratio to use, what each is best for, and whether it’s vegan or gluten-free. No API key, no sign-up, CORS enabled. Use it in an app, a recipe site, a class or a research project — just credit Chowmi with a link.
Endpoint
GET https://chowmi.com/api/substitutes- HTTPS only, JSON response, UTF-8.
- CORS enabled (
Access-Control-Allow-Origin: *), so you can call it straight from a browser. - No authentication and no key.
- Cached for an hour in browsers and a day at the edge. The data changes a few times a month, so please cache on your side too rather than calling it on every page view.
Examples
curl https://chowmi.com/api/substitutesconst res = await fetch("https://chowmi.com/api/substitutes");
const data = await res.json();
const doubanjiang = data.ingredients.find((i) => i.slug === "doubanjiang");
console.log(doubanjiang.substitutes[0]); // the closest matchWhat you get back
One object with some metadata and an ingredients array. Fields are only ever added, never renamed or removed; if that ever has to change, it’ll be announced on this page first.
| Field | Type | What it is |
|---|---|---|
| count | number | How many ingredients are in the feed |
| updated | date | When any ingredient in the feed was last changed (YYYY-MM-DD) |
| license / licenseUrl | string | CC BY 4.0 and the link to its terms |
| attribution | string | The credit line to show wherever you use the data |
| ingredients[].slug | string | Stable ID, also the page path: /substitutes/{slug} |
| ingredients[].name | string | Ingredient name in English |
| ingredients[].aka | string or null | Chinese name, pinyin and other names, separated by · |
| ingredients[].url | string | The full guide on Chowmi |
| substitutes[].name | string | The substitute, sorted best match first |
| substitutes[].ratio | string | How much to use, in plain words |
| substitutes[].closeness | number | How close it comes to the real thing, 0–100 |
| substitutes[].bestFor | string | The dishes or jobs it suits |
| substitutes[].vegan / glutenFree | true, false or null | Whether the substitute is vegan / gluten-free; null means we haven't marked it either way |
Sample response (trimmed)
{
"name": "Chinese Ingredient Substitutes",
"source": "https://chowmi.com",
"docs": "https://chowmi.com/developers",
"license": "CC BY 4.0",
"count": 52,
"ingredients": [
{
"slug": "doubanjiang",
"name": "Doubanjiang",
"aka": "Pixian broad bean paste · 豆瓣酱 · chili bean paste · toban djan · spicy bean paste",
"url": "https://chowmi.com/substitutes/doubanjiang",
"substitutes": [ // first 2 shown
{
"name": "Gochujang + white miso",
"ratio": "2 parts gochujang : 1 part white miso + a pinch of sugar",
"closeness": 72,
"bestFor": "Mapo tofu, twice-cooked pork, stir-fries",
"vegan": null,
"glutenFree": null
},
{
"name": "White miso + chili flakes",
"ratio": "2 tbsp white miso + 1–2 tsp chili flakes (or sambal) + ½ tsp sugar",
"closeness": 62,
"bestFor": "Vegan dishes, adjustable heat",
"vegan": true,
"glutenFree": null
}
]
}
// …one entry per ingredient
]
}License and credit
The data is licensed Creative Commons Attribution 4.0 (CC BY 4.0). You can copy it, change it, translate it and use it commercially, as long as you credit Chowmi with a link wherever the data shows up. This line, pasted as HTML, covers it:
Chinese ingredient substitutes data by <a href="https://chowmi.com/substitutes">Chowmi</a>, licensed <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>.Prefer something ready-made? The printable substitution cheat sheet shows the same data as one chart, with embed code for any website. Each ingredient also has a full guide with comparisons and per-dish advice under /substitutes.
Questions
Found a mistake, need a field we don’t have, or built something with it? Email hello@chowmi.com.