# Racion

> Plan a week of family meals priced for the store you shop at, with one shopping list rounded up to whole packs, in 22 countries. Set allergies, foods to avoid, a budget and an eating goal; plan a holiday table for any number of guests or price a menu you picked; and search thousands of recipes with nutrition and cost per portion. Prices are estimates from national statistics. No account or API key required.

App · 11 actions. Web page: https://docs.lodol.com/docs/integrations/racion

## Actions

### Build a weekly meal plan

Plan seven days of breakfasts, lunches and dinners for your household, priced for the store you shop at, with one shopping list rounded up to whole packs. Set allergies, foods to avoid, a budget and an eating goal. Prices are estimates from national statistics. No API key required.

**Inputs**

- Country (`country`, text, required): The country to price the food for. Prices and the currency come from it.
- Store (`store`, text): Where you shop. Each store is priced from the country's average, so a discounter comes out cheaper than a premium supermarket. Leave empty for the first store in the list.
- Adults (`adults`, number): How many adults eat, 1 to 10. From 1 to 10. Default: `2`.
- Children's ages (`children_ages`, list): The age in years of each child who eats with you, 1 to 17, for example 7 and 12. Portions are scaled to their age.
- Meals (`meals`, list): Which meals to plan each day. Breakfast, lunch and dinner when left empty. One or more of: `breakfast`, `lunch`, `dinner`, `snack`.
- Kitchen equipment (`kitchen_equipment`, list): What your kitchen has, so every dish can be cooked. A stove and an oven when left empty. One or more of: `stove`, `oven`, `microwave`, `airfryer` (Air fryer), `multicooker`, `blender`, `mixer`, `grill`, `steamer`, `meatgrinder` (Meat grinder).
- Allergies (`allergies`, list): Dishes containing any of these are never offered. One or more of: `gluten`, `dairy` (Milk), `eggs`, `nuts` (Tree nuts), `peanuts`, `fish`, `seafood` (Shellfish), `soy`.
- Food groups to avoid (`avoid_food_groups`, list): Leave out whole groups, for example meat for a vegetarian. One or more of: `meat`, `poultry`, `fish`, `seafood`, `offal`, `spicy` (Spicy food).
- Ingredients to avoid (`avoid_ingredients`, list): Specific ingredients nobody will eat, such as mushrooms.
- Ingredients you already have (`ingredients_at_home`, list): Food already in your kitchen. The planner uses it up and leaves it off the shopping list.
- Goal (`goal`, text): What the menu should help with. One of: `none` (Just tasty), `healthy` (Eat well), `lose` (Lose weight), `gain` (Gain muscle). Default: `none`.
- Budget (`budget`, number): How much to aim to spend, in the country's currency. Leave empty for no limit. At least 0.
- Budget is (`budget_period`, text): Whether the budget is per person per day or for the whole week. One of: `per_person_per_day` (Per person per day), `whole_week` (For the whole week). Default: `per_person_per_day`.
- Favour a collection (`collection`, text): Prefer dishes from one of Racion's collections, such as quick dinners or high-protein meals.
- Start date (`start_date`, date): The first day of the plan. Next Monday when left empty.
- Language (`language`, text): The language for dish names, steps and the shopping list. One of: `en` (English), `de` (German), `fr` (French), `es` (Spanish), `it` (Italian), `pt` (Portuguese), `nl` (Dutch), `pl` (Polish), `cs` (Czech), `uk` (Ukrainian), and 5 more. Default: `en`.

**Outputs**

- `budget_for_plan` (number): The budget the planner aimed for, for the whole plan.
- `budget_per_day` (number): The same budget per person per day.
- `calories_per_day` (number): Average calories per person per day.
- `carbs_per_day_g` (number): Average carbohydrates per day, grams.
- `cook_minutes_total` (number): Total cooking time across the plan.
- `cost_of_food_eaten` (number): The part of the total actually eaten during the plan; the rest is what is left in opened packs.
- `country_code` (text): The country priced, e.g. 'DE'.
- `created_at` (text): When the plan was built (UTC).
- `currency` (text): The currency, e.g. 'EUR'.
- `currency_symbol` (text): The currency symbol, e.g. '€'.
- `day_count` (number): How many days.
- `days` (list): Each day with its dishes. A table has a single day.
- `fat_per_day_g` (number): Average fat per day, grams.
- `goal` (text): The eating goal, e.g. 'Eat well'.
- `guests` (number): For a table, how many guests it feeds. Empty for a week.
- `notes` (list): Extra remarks from the planner, for example about a baby.
- `plan_id` (text): The plan's id, for Get a meal plan.
- `plan_url` (text): The plan's page on racion.app, with the menu, recipes and a shopping list you can tick off. Share this with people.
- `portions` (number): How many adult portions each dish is scaled to; children count as part portions.
- `price_period` (text): The month the prices are for, e.g. 'August 2026'.
- `price_region` (text): The region priced, e.g. 'Germany'.
- `price_source` (text): Where the price estimates come from, e.g. 'Eurostat: country price level × HICP by group'. Show it next to any amount you share.
- `protein_per_day_g` (number): Average protein per day, grams.
- `shopping_list` (list): Everything to buy, grouped by aisle.
- `shopping_list_count` (number): How many items are on the shopping list.
- `shopping_list_text` (text): The shopping list as plain text, one line per item under each aisle, ready to paste into an email or message.
- `staples_cost` (number): Estimated cost of staples you usually already have.
- `start_date` (text): The first day, as YYYY-MM-DD.
- `store` (text): The store priced, e.g. 'Lidl'.
- `store_code` (text): The store's code.
- `telegram_url` (text): A link that sends this shopping list to Racion's Telegram bot, where items can be ticked off.
- `title` (text): The table's name, such as 'Oktoberfest' or 'My table'. Empty for a week.
- `total_cost` (number): Estimated cost of everything on the shopping list.
- `warnings` (list): Anything the planner could not satisfy, such as the budget.

