Skip to content
Skip to Content
Docs
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 (with created_by_name and created_by_former_member naming that actor), 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.

Range1 <= value <= 50
Default50
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. When no version exists at or before that time, the call is refused with no_version_at_timestamp. Future timestamps are valid and return the latest version.

Response Body

Successful Response

application/json
  1. response

Paginated list of versions for a single recipe, newest first.

Pagination uses an opaque cursor passed back as ?after=<cursor>. Versions are ordered by creation time. limit is capped server-side at 50.

data*array<>

Version summaries for this page, ordered newest-first. Empty when the recipe has no versions (e.g. just-created recipes before any sub-entity write has sealed a commit).

meta*

Pagination metadata. meta.cursor is null when there are no further pages; otherwise pass it back as the after query parameter to fetch the next page. meta.has_more mirrors the cursor presence as a boolean for client convenience.

Example Request
curl -X GET 'https://api.bettermenu.live/studio/recipes/string/versions'
Example Response
{  "data": [    {      "version_id": "string",      "parent_version_id": "string",      "created_at": "2019-08-24T14:15:22Z",      "created_by": "string",      "created_by_name": "string",      "created_by_former_member": false,      "created_by_is_viewer": false,      "summary": "string",      "restored_from_version_id": "string",      "caused_by_event_id": "string",      "regulatory_bundle_version": "string",      "version_number": 0    }  ],  "meta": {    "version": "string",    "request_id": "string",    "timestamp": "string",    "cursor": "string",    "has_more": true  }}

Recipe in, FDA-format Nutrition Facts out, with every version kept.

Start freeNo card needed.