Skip to content

Revert a phase still to the analyzer's frame

DELETE
/api/solutions/runs/{run_id}/phase-frame/
curl --request DELETE \
--url 'http://localhost:8000/api/solutions/runs/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/phase-frame/?block_id=phase-breakdown-1&phase_id=example' \
--header 'Authorization: Bearer <token>'

Drops the coach’s phase-frame override (and garbage-collects the stored frame); the phase falls back to the analyzer-picked still everywhere the report renders. Idempotent — reverting a phase that has no override returns reverted: false.

run_id
required
string format: uuid
attempt_id
string

Per-trial payload id for multi-attempt reports; omit for single-attempt reports.

block_id
required
string
Allowed values: phase-breakdown-1 phase-slider-1 phase-slider-back-1 phase-slider-front-1 phase-slider-side-1

phase-slider-1 / phase-breakdown-1, or phase-slider-<view>-1 for a multi-camera report’s other cameras.

phase_id
required
string

Analyzer phase name (the phase’s id in the block).

Media typeapplication/json

200 from the phase-frame revert.

object
reverted
required

true when an override existed and was removed; false when the phase was already on the analyzer’s frame (idempotent).

boolean
recompute
required

What the corrected frame started for the numbers read at it (#2612). queued — the analyzer is re-reading, the values arrive on a later report GET; coalesced — a re-run was already in flight and will pick this correction up too; rate_limited — this run has spent its hourly budget, the frame is still swapped and the numbers stay as the detector read them; team_busy — the team’s correction slots are full, same outcome; none — nothing to recompute. The pick itself ALWAYS succeeded: this field never reports a failure of the frame swap.

  • queued - queued
  • coalesced - coalesced
  • rate_limited - rate_limited
  • team_busy - team_busy
  • none - none
string
Allowed values: queued coalesced rate_limited team_busy none

Examples

ExampleOverrideRemoved

Override removed

{
"reverted": true,
"recompute": "none"
}
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"
}
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"
}