**Example output**

```json
{
  "budget_for_plan": 112.0,
  "budget_per_day": 8.0,
  "calories_per_day": 1466,
  "carbs_per_day_g": 113,
  "cook_minutes_total": 553,
  "cost_of_food_eaten": 62.04,
  "country_code": "DE",
  "created_at": "2026-10-15T21:34:13Z",
  "currency": "EUR",
  "currency_symbol": "\u20ac",
  "day_count": 7,
  "days": [
    {
      "calories": 1736,
      "cook_minutes": 50,
      "cost": 6.56,
      "date": "2026-10-19",
      "dish_count": 1,
      "dishes": [
        {
          "calories": 727,
          "carbs_g": 63,
          "cook_minutes": 20,
          "cooked_for_two_days": false,
          "cost_per_portion": 1.23,
          "course": null,
          "fat_g": 40,
          "leftover": false,
          "meal": "dinner",
          "protein_g": 27,
          "recipe_id": "spagetti_al_la_karbonara",
          "servings": null,
          "title": "Spaghetti alla Carbonara",
          "why_chosen": "finishing garlic and bacon \u00b7 under budget"
        }
      ],
      "label": "Mon"
    }
  ],
  "fat_per_day_g": 79,
  "goal": "Just tasty",
  "guests": null,
  "notes": [],
  "plan_id": "b075fdac-9d4d-473f-9a2d-e6b7a38c6e1e",
  "plan_url": "https://racion.app/en/plan/b075fdac-9d4d-473f-9a2d-e6b7a38c6e1e",
  "portions": 2.0,
  "price_period": "August 2026",
  "price_region": "Germany",
  "price_source": "Eurostat: country price level \u00d7 HICP by group",
  "protein_per_day_g": 78,
  "shopping_list": [
    {
      "aisle": "Vegetables and herbs",
      "cost": 0.44,
      "ingredient_id": "garlic",
      "name": "Garlic",
      "needed": 46.0,
      "pack_size": 100.0,
      "to_buy": 50.0,
      "unit": "g",
      "used_in": [
        "Warm Bean and Bacon Salad",
        "Spaghetti alla Carbonara"
      ],
      "usually_at_home": false
    }
  ],
  "shopping_list_count": 64,
  "shopping_list_text": "Vegetables and herbs:\n- Garlic: 50 g, about 0.44 EUR",
  "staples_cost": 28.01,
  "start_date": "2026-10-19",
  "store": "Lidl",
  "store_code": "lidl",
  "telegram_url": "https://t.me/racionappbot?start=psHX9rJ1NRz-aLea3o4xuHg",
  "title": null,
  "total_cost": 96.61,
  "warnings": []
}
```

### Get a meal plan

Open a meal plan or holiday table built earlier, with its dishes and shopping list. Paste its id or its racion.app link. No API key required.

**Inputs**

- Plan (`plan_id`, text, required): The plan's id or its link, for example https://racion.app/plan/b075fdac-9d4d-473f-9a2d-e6b7a38c6e1e.
- Language (`language`, text): The language for dish names, steps and the shopping list. One of: `en` (English), `de` (German), `fr` (French), `es` (Spanish), `it` (Italian), `pt` (Portuguese), `nl` (Dutch), `pl` (Polish), `cs` (Czech), `uk` (Ukrainian), and 5 more. Default: `en`.

**Outputs**

