Skip to main content
An Event is a scheduled happening — online, physical, or hybrid — that users can RSVP to. Events support hosts, capacity limits, invite-only or space-scoped visibility, a guest list, a single cover image, and a multi-image gallery. RSVP counts are denormalized onto the event so every read carries up-to-date going / maybe / not_going totals without an extra query. Events belong to the events bundle. They work standalone, but some behaviors depend on other bundles: space-scoping and members visibility require the spaces bundle, cover/gallery images require the files-images bundle, and invite/update/cancel notifications require the notifications bundle. When a dependency is absent, that specific behavior is rejected or skipped — the rest of the events surface keeps working.

Event

Type

The type field controls which location fields are required on create and update:

Visibility

Visibility is enforced server-side on every read — an event you can’t see returns 404 (its existence is never leaked). In every case, a host (a user whose ID is in hostIds) can always see the event regardless of visibility, and service/master keys bypass visibility entirely.

Capacity & RSVP rules

  • An RSVP can be going, maybe, or not_going. There is one RSVP per user per event.
  • RSVPs close at startTime and are rejected on cancelled events.
  • A "maybe" RSVP is rejected when allowMaybe is false.
  • A transition into going is rejected with event/full when rsvpCounts.going has reached capacity. Capacity is checked under a row-level lock, so concurrent RSVPs can never oversell the event.