Skip to content

List a Solution's produced runs

GET
/api/solutions/{slug}/runs/
curl --request GET \
--url http://localhost:8000/api/solutions/example/runs/ \
--header 'Authorization: Bearer <token>'

The reports-manager list (#1192): the team’s runs for this Solution, newest first, paginated (LimitOffsetPagination). Active-only; ?archived=true returns the archived list instead (the two never mix).

slug
required
string
archived
boolean

true returns the archived list instead of active.

client
string format: uuid

Filter to one client (UUID).

from
string

Created-at range start (inclusive, YYYY-MM-DD, viewer-local via tz).

lang
string

en (default) / ru / es.

search
string

Case-insensitive match on the run name or client name.

sort
string

newest (default) / oldest / name / client.

status
string

Filter by run status.

to
string

Created-at range end (inclusive, YYYY-MM-DD, viewer-local via tz).

tz
string

IANA timezone for the from/to day boundaries (default UTC).

Media typeapplication/json

GET /api/solutions/<slug>/runs/ — the LimitOffsetPagination envelope over the reports-manager rows (#1192).

object
count
required
integer
next
required
string
nullable
previous
required
string
nullable
results
required
Array<object>

One row in the reports manager (#1192). name is the raw stored name (blank until the coach renames the run — the FE renders a localized fallback when blank); client_name / session_count are display helpers. sessions (the report’s constituent captures) is populated only when the view seeds a session_refs context map — see session_refs_for_runs.

object
id
required
string format: uuid
name
string
<= 200 characters
solution_slug
required
string
<= 64 characters
solution_name
required
string
activity
required
string
status
  • draft - Draft
  • ready - Ready
  • failed - Failed
string
Allowed values: draft ready failed
client_id
required
string format: uuid
nullable
client_name
required
string
session_count
required
integer
sessions
required
Array<object>

A constituent session of a run (one entry of its bindings) — enough for the reports card to render like a Sessions journal row: label + link it (the expandable “attached sessions” list) plus its headline metrics chips (#1192). Read-only projection; the run’s report is still assembled from the sessions’ metrics on retrieve.

object
id
required
string format: uuid
activity
required
string
exercise
required
string
created_at
required
string format: date-time
seq_no
required
integer
nullable
camera_view
required
string
nullable
metrics
required
Array<object>

One headline metric on a candidate row — the picker shows the top few as chips (mirrors the Sessions journal row shape).

object
key
required
string
value_num
required
number format: double
nullable
value_json
required
nullable
has_active_share
required

Whether a public link to this report still opens — not revoked, not past its expiry. The reports journal offers Revoke on exactly these rows, including a report shared in an earlier visit, so revoking never requires re-sharing first (which would re-stamp a fresh 30-day window).

boolean
audience
required

Who the report is written for. practitioner (the default) is the full report. coach leaves out the joint-angle graphs, the movement-profile radar and the frame-by-frame stills. athlete is for the athlete or a parent: a plain-language summary, at most five takeaways and the headline metrics, with every joint angle and the analysis sections left out. The web report, the PDF and every link minted from it apply the same tier.

  • practitioner - practitioner
  • coach - coach
  • athlete - athlete
string
Allowed values: practitioner coach athlete
created_at
required
string format: date-time
archived_at
string format: date-time
nullable

Example

{
"results": [
{
"status": "draft",
"audience": "practitioner"
}
]
}
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

Example generated

{
"detail": "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

Example generated

{
"detail": "example"
}