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 pathPurposeFormat
GET /api/eventsPublished events, hours, announcements, and display-ready Pub contextJSON
GET /api/tendersActive, public tender directory entriesJSON
GET /api/now-playing/currentCurrent music state and connection updatesServer-Sent Events
GET /api/now-playing/setlistCursor-paged public track historyJSON
GET /api/setlist/:surfaceA selected public setlist summaryJSON
GET /api/screeningsExperimental possible movie nights and available soundtrack metadataJSON
GET /api/pub-specialsDisplay-ready food and drink specialsJSON
POST /api/feedbackSubmit one private patron feedback noteJSON

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:

FieldMeaning
todayEventsQualifying events for the current local day
weekEventsUpcoming qualifying events
announcementsCurrent public announcements
pubHoursWeekOpen or closed state and public hours by day
pubTenderDisplay-ready current tender context
slidesApproved announcement or tender cards for display rotation
lastUpdatedServer 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:

EventMeaning
trackThe current identified track, or an empty value when no current track should be shown
statusWhether live identification is currently available
pingA 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:

  • items for the current page of track metadata;
  • nextBefore for the next cursor, or an empty value at the end; and
  • limit for 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.

See Food and drink specials.

POST /api/feedback

Accepts one patron feedback submission when the feedback page is available.

FieldRequirement
messageRequired feedback text
ratingOptional whole-number rating from 1 through 5
nameOptional name supplied by the patron
contactOptional 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