Get Recipe Audit Trail
Return the compliance timeline for a recipe.
Lists typed audit events newest-first. Each event carries the
actor, channel, timestamp, changed fields, before/after payload,
rationale, and a tamper-evidence record_hash.
Use this endpoint to answer: "who changed what and why?", "what was the ingredient list before the last edit?", "show me all nutrition recomputations since version V".
For the tamper-evident chain of state snapshots use
listRecipeVersions instead.
Pagination: pass meta.cursor from the previous response back as
cursor on the next request, and keep paging until meta.has_more
is false.
actor_id, actor_type, since_version_id and up_to_version_id
are applied as DynamoDB filters after the page is read, so a
filtered page can return fewer than limit events — possibly zero —
even when more matches exist further in. An empty page with
meta.has_more: true is not an empty result set: keep paging with
meta.cursor rather than reading a short or empty page as the end
of the timeline. event_type and the from/to range narrow the
index range itself and are unaffected.
Passing event_type selects a different index that has no cursor:
that path returns a single page of at most limit events and always
reports meta.has_more: false, which therefore does not mean the
timeline is exhausted. Narrow with from/to, or raise limit, to
see more of a typed slice.
from and to are inclusive ISO 8601 timestamps; an offset is
honoured and a timestamp without one is read as UTC. A window that
matches no events, or whose from is after its to, is not an
error: it returns an empty page (events: [], meta.has_more: false).
An unparseable from or to is rejected with 422.
recipe_id*Recipe Idevent_type?||Filter by audit event type
since_version_id?|Return events that produced versions after this version_id (forward window). Omit for no lower bound.
up_to_version_id?|Return events that produced versions up to and including this version_id (point-in-time window). Omit for no upper bound.
actor_id?|Filter by member_id or system actor identifier
actor_type?|Filter by actor type: 'member' or 'system'
from?|ISO 8601 timestamp lower bound (inclusive)
to?|ISO 8601 timestamp upper bound (inclusive)
limit?LimitMaximum number of audit events to return (1-100)
1 <= value <= 10020cursor?|Opaque pagination cursor returned in meta.cursor from a previous response. Omit on the first page.
Successful Response
application/json- response
Response for get recipe audit trail endpoint.
data*Audit trail data for a recipe.
meta*Paginated response metadata.
curl -X GET 'https://api.bettermenu.live/studio/recipes/string/audit-trail'{ "data": { "recipe_id": "string", "events": [ { "event_id": "string", "actor": { "type": "member", "id": "string", "display_name": "string", "former_member": false, "is_viewer": false }, "channel": "studio", "client": "claude", "client_id": "string", "timestamp": "string", "version_id": "string", "event_type": "recipe.created" } ] }, "meta": { "version": "string", "request_id": "string", "timestamp": "string", "cursor": "string", "has_more": true }}