BETTERMENU
Studio

List Recipe Versions

List a recipe's version history, newest first (cursor-paginated, max 50 per page).

Each entry includes version_id, parent_version_id, created_at, created_by, and an auto-generated summary of what changed. Pass ?at=<iso8601> with an explicit UTC offset to resolve the single version active at that timestamp; after and limit are ignored in that mode, and 404 is returned when no version exists at or before the given time. For actor/event audit narrative, use GET /recipes/\{recipe_id\}/audit-trail instead.

GET
/studio/recipes/{recipe_id}/versions

Path Parameters

recipe_id*Recipe Id

Query Parameters

after?|

Opaque pagination cursor returned in meta.cursor from a previous response. Omit on the first page; pass the previous response's meta.cursor verbatim on each subsequent page. Ignored when at is supplied.

limit?Limit

Maximum entries to return per page (1 to 50). Ignored when at is supplied.

Default50
Range1 <= value <= 50
at?|

Return the single version active at this wall-clock timestamp. ISO 8601 with an explicit UTC offset required (e.g. 2026-05-04T12:00:00Z). When provided, limit and after are ignored and the response contains at most one entry — the newest version whose commit timestamp is ≤ the requested time. Returns 404 (no_version_at_timestamp) when no version exists at or before the given time. Future timestamps are valid and return the latest version.

Response Body

application/json

application/json

application/json

curl -X GET "https://loading/studio/recipes/string/versions"
{
  "data": [
    {
      "version_id": "string",
      "parent_version_id": "string",
      "created_at": "2019-08-24T14:15:22Z",
      "created_by": "string",
      "summary": "string",
      "restored_from_version_id": "string",
      "caused_by_event_id": "string"
    }
  ],
  "meta": {
    "version": "string",
    "request_id": "string",
    "timestamp": "string",
    "cursor": "string",
    "has_more": true
  }
}
{
  "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": {}
    }
  ]
}