---
search:
  tags:
    - Events
    - GET
seo:
  description: >-
    Opens a Server-Sent Events stream of workspace events. Event payloads
    follow… Reference for the GET /api/v1/events/stream endpoint in the torqee
    Connect API.
sidebar:
  label: Stream workspace events (SSE)
  badge: GET
title: Stream workspace events (SSE)
type: openapi-operation
---
Opens a Server-Sent Events stream of workspace events. Event payloads follow the `WorkspaceEvent` schema (see `#/components/schemas/WorkspaceEvent`). Scopes are checked per subscribed event type: `session.*` requires `torqee:sessions:read`, `transcript.*` requires `torqee:transcripts:read`. When `filters` is omitted, only lifecycle events (`session.created`, `session.status_changed`) allowed by the granted scopes are delivered; no 403 is returned in that case unless the credential carries no readable scope at all. Delivery is best-effort: events emitted while disconnected are lost. Reconcile via the REST API after reconnecting. Gaps in transcript segment data's `sessionCommittedIndex` reveal missed segments; reconcile committed transcripts via the REST API. Streams always terminate within a bounded time: when the access token expires, when a periodic re-authorization (every 60s) finds the credential revoked, or when an API key connection reaches the one hour maximum. Note that the token expiry is measured from when the token was issued, not from when the stream was opened. Before closing, the server emits a terminal `event: stream_closed` whose JSON `data` matches `StreamClosedEvent` (see `#/components/schemas/StreamClosedEvent`). On `token_expired`, refresh the access token before reconnecting; on `max_connection_time`, reconnect immediately; on `revoked`, re-authorize (or narrow your filters to the scopes you still hold) before reconnecting. A stream may also be closed without a `stream_closed` event when the client stops reading and its server-side buffer overflows; the dropped backlog is not replayed, so reconcile via the REST API after reconnecting.

`GET /api/v1/events/stream`

**Responses**

- `200` — SSE stream. Every frame carries \`event: \<name\>\` and a JSON \`data\` payload. Data frames use one of the \`WorkspaceEvent\` types (\`#/components/schemas/WorkspaceEvent\`) and their \`data\` is the matching \`WorkspaceEvent.data\`. The single terminal frame uses \`event: stream\_closed\` and its \`data\` matches \`StreamClosedEvent\` (\`#/components/schemas/StreamClosedEvent\`) instead — parse it separately from \`WorkspaceEvent\`. Heartbeat comments (\`: ping\`) are sent periodically.
- `400` — Malformed filters, or filter cost exceeds the budget
- `401` — Missing or invalid credentials
- `403` — Membership revoked or insufficient scope
- `429` — Too many concurrent connections for the workspace
- `500` — Unexpected server error

Response example, 200:

```json
"string"
```
