Skip to content
Skip to Content
Docs
Studio

Confirm and save ingredients

Step 2 of the resolve → confirm workflow. Takes a resolution_id from a prior startIngredientResolution call. Validates all rows are resolved, then saves as recipe ingredients. Returns 404 if resolution not found, 409 if already confirmed, 422 if rows are unresolved or ingredient IDs are stale.

POST
/studio/recipes/{recipe_id}/ingredient-resolutions/confirm

Path Parameters

recipe_id*Recipe Id

Header Parameters

If-Match*string

The recipe's current version_id: the one the last change to this recipe returned, or the one reading the recipe returns (get_recipe). A stale value is refused with the current version_id; read the recipe again and retry.

Request Body

application/json
  1. body

Request body for POST /recipes/{id}/ingredient-resolutions/confirm.

resolution_id*Resolution Id

The resolution_id to confirm and save as recipe ingredients.

Response Body

Successful Response

application/json
  1. response

Response for update ingredients endpoint.

data*

Data payload for update ingredients response.

meta*

Response metadata.

version_id?|

Version committed for this mutation; pass on the next request as If-Match for optimistic concurrency. Present only on versions declaring the recipe_versioning capability.

Example Request
curl -X POST 'https://api.bettermenu.live/studio/recipes/string/ingredient-resolutions/confirm' \  -H 'If-Match: string' \  -H 'Content-Type: application/json' \  -d '{  "resolution_id": "ireslv_01H8X3K9Q2YV0J7M5R6N4P3T2W"}'
Example Response
{  "data": {    "recipe_id": "string",    "resolution_id": "string",    "ingredients": [      {        "id": "string",        "position": 0,        "selected_ingredient_id": "string",        "selected_ingredient_name": "string",        "display_name": "string",        "metric_quantity_g": 0,        "search_provenance": "system_matched",        "unit_conversion_provenance": "identity",        "source": "resolution",        "original_text": "string",        "parsed_quantity": 0,        "parsed_unit": "string",        "parsed_ingredient_name": "string",        "portion_id": "string"      }    ],    "ingredient_conversions": [      {        "conversion_source": "string",        "reasoning": "string",        "portion_reference": {          "portion_bmid": "string",          "measure_unit_name": "string",          "gram_weight": "string",          "amount": "string"        }      }    ],    "ingredient_resolutions": [      {        "original_text": "string",        "parsed": {          "quantity_text": "string",          "quantity": 0,          "unit": "string",          "ingredient_name": "string"        },        "converted": {          "quantity": 0,          "unit": "string",          "steps": [            {              "from_quantity": 0,              "from_unit": "string",              "to_quantity": 0,              "to_unit": "string",              "source": "string",              "reasoning": "string"            }          ]        },        "matches": {          "query_text": "string",          "candidates": [            {              "ingredient_id": "string",              "ingredient_name": "string"            }          ],          "selected_match": {            "ingredient_id": "string",            "ingredient_name": "string"          },          "match_confidence": 0,          "search_strategy_used": "standard"        }      }    ],    "updated_at": "string"  },  "meta": {    "version": "string",    "request_id": "string",    "timestamp": "string"  },  "version_id": "string"}

Recipe in, FDA-format Nutrition Facts out, with every version kept.

Start freeNo card needed.