BETTERMENU
Studio

Resolve ingredients

Step 1 of the resolve → confirm workflow. Takes ingredient items (raw text, pre-selected ingredient_id, or both) and returns resolved ingredients with matched food items and gram weights. Check summary.ready_to_confirm — if true, call confirmIngredients. If rows need attention, modify items and call again with previous_resolution_id.

POST
/studio/recipes/{recipe_id}/ingredients/resolve

Authorization

BearerAuth
AuthorizationBearer <token>

JWT Bearer token authentication

In: header

Path Parameters

recipe_id*string

Unique recipe identifier

Request Body

application/json

items*array<>

Ingredient items to resolve (1-50).

Items1 <= items <= 50
previous_resolution_id?|

Links to prior resolution for iteration chain tracking.

Response Body

application/json

application/json

curl -X POST "https://loading/studio/recipes/string/ingredients/resolve" \  -H "Content-Type: application/json" \  -d '{    "items": [      {}    ]  }'
{
  "data": {
    "resolution_id": "string",
    "previous_resolution_id": "string",
    "recipe_id": "string",
    "summary": {
      "total": 0,
      "resolved": 0,
      "unresolved": 0,
      "ready_to_confirm": true
    },
    "rows": [
      {
        "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",
          "candidates": [
            {
              "ingredient_id": "string",
              "name": "string",
              "item_type": "ingredient",
              "category": "string",
              "preparation": "string",
              "food_form": "string",
              "confidence": 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",
          "resolved_by": "system",
          "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"
  }
}
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}