Skip to main content
HTTP 409 · type conflict. The action you posted — a stop, or a turn — can’t apply because the run is already finished: its status is a terminal (answered, abstained, error, or stopped) and the ledger has settled. Nothing was charged for this request. The common case is POST …/stop on a run that ended on its own — a race you should expect: stops and terminals are concurrent by nature, and losing that race is harmless.

The shape

status is the terminal the run reached. (Run-scoped errors are slated to carry a console_url deep link to the dashboard detail view — not yet emitted.)

How to fix

  • Stopping: treat this as success — the run is not running. Read the terminal from status and move on.
  • Turns: follow-up narrows, asks, and re-aims are valid on an answered session — if a turn returned this error, check status: the session ended some other way (or was redacted), and there is no corpus to follow up on. Start a new session, or refresh if you want the same question re-run.
  • Don’t infer state from your own bookkeeping; GET /v1/sessions/{id} is the authority, derived from the durable record.

Reproduce it

Stop a session that already finished (an fn_test_ replay finishes on its own, $0):