---
search:
  tags:
    - Operations
    - GET
seo:
  description: >-
    Server-Sent Events stream of state-changed notifications. Each event id is…
    Reference for the GET /app/{id}/events endpoint in the Charming API API.
sidebar:
  badge: GET
  label: Subscribe to the live-state SSE stream for an app
title: Subscribe to the live-state SSE stream for an app
type: openapi-operation
---
Server-Sent Events stream of `state-changed` notifications. Each event id is `<server-epoch>:<rev>`; the browser `EventSource` replays via `Last-Event-ID` on reconnect, and the server emits a synthetic `state-changed` event with `source: "reconnect-resync"` and `result: null` whenever the client's id belongs to an older epoch or claims an unseen revision. The `overcapacity` event is emitted (and the stream closed) when the per-app subscriber cap is reached. Heartbeats are SSE comment lines (`: ping`) every 15s.

Auth posture is broader than the owner endpoints: appToken, userToken, renderToken (bearer or `?t=` query), or the path-scoped `buildy_sse_<id>` HMAC cookie minted by the `/app/{id}` render-bridge when a render-token rendered the page. The `{}` (no-auth) option in `security` covers the cookie path — OpenAPI cannot model a per-app cookie name as a fixed scheme.

<Operation source="reference" id="subscribe-app-events" />

Found a bug or need a feature? [Tell us](/docs/capabilities/feedback) with `submit_feedback` or `POST /app/{id}/feedback`. Your feedback shapes what we build next.
