Platform
Build reports
A report is the consulting deliverable: a client-ready snapshot of the knowledge base as of a moment in time — coverage, KPIs, top entities, gaps, and what to interview next — persisted immutably and renderable to PDF months later, byte-for-byte the same. This guide generates a snapshot with one call and fetches it back as structured JSON or a rendered PDF.
Prerequisites
- A key with
reports:write(generate) andreports:read(list/fetch). - A workspace with some ingested documents — a report over an empty KB is a report about an empty KB.
For what each section means and how reproducibility stamping works, see Reports & PDF deliverables.
Generate a snapshot
Generating a report computes each section against the KB at that instant and persists the result. The call returns immediately with the snapshot's id and status; the PDF renders in the background on a serialized queue. The numbers are frozen at generation — a report you hand a client in July still reads the same in December, however much the KB has grown.
/api/v1/reportsBearer · reports:writeGenerate an as-of report snapshot over the current KB. Returns the snapshot id and status; the PDF renders asynchronously.
Request body
Fetch it back
Poll or fetch the snapshot by id. Once the PDF has rendered, pdf.status is ready and pdf.url points at the download. The structured datais available immediately — you don't have to wait for the PDF to consume the numbers.
/api/v1/reports/{id}Bearer · reports:readFetch a report snapshot: its stamped metadata, the computed section data, and the PDF status/URL once rendered.
/api/v1/reportsBearer · reports:readList report snapshots for the workspace, newest first.
The rendered PDF is at GET /api/v1/reports/{id}/pdf — the same reports:read scope, returning application/pdf. Stream it straight to disk:
/api/v1/reports/{id}/pdfBearer · reports:readDownload the rendered PDF. 409 if the render is still in progress or queued.
Rendering is serialized
pdf.status: "queued" briefly; GET …/pdf returns 409 until the render lands. The structured data never waits on the PDF.The leverage
One POST turns the live state of an engagement into a frozen, reproducible artifact — the paid deliverable — and the structured data means you can also drop the same numbers into your own dashboard, email, or Slack digest without re-deriving them. Schedule the call and a Monday-morning client report is rendered before anyone opens their inbox; every re-download of an old snapshot is identical, because the layout version that produced it is stamped in. See Scheduling, drift & alerts for the cron substrate.