BETTERMENU
Studio

Get Recipe

Get a recipe by id, optionally pinned to a historical version.

?version_id= (omit ⇒ latest) selects the snapshot. The response body's top-level version_id mirrors the resolved snapshot — HEAD when omitted, the supplied version otherwise — and the ETag: W/"\{version_id\}" response header is derived from that field. Clients can pass the ETag back as If-Match on the next mutation for optimistic concurrency.

The response body's data.status (active / archived / deleted) is the recipe lifecycle state.

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

GET
/studio/recipes/{recipe_id}

Path Parameters

recipe_id*Recipe Id

Query Parameters

version_id?|

Optional version ULID to pin the response to a historical snapshot. Omit to read the live HEAD on the main branch. 26-character Crockford Base32 (no I, L, O, U).

Response Body

application/json

application/json

curl -X GET "https://api.bettermenu.live/studio/recipes/string"
{
  "data": {
    "id": "string",
    "name": "string",
    "country": "US",
    "regulatory_authority": "US_FDA",
    "demographic": "adults_and_children_over_4",
    "status": "active",
    "created_at": "string",
    "updated_at": "string",
    "summary": {
      "ingredient_count": 0,
      "has_nutrition": true,
      "is_nutrition_current": true,
      "serving_count": 0,
      "has_nutrition_facts": true
    },
    "actions": {
      "can_modify": true,
      "can_archive": true,
      "can_delete": true
    }
  },
  "meta": {
    "version": "string",
    "request_id": "string",
    "timestamp": "string"
  },
  "version_id": "string"
}
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}