---
title: "Subscribe to the admin aggregate live event stream (SSE)"
method: GET
path: "/api/v1/admin/events/stream"
tags: ["Admin", "Events"]
---

# Subscribe to the admin aggregate live event stream (SSE)

`GET /api/v1/admin/events/stream`

## Request

- Base URL: `https://api.uptimemonitoring.com`
- URL: `https://api.uptimemonitoring.com/api/v1/admin/events/stream`
- Auth: none required

Consumes a ticket from `POST /api/v1/admin/events/ticket` and
upgrades the response to an SSE stream that delivers every
event published for every account. Used by the back-office
dot-grid dashboard at `app.uptimemonitoring.com/ops` (SPEC
§Back-Office Dashboard).

Each frame carries the same envelope as
`/api/v1/events/stream` (see `docs/SSE_LIVE_UPDATES_SPEC.md`
§6 + §7); `account_id` identifies the originating account.
Heartbeat comments (`: heartbeat`) are emitted every 25 s.

Admin membership is re-checked at stream-open time against
the durable `admins` table — a row deleted in the 0-30s
ticket-redeem window cannot keep a long-lived connection
alive. **Also re-checked periodically while connected (issue
#339):** once open, the same account/membership/key check plus
the admin-lookup check both re-run every ~30 seconds. Removing
the minting admin's account membership, revoking their API key,
suspending the account, or deleting their `admins` row closes
an already-open admin stream within roughly 45 seconds on a
healthy connection (detected within ~35 seconds by the recheck,
plus up to a further 10s write deadline for an in-flight
write/flush to unblock and the stream to actually close) — not
instantly, not a hard worst case (the write deadline is armed
only for the duration of a write+flush and cleared between
frames, so a stalled HTTP/2 connection writer is not bounded by
it), and never due to a merely transient error (e.g. a database
hiccup), which only delays how soon a genuine revocation takes
effect.

## Query parameters

- `ticket` string, required

## Response `200`

Admin SSE stream opened.

## Other responses

- `401`: Missing/invalid/expired admin ticket; OR admin membership was revoked between mint and redeem; OR admin status (the `admins` row) was revoked; OR a per-account ticket was presented to this admin route. A ticket refused for any of the DEFINITE reasons above (not "missing/invalid/expired") is also consumed (burned) — it cannot be retried.
- `403`: Account is currently suspended. On `POST /api/v1/monitors`, and on a `PUT /api/v1/monitors/{monitorID}` that changes `url` or `type` (issue #335), this can also be returned by the per-account port-scan heuristic when the triggering request crossed the port-fan threshold inside the sliding window (10 minutes by default; `SCAN_WINDOW`). A host-fan trip does NOT suspend the account — see the 429 response instead.
- `429`: Max concurrent admin SSE connections reached (5 per admin). Connection-cap rejection, not a rate-window rejection — `Retry-After` is intentionally not set. Does NOT consume the ticket — retry with the same one once a slot frees.
- `503`: Admin events surface not configured on this dispatcher.

---

[API](https://skmtc.dev/uptimemonitoring/apis/uptimemonitoring-com-api.md) · [All operations](https://skmtc.dev/uptimemonitoring/apis/uptimemonitoring-com-api/llms.txt) · [OpenAPI document](https://skmtc.dev/uptimemonitoring/apis/uptimemonitoring-com-api/revisions/ddcb2a8bc70f?raw)
