Reference

Reports API

Updated 1 Oct 2026

On this page

For agents

Load this page when: you need the value report, or you need to record reads under a research session over HTTP

  • Open a session with POST /access/session, send its id in the X-CK-Session header on reads, and close it when done.
  • Read the report with GET /reports/value and a since window such as 30d.
  • Only you can read your own report.

The value report shows what your agents read. It is built from research sessions: a session is one research question, and the reads made under it. The CLI shows the same report with trove value.

Get your value report

GET https://heytrove.ai/api/v1/reports/value

Returns your report for a time window. Only you can read it.

Parameters

NameInTypeRequiredConstraintsMeaning
sincequerystringno30d style day count of 1 to 366, or YYYY-MM-DDStart of the window. A day count looks back that many days. A date runs to today.
fromquerystringnoYYYY-MM-DDStart date. Wins over since.
toquerystringnoYYYY-MM-DDEnd date. Wins over since.
tzquerystringnoIANA time zoneTime zone for the window and the daily series. Default UTC.
sessionsLimitqueryintegerno0 to 100Sessions in the narrative. Default 25.
sessionsOffsetqueryintegerno0 to 5,000Sessions to skip.

With no window, the report covers the last 30 days.

Request

bash
curl "https://heytrove.ai/api/v1/reports/value?since=30d&sessionsLimit=10" \
  -H "Authorization: Bearer trove_your_key"

Response

The top-level keys are listed here. Each one is an object or array with its own fields.

json
{
  "window": { "from": "2026-09-02", "to": "2026-10-01", "tz": "UTC", "days": 30 },
  "totals": { "sessions": 12, "booksRead": 5, "pagesRead": 80, "contentReads": 20, "tocReads": 9, "untrackedReads": 2 },
  "outcomes": { "contentRead": 10, "tocOnly": 1, "noRead": 1, "hitRate": 0.83 },
  "sessions": { "sessions": [], "limit": 10, "offset": 0, "total": 12, "hasMore": true },
  "topSources": [],
  "daily": [],
  "funStats": { "equivalents": [], "headline": "…", "minutesOfReading": 120 },
  "deepestSession": null,
  "percentile": null,
  "busiestChannel": null,
  "wiki": null,
  "requestedBooks": null,
  "generatedAt": "2026-10-01T09:00:00.000Z"
}

totals.pagesRead counts only pages read through content reads. Table-of-contents reads are counted apart, in tocReads. Each session has id, startedAt, intent, channel, client, outcome, bookCount, pagesRead and books.

Errors

StatusMessageCodeFix
400Expected '<n>d' or 'YYYY-MM-DD', got: {value}noneFix since.
400Expected YYYY-MM-DD, got: {value}noneFix from or to.
400Invalid IANA timezone: {value}noneUse a name such as Europe/Paris.
429Rate limit exceededRATE_LIMITEDWait for Retry-After.

CLI equivalent: trove value.

List report sessions

GET https://heytrove.ai/api/v1/reports/value/sessions

Returns one page of the session narrative. It takes the same parameters as the report.

Request

bash
curl "https://heytrove.ai/api/v1/reports/value/sessions?since=30d&sessionsLimit=25&sessionsOffset=25" \
  -H "Authorization: Bearer trove_your_key"

Response

json
{
  "sessions": [
    {
      "id": "cmsess1",
      "startedAt": "2026-10-01T08:00:00.000Z",
      "intent": "retry strategy for flaky jobs",
      "channel": "cli",
      "client": "claude-code",
      "outcome": "content-read",
      "bookCount": 1,
      "pagesRead": 6,
      "books": [{ "itemId": "cmabc123", "title": "Use The Index, Luke", "depth": "content", "pagesRead": 6 }]
    }
  ],
  "limit": 25,
  "offset": 25,
  "total": 40,
  "hasMore": false
}

outcome is content-read, toc-only or no-read. The errors are the same as for the report.

Start a research session

POST https://heytrove.ai/api/v1/access/session

Opens a research session. Send the returned id in the X-CK-Session header on later reads so they are recorded under it.

Parameters

NameInTypeRequiredConstraintsMeaning
intentbodystringnoup to 500 charactersOne line about the topic. Keep out anything personal or secret.

Request

bash
curl https://heytrove.ai/api/v1/access/session \
  -H "Authorization: Bearer trove_your_key" \
  -H "Content-Type: application/json" \
  -d '{"intent":"retry strategy for flaky jobs"}'

Response

Status 201.

json
{ "sessionId": "cmsess1", "createdAt": "2026-10-01T08:00:00.000Z" }

A later read then carries the id.

bash
curl -X POST https://heytrove.ai/api/v1/items/batch \
  -H "Authorization: Bearer trove_your_key" \
  -H "X-CK-Session: cmsess1" \
  -H "Content-Type: application/json" \
  -d '{"items":[{"id":"cmabc123","pages":"10-12"}]}'

Errors

StatusMessageCodeFix
400intent must be 500 characters or lessnoneShorten it.
429Too many active sessions. Complete or wait for existing sessions to expire.noneComplete an open session.
429Session creation rate limit exceeded. Try again later.noneWait.

Complete a research session

POST https://heytrove.ai/api/v1/access/session/complete

Closes a session. Calling it again for a closed session returns the same answer.

Parameters

NameInTypeRequiredConstraintsMeaning
sessionIdbodystringyesa session you ownSession to close.

Request

bash
curl https://heytrove.ai/api/v1/access/session/complete \
  -H "Authorization: Bearer trove_your_key" \
  -H "Content-Type: application/json" \
  -d '{"sessionId":"cmsess1"}'

Response

json
{ "sessionId": "cmsess1", "status": "completed" }

Errors

StatusMessageCodeFix
400sessionId is requirednoneSend sessionId.
404Session not foundnoneCheck the id.
    Reports API | Trove