BETTERMENU
Studio

Compute Nutrition Facts

Compute compliant-rounded nutrition facts for a serving.

Applies compliant rounding rules to produce per-serving and optionally per-container nutrition facts.

The top-level version_id identifies the new version created by this operation. Pass it back as If-Match on the next mutation.

409 scenarios and recovery — check steps_required in the response:

  • MISSING_DEPENDENCY: no nutrition -> call setRecipeIngredients first
  • STALE_DEPENDENCY: ingredients changed since nutrition was computed -> re-call setRecipeIngredients
  • MISSING_DEPENDENCY: no serving -> call addRecipeServing After completing steps_required, retry this call.

Available only on API versions declaring the recipe_versioning capability. Requests without this capability receive a 404.

Related endpoints:

  • getRecipePerServingNutritionFacts — retrieve the stored result
POST
/studio/recipes/{recipe_id}/servings/{serving_id}/nutrition-facts/compute

Path Parameters

recipe_id*Recipe Id
serving_id*Serving Id

Header Parameters

If-Match*string

Optimistic-concurrency token. Pass the version_id returned by the previous mutation (or by GET /recipes/{id}/versions) so the server can reject the request when another writer has advanced the recipe in the meantime. A stale token (header present but HEAD has moved) surfaces HTTP 409 with the current version_id in the response body. An absent token on a versioned recipe surfaces HTTP 412. Only consumed on API versions that declare the recipe_versioning capability — older versions ignore the header.

Response Body

application/json

application/json

curl -X POST "https://api.bettermenu.live/studio/recipes/string/servings/string/nutrition-facts/compute" \  -H "If-Match: string"
{
  "data": {
    "recipe_id": "string",
    "serving_id": "string",
    "per_serving": {
      "calculated_at": "string",
      "serving_id": "string",
      "demographic": "string",
      "reference_weight_grams": 0,
      "nutrients": [
        {
          "bmid": "string",
          "name": "string",
          "amount": 0,
          "unit": "string",
          "display_text": "string",
          "percent_daily_value": 0
        }
      ]
    },
    "per_container": {
      "calculated_at": "string",
      "serving_id": "string",
      "demographic": "string",
      "reference_weight_grams": 0,
      "nutrients": [
        {
          "bmid": "string",
          "name": "string",
          "amount": 0,
          "unit": "string",
          "display_text": "string",
          "percent_daily_value": 0
        }
      ]
    }
  },
  "meta": {
    "version": "string",
    "request_id": "string",
    "timestamp": "string"
  },
  "version_id": "string"
}
Empty
Empty
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}