Persistent RunRecord storage for replay tooling. Server-side workflow executions write to this
store automatically; client-side agents (e.g. sogni-chat) ingest their own records
through the public ingest endpoint. Records are server-redacted defense-in-depth on every write.
POST
/v1/replay/records
Auth required
Ingest a RunRecord. The owner is derived from the authenticated wallet — clients cannot write into someone else's namespace.
#Body
| Name | Type | In | Description |
| schemaVersion* | integer | body | RunRecord schema version. Must be in the server's supported range. |
| run_id* | string | body | Caller-chosen run id (max 128 chars). Uniqueness is per-owner. |
| user_request* | string | body | The user prompt or request that triggered the run. |
| rounds* | array | body | Recorded LLM/tool rounds. Server replays for review. |
Payload cap. A single record is capped at 1 MB. Larger payloads return 413.
#Response
{
"runId": "run_…",
"schemaVersion": 2,
"redacted": true,
"createTime": 1731950400,
"updateTime": 1731950400
}
GET
/v1/replay/records
Auth required
List recent RunRecords for the caller (summary view).
#Query parameters
| Name | Type | In | Description |
| limit | integer | query | Default 50, max 200. |
#Response
{
"records": [
{
"runId": "run_…",
"schemaVersion": 2,
"createTime": 1731950400,
"updateTime": 1731950400,
"userRequest": "Storyboard a 5-shot neon teaser.",
"finalResponse": "Here's your storyboard.",
"modelId": "qwen3.6-35b-a3b-gguf-iq4xs",
"rounds": 3
}
]
}
GET
/v1/replay/records/:id
Auth required
Read a full RunRecord (suitable for the replay viewer).
#Response
{
"record": { "schemaVersion": 2, "run_id": "run_…", "rounds": [ /* … */ ] },
"createTime": 1731950400
}