Get a produced Solution report
const url = 'http://localhost:8000/api/solutions/runs/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url http://localhost:8000/api/solutions/runs/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/ \ --header 'Authorization: Bearer <token>'The assembled report for a run: { manifest, meta, data }. data (ReportData) is keyed by block id and assembled from the bound sessions’ metrics + green zones; deferred blocks are omitted (the renderer skips absent ids). data numbers are metric (the client converts to imperial at render); ?units= only selects the AI-coach take whose prose matches the coach’s unit system, so the analysis never quotes cm against an imperial body.
meta.aiStale (#1528) flags that the cached AI text was written from inputs that have since changed (a bound session was re-analyzed, a threshold moved, a phase frame was re-picked) — the deterministic blocks are current, the prose is not. Regenerate via POST /api/solutions/runs/<id>/refresh-ai/.
meta.hiddenSections (#1977) is the coach’s STORED set for this run — what a control reflects and sends back, not something to filter on, since the blocks are already pruned out of manifest / data. meta.hiddenSectionsWithheld is the subset this report actually removed: a group the manifest never declares is stored all the same and withholds nothing, so a count or a note shown to the coach reads THAT one. Both absent when the report is full; the second alone is absent when the stored set acts on nothing here.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Query Parameters
Section titled “Query Parameters”true assembles the run IGNORING its stored hidden_sections (#1977) — the coach’s preview of what their client will NOT see. Read-only: the setting is untouched, and meta.hiddenSections still reports it, so the client can label the state it is showing. The public share endpoint has no equivalent.
en (default) / ru / es.
metric (default) or imperial.
Responses
Section titled “Responses”GET /api/solutions/runs/<id>/ — the produced report. manifest,
meta, and data are open objects: the @aikynetix/ui renderer owns
the block shapes, and data (ReportData) is keyed by block id. Absent
block ids render as empty (the renderer’s BlockSlot skips them).
object
The SolutionDefinition.
object
ShellComponentMeta — title/subtitle/branding/sourceSession/cameraView.
object
ReportData — { blockId: payload } assembled from the run’s sessions.
object
Examplegenerated
{ "manifest": { "additionalProperty": "example" }, "meta": { "additionalProperty": "example" }, "data": { "additionalProperty": "example" }}object
Human-readable message, or a stable machine code for the cases a client branches on. The standard envelope for 400 (validation — a field-keyed object may appear instead), 401 (missing / invalid credentials), 403 (authenticated but not permitted), and 404 (absent — cross-team records are collapsed to 404 so the API never leaks the existence of another team’s data).
Examplegenerated
{ "detail": "example"}