What counts as a view
An event is recorded under exactly the same rule that increments a link’s view counter, so the event list and the counter always agree:- Only the deck’s entry load counts — asset fetches (images, styles, sub-pages of a multi-file deck) never do, and neither do
HEADrequests or password-gate challenges. - Repeat opens from the same browser inside the de-dupe window (
VIEW_DEDUPE_WINDOW_MINUTES, default 10 minutes) collapse into one view: reloads, second tabs, and browser prefetching don’t inflate the list. Cookie-less clients (curl, SDKs) count every fetch. - Your own dashboard previews are excluded — previewing your deck never shows up in its stats.
What each event stores — and what it never stores
Each view event carries exactly four facts:
Just as important is what is never stored, on any edition, self-hosted included:
- No IP addresses.
- No geolocation.
- No full referrer URLs — the referring page’s path and query string are discarded before anything is written; only the host survives.
- No raw User-Agent strings — only the coarse family, without versions.
Placement labels (?p=)
Append ?p=<label> to any share link to tag where you placed it:
A–Z a–z 0–9 . _ -; anything else is stored as no label.
Reading the stats
- Dashboard — on the deck’s page, open a link’s menu and pick View activity. Revoked links keep their history.
- CLI —
slideless views DECK_ID TOKEN_ID(omit the token id to list the deck’s links first;--allfollows pagination,--jsonfor scripts). - API —
GET /api/v1/presentations/{id}/tokens/{tokenId}/views, cursor-paginated, newest first. Reading a link’s views takes the same permission as listing the deck’s links. - MCP — the
slideless_list_token_viewstool.
Retention
View events are pruned nightly afterVIEW_EVENTS_RETENTION_DAYS (default 90). Set it to 0 to keep events forever. The per-link counters (accessCount, last opened) are separate and are never pruned.