- `budget_for_plan` (number): The budget the planner aimed for, for the whole plan.
- `budget_per_day` (number): The same budget per person per day.
- `calories_per_day` (number): Average calories per person per day.
- `carbs_per_day_g` (number): Average carbohydrates per day, grams.
- `cook_minutes_total` (number): Total cooking time across the plan.
- `cost_of_food_eaten` (number): The part of the total actually eaten during the plan; the rest is what is left in opened packs.
- `country_code` (text): The country priced, e.g. 'DE'.
- `created_at` (text): When the plan was built (UTC).
- `currency` (text): The currency, e.g. 'EUR'.
- `currency_symbol` (text): The currency symbol, e.g. '€'.
- `day_count` (number): How many days.
- `days` (list): Each day with its dishes. A table has a single day.
- `fat_per_day_g` (number): Average fat per day, grams.
- `goal` (text): The eating goal, e.g. 'Eat well'.
- `guests` (number): For a table, how many guests it feeds. Empty for a week.
- `notes` (list): Extra remarks from the planner, for example about a baby.
- `plan_id` (text): The plan's id, for Get a meal plan.
- `plan_url` (text): The plan's page on racion.app, with the menu, recipes and a shopping list you can tick off. Share this with people.
- `portions` (number): How many adult portions each dish is scaled to; children count as part portions.
- `price_period` (text): The month the prices are for, e.g. 'August 2026'.
- `price_region` (text): The region priced, e.g. 'Germany'.
- `price_source` (text): Where the price estimates come from, e.g. 'Eurostat: country price level × HICP by group'. Show it next to any amount you share.
- `protein_per_day_g` (number): Average protein per day, grams.
- `shopping_list` (list): Everything to buy, grouped by aisle.
- `shopping_list_count` (number): How many items are on the shopping list.
- `shopping_list_text` (text): The shopping list as plain text, one line per item under each aisle, ready to paste into an email or message.
- `staples_cost` (number): Estimated cost of staples you usually already have.
- `start_date` (text): The first day, as YYYY-MM-DD.
- `store` (text): The store priced, e.g. 'Lidl'.
- `store_code` (text): The store's code.
- `telegram_url` (text): A link that sends this shopping list to Racion's Telegram bot, where items can be ticked off.
- `title` (text): The table's name, such as 'Oktoberfest' or 'My table'. Empty for a week.
- `total_cost` (number): Estimated cost of everything on the shopping list.
- `warnings` (list): Anything the planner could not satisfy, such as the budget.

**Example output**

```json
{
  "budget_for_plan": 112.0,
  "budget_per_day": 8.0,
  "calories_per_day": 1466,
  "carbs_per_day_g": 113,
  "cook_minutes_total": 553,
  "cost_of_food_eaten": 62.04,
  "country_code": "DE",
  "created_at": "2026-10-15T21:34:13Z",
  "currency": "EUR",
  "currency_symbol": "\u20ac",
  "day_count": 7,
  "days": [
    {
      "calories": 1736,
      "cook_minutes": 50,
      "cost": 6.56,
      "date": "2026-10-19",
      "dish_count": 1,
      "dishes": [
        {
          "calories": 727,
          "carbs_g": 63,
          "cook_minutes": 20,
          "cooked_for_two_days": false,
          "cost_per_portion": 1.23,
          "course": null,
          "fat_g": 40,
          "leftover": false,
          "meal": "dinner",
          "protein_g": 27,
          "recipe_id": "spagetti_al_la_karbonara",
          "servings": null,
          "title": "Spaghetti alla Carbonara",
          "why_chosen": "finishing garlic and bacon \u00b7 under budget"
        }
      ],
      "label": "Mon"
    }
  ],
  "fat_per_day_g": 79,
  "goal": "Just tasty",
  "guests": null,
  "notes": [],
  "plan_id": "b075fdac-9d4d-473f-9a2d-e6b7a38c6e1e",
  "plan_url": "https://racion.app/en/plan/b075fdac-9d4d-473f-9a2d-e6b7a38c6e1e",
  "portions": 2.0,
  "price_period": "August 2026",
  "price_region": "Germany",
  "price_source": "Eurostat: country price level \u00d7 HICP by group",
  "protein_per_day_g": 78,
  "shopping_list": [
    {
      "aisle": "Vegetables and herbs",
      "cost": 0.44,
      "ingredient_id": "garlic",
      "name": "Garlic",
      "needed": 46.0,
      "pack_size": 100.0,
      "to_buy": 50.0,
      "unit": "g",
      "used_in": [
        "Warm Bean and Bacon Salad",
        "Spaghetti alla Carbonara"
      ],
      "usually_at_home": false
    }
  ],
  "shopping_list_count": 64,
  "shopping_list_text": "Vegetables and herbs:\n- Garlic: 50 g, about 0.44 EUR",
  "staples_cost": 28.01,
  "start_date": "2026-10-19",
  "store": "Lidl",
  "store_code": "lidl",
  "telegram_url": "https://t.me/racionappbot?start=psHX9rJ1NRz-aLea3o4xuHg",
  "title": null,
  "total_cost": 96.61,
  "warnings": []
}
```

### Get a recipe

Get one recipe in full: ingredients per portion, step-by-step method, nutrition, cooking tips and the estimated cost of a portion in your country. No API key required.

**Inputs**

