Developers

The Today API

JSON under /api/v1, calendars under /ics/, and three topics on OpenVibe.Events. A person is the session cookie, or a Network user token as a Bearer.

Read

GET /api/v1/events?channel=&from=&to=&limit=
Public events, soonest first (at most 100; cached 60 s).
GET /api/v1/events/:id
One event. A cancelled one answers with status: "cancelled"; a followers-only one is 404 unless it is yours.
GET /api/v1/me/agenda?days=14
Your events, reminded events and followed channels’ events (up to 60 days).
GET /api/v1/me/brief
Today’s brief: sections of cited lines.

Write (signed in)

POST /api/v1/events
{ kind, title, starts_at, ends_at?, tz, description?, visibility? }. Idempotency-Key is honoured; at most 60 future events per person.
PATCH /api/v1/events/:id
Change the title, times, zone, description or visibility (the calendar sequence goes up).
DELETE /api/v1/events/:id
Cancel it (again is fine).
POST /api/v1/events/:id/remind
{ minutes_before: 0–1440 }; DELETE removes it.

Calendar feeds

GET /ics/@<username>.ics
A channel’s public calendar (RFC 5545). Subscribe with webcal://openvibe.today/ics/@<username>.ics.
GET /e/:id.ics
One event, for "Add to calendar".
GET /ics/<token>.ics
Your private agenda; the link is on your agenda, and a new one replaces it at once.

Events

Today publishes today.event.scheduled, today.event.updated and today.event.cancelled, and listens for live.stream.started and live.stream.ended to mark a stream live and then ended. A refusal is 400 { code: "today.invalid", field, message }; others are today.too_many, today.cross_site, today.not_found.