TodayEventScheduledPayload today.event.scheduled@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.scheduled.v1.json
today.event.scheduled v1 (OpenVibe.Today server/events/store.js, written to its outbox in the same transaction as the change and published once per evt_ id). A person put a stream or an event on OpenVibe.Today's calendar (POST /api/v1/events or the schedule form). 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
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
event_id | string | yes | Today's id for the calendar entry (not the envelope's evt_ id). |
|
kind | enum | yes |
| |
channel | string | null | yes | The owner's Live username for a stream; null for an event. |
|
title | string | yes |
| |
starts_at | string | yes |
| |
ends_at | string | null | yes |
| |
tz | string | yes | The IANA zone it was scheduled in. |
|
status | enum | yes |
| |
visibility | enum | yes |
| |
url | string | null | yes | Where it happens (a stream: its Live channel page). |
|
seq | integer | yes | The calendar SEQUENCE: up by one with every change. |
|
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": "scheduled",
"visibility": "public",
"url": null,
"seq": 0
}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": "scheduled",
"visibility": "public",
"url": "https://openvibe.live/@carol",
"seq": 0
}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": "scheduled",
"visibility": "public",
"url": "https://openvibe.live/@carol",
"seq": 0
}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": "scheduled",
"visibility": "public",
"url": "https://openvibe.live/@carol",
"seq": 0,
"owner_subject": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('today.event.scheduled@1', value); // { valid, errors: [{ path, message }] }