- Recipe (`recipe_id`, text, required): The recipe's id from Search recipes, such as 'chicken_cabbage_cutlets', or its racion.app link.
- Country (`country`, text, required): The country to price the food for. Prices and the currency come from it.
- Language (`language`, text): The language for dish names, steps and the shopping list. One of: `en` (English), `de` (German), `fr` (French), `es` (Spanish), `it` (Italian), `pt` (Portuguese), `nl` (Dutch), `pl` (Polish), `cs` (Czech), `uk` (Ukrainian), and 5 more. Default: `en`.

**Outputs**

- `calories` (number): Calories per portion.
- `carbs_g` (number): Carbohydrates per portion, grams.
- `cook_minutes` (number): Time to cook it.
- `cost_per_portion` (number): Estimated cost of one portion.
- `currency` (text): The currency of the cost.
- `description` (text): A short description.
- `equipment` (list): Kitchen equipment it needs.
- `fat_g` (number): Fat per portion, grams.
- `freezes_well` (true/false): True when it can be frozen.
- `image_url` (text): A photo of the dish.
- `ingredient_count` (number): How many ingredients.
- `ingredients` (list): What goes in, per portion.
- `keeps_for_days` (number): How many days it keeps in the fridge.
- `meal` (text): breakfast, lunch, dinner or snack.
- `protein_g` (number): Protein per portion, grams.
- `recipe_id` (text): The recipe's id.
- `recipe_url` (text): The recipe's page on racion.app.
- `step_count` (number): How many steps.
- `steps` (list): The method, one step per entry.
- `tags` (list): Racion's tags, such as 'poultry' or 'kids'.
- `tip_mistakes` (text): Common mistakes to avoid.
- `tip_serving` (text): What to serve it with.
- `tip_storage` (text): How to store and reheat it.
- `tip_swaps` (text): Ingredients you can swap.
- `tip_why_it_works` (text): The key technique and why it matters.
- `title` (text): The dish's name.

**Example output**

```json
{
  "calories": 452,
  "carbs_g": 21.2,
  "cook_minutes": 40,
  "cost_per_portion": 1.53,
  "currency": "EUR",
  "description": "Tender, kid-friendly cutlets made with ground chicken, shredded cabbage, and semolina. Serve with sour cream.",
  "equipment": [
    "stove"
  ],
  "fat_g": 27.1,
  "freezes_well": true,
  "image_url": "https://racion.app/images/recipes/chicken_cabbage_cutlets.webp",
  "ingredient_count": 2,
  "ingredients": [
    {
      "amount_per_portion": 120.0,
      "ingredient_id": "ground_chicken",
      "name": "Ground chicken",
      "unit": "g",
      "usually_at_home": false
    },
    {
      "amount_per_portion": 10.0,
      "ingredient_id": "sunflower_oil",
      "name": "Sunflower oil",
      "unit": "ml",
      "usually_at_home": true
    }
  ],
  "keeps_for_days": 3,
  "meal": "dinner",
  "protein_g": 29.0,
  "recipe_id": "chicken_cabbage_cutlets",
  "recipe_url": "https://racion.app/en/recipe/chicken_cabbage_cutlets",
  "step_count": 2,
  "steps": [
    "Shred cabbage into thin matchsticks, scald with boiling water for 2 minutes, then drain well; grate onion finely.",
    "Serve with sour cream and any side dish."
  ],
  "tags": [
    "poultry",
    "pp",
    "kids",
    "needs_side"
  ],
  "tip_mistakes": "Overmixing the filling makes cutlets tough.",
  "tip_serving": "Pair with boiled potatoes or mashed carrots.",
  "tip_storage": "Store in an airtight container for 2 days.",
  "tip_swaps": "Replace semolina with 15g breadcrumbs.",
  "tip_why_it_works": "Boil and wring the cabbage to remove bitterness and excess water, which prevents soggy cutlets.",
  "title": "Chicken & Cabbage Cutlets"
}
```

### List countries

List the 22 countries Racion prices food for, with each one's currency, typical daily food budget and where the prices come from. No API key required.

**Inputs**

- Language (`language`, text): The language for dish names, steps and the shopping list. One of: `en` (English), `de` (German), `fr` (French), `es` (Spanish), `it` (Italian), `pt` (Portuguese), `nl` (Dutch), `pl` (Polish), `cs` (Czech), `uk` (Ukrainian), and 5 more. Default: `en`.

**Outputs**

- `count` (number): How many countries.
- `countries` (list): Every country.

**Example output**

```json
{
  "count": 1,
  "countries": [
    {
      "budget_levels": [
        {
          "name": "Tight",
          "per_person_per_day": 4.0
        },
        {
          "name": "Moderate",
          "per_person_per_day": 6.0
        },
        {
          "name": "Relaxed",
          "per_person_per_day": 10.0
        },
        {
          "name": "Premium",
          "per_person_per_day": 18.0
        }
      ],
      "country_code": "DE",
      "currency": "EUR",
      "currency_symbol": "\u20ac",
      "name": "Germany",
      "price_period": "August 2026",
      "price_source": "Eurostat: country price level \u00d7 HICP by group",
      "store_count": 7,
      "typical_budget_per_person_per_day": 6.0
    }
  ]
}
```

