BETTERMENU
Studio

Start Ingredient Resolution Session

Starts a new ingredient resolution session. Resolves ingredient items into matched food items and gram weights. Each item declares an action (add_ingredient, keep_ingredient, replace_ingredient, update_ingredient_text, update_ingredient_name, update_ingredient_quantity, update_ingredient_grams, or remove_ingredient). Returns resolved rows with search candidates and unit conversions. Check summary.ready_to_confirm — if true, call confirmIngredientResolutionSession. No Version is committed.

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

Path Parameters

recipe_id*Recipe Id

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

curl -X POST "https://loading/studio/recipes/string/ingredient-resolutions" \  -H "Content-Type: application/json" \  -d '{    "items": [      {        "action": "add_ingredient",        "text": "1 cup all-purpose flour"      },      {        "action": "add_ingredient",        "text": "2 tbsp olive oil"      }    ]  }'
{
  "data": {
    "resolution_id": "string",
    "previous_resolution_id": "string",
    "recipe_id": "string",
    "created_at": "2019-08-24T14:15:22Z",
    "summary": {
      "total": 0,
      "resolved": 0,
      "unresolved": 0,
      "ready_to_confirm": true
    },
    "rows": [
      {
        "row_id": "string",
        "position": 0,
        "original_text": "string",
        "parsed": {
          "position": 0,
          "original_text": "string",
          "quantity": "string",
          "quantity_text": "string",
          "unit": "string",
          "ingredient_name": "string",
          "preparation": "string",
          "quantity_range": [
            "string",
            "string"
          ],
          "error": {
            "message": "string",
            "field": "string"
          }
        },
        "search": {
          "ingredient_id": "string",
          "ingredient_name": "string",
          "provenance": "system_matched",
          "candidates": [
            {
              "ingredient_id": "string",
              "name": "string",
              "item_type": "ingredient",
              "category": "string",
              "preparation": "string",
              "food_form": "string",
              "relevance_score": 0,
              "nutrient_count": 0,
              "portion_count": 0,
              "food_portions": [
                {
                  "id": "string",
                  "amount": "string",
                  "unit_name": "string",
                  "modifier": "string",
                  "gram_weight": "string"
                }
              ],
              "nutrients": [
                {
                  "id": "n_qr2jbh18w4hmo",
                  "name": "protein",
                  "amount": "string",
                  "unit": "g"
                }
              ]
            }
          ]
        },
        "unit_conversion": {
          "quantity_grams": "string",
          "provenance": "identity",
          "conversion_class": "string",
          "steps": [
            {
              "input_quantity": "string",
              "input_unit": "string",
              "output_quantity": "string",
              "output_unit": "string",
              "source": "identity",
              "conversion_class": "string",
              "reasoning": "string"
            }
          ]
        }
      }
    ]
  },
  "meta": {
    "version": "string",
    "request_id": "string",
    "timestamp": "string"
  }
}
{
  "type": "https://api.bettermenu.com/errors/recipe_not_found",
  "title": "Recipe Not Found",
  "status": 400,
  "detail": "Recipe rcpe_abc123 does not exist",
  "code": "recipe_not_found",
  "retryable": true,
  "instance": "/api/v1/recipes/rcpe_abc123",
  "trace_id": "req_xyz789",
  "errors": [
    {}
  ],
  "invalid_ids": [
    "f_abc123",
    "f_xyz789"
  ]
}
{
  "type": "https://api.bettermenu.com/errors/recipe_not_found",
  "title": "Recipe Not Found",
  "status": 400,
  "detail": "Recipe rcpe_abc123 does not exist",
  "code": "recipe_not_found",
  "retryable": true,
  "instance": "/api/v1/recipes/rcpe_abc123",
  "trace_id": "req_xyz789",
  "errors": [
    {}
  ],
  "invalid_ids": [
    "f_abc123",
    "f_xyz789"
  ]
}