---
title: "Overlay Events"
method: GET
path: "/api/overlay/{token}/events"
---

# Overlay Events

`GET /api/overlay/{token}/events`

## Request

- Base URL: `https://sleipnir.tv` (the document declares no server; this is the origin it was published from)
- URL: `https://sleipnir.tv/api/overlay/{token}/events`
- Auth: none declared

Public, token-authed follow/sub event feed for the alert overlay.

PER-TOKEN SCOPED, read-only. The path {token} is the ONLY input that selects
a user: it is hashed and matched against User.overlay_token_hash server-side,
and EVERY query is filtered by PlatformEvent.user_id == that user. There is
no parameter (no user_id, no token override) by which the overlay JS could
read another user's events; `since` only filters by time. An unknown/revoked
token 404s before any event is read. Same per-IP + per-token rate limit and
tier gate as the chat feed.

Initial load (no `since`) returns an EMPTY list plus a cursor at the latest
event (or now), so a freshly-loaded browser source never replays old follows
as alerts; subsequent polls pass `since` and receive only newer events.

## Path parameters

- `token` string, required

## Query parameters

- `since` string, nullable

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/sleipnir/apis/relay-control-plane.md) · [All operations](https://skmtc.dev/sleipnir/apis/relay-control-plane/llms.txt) · [OpenAPI document](https://skmtc.dev/sleipnir/apis/relay-control-plane/revisions/79829f6945a4?raw)