### List holiday tables

List the celebrations Racion can plan a table for, with the courses each one has and a suggested number of guests. No API key required.

**Inputs**

- Language (`language`, text): The language for dish names, steps and the shopping list. One of: `en` (English), `de` (German), `fr` (French), `es` (Spanish), `it` (Italian), `pt` (Portuguese), `nl` (Dutch), `pl` (Polish), `cs` (Czech), `uk` (Ukrainian), and 5 more. Default: `en`.

**Outputs**

- `count` (number): How many occasions.
- `occasions` (list): Every holiday table.

**Example output**

```json
{
  "count": 1,
  "occasions": [
    {
      "countries": [
        "DE",
        "AT",
        "CH"
      ],
      "courses": [
        "Starters",
        "Salads",
        "Mains",
        "Dessert"
      ],
      "description": "Sausages with braised sauerkraut, caraway roast pork shoulder, warm potato salad with bacon.",
      "in_season": true,
      "occasion_id": "oktoberfest",
      "suggested_guests": 6,
      "title": "Oktoberfest"
    }
  ]
}
```

### List ingredients

Look up the ingredients Racion knows, with the shop aisle each is in. Use the ids to say what you already have or will not eat when building a plan. No API key required.

**Inputs**

- Search for (`query`, text): Part of an ingredient's name, such as 'rice'.
- Aisle (`aisle`, list): Only show ingredients from these aisles. One or more of: `vegetables` (Vegetables and herbs), `fruits` (Fruit and berries), `meat` (Meat and poultry), `fish` (Fish and seafood), `dairy`, `eggs`, `grains` (Grains and pasta), `bakery` (Bread and bakery), `canned` (Tins and jars), `frozen`, and 3 more.
- Language (`language`, text): The language for dish names, steps and the shopping list. One of: `en` (English), `de` (German), `fr` (French), `es` (Spanish), `it` (Italian), `pt` (Portuguese), `nl` (Dutch), `pl` (Polish), `cs` (Czech), `uk` (Ukrainian), and 5 more. Default: `en`.

**Outputs**

- `count` (number): How many matched.
- `ingredients` (list): Matching ingredients, A to Z.

**Example output**

```json
{
  "count": 1,
  "ingredients": [
    {
      "aisle": "Grains and pasta",
      "ingredient_id": "rice_basmati",
      "name": "Basmati rice",
      "unit": "g",
      "usually_at_home": false
    }
  ]
}
```

### List recipe collections

List Racion's curated collections, such as quick dinners, high-protein weeks or holiday tables, with the recipes in each. No API key required.

**Inputs**

- Language (`language`, text): The language for dish names, steps and the shopping list. One of: `en` (English), `de` (German), `fr` (French), `es` (Spanish), `it` (Italian), `pt` (Portuguese), `nl` (Dutch), `pl` (Polish), `cs` (Czech), `uk` (Ukrainian), and 5 more. Default: `en`.

**Outputs**

- `collections` (list): Every collection.
- `count` (number): How many collections.

**Example output**

```json
{
  "collections": [
    {
      "collection_id": "quick20",
      "description": "Fast weeknight dinners.",
      "name": "Dinners in 20 minutes",
      "recipe_count": 1,
      "recipe_ids": [
        "spagetti_al_la_karbonara"
      ]
    }
  ],
  "count": 1
}
```

### List stores

List the supermarkets and discounters Racion prices in a country, and how each compares with the national average. No API key required.

**Inputs**

- Country (`country`, text): Only show stores in this country. Every country when left empty.
- Language (`language`, text): The language for dish names, steps and the shopping list. One of: `en` (English), `de` (German), `fr` (French), `es` (Spanish), `it` (Italian), `pt` (Portuguese), `nl` (Dutch), `pl` (Polish), `cs` (Czech), `uk` (Ukrainian), and 5 more. Default: `en`.

**Outputs**

- `count` (number): How many stores.
- `stores` (list): The stores, country by country.

**Example output**

```json
{
  "count": 1,
  "stores": [
    {
      "country_code": "DE",
      "name": "Lidl",
      "price_index": 0.9,
      "price_vs_average": "10% cheaper than average",
      "store_code": "lidl",
      "type": "Discounter"
    }
  ]
}
```

### Plan a holiday table

Build a full menu for a celebration (Christmas, a birthday, Thanksgiving, a picnic) for a number of guests: starters, mains, salads and dessert, with the shopping list and its estimated cost. No API key required.

**Inputs**

