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.
Path Parameters
Query Parameters
Filter by audit event type
Return events that produced versions after this version_id (forward window). Omit for no lower bound.
Return events that produced versions up to and including this version_id (point-in-time window). Omit for no upper bound.
Filter by member_id or system actor identifier
Filter by actor type: 'member' or 'system'
ISO 8601 timestamp lower bound (inclusive)
ISO 8601 timestamp upper bound (inclusive)
Maximum number of audit events to return (1-100)
201 <= value <= 100Opaque pagination cursor returned in meta.cursor from a previous response. Omit on the first page.
Response Body
application/json
application/json
application/json
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"
},
"channel": "studio",
"timestamp": "string",
"version_id": "string",
"event_type": "recipe.created"
}
]
},
"meta": {
"version": "string",
"request_id": "string",
"timestamp": "string",
"cursor": "string",
"has_more": true
}
}{
"type": "https://api.bettermenu.live/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": {}
}
]
}