The Pub website and venue displays use a small set of public HTTP interfaces. This page documents only routes intentionally available without staff sign-in. Protected administration, device control, media ingest, and recovery interfaces are not public integration contracts.
Base URL: https://pub.ihnyc-rc.org
Route summary
| Method and path | Purpose | Format |
|---|---|---|
GET /api/events | Published events, hours, announcements, and display-ready Pub context | JSON |
GET /api/tenders | Active, public tender directory entries | JSON |
GET /api/now-playing/current | Current music state and connection updates | Server-Sent Events |
GET /api/now-playing/setlist | Cursor-paged public track history | JSON |
GET /api/setlist/:surface | A selected public setlist summary | JSON |
GET /api/screenings | Experimental possible movie nights and available soundtrack metadata | JSON |
GET /api/pub-specials | Display-ready food and drink specials | JSON |
POST /api/feedback | Submit one private patron feedback note | JSON |
The public website is the canonical consumer. If another service will depend on one of these routes, coordinate with Affective Technologies about compatibility and usage expectations rather than assuming an unversioned browser interface will never change.
Common behavior
- Times are represented in machine-readable form where clients need to calculate current state; presentation labels may also be included.
- Every returned field is public. Consumers should rely only on the fields documented here rather than treating incidental compatibility metadata as a stable contract.
- Clients should ignore unknown response fields so additions remain compatible.
- A validation problem returns a client-error status; a temporary service problem returns a server-error status.
- Consumers should preserve their last useful, validated presentation during a brief interruption and clearly label data that may be stale.
- Browser and edge caching may mean a public read is not an immediate reflection of a just-completed operator change.
GET /api/events
Returns the combined public model used by event pages and venue displays. The top-level response includes:
| Field | Meaning |
|---|---|
todayEvents | Qualifying events for the current local day |
weekEvents | Upcoming qualifying events |
announcements | Current public announcements |
pubHoursWeek | Open or closed state and public hours by day |
pubTender | Display-ready current tender context |
slides | Approved announcement or tender cards for display rotation |
lastUpdated | Server timestamp for freshness and display coordination |
An optional window query value asks for a different upcoming-event horizon within service limits. Event objects include public title and time information plus presentation hints needed by the website. See Calendar event source.
The complete update is validated before publication. Consumers should not attempt to reconstruct private source records from this presentation model.
GET /api/tenders
Returns the active public tender directory and a freshness timestamp. Entries contain only the profile information deliberately published on the tender page, such as display name, approved biography or image, and public contact or support links chosen for that profile.
Inactive staff records, schedules, private email addresses, availability, permissions, and operator notes are outside this response.
Live and historical setlist
GET /api/now-playing/current
Opens a Server-Sent Events stream. Public clients should handle these event types:
| Event | Meaning |
|---|---|
track | The current identified track, or an empty value when no current track should be shown |
status | Whether live identification is currently available |
ping | A keepalive timestamp used to detect a stale connection |
Clients should reconnect with normal backoff after interruption and ignore event types they do not understand.
GET /api/now-playing/setlist
Returns identified public track rows in reverse chronological order. limit controls the requested page size within service bounds. before accepts the previous response’s cursor to request older history.
The response uses:
itemsfor the current page of track metadata;nextBeforefor the next cursor, or an empty value at the end; andlimitfor the applied page size.
Track metadata can include title, artist, album, artwork, catalog identifier, start time, and a general source label when available. It does not contain a listener identity. See Setlist.
GET /api/setlist/:surface
Returns a prepared summary for an enabled public setlist surface. Current surface names include top-songs, vibe-compass, echo, tonight, wrapped, persona, and stories.
A surface may return unavailable until its first summary has been prepared. Consumers should not calculate or infer missing summaries from private operational data.
GET /api/screenings
Returns experimental screening records for the public Movie Nights page. A record can include the inferred title, date, artwork, and identified soundtrack tracks. Detection can be wrong; the archive is not an authoritative screening record. Operator notes and correction history are not public.
See Movie nights.
GET /api/pub-specials
Returns food and drink specials prepared for public presentation. A public item can include its title, description, price label, image, active state, timing information, and preparation details. Current and archived items may be requested by the public experience. Operators must treat every preparation field as public; protected editing and change history are excluded.
POST /api/feedback
Accepts one patron feedback submission when the feedback page is available.
| Field | Requirement |
|---|---|
message | Required feedback text |
rating | Optional whole-number rating from 1 through 5 |
name | Optional name supplied by the patron |
contact | Optional reply information supplied by the patron |
The service validates size and format, applies abuse controls, and returns a generic success response when the note is accepted. Validation failures do not create a partial note. Repeated or automated submissions may be rejected without revealing the internal decision thresholds.
Feedback is a one-way operational note, not a public comment or emergency-contact service. See Patron feedback for privacy guidance.
Security boundary
No staff credential is required for the routes on this page. That public status is deliberate and limited to the listed patron-facing reads and submission. It does not imply that a similarly named route, a write action, or a venue integration is public.
Do not probe undocumented routes, send production data to test a guess, or build against responses observed from a protected session. Authorized maintainers should use the private interface and operations documentation for non-public integration work.
Related: Architecture · Admin access