AreaCacaoDocs
FormulationIngredients

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 database 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 database 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
  • Navigation: 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 database.
  • 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." At the top of the form you'll see the reminder "Check your ingredient's sheet: make sure the nutrition information is complete and that you've declared its allergens, or confirmed it contains none."

Fill in the sheet

Only the name is required (if you leave it empty you'll see "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 Create ingredient (when editing an existing sheet, the button is Save changes). The ingredient is created, the screen switches to the My ingredients tab, and it's ready to use in your recipes.

Sheet fields

All nutrition values are per 100 g. Numeric fields accept a decimal comma (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, which are catalog categories (Cocoa products, Dairy, Sweeteners, Fats and oils, Nuts and seeds, Fruits, Seasonings, Additives and texturizing agents, Alcoholic beverages). The suggestions are shown in the interface language; if you pick one, the sheet goes into that catalog category and its name is translated when you switch language.
  • Subcategory
  • Brand
  • Supplier — a searchable picker linked to your supplier list: choose an existing one, No supplier, or type a new name and click Create "…".

Nutrition facts (per 100 g)

Water, fat, saturated fat, carbohydrates, sugars, protein, fiber, salt, alcohol (ethanol), calories (kcal), cocoa butter, and total cocoa (%).

  • Cocoa butter: only the fat that comes from cocoa (chocolate, couverture, cocoa butter); leave it empty for dairy and butter.
  • Alcohol (ethanol): grams of ethanol per 100 g, for wines and liqueurs.
  • Water not provided: if you don't enter the water, no value is saved and the validation treats it as unknown, not as 0. If the ingredient contains no water, enter 0.
  • Water estimate: once fat, carbohydrates, and protein are entered (a 0 counts), the form offers a "Rough estimate by difference" (100 − fat − total carbohydrate − protein − salt, also subtracting any declared fiber and alcohol) with a Use button. If you use it, the field is renamed Water (estimated) and the sheet saves it flagged as estimated. When there's fiber, you choose whether your label lists it separately from carbohydrate (EU labeling: it's subtracted) or includes it (US or Canadian labeling: it isn't subtracted again). For an alcoholic drink, the estimate only appears once you declare the alcohol.
  • Calculated energy: with calories empty and fat, carbohydrates, and protein entered, the form suggests the energy under EU Regulation 1169/2011, Annex XIV (9 × fat + 4 × carbohydrate + 4 × protein + 2 × fiber + 7 × alcohol), also with a Use button. Nothing is filled in automatically.
  • Empty table: if you don't enter any nutrition value, the form warns that the validation won't be able to count this ingredient in your recipes' composition.

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: the ingredient sheet doesn't capture traces (traces are marked on the recipe). See EU-14 Allergens.

There are three possible situations:

  • Allergens checked: the sheet contains those allergens.
  • None checked: saving confirms it contains none of the 14 ("No allergens ticked: saving confirms this ingredient contains none of the 14.").
  • I don't know its allergens yet (leave them undeclared): a checkbox that disables the list. The sheet isn't saved as "no allergens": recipes using this ingredient will warn that their allergen declaration is incomplete until you declare them.

Preservatives

A collapsible, optional section, Does this ingredient contain a preservative?, with four answers: I don't know (the default), No preservative, It is a preservative, and It contains one. The last two ask for the substance and, in the last case, how much it contains. See Using the preservative check.

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, in your account's currency. Purchase history and per-supplier pricing strategy live in the Costs module.

Notes

Free text for any other notes.

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.

When there are sheets, the same review reminder as in the form appears above the table. In the table, when a sheet has a Custom code, it's shown as a badge next to its name, and the Allergens column shows the number of allergens, a dash (none), or Undeclared. 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 isWhat it's for
Custom ingredientsNew, complete sheetsExpand your catalog with inputs the global database doesn't have.
Custom fieldsColumns/metadata you define onceSet up extra data (origin, certification, batch…) for your ingredients. The ingredient form doesn't show these fields yet.

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):

MethodEndpointAction
GET/api/ingredients/customLists your active custom ingredients.
GET/api/ingredients/custom/:idA single ingredient's sheet (includes retired ones, for historical recipes).
POST/api/ingredients/customCreate.
PATCH/api/ingredients/custom/:idEdit (owner only).
DELETE/api/ingredients/custom/:idDelete (soft delete: is_active = false).
  • IDs: prefix ci_ (the global catalog uses other identifiers).
  • Persistence: the custom_ingredients table; this sheet's fields were rolled out with the Drizzle migration 0070 (in production). Macros and micros are stored as JSON; allergens as a list restricted to the EU-14, or null when they're undeclared.
  • Validation: the backend uses a strict schema (rejects unknown fields) and limits allergens to the official list.

Next steps

On this page