- Occasion (`occasion`, text, required): The celebration to cook for.
- Guests (`guests`, number, required): How many people are eating, 1 to 40. From 1 to 40.
- Country (`country`, text, required): The country to price the food for. Prices and the currency come from it.
- Store (`store`, text): Where you shop. Each store is priced from the country's average, so a discounter comes out cheaper than a premium supermarket. Leave empty for the first store in the list.
- Allergies (`allergies`, list): Dishes containing any of these are never offered. One or more of: `gluten`, `dairy` (Milk), `eggs`, `nuts` (Tree nuts), `peanuts`, `fish`, `seafood` (Shellfish), `soy`.
- Food groups to avoid (`avoid_food_groups`, list): Leave out whole groups, for example meat for a vegetarian. One or more of: `meat`, `poultry`, `fish`, `seafood`, `offal`, `spicy` (Spicy food).
- Ingredients to avoid (`avoid_ingredients`, list): Specific ingredients nobody will eat, such as mushrooms.
- Language (`language`, text): The language for dish names, steps and the shopping list. One of: `en` (English), `de` (German), `fr` (French), `es` (Spanish), `it` (Italian), `pt` (Portuguese), `nl` (Dutch), `pl` (Polish), `cs` (Czech), `uk` (Ukrainian), and 5 more. Default: `en`.

**Outputs**

- `budget_for_plan` (number): The budget the planner aimed for, for the whole plan.
- `budget_per_day` (number): The same budget per person per day.
- `calories_per_day` (number): Average calories per person per day.
- `carbs_per_day_g` (number): Average carbohydrates per day, grams.
- `cook_minutes_total` (number): Total cooking time across the plan.
- `cost_of_food_eaten` (number): The part of the total actually eaten during the plan; the rest is what is left in opened packs.
- `country_code` (text): The country priced, e.g. 'DE'.
- `created_at` (text): When the plan was built (UTC).
- `currency` (text): The currency, e.g. 'EUR'.
- `currency_symbol` (text): The currency symbol, e.g. '€'.
- `day_count` (number): How many days.
- `days` (list): Each day with its dishes. A table has a single day.
- `fat_per_day_g` (number): Average fat per day, grams.
- `goal` (text): The eating goal, e.g. 'Eat well'.
- `guests` (number): For a table, how many guests it feeds. Empty for a week.
- `notes` (list): Extra remarks from the planner, for example about a baby.
- `plan_id` (text): The plan's id, for Get a meal plan.
- `plan_url` (text): The plan's page on racion.app, with the menu, recipes and a shopping list you can tick off. Share this with people.
- `portions` (number): How many adult portions each dish is scaled to; children count as part portions.
- `price_period` (text): The month the prices are for, e.g. 'August 2026'.
- `price_region` (text): The region priced, e.g. 'Germany'.
- `price_source` (text): Where the price estimates come from, e.g. 'Eurostat: country price level × HICP by group'. Show it next to any amount you share.
- `protein_per_day_g` (number): Average protein per day, grams.
- `shopping_list` (list): Everything to buy, grouped by aisle.
- `shopping_list_count` (number): How many items are on the shopping list.
- `shopping_list_text` (text): The shopping list as plain text, one line per item under each aisle, ready to paste into an email or message.
- `staples_cost` (number): Estimated cost of staples you usually already have.
- `start_date` (text): The first day, as YYYY-MM-DD.
- `store` (text): The store priced, e.g. 'Lidl'.
- `store_code` (text): The store's code.
- `telegram_url` (text): A link that sends this shopping list to Racion's Telegram bot, where items can be ticked off.
- `title` (text): The table's name, such as 'Oktoberfest' or 'My table'. Empty for a week.
- `total_cost` (number): Estimated cost of everything on the shopping list.
- `warnings` (list): Anything the planner could not satisfy, such as the budget.

**Example output**

