Skip to content

Get a produced Solution report

GET
/api/solutions/runs/{run_id}/
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/.

run_id
required
string format: uuid
lang
string

en (default) / ru / es.

units
string

metric (default) or imperial.

Media typeapplication/json

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
manifest
required

The SolutionDefinition.

object
key
additional properties
meta
required

ShellComponentMeta — title/subtitle/branding/sourceSession/cameraView.

object
key
additional properties
data
required

ReportData — { blockId: payload } assembled from the run’s sessions.

object
key
additional properties
Examplegenerated
{
"manifest": {
"additionalProperty": "example"
},
"meta": {
"additionalProperty": "example"
},
"data": {
"additionalProperty": "example"
}
}
Media typeapplication/json
object
detail
required

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).

string
Examplegenerated
{
"detail": "example"
}