INVALID_INPUT | 400 | Body / query failed validation. detail says which field. | Fix the payload. |
INVALID_STATE | 409 | Operation not allowed in the session’s current state. | Read the current state via get_session and retry the right transition. |
CONFLICT | 409 | Resource conflict (e.g. monotone sequence violation on a heartbeat). | Resolve the conflict server-side (newer sequence, different slug) and retry. |
NO_COVERAGE | 503 | No ONLINE operator covers the requested point. | Widen the request, try a different zone, or wait for an operator to come online. |
OUTSIDE_COVERAGE | 400 | Requested point is outside the operator’s declared coverage circle. | Move the request inside the operator’s range. |
UNAVAILABLE | 503 | Dispatch found no idle operator. | Retry shortly. |
FRAME_NOT_AVAILABLE | 404 | No decoded frame yet — only fires while the session is ASSIGNED (pre-first-frame) or after the publisher disconnects mid-session. Once state === "LIVE", the API only flips after a JPEG is buffered, so the first call is reliable. | Use wait_for_live to wait out the ASSIGNED → LIVE transition rather than spinning on get_frame. |