TodayEventCancelledPayload today.event.cancelled@1

Generated at from openvibe-contracts v0.419.0 and openvibe-sdk v0.161.0.

Version
1.0.0
Owner
today
Visibility
first-party
Status
active
Compatibility
backward
Schema
https://openvibe.network/contracts/events/payloads/today.event.cancelled.v1.json

today.event.cancelled v1 (OpenVibe.Today server/events/store.js, written to its outbox in the same transaction as the change and published once per evt_ id). Its owner cancelled it: calendars that subscribe drop it (STATUS:CANCELLED), and OpenVibe.Network clears the followers' notices. Envelope: source today, subject and actor { type: user, id: <owner usr_> }, visibility internal, priority important. OpenVibe.Network tells a streamer's followers about a scheduled public or followers-only stream (STREAM_SCHEDULED) and clears those notices on cancel (server/notifications/events-consumer.js).

Fields

FieldTypeRequiredDescriptionConstraints
event_idstringyesToday's id for the calendar entry (not the envelope's evt_ id).
  • pattern ^tev_[0-9A-HJKMNP-TV-Z]{20}$
kindenumyes
  • one of "stream", "event"
channelstring | nullyesThe owner's Live username for a stream; null for an event.
  • maxLength 64
titlestringyes
  • minLength 1
  • maxLength 120
starts_atstringyes
  • format date-time
ends_atstring | nullyes
  • format date-time
tzstringyesThe IANA zone it was scheduled in.
  • minLength 1
  • maxLength 64
statusenumyes
  • one of "scheduled", "live", "done", "cancelled"
visibilityenumyes
  • one of "public", "followers"
urlstring | nullyesWhere it happens (a stream: its Live channel page).
  • pattern ^https://
  • format uri
  • maxLength 2048
seqintegeryesThe calendar SEQUENCE: up by one with every change.
  • minimum 0

Examples

From the contract's own test fixtures: valid ones validate, rejected ones must fail.

Valid: event
{
  "event_id": "tev_01JAB2C3D4E5F6G7H8J9",
  "kind": "event",
  "channel": null,
  "title": "Robot build, part 2",
  "starts_at": "2026-10-30T03:00:00.000Z",
  "ends_at": null,
  "tz": "America/Los_Angeles",
  "status": "cancelled",
  "visibility": "public",
  "url": null,
  "seq": 1
}
Valid: stream
{
  "event_id": "tev_01JAB2C3D4E5F6G7H8J9",
  "kind": "stream",
  "channel": "carol",
  "title": "Robot build, part 2",
  "starts_at": "2026-10-30T03:00:00.000Z",
  "ends_at": "2026-10-30T05:00:00.000Z",
  "tz": "America/Los_Angeles",
  "status": "cancelled",
  "visibility": "public",
  "url": "https://openvibe.live/@carol",
  "seq": 1
}
Rejected: evt-id
{
  "event_id": "evt_01JAB2C3D4E5F6G7H8J9K0MNPQ",
  "kind": "stream",
  "channel": "carol",
  "title": "Robot build, part 2",
  "starts_at": "2026-10-30T03:00:00.000Z",
  "ends_at": "2026-10-30T05:00:00.000Z",
  "tz": "America/Los_Angeles",
  "status": "cancelled",
  "visibility": "public",
  "url": "https://openvibe.live/@carol",
  "seq": 1
}
Rejected: owner-in-payload
{
  "event_id": "tev_01JAB2C3D4E5F6G7H8J9",
  "kind": "stream",
  "channel": "carol",
  "title": "Robot build, part 2",
  "starts_at": "2026-10-30T03:00:00.000Z",
  "ends_at": "2026-10-30T05:00:00.000Z",
  "tz": "America/Los_Angeles",
  "status": "cancelled",
  "visibility": "public",
  "url": "https://openvibe.live/@carol",
  "seq": 1,
  "owner_subject": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
}

Validate

const contracts = require('openvibe-contracts');
contracts.validate('today.event.cancelled@1', value);   // { valid, errors: [{ path, message }] }