Custom ingredients
Create, edit, and use your own private ingredients with the full sheet: macros, micronutrients, allergens, and cost.
What it is
The ingredient catalog is a global, shared base of over 10,000 verified sheets that is read-only for every user. Custom ingredients are the other side of the coin: sheets that you create, private to your account, with the same data richness as the catalog ones.
They cover everything the global base doesn't: a raw material from a specific supplier, an in-house preparation, a regional product, or any input with your own nutrition values and cost. Once created, they're used in your recipes and formulators just like any catalog ingredient.
Custom ingredients are private: no one else sees them. The global catalog stays common to the whole platform and read-only. This capability brings back a feature that already existed in the previous version of AreaCacao.
How to get there
- URL:
https://app.areacacao.com/ingredients - How to reach it: side menu → FORMULATION → Ingredients section.
- Availability: any signed-in account, with no plan restriction.
The screen is titled Ingredient catalog and has a two-tab switcher:
- Catalog — the read-only global base.
- My ingredients — your account's custom ingredients.
The New ingredient button is in the header, on the right, next to Custom fields and Import / Export.
Create an ingredient
Open the form
In Ingredients, click New ingredient. A form opens with the full sheet, under the subtitle "Your own sheet: visible only in your AreaCacao catalog.".
Fill in the sheet
Only the name is required; everything else is optional. You can save an ingredient with just its name and complete the data later. See the detail of each field in Sheet fields.
Save
Click Save ingredient. The ingredient is created and appears in the My ingredients tab, ready to use in your recipes.
Sheet fields
All nutrition values are per 100 g. Numeric fields accept a decimal comma (Spanish format, e.g. 2,5).
Identity
- Name (required)
- Custom code — your SKU or internal reference.
- Alternate names — comma-separated.
- Category — a free-text field: you can type any value or pick one of the dropdown suggestions (Cocoa and derivatives, Dairy, Sugars and sweeteners, Fats and oils, Nuts, Fruits, Spices and aromatics, Additives, Grains and flours, Liquors and spirits).
- Subcategory
- Brand and Supplier
Nutrition facts (per 100 g)
Water, fat (and saturated fat), carbohydrates (and sugars), protein, fiber, salt, calories (kcal), cocoa butter fat, and total cocoa (%).
Micronutrients
A collapsible section, closed by default, with 20 micronutrients plus two extra values:
- Vitamins (11): A, D, E, K, C, B1 (thiamin), B2 (riboflavin), B3 (niacin), B6, B9 (folate), and B12.
- Minerals (9): calcium, iron, magnesium, phosphorus, potassium, zinc, copper, manganese, and selenium.
- Other (2): cholesterol and caffeine.
Allergens
Checkbox selection from the official EU list (14): gluten, crustaceans, eggs, fish, peanuts, soy, milk, tree nuts, celery, mustard, sesame, sulfites, lupin, and mollusks. It's a simple "contains" model (traces or "may contain" aren't captured for now). See EU-14 allergens.
Physical properties
- Base unit — grams by default.
- Density (g/ml) — needed to convert volumes (ml, L) to weight.
- Weight per unit (g) — needed to convert units to weight.
Cost
- Price per kg — a reference cost for the sheet. Purchase history and per-supplier pricing strategy live in the Costs module.
Notes
Free text for any observation.
The formulator's internal technical fields (baking soda, lecithin, citric acid, pectin) aren't included here: the ingredient sheet is nutritional, not process-related.
View, edit, and delete
In the My ingredients tab you'll see the list of your sheets. If you haven't created any yet, the tab shows an empty state with the title "You don't have any custom ingredients yet", the text "Build tailored sheets with your own macros, allergens, and prices. They'll be available in your recipes and formulations.", and a New ingredient button.
In the table, when a sheet has a Custom code, it's shown as a badge next to its name. For each row:
- View — click the row to open its full sheet.
- Edit — the pencil-icon button reopens the form with the data loaded.
- Delete — the trash-icon button removes it (with confirmation).
Deletion is soft: deleting an ingredient removes it from My ingredients and from the search, but recipes that already used it still show its sheet and don't break. In practice: deleting doesn't affect earlier recipes.
Using it in a recipe
When you add ingredients in the recipe editor or in the formulators, the ingredient search shows your custom ingredients too, tagged Mine to set them apart from the global catalog.
They're added and calculated exactly like the catalog ones: they contribute their macros to the recipe total and take part in unit conversion by density or weight per unit. That's why it's worth declaring density and weight per unit if you're going to use the ingredient in milliliters or units.
Custom ingredients vs. custom fields
They're two distinct, complementary things:
| What it is | What it's for | |
|---|---|---|
| Custom ingredients | New, complete sheets | Expand your catalog with inputs the global base doesn't have. |
| Custom fields | Columns/metadata you define once | Capture extra data (origin, certification, batch…) on your ingredients. |
In short: custom ingredients add sheets; custom fields add fields to those sheets.
Technical reference
For integrations or support. The API is authenticated with the user's session (the userId is taken by the server, never the client):
| Method | Endpoint | Action |
|---|---|---|
GET | /api/ingredients/custom | Lists your active custom ingredients. |
GET | /api/ingredients/custom/:id | Sheet for one (includes retired ones, for historical recipes). |
POST | /api/ingredients/custom | Create. |
PATCH | /api/ingredients/custom/:id | Edit (owner only). |
DELETE | /api/ingredients/custom/:id | Delete (soft delete: is_active = false). |
- IDs: prefix
ci_(the global catalog uses other identifiers). - Persistence: the
custom_ingredientstable; this sheet's fields were rolled out with the Drizzle migration0070(in production). Macros and micros are stored as JSON; allergens as a list restricted to the EU-14. - Validation: the backend uses a strict schema (rejects unknown fields) and limits allergens to the official list.
Next steps
Ingredient catalog
The read-only global base of over 10,000 sheets.
Search ingredients
How to find (and recognize by the "Mine" tag) your ingredients.
Custom fields
Define your own columns to capture extra data.
Import and export
Dump or load your custom catalog in JSON or CSV.
EU-14 allergens
The 14 official ones and how they're declared on the sheet.
Recipe ingredients tab
How ingredients are added and calculated in a recipe.