Event Status
The five state dimensions an Event carries, the values each uses, and who may trigger each transition
An Event has no single status field. It has five dimensions that move independently, and a page that shows one of them labelled "status" is showing a projection, not the whole state.
| Dimension | Values | Nature | Controlled by |
|---|---|---|---|
| Publication | draft, published, archived | Stored | Organizer |
| Schedule | scheduled, postponed, cancelled, completed | Stored | Organizer |
| Sales | scheduled, open, paused, closed | Derived, with one stored pause flag | Publication, moderation, schedule, the pause flag, and time |
| Visibility | public, unlisted, private | Stored | Organizer |
| Moderation | active, under_review, suspended, banned | Stored | Ulsav platform |
Pass sale state is a separate derived value. It is covered under Sales.
Publication
Diagram source
stateDiagram-v2
[*] --> draft: create
draft --> published: publish (validated)
draft --> [*]: delete
published --> archived: archive- Drafts are private work. A draft is organizer-visible only. Only a draft can be deleted.
- Publishing is a gate. It requires validation and records a
publishedrevision (Publishing rules). - There is no unpublish. A published Event never returns to
draft. - Archiving hides, it does not delete. An archived Event keeps its Registrations, Orders, and revisions. Organizer lists exclude archived Events unless the request asks for that status explicitly, and public reads treat them as absent.
Archiving is accepted on any published Event that is not suspended or banned, not only one that has ended or been cancelled. The schedule dimension is unchanged by the archive.
Schedule
Diagram source
stateDiagram-v2
[*] --> scheduled
scheduled --> postponed: postpone
scheduled --> scheduled: reschedule
postponed --> scheduled: resume
postponed --> postponed: reschedule
postponed --> postponed: postpone again
scheduled --> cancelled: cancel
postponed --> cancelled: cancel
scheduled --> completed: complete
cancelled --> [*]
completed --> [*]- Completed is explicit and late.
completeis an organizer action and is refused until the Event end has passed. Nothing completes an Event automatically, and there is no grace period. - Cancellation is irreversible. It stops sales, invalidates admission, and creates refund obligations described in Cancellation.
- Postponement keeps every Registration and Order. It records a
postponedrevision and a public notice. It does not open a refund window and does not queue a buyer notification. - Rescheduling is a dedicated workflow.
reschedulereplaces the Event dates, the complete EventSession plan, and any submitted Pass sale windows in one transaction. It records arescheduledrevision and a public notice.
There is no transition from completed or cancelled back into scheduled. A repeat edition is a new Event, usually in the same EventSeries.
Sales
Two derived values answer different questions.
The Event's sales state is derived from its stored lifecycle and the pause flag:
| State | When it applies |
|---|---|
closed | Publication is not published, the Event is suspended or banned, or the schedule is cancelled or completed |
paused | The Event's stored salesPaused flag is set |
scheduled | The Event is published, not moderated or paused, and now is before the start |
open | The Event is published, not moderated or paused, and now is at or after the start |
A Pass has four sale states, and it never stores any of them. They are derived from its sale window and whether it is still active:
| State | When it applies |
|---|---|
scheduled | The Pass is active and the sale window has not opened yet |
on_sale | The Pass is active and now is inside the window |
ended | The Pass is active and the window has closed |
cancelled | The Pass is inactive |
cancelled on a Pass is not an organizer transition. The only way a Pass becomes inactive today is Event cancellation, which deactivates every Pass of that Event.
There is no separate "sold out" state and no "paused" Pass state. Selling stops for two other reasons:
- The Event sales are paused. That is one stored flag on the Event, not a state per Pass.
- Capacity is exhausted. Checkout refuses the Order; the Pass itself still reads
on_sale.
Three consequences follow.
- A cancelled or archived Event cannot sell, whatever its Passes say.
- A suspended or banned Event cannot sell and cannot be mutated.
- Pausing stops new checkouts only. It does not cancel anything already paid.
Visibility
publicis listed in discovery and included in the sitemap.unlistedis reachable by direct URL but absent from discovery and the sitemap.privateis absent from public reads for everyone outside the Organization.
The default is public, and Event visibility covers the rest. Private is not an invitation system: no viewer authorization exposes a private Event through the public API.
Moderation
Moderation is Ulsav-controlled and separate from every organizer dimension. under_review is informational; suspended and banned override sales and mutation capability.
The rule that matters: moderation does not rewrite organizer lifecycle history. A suspended Event is still published, still has its schedule, and returns to exactly the state it held once the suspension is lifted.
Transitions and authority
| Transition | Trigger | Authority |
|---|---|---|
| Create a draft | Organizer action | events.create |
| Draft to published | Organizer action, after validation | events.publish |
| Published content edit | Organizer action | events.update; only the freely editable fields are accepted |
| Sales pause or resume | Organizer action | events.update |
| Schedule change (reschedule) | Organizer action | events.update |
| Scheduled or postponed to postponed | Organizer action | events.update |
| Postponed to scheduled | Organizer action with a new schedule | events.update |
| Scheduled or postponed to cancelled | Organizer action | events.update; irreversible |
| Scheduled or postponed to completed | Organizer action after the Event end | events.update |
| Published to archived | Organizer action at any time | events.update |
| Any to suspended or banned | Ulsav platform review | Platform only; never assignable to an Organization |
The catalog contains an events.cancel capability, but no operation checks it. Event cancellation checks events.update.
Reading state correctly
Three habits prevent most misreadings.
- Do not infer saleability from publication. A published Event whose Pass windows have all passed is unsellable.
- Do not infer admission from schedule. Admission also needs a confirmed Registration, active Participants, an accepting checkpoint, and passing requirements.
- Do not treat a derived value as something to set. If a Pass shows scheduled when you expect it on sale, change the window or the Event state.
Related
- Publishing rules — the validation behind publication
- Cancellation — what the cancelled state obliges
- Event visibility — reach rather than lifecycle