Reference

Gaps API

Updated 1 Oct 2026

On this page

For agents

Load this page when: you need to report a knowledge gap or manage reader requests over HTTP

  • Report a missing topic with POST /items/{itemId}/gaps. The call always answers ok, even when the report is dropped.
  • Authors list requests with GET /items/{itemId}/gaps and close them with the fulfill endpoint.
  • Select requests by gapIds or by subcategory. Send one of them.

A gap is a topic a reader looked for and did not find. Reader reports go to the author of the book. See Knowledge gaps.

Report a missing topic in a book

POST https://heytrove.ai/api/v1/items/{itemId}/gaps

Tells the author of a book you read that a sub-topic is missing. The call is fire and forget: it answers { "ok": true } even when the body is invalid or the report is dropped. Only readers with full access to the book can seed the author's queue. Duplicates from one reader are removed over 30 days.

Parameters

NameInTypeRequiredConstraintsMeaning
itemIdpathstringyesnoneBook the gap is about.
intentbodystringyesup to 1,000 charactersThe topic the reader was after. Leave out personal details.
categorybodystringyesup to 100 charactersBroad category.
subcategorybodystringyesup to 200 charactersThe missing sub-topic.
aboutSectionbodystringnoup to 200 charactersSection the gap relates to.

Request

bash
curl https://heytrove.ai/api/v1/items/cmabc123/gaps \
  -H "Authorization: Bearer trove_your_key" \
  -H "Content-Type: application/json" \
  -d '{"intent":"retry strategy for flaky jobs","category":"devops","subcategory":"retry backoff"}'

Response

json
{ "ok": true }

CLI equivalent: trove items report-gap.

List requests for a book

GET https://heytrove.ai/api/v1/items/{itemId}/gaps

Lists the requests for a book you own, grouped by topic and ranked by how many readers asked.

Parameters

NameInTypeRequiredConstraintsMeaning
itemIdpathstringyesyou own the bookBook to inspect.
statusquerystringnoOPEN, CLUSTERED, IN_PROGRESS, FULFILLED or DISMISSEDWhich requests to list. Default OPEN. An unknown value falls back to OPEN.

Request

bash
curl "https://heytrove.ai/api/v1/items/cmabc123/gaps?status=OPEN" \
  -H "Authorization: Bearer trove_your_key"

Response

The response is a bare array, not an object.

json
[
  {
    "subcategory": "retry backoff",
    "category": "devops",
    "reporterCount": 3,
    "sampleIntent": "retry strategy for flaky jobs",
    "status": "OPEN",
    "latestAt": "2026-10-01T09:00:00.000Z",
    "gapIds": ["cmgap1", "cmgap2", "cmgap3"]
  }
]

Errors

StatusMessageCodeFix
404Item not foundnoneOnly the owner can list requests. Check the id.
403The locked-book messageITEM_LOCKEDSee Errors.

CLI equivalent: trove items gaps.

Mark requests as covered

POST https://heytrove.ai/api/v1/items/{itemId}/gaps/fulfill

Closes requests after you extended the book. Every reader who asked is notified. Only the owner can call it.

Parameters

NameInTypeRequiredConstraintsMeaning
itemIdpathstringyesyou own the bookBook you extended.
gapIdsbodystring arrayone of the twoup to 100 idsRequests to close. Wins over subcategory.
subcategorybodystringone of the twononeClose every open request on this sub-topic.

Request

bash
curl https://heytrove.ai/api/v1/items/cmabc123/gaps/fulfill \
  -H "Authorization: Bearer trove_your_key" \
  -H "Content-Type: application/json" \
  -d '{"subcategory":"retry backoff"}'

Response

json
{ "ok": true, "fulfilledGaps": 3, "notified": 3 }

Errors

StatusMessageCodeFix
400Provide gapIds or subcategorynoneSend one of them.
400Too many gapIds (max 100)noneSplit the batch.
404Item not foundnoneCheck the id.

CLI equivalent: trove items resolve-gap.

Decline requests

POST https://heytrove.ai/api/v1/items/{itemId}/gaps/dismiss

Marks open requests as out of scope for the book. No one is notified. Parameters, request and errors are the same as for fulfill.

Response

json
{ "ok": true, "dismissed": 3 }

Reopen declined requests

POST https://heytrove.ai/api/v1/items/{itemId}/gaps/restore

Moves declined requests back to open. No one is notified. Parameters and errors are the same as for fulfill.

Request

bash
curl https://heytrove.ai/api/v1/items/cmabc123/gaps/restore \
  -H "Authorization: Bearer trove_your_key" \
  -H "Content-Type: application/json" \
  -d '{"subcategory":"retry backoff"}'

Response

json
{ "ok": true, "restored": 3 }

CLI equivalent: trove items restore-gap.

Summarize requests across your books

GET https://heytrove.ai/api/v1/author/gaps

Lists open requests across every book you own, ranked by open count. It takes no parameters.

Request

bash
curl https://heytrove.ai/api/v1/author/gaps \
  -H "Authorization: Bearer trove_your_key"

Response

The response is a bare array.

json
[
  {
    "itemId": "cmabc123",
    "itemTitle": "Use The Index, Luke",
    "openCount": 3,
    "topSubcategories": [{ "subcategory": "retry backoff", "reporterCount": 3 }]
  }
]

CLI equivalent: trove items gaps without an id.

Report a topic no book covers

POST https://heytrove.ai/api/v1/librarian/gaps

Tells Trove that your library had no book for a topic. Like the book-level report, it always answers { "ok": true }.

Parameters

NameInTypeRequiredConstraintsMeaning
intentbodystringyesup to 1,000 charactersThe topic. Write the subject, not the user's own words.
categorybodystringyesup to 100 charactersBroad category.
subcategorybodystringyesup to 200 charactersNarrower topic.
suggestedTitlebodystringnoup to 500 charactersA book that would fill the gap.
suggestedAuthorbodystringnoup to 200 charactersIts author.

Request

bash
curl https://heytrove.ai/api/v1/librarian/gaps \
  -H "Authorization: Bearer trove_your_key" \
  -H "Content-Type: application/json" \
  -d '{"intent":"webhook signature checks","category":"security","subcategory":"webhooks"}'

Response

json
{ "ok": true }
    Gaps API | Trove