```json
{
  "budget_for_plan": 54.2,
  "budget_per_day": 9.03,
  "calories_per_day": 3111,
  "carbs_per_day_g": 292,
  "cook_minutes_total": 230,
  "cost_of_food_eaten": 41.16,
  "country_code": "DE",
  "created_at": "2026-10-15T21:34:13Z",
  "currency": "EUR",
  "currency_symbol": "\u20ac",
  "day_count": 1,
  "days": [
    {
      "calories": 3111,
      "cook_minutes": 230,
      "cost": 41.16,
      "date": "2026-10-19",
      "dish_count": 1,
      "dishes": [
        {
          "calories": 468,
          "carbs_g": 22,
          "cook_minutes": 40,
          "cooked_for_two_days": false,
          "cost_per_portion": 1.24,
          "course": "mains",
          "fat_g": 35,
          "leftover": false,
          "meal": "dinner",
          "protein_g": 17,
          "recipe_id": "sausages_sauerkraut",
          "servings": null,
          "title": "Sausages with Braised Sauerkraut",
          "why_chosen": "Mains"
        }
      ],
      "label": "Oktoberfest"
    }
  ],
  "fat_per_day_g": 165,
  "goal": "Just tasty",
  "guests": 6,
  "notes": [],
  "plan_id": "9aff1468-21f5-4a8a-863b-6853a674d2c1",
  "plan_url": "https://racion.app/en/plan/9aff1468-21f5-4a8a-863b-6853a674d2c1",
  "portions": 6.0,
  "price_period": "August 2026",
  "price_region": "Germany",
  "price_source": "Eurostat: country price level \u00d7 HICP by group",
  "protein_per_day_g": 109,
  "shopping_list": [
    {
      "aisle": "Vegetables and herbs",
      "cost": 0.44,
      "ingredient_id": "garlic",
      "name": "Garlic",
      "needed": 46.0,
      "pack_size": 100.0,
      "to_buy": 50.0,
      "unit": "g",
      "used_in": [
        "Warm Bean and Bacon Salad",
        "Spaghetti alla Carbonara"
      ],
      "usually_at_home": false
    }
  ],
  "shopping_list_count": 40,
  "shopping_list_text": "Vegetables and herbs:\n- Garlic: 50 g, about 0.44 EUR",
  "staples_cost": 11.39,
  "start_date": "2026-10-19",
  "store": "Lidl",
  "store_code": "lidl",
  "telegram_url": "https://t.me/racionappbot?start=psHX9rJ1NRz-aLea3o4xuHg",
  "title": "Oktoberfest",
  "total_cost": 54.2,
  "warnings": []
}
```

### Price a menu of chosen dishes

Pick the dishes yourself, up to 30, say how many people each one feeds, and get the shopping list and its estimated cost. Find dishes with Search recipes. No API key required.

**Inputs**

- Dishes (`dishes`, list, required): The dishes to cook: each one's recipe id, from Search recipes, and optionally how many people it feeds (the number of guests when left empty).
- Guests (`guests`, number, required): How many people are eating, 1 to 40. From 1 to 40.
- Country (`country`, text, required): The country to price the food for. Prices and the currency come from it.
- Store (`store`, text): Where you shop. Each store is priced from the country's average, so a discounter comes out cheaper than a premium supermarket. Leave empty for the first store in the list.
- Language (`language`, text): The language for dish names, steps and the shopping list. One of: `en` (English), `de` (German), `fr` (French), `es` (Spanish), `it` (Italian), `pt` (Portuguese), `nl` (Dutch), `pl` (Polish), `cs` (Czech), `uk` (Ukrainian), and 5 more. Default: `en`.

**Outputs**

- `budget_for_plan` (number): The budget the planner aimed for, for the whole plan.
- `budget_per_day` (number): The same budget per person per day.
- `calories_per_day` (number): Average calories per person per day.
- `carbs_per_day_g` (number): Average carbohydrates per day, grams.
- `cook_minutes_total` (number): Total cooking time across the plan.
- `cost_of_food_eaten` (number): The part of the total actually eaten during the plan; the rest is what is left in opened packs.
- `country_code` (text): The country priced, e.g. 'DE'.
- `created_at` (text): When the plan was built (UTC).
- `currency` (text): The currency, e.g. 'EUR'.
- `currency_symbol` (text): The currency symbol, e.g. '€'.
- `day_count` (number): How many days.
- `days` (list): Each day with its dishes. A table has a single day.
- `fat_per_day_g` (number): Average fat per day, grams.
- `goal` (text): The eating goal, e.g. 'Eat well'.
- `guests` (number): For a table, how many guests it feeds. Empty for a week.
- `notes` (list): Extra remarks from the planner, for example about a baby.
- `plan_id` (text): The plan's id, for Get a meal plan.
- `plan_url` (text): The plan's page on racion.app, with the menu, recipes and a shopping list you can tick off. Share this with people.
- `portions` (number): How many adult portions each dish is scaled to; children count as part portions.
- `price_period` (text): The month the prices are for, e.g. 'August 2026'.
- `price_region` (text): The region priced, e.g. 'Germany'.
- `price_source` (text): Where the price estimates come from, e.g. 'Eurostat: country price level × HICP by group'. Show it next to any amount you share.
- `protein_per_day_g` (number): Average protein per day, grams.
- `shopping_list` (list): Everything to buy, grouped by aisle.
- `shopping_list_count` (number): How many items are on the shopping list.
- `shopping_list_text` (text): The shopping list as plain text, one line per item under each aisle, ready to paste into an email or message.
- `staples_cost` (number): Estimated cost of staples you usually already have.
- `start_date` (text): The first day, as YYYY-MM-DD.
- `store` (text): The store priced, e.g. 'Lidl'.
- `store_code` (text): The store's code.
- `telegram_url` (text): A link that sends this shopping list to Racion's Telegram bot, where items can be ticked off.
- `title` (text): The table's name, such as 'Oktoberfest' or 'My table'. Empty for a week.
- `total_cost` (number): Estimated cost of everything on the shopping list.
- `warnings` (list): Anything the planner could not satisfy, such as the budget.

