How prices work

The API computes sell prices the way the game does, to the copper, and checks itself against the prices the game computed for every recipe, aging and quality. 1 silver is 100 copper and 1 gold is 100 silver; every amount comes as copper plus a display string.

GET /v1/items/milk-stout/price?ingredients=expensive&aging=grand_reserve&quality=superior
{
  "method": "recipe",
  "per_serving": { "copper": 1173, "display": "11s 73c" },
  "steps": [
    { "step": "base", "copper": 669 },
    { "step": "aging", "copper": 869, "add_copper": 200 },
    { "step": "quality", "copper": 1173, "multiplier": 1.35 }
  ],
  "verified_by_game": true
}

The steps

  1. Base price per serving: the value of the ingredients plus the recipe's labor cost, divided by the servings the recipe makes. It is recursive: malt and wort are priced with the same rule. When the recipe takes "any malt", ingredients=cheapest or expensive decides which one counts.
  2. Aging adds 10 % (young), 20 % (reserve) or 30 % (grand reserve) of the base, for products that can age.
  3. Crafter quality multiplies by 1.15 (advanced) or 1.35 (superior).
  4. Perks from the menu pages raise the price of their category: perks=beer:10,dessert:5. Accepted names: starter, meat, vegetables, fish, pasta_rice, broth, dessert, cocktail, beer, liqueur.

The game drops the fractions of a copper at each step, and so does the API.

Fields worth knowing

  • verified_by_game: true when the game computed the same value; null for combinations it did not compute.
  • playable: the game's "cheapest" picks the cheapest grain for every malt even when the recipe asks for a specific one. playable.per_serving is the price a player can really reach.
  • method: recipe, legacy (old recipes priced by an older formula) or raw (a fixed value).

Customer trends and the menu price slider are not included: they depend on the state of a save.