Produce a Solution run
const url = 'http://localhost:8000/api/solutions/example/runs/';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"client_id":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","bindings":{"additionalProperty":["2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"]},"force":false}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url http://localhost:8000/api/solutions/example/runs/ \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "client_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "bindings": { "additionalProperty": [ "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" ] }, "force": false }'Bind existing sessions to the Solution’s movement slots and persist a run. Required slots must each carry ≥1 session; every session must belong to the workspace, be completed, and match its slot’s movement. Returns the run id.
Dedup (#1192): if an active run with these exact bindings already exists, responds 409 with the existing run instead of minting a duplicate — send force=true to override and create a new one.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Request Bodyrequired
Section titled “Request Bodyrequired”Request body for POST /api/solutions/<slug>/runs/ — bind sessions
to the solution’s movement slots.
object
Athlete the report is about (optional).
{ movementSlotId: [sessionId, ...] } — list per slot.
object
Bypass dedup and create a new run even if an active one with these exact bindings already exists (#1192).
Request body for POST /api/solutions/<slug>/runs/ — bind sessions
to the solution’s movement slots.
object
Athlete the report is about (optional).
{ movementSlotId: [sessionId, ...] } — list per slot.
object
Bypass dedup and create a new run even if an active one with these exact bindings already exists (#1192).
Request body for POST /api/solutions/<slug>/runs/ — bind sessions
to the solution’s movement slots.
object
Athlete the report is about (optional).
{ movementSlotId: [sessionId, ...] } — list per slot.
object
Bypass dedup and create a new run even if an active one with these exact bindings already exists (#1192).
Responses
Section titled “Responses”object
The created run id.
Examplegenerated
{ "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "status": "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"}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"}409 from POST .../runs/ — an active run with these exact bindings
already exists (#1192). Retry with force=true to create a duplicate.
object
solution_run_exists.
{ id, name, created_at } of the existing active run.
object
Examplegenerated
{ "detail": "example", "existing": { "additionalProperty": "example" }}