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 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 isWhat it's for
Custom ingredientsNew, complete sheetsExpand your catalog with inputs the global base doesn't have.
Custom fieldsColumns/metadata you define onceCapture 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):

MethodEndpointAction
GET/api/ingredients/customLists your active custom ingredients.
GET/api/ingredients/custom/:idSheet for one (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.
  • Validation: the backend uses a strict schema (rejects unknown fields) and limits allergens to the official list.

Next steps

On this page