{
"recipe_type": "SALES_RECIPE",
"recipe_name": "Classic Burger",
"external_product_id": "prod-burger-001",
"store_id": null,
"recipe": {
"lines": [
{
"consume_by": "ITEM",
"item_id": "itm_beef_01...",
"qty_base": 180,
"base_unit_id": "unit_g_01..."
},
{
"consume_by": "ITEM",
"item_id": "itm_box_delivery_01...",
"qty_base": 1,
"base_unit_id": "unit_ea_01...",
"service_codes": ["DELIVERY"]
}
]
},
"external_user_id": "user_chef_99"
}
{
"recipe_type": "PRODUCTION_RECIPE",
"recipe_name": "Burger patties batch",
"output_item_id": "itm_patty_01...",
"recipe": {
"output": {
"qty_base": 10,
"base_unit_id": "unit_ea_01..."
},
"lines": [
{
"consume_by": "ITEM",
"item_id": "itm_beef_01...",
"qty_base": 1800,
"base_unit_id": "unit_g_01..."
}
]
},
"external_user_id": "user_chef_99"
}
{
"id": "rec_01j5k...",
"account_id": "acc_01j...",
"store_id": null,
"recipe_type": "SALES_RECIPE",
"recipe_role": "BASE",
"status": "DRAFT",
"version": 1,
"recipe_name": "Classic Burger",
"recipe_code": null,
"external_product_id": "prod-burger-001",
"external_variant_id": null,
"output_item_id": null,
"recipe": {
"lines": [
{
"consume_by": "ITEM",
"item_id": "itm_beef_01...",
"qty_base": 180,
"base_unit_id": "unit_g_01..."
}
]
},
"created_by_external_user_id": "user_chef_99",
"published_by_external_user_id": null,
"created_at": "2026-08-07T14:30:00.000Z",
"published_at": null,
"archived_at": null
}
Recipes
Create recipe
Creates a new recipe in DRAFT status. Recipes start as DRAFT, require at least one line, and must be published before BOH uses them for consumption.
POST
/
api
/
v1
/
public
/
vendors
/
{vendorId}
/
recipes
{
"recipe_type": "SALES_RECIPE",
"recipe_name": "Classic Burger",
"external_product_id": "prod-burger-001",
"store_id": null,
"recipe": {
"lines": [
{
"consume_by": "ITEM",
"item_id": "itm_beef_01...",
"qty_base": 180,
"base_unit_id": "unit_g_01..."
},
{
"consume_by": "ITEM",
"item_id": "itm_box_delivery_01...",
"qty_base": 1,
"base_unit_id": "unit_ea_01...",
"service_codes": ["DELIVERY"]
}
]
},
"external_user_id": "user_chef_99"
}
{
"recipe_type": "PRODUCTION_RECIPE",
"recipe_name": "Burger patties batch",
"output_item_id": "itm_patty_01...",
"recipe": {
"output": {
"qty_base": 10,
"base_unit_id": "unit_ea_01..."
},
"lines": [
{
"consume_by": "ITEM",
"item_id": "itm_beef_01...",
"qty_base": 1800,
"base_unit_id": "unit_g_01..."
}
]
},
"external_user_id": "user_chef_99"
}
{
"id": "rec_01j5k...",
"account_id": "acc_01j...",
"store_id": null,
"recipe_type": "SALES_RECIPE",
"recipe_role": "BASE",
"status": "DRAFT",
"version": 1,
"recipe_name": "Classic Burger",
"recipe_code": null,
"external_product_id": "prod-burger-001",
"external_variant_id": null,
"output_item_id": null,
"recipe": {
"lines": [
{
"consume_by": "ITEM",
"item_id": "itm_beef_01...",
"qty_base": 180,
"base_unit_id": "unit_g_01..."
}
]
},
"created_by_external_user_id": "user_chef_99",
"published_by_external_user_id": null,
"created_at": "2026-08-07T14:30:00.000Z",
"published_at": null,
"archived_at": null
}
string
required
BOH API key with
recipes:write scope.string
required
Vendor UUID.
string
required
SALES_RECIPE, PRODUCTION_RECIPE, or SUBRECIPE.string
required
Display name for the recipe.
string
UUID of a BOH store. Leave
null for a recipe that applies to all stores.string
Your POS product ID. Required for
SALES_RECIPE if you want automatic linking to orders.string
Your POS variant ID, when the recipe applies to a specific variant.
string
UUID of the BOH item produced. Required for
PRODUCTION_RECIPE and SUBRECIPE.string
Short code used to reference this recipe as a subrecipe from other recipes.
object
required
Recipe content:
Show recipe fields
Show recipe fields
object
object[]
required
Ingredient lines. Each line must have
consume_by set to ITEM, ITEM_TAG, or SUBRECIPE.Show line fields
Show line fields
string
required
ITEM, ITEM_TAG, or SUBRECIPE.string
UUID of the item. Required when
consume_by=ITEM.string
UUID of the item tag. Required when
consume_by=ITEM_TAG.string
Code of the subrecipe. Required when
consume_by=SUBRECIPE.number
required
Quantity consumed per unit in the base unit of the item.
string
required
UUID of the base unit for this line.
string[]
Channel scoping (
SALES_RECIPE root lines only). Empty or absent = applies to all channels.string
Actor for audit trail.
{
"recipe_type": "SALES_RECIPE",
"recipe_name": "Classic Burger",
"external_product_id": "prod-burger-001",
"store_id": null,
"recipe": {
"lines": [
{
"consume_by": "ITEM",
"item_id": "itm_beef_01...",
"qty_base": 180,
"base_unit_id": "unit_g_01..."
},
{
"consume_by": "ITEM",
"item_id": "itm_box_delivery_01...",
"qty_base": 1,
"base_unit_id": "unit_ea_01...",
"service_codes": ["DELIVERY"]
}
]
},
"external_user_id": "user_chef_99"
}
{
"recipe_type": "PRODUCTION_RECIPE",
"recipe_name": "Burger patties batch",
"output_item_id": "itm_patty_01...",
"recipe": {
"output": {
"qty_base": 10,
"base_unit_id": "unit_ea_01..."
},
"lines": [
{
"consume_by": "ITEM",
"item_id": "itm_beef_01...",
"qty_base": 1800,
"base_unit_id": "unit_g_01..."
}
]
},
"external_user_id": "user_chef_99"
}
{
"id": "rec_01j5k...",
"account_id": "acc_01j...",
"store_id": null,
"recipe_type": "SALES_RECIPE",
"recipe_role": "BASE",
"status": "DRAFT",
"version": 1,
"recipe_name": "Classic Burger",
"recipe_code": null,
"external_product_id": "prod-burger-001",
"external_variant_id": null,
"output_item_id": null,
"recipe": {
"lines": [
{
"consume_by": "ITEM",
"item_id": "itm_beef_01...",
"qty_base": 180,
"base_unit_id": "unit_g_01..."
}
]
},
"created_by_external_user_id": "user_chef_99",
"published_by_external_user_id": null,
"created_at": "2026-08-07T14:30:00.000Z",
"published_at": null,
"archived_at": null
}
⌘I