**Example output**

```json
{
  "budget_for_plan": 112.0,
  "budget_per_day": 8.0,
  "calories_per_day": 1466,
  "carbs_per_day_g": 113,
  "cook_minutes_total": 553,
  "cost_of_food_eaten": 10.44,
  "country_code": "DE",
  "created_at": "2026-10-15T21:34:13Z",
  "currency": "EUR",
  "currency_symbol": "\u20ac",
  "day_count": 1,
  "days": [
    {
      "calories": 1736,
      "cook_minutes": 50,
      "cost": 6.56,
      "date": "2026-10-19",
      "dish_count": 1,
      "dishes": [
        {
          "calories": 727,
          "carbs_g": 63,
          "cook_minutes": 20,
          "cooked_for_two_days": false,
          "cost_per_portion": 1.23,
          "course": null,
          "fat_g": 40,
          "leftover": false,
          "meal": "dinner",
          "protein_g": 27,
          "recipe_id": "spagetti_al_la_karbonara",
          "servings": null,
          "title": "Spaghetti alla Carbonara",
          "why_chosen": "finishing garlic and bacon \u00b7 under budget"
        }
      ],
      "label": "Mon"
    }
  ],
  "fat_per_day_g": 79,
  "goal": "Just tasty",
  "guests": 4,
  "notes": [],
  "plan_id": "4f0f6f86-1d4e-4f43-9d2c-2f3c5d0b7a11",
  "plan_url": "https://racion.app/en/plan/4f0f6f86-1d4e-4f43-9d2c-2f3c5d0b7a11",
  "portions": 4.0,
  "price_period": "August 2026",
  "price_region": "Germany",
  "price_source": "Eurostat: country price level \u00d7 HICP by group",
  "protein_per_day_g": 78,
  "shopping_list": [
    {
      "aisle": "Vegetables and herbs",
      "cost": 0.44,
      "ingredient_id": "garlic",
      "name": "Garlic",
      "needed": 46.0,
      "pack_size": 100.0,
      "to_buy": 50.0,
      "unit": "g",
      "used_in": [
        "Warm Bean and Bacon Salad",
        "Spaghetti alla Carbonara"
      ],
      "usually_at_home": false
    }
  ],
  "shopping_list_count": 14,
  "shopping_list_text": "Vegetables and herbs:\n- Garlic: 50 g, about 0.44 EUR",
  "staples_cost": 9.53,
  "start_date": "2026-10-19",
  "store": "Lidl",
  "store_code": "lidl",
  "telegram_url": "https://t.me/racionappbot?start=psHX9rJ1NRz-aLea3o4xuHg",
  "title": "My table",
  "total_cost": 17.89,
  "warnings": []
}
```

### Search recipes

Search Racion's recipes by name or ingredient, with cooking time, calories and the estimated cost of a portion in your country. No API key required.

**Inputs**

- Search for (`query`, text): Words to look for in dish names and ingredients, such as 'chicken' or 'pancakes'. Leave empty to browse.
- Country (`country`, text, required): The country to price the food for. Prices and the currency come from it.
- Meal (`meal`, text): Only show dishes for this meal. One of: `breakfast`, `lunch`, `dinner`, `snack`.
- How many (`limit`, number): How many recipes to return, 1 to 200. From 1 to 200. Default: `20`.
- Skip (`offset`, number): How many results to skip, to page through them. At least 0. Default: `0`.
- Language (`language`, text): The language for dish names, steps and the shopping list. One of: `en` (English), `de` (German), `fr` (French), `es` (Spanish), `it` (Italian), `pt` (Portuguese), `nl` (Dutch), `pl` (Polish), `cs` (Czech), `uk` (Ukrainian), and 5 more. Default: `en`.

**Outputs**

- `count` (number): How many recipes are in this result.
- `currency` (text): The currency of the costs.
- `has_more` (true/false): True when more results follow this page.
- `offset` (number): How many results were skipped.
- `recipes` (list): The matching recipes.
- `total` (number): How many recipes match in all.

**Example output**

```json
{
  "count": 1,
  "currency": "EUR",
  "has_more": true,
  "offset": 0,
  "recipes": [
    {
      "calories": 452,
      "cook_minutes": 40,
      "cost_per_portion": 1.53,
      "currency": "EUR",
      "description": "Tender, kid-friendly cutlets made with ground chicken, shredded cabbage, and semolina. Serve with sour cream.",
      "for_kids": false,
      "image_url": "https://racion.app/images/recipes/chicken_cabbage_cutlets.webp",
      "meal": "dinner",
      "recipe_id": "chicken_cabbage_cutlets",
      "recipe_url": "https://racion.app/en/recipe/chicken_cabbage_cutlets",
      "tags": [
        "poultry",
        "pp",
        "kids",
        "needs_side"
      ],
      "title": "Chicken & Cabbage Cutlets"
    }
  ],
  "total": 364
}
```
