Site
Connect to anonymous site-wide presence
GET /api/site/presence
Same-origin WebSocket only. Send SitePresenceReportV1 text frames (maximum 512 characters) at most five times per second with a 25-second heartbeat. A tab-scoped UUID session produces a hashed public ID that survives navigation; the session is never broadcast. Snapshots follow SitePresenceSnapshotV1. No URLs, content, playback, names, or free text are accepted. Maximum 200 connections; reports expire after 75 seconds and are swept every 30 seconds. This ephemeral coordination channel is independent of the radio room and canonical content.
Request policy
- Operation
joinSitePresence- Access
- anonymous
- Automatic retries
- None
- Redirects
- Returned to the caller without following
- Request body limit
- No request body
- Pagination
- No collection iterator
Parameters
No path or query parameters.
Responses
101
WebSocket connected; send initial presence frame
403
Origin rejected
405
GET required
426
WebSocket required
429
Admission limited; Retry-After: 60
503
Presence unavailable or full
Examples
Examples use synthetic fixture values. Replace fixture identifiers with public IDs returned by the service. Request bodies and precise locations are transient; keep them out of logs.
curl
curl --fail-with-body --max-time 30 --max-filesize 16777216 --request GET 'https://irvinebroque.com/api/site/presence'TypeScript
import { PublicApi } from '@irvinebroque/public-api';
const api = new PublicApi();
const result = await api.site.presenceProbe({});
console.log(result.status, result.headers.get('content-type')); // Keep transient capabilities in memory.CLI
irvinebroque site presence-probeThe SDK preserves status, headers, and the server envelope. A 304 has no fresh body. Errors retain structured problem details; ordinary error messages omit response details. Responses are limited to 16 MiB and requests time out after 30 seconds by default.