GET /v1/studies/:id/themes remains the older automatic themes, regenerated from scratch after each interview. The ledger is the Study Manager’s account: versioned, graded, and counted the same way for every item.GET /v1/studies/:id/ledger
Retrieve the current version of a study’s ledger.
Request
string
required
Bearer token. See Authentication.
string
required
Study ID (UUID).
string
"all" to include merged and retired items. Default: active items only.404 with error.code "ledger_not_found":
404
404 with error.code "study_not_found" if the study doesn’t exist or doesn’t belong to your project.
GET /v1/studies/:id/events
List what changed in a study’s ledger, newest first. Each event is derived from the difference between two ledger versions; nothing is computed beside that diff.
Request
string
required
Bearer token. See Authentication.
string
required
Study ID (UUID).
string
Only events created at or after this ISO 8601 timestamp (inclusive), e.g.
2026-09-17T00:00:00Z. An event’s created_at can be passed back as is; URL-encode it, because a + in the offset otherwise decodes as a space.string
Only events of this kind. Repeat the parameter for several kinds:
?kind=theme_created&kind=item_strengthened. See Event kinds.integer
Number of events to return. Default
20, max 100.string
Cursor for pagination. Pass the
id of the last event from the previous page.404 with error.code "study_not_found" if the study doesn’t exist or doesn’t belong to your project. Before the first save the list is empty, not an error.
Errors
These two endpoints return a structured error body.type is "invalid_request_error" for 400 and 404 responses and "api_error" for 500. param names the query or path parameter the error is about, or is null.
400
Missing or invalid API keys return
401 with the shared error body.
Study ledger object
string
"study_ledger"string
Study ID (UUID).
integer
The ledger version, starting at
1 on the agent’s first save and increasing by one per save. Events carry the version that produced them.string
ISO 8601 timestamp of the save that produced this version.
object | null
The agent’s call on where the study stands, with its reason.
null until the agent has made one.study_question[]
The questions the study is answering, each with its answer patterns. The study’s configured questions come first in the study’s order, then questions derived from the research goal, then questions a person asked for. Answer patterns and themes are listed strongest first. See Study question.
study_item[]
Findings nobody asked for. See Study item.
object[]
The interviews worth reading, by rank. At most five.
object[]
Interviews the agent set aside. An excluded interview has no evidence and is not counted.
object[]
Observations, caveats and method remarks that fit no item. Visible, never counted.
object[]
What the study owner told the agent to track or drop, in chat. Preferences bind on every later turn.
Study question
string
"study_question"string
Question ID, e.g.
"q_first_impression". Never reused.string
The question as the agent phrased it. The agent derives its own list from the study’s goal and configured questions, and may split or rephrase them.
string
Where the question came from:
"study:<n>" for the study’s configured question n (0-indexed), "goal" when derived from the research goal, or "user" when a person asked for it in chat.string
"no_pattern" (no answer pattern yet), "emerging" (at least one pattern, counts still moving), or "answered" (patterns stable; the agent would defend the answer).string | null
Free text about the question, e.g.
"splits by tenure".study_item[]
The answer patterns found for this question. Several per question is normal. See Study item.
Study item
An answer pattern or a theme. Both carry the same fields and the same counts.string
"study_item"string
Item ID:
"a_…" for answers, "t_…" for themes. Never reused.string
"answer" or "theme".string | null
The question an answer belongs to.
null for themes.string
Names the pattern. Titles never state how many respondents; the counts do.
string
What respondents did or said.
string
"active" (counted and shown), "merged" (folded into merged_into), or "retired" (no longer tracked). Merged and retired items appear only with include=all.string | null
The item this one was folded into, when
status is "merged".string | null
Why the item was merged or retired.
string | null
The interview that first surfaced the item.
string
ISO 8601 timestamp of the save that created the item.
integer
Interviews whose evidence for this item is graded
A, B or C. This is the item’s number; see Grades and counts.integer
Interviews whose evidence for this item is graded
D or E. Not counted in supporters.integer
Interviews the agent has reviewed and not excluded, in this ledger version. Read
supporters against it: 4 of 9 reviewed.study_evidence[]
One graded quote per supporting interview. See Study evidence.
Study evidence
string
"study_evidence"string
Interview ID (UUID) the quote comes from.
number
Seconds into the interview where the quoted line starts.
number
Seconds into the interview where the quoted line ends. May equal
start.string
The respondent’s verbatim words, at most thirty words. Every quote is checked against the transcript before the ledger is saved.
string | null
Context the words alone would not carry, such as the interviewer’s question. Present when the grade depends on it.
string
"A" to "E". See Grades and counts.string
One sentence, in the agent’s words, saying what earned the grade.
Grades and counts
Every piece of evidence is a graded quote. The grade says how much the respondent’s words earn for the item:
An item’s
supporters is the number of reviewed, non-excluded interviews with evidence graded A to C; weak is the number graded D or E. Both are counted over the same reviewed set, so supporters means the same thing for every item in a ledger. Excluded interviews contribute to neither. Titles and descriptions never state prevalence; compare supporters with reviewed instead.
Study event object
string
"study_event"string
Event ID (UUID). Use it as
starting_after to page.string
Study ID (UUID).
integer
The ledger version whose save produced this event.
string
One of the event kinds.
string | null
The question, item or note the event is about, when there is one.
string | null
The interview the event is about, when there is one.
object
Small facts about the change. Keys depend on
kind; see Event kinds. Never contains quotes.string
ISO 8601 timestamp of the save that produced the event.
Event kinds
map in detail is "answers" or "themes", naming which kind of item the event is about.