BETTERMENU
Studio

Confirm and save ingredients

Step 2 of the resolve → confirm workflow. Takes a resolution_id from a prior resolveIngredients 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}/ingredients/confirm

Authorization

BearerAuth
AuthorizationBearer <token>

JWT Bearer token authentication

In: header

Path Parameters

recipe_id*string

Unique recipe identifier

Request Body

application/json

resolution_id*string

The resolution_id to confirm and save as recipe ingredients.

Response Body

application/json

application/json

curl -X POST "https://loading/studio/recipes/string/ingredients/confirm" \  -H "Content-Type: application/json" \  -d '{    "resolution_id": "string"  }'
{
  "data": {
    "recipe_id": "string",
    "ingredients": [
      {
        "original_text": "string",
        "parsed_quantity": 0,
        "parsed_unit": "string",
        "parsed_ingredient_name": "string",
        "selected_ingredient_id": "string",
        "selected_ingredient_name": "string",
        "metric_quantity_g": 0
      }
    ],
    "ingredient_conversions": [
      {
        "conversion_source": "string",
        "reasoning": "string",
        "portion_reference": {
          "portion_bmid": "string",
          "measure_unit_name": "string",
          "gram_weight": "string",
          "amount": "string"
        }
      }
    ],
    "next_steps": [
      {
        "operation": "string",
        "operationId": "string",
        "status": "string",
        "reason": "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"
  }
}
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}