---
title: "Watch Session Stream"
method: GET
path: "/sessions/streams/watch"
tags: ["Sessions", "Sessions"]
---

# Watch Session Stream

`GET /sessions/streams/watch`

Server-sent events relay for one session (M3 live relay).

Emits change notifications only — never record payloads; clients
revalidate through the regular query endpoints on each event:

- ``event: records-changed`` — ``{"session_id"}``; new/updated rows
  landed in the record log (published post-DB-commit).
- ``event: lifecycle`` — ``{"session_id", "state": "running"|"ended"}``.
- ``event: interaction`` — ``{"session_id", "status": "pending"|"resolved"}``.
- ``: heartbeat`` comment frames while idle (keep-alive).

Auth is the standard middleware (cookie ``sAccessToken``, ApiKey, or
Bearer) evaluated once at connect; scope is the credential's project.
Browsers authenticate by cookie — ``EventSource`` cannot set headers —
so a connect landing on an expired access token 401s like any other
request. There is no interceptor to refresh-and-retry a stream, so the
client must refresh the session itself and reopen (see the web hooks).

The stream has no replay/cursor semantics — ``EventSource`` reconnects
and clients revalidate once on every ``open``, which covers any missed
notifications.

NOTE (spec surface): this route appears in OpenAPI for documentation,
but Fern does not model SSE — consume it with a native ``EventSource``
(same-origin ``/api`` + cookie auth needs no custom headers), not the
generated client.

## Query parameters

- `session_id` string, required

## Response `200`

Successful Response

- unknown

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/agenta-ai/apis/agenta-api.md) · [All operations](https://skmtc.net/agenta-ai/apis/agenta-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/agenta-ai/agenta-api/versions/d43a05d98a9b/schema)
