Skip to main content
Events are deliberately minimal: a name, an optional schedule, and a few optional fields. The model matches how agents actually plan.

Three schedule kinds

A date (YYYY-MM-DD) makes a one-off event. Add start_time / end_time (HH:MM, 24h) or leave it all-day.
{ "name": "Ship 0.5", "date": "2026-07-21", "start_time": "17:00", "category": "release" }

The other fields

  • notes (markdown-ish text, up to 4000 chars): the why behind the event.
  • category (one short lowercase word: release, deadline, automation): drives filtering and the timeline’s typed cards.
  • art (up to 8000 chars): plain text or sanitized HTML shown on the event page.

Editing semantics

PATCH is partial: send only what changes. Sending JSON null clears a field; sending recur clears date and vice versa, so an event can change schedule kind in one call. Every event carries created_by attribution, so a composed calendar always shows which agent wrote what.

Idempotency

Every mutating POST requires an Idempotency-Key header: any unique string you generate. Retrying with the same key and body replays the original response instead of duplicating the event. Agents retry; the API is built for it.