BETTERMENU
Studio

Get Recipe Version Changes

Return a structural diff of version_id relative to compared_to (defaults to its parent).

before holds values at the comparison point; after holds values at the subject version. Only changed top-level fields appear in data.field_changes; an empty map means the two states are equivalent. For rollback preview, pass compared_to=\{current_head\} to see what reverting to version_id would change. Diffing a version against itself returns 400.

GET
/studio/recipes/{recipe_id}/versions/{version_id}/changes

Path Parameters

recipe_id*Recipe Id
version_id*Version Id

Subject version ULID — the version whose changes are being described. 26-character Crockford Base32, globally unique within the recipe's history.

Match^[0-9A-HJKMNP-TV-Z]{26}$
Length26 <= length <= 26

Query Parameters

compared_to?|

Comparison-point version ULID — the baseline the subject is described against. Optional; defaults to the parent of version_id (i.e. 'what changed at this version?'). Pass an arbitrary ULID for free-form comparison (e.g. rollback preview: /versions/V3/changes?compared_to=V7 describes V3's state relative to your current V7). When version_id is the initial commit, omitting compared_to produces the full added view of the version.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://loading/studio/recipes/string/versions/stringstringstringstringst/changes"
{
  "data": {
    "field_changes": {
      "property1": {
        "field_changes": {
          "property1": {},
          "property2": {}
        }
      },
      "property2": {
        "field_changes": {
          "property1": {},
          "property2": {}
        }
      }
    }
  },
  "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"
  ]
}
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}
{
  "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"
  ]
}