Skip to main content
HTTP 409 · type conflict. You posted a turn while the session has a run in flight (status running or judging). Turns are deliberately not queued — a queued follow-up against rows that don’t exist yet would either block silently or answer against a moving target, so the API refuses instead and tells you the live status. Nothing was charged.

The shape

status is live — judging means the sources are done and adjudication is running; the terminal is close.

How to fix

Wait for the run’s terminal, then post the turn. Any of the three ways to watch works:
  • Stream GET …/stream until the session-turn envelope closes it.
  • Long-poll GET …/result?timeout=600 — a 200 means terminal.
  • Webhooksession.answered (or .abstained / .error / .stopped) fires at the terminal.
Remember a run ending at search-done is still judging — posting a turn the moment you see search-done will hit this error; wait for the terminal envelope. If the in-flight run is no longer wanted, POST …/stop it first (a pass already spending finishes; nothing new starts), then post the turn.

Reproduce it

Requires a run actually in flight — cheapest on a live key with a small budget: