Skip to content

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.

Markdown · Authoritative OpenAPI

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-probe

The 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.