> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fiveninelabs.com/llms.txt
> Use this file to discover all available pages before exploring further.

# session_terminal

> 409 conflict — the run already reached a terminal; this action no longer applies.

**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

```json theme={null}
{
  "error": {
    "type": "conflict",
    "code": "session_terminal",
    "message": "This run already ended; nothing is in flight to act on.",
    "doc_url": "https://docs.fiveninelabs.com/errors/session_terminal",
    "request_id": "req_2pp96v",
    "status": "answered"
  }
}
```

`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](/guides/refresh-and-monitors) 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):

```bash theme={null}
curl -N https://api.fiveninelabs.com/v1/sessions \
  -H "Authorization: Bearer $FIVENINE_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: text/event-stream" \
  -d '{"query": "vinyl records", "max_spend_usd": 1}' > /dev/null
# after the stream closes, stop the finished run:
curl -X POST https://api.fiveninelabs.com/v1/sessions/sess_REPLACE/stop \
  -H "Authorization: Bearer $FIVENINE_TEST_KEY"
```
