Profile
id^prf_[0-9a-fA-F]{32}…everyday_id^[A-Za-z0-9_.-]{3,}$Profile handle used in links. This is not a resource ID; use the profile id (prf_...) in ID fields.
display_namedescriptionprofile_image_urlheader_image_urlis_privatedefault_event_duration_minutescreated_atupdated_atProfileCreate
everyday_id^[A-Za-z0-9_.-]{3,}$ · requiredProfile handle used in links. This is not a resource ID; use the profile id (prf_...) in ID fields.
display_namedescriptionprofile_image_urlheader_image_urlis_privateorganization_id^org_[0-9a-fA-F]{32}…Optional organization from GET /v1/organizations. When omitted, the caller's single active owned organization is used.
ProfileUpdate
display_namedescriptionprofile_image_urlheader_image_urlis_privateEvent
id^evt_[0-9a-fA-F]{32}…profile_id^prf_[0-9a-fA-F]{32}…Owning profile ID. Null when the profile is no longer visible to the caller.
titledescriptionlocationstart_timeend_timestart_timezoneend_timezonerecurrence_rulestatusslugimage_urlis_all_dayis_privaterequire_rsvprequire_paymentcancellation_reasoncancelled_atis_rescheduledcreated_atupdated_attransparencyRFC 5545 busy/free behavior: opaque blocks time; transparent does not.
EventCreate
titleprofile_id^prf_[0-9a-fA-F]{32}…Required when calling POST /v1/events; inferred from path when calling POST /v1/profiles/{profile_id}/events.
descriptionlocationstart_time^\d{4}-\d{2}-\d{2}[T…Event start time. Recommended: a naive local time (no offset) interpreted in start_timezone — e.g. "2026-06-06T09:30:00". An offset-bearing RFC 3339 value (e.g. "2026-06-06T09:30:00-04:00") is also accepted. Must be sent together with start_timezone. Omit for all-day events (use start_date).
end_time^\d{4}-\d{2}-\d{2}[T…Event end time, same formats as start_time. When present, must be sent together with end_timezone. Omit for all-day events (use end_date).
start_timezoneIANA timezone name (e.g. "America/New_York") for start_time. Required. Used for display, outbound calendar sync, and recurrence expansion; it does not reinterpret an explicit offset in start_time. Must not be null.
end_timezoneIANA timezone name for end_time. Independent of start_timezone (e.g. a NYC→LA flight). Must be sent together with end_time and must not be null. When omitted on create, the platform fills it from start_timezone.
start_date^\d{4}-\d{2}-\d{2}$All-day start date (YYYY-MM-DD, date only). Required when is_all_day is true; do not send with start_time/end_time.
end_date^\d{4}-\d{2}-\d{2}$All-day end date (YYYY-MM-DD), EXCLUSIVE — the event spans up to but not including this date. Optional; defaults to start_date + 1 day (single day) and must be after start_date (multi-day allowed).
recurrence_ruleSingle RRULE text (optional RRULE: prefix), or null to clear recurrence. Must produce a first occurrence within a bounded work allowance using the effective event start. Invalid or excessively costly rules return 400 invalid_recurrence_rule. Advanced rules such as BYDAY=2TU are supported.
slugURL slug for the event. Optional — when omitted the platform derives one from the title and start time (evaluated in start_timezone). Reserved values (history, previous, s) are rejected.
image_urlis_all_dayis_privaterequire_rsvprequire_paymenttransparencyRFC 5545 busy/free behavior: opaque blocks time; transparent does not.
EventUpdate
titledescriptionlocationstart_time^\d{4}-\d{2}-\d{2}[T…Event start as an RFC 3339 date-time. When present, must be sent together with start_timezone.
end_time^\d{4}-\d{2}-\d{2}[T…Event end as an RFC 3339 date-time. When present, must be sent together with end_timezone.
start_timezoneIANA timezone name for start_time. Required when start_time is present (they must travel together). Used for display, outbound calendar sync, and recurrence expansion. Must not be null. Omit to leave unchanged.
end_timezoneIANA timezone name for end_time. Independent of start_timezone. Required when end_time is present. Must not be null. Omit to leave unchanged; no cascade from a start_timezone change.
start_date^\d{4}-\d{2}-\d{2}$All-day start date (YYYY-MM-DD, date only). Required when is_all_day is true; do not send with start_time/end_time.
end_date^\d{4}-\d{2}-\d{2}$All-day end date (YYYY-MM-DD), EXCLUSIVE — the event spans up to but not including this date. Optional; defaults to start_date + 1 day (single day) and must be after start_date (multi-day allowed).
recurrence_ruleSingle RRULE text (optional RRULE: prefix), or null to clear recurrence. Must produce a first occurrence within a bounded work allowance using the effective event start. Invalid or excessively costly rules return 400 invalid_recurrence_rule. Advanced rules such as BYDAY=2TU are supported.
slugimage_urlis_all_dayis_privaterequire_rsvptransparencyRFC 5545 busy/free behavior: opaque blocks time; transparent does not.
EventReschedule
start_time^\d{4}-\d{2}-\d{2}[T… · requiredNew event start as an RFC 3339 date-time. Must be sent together with start_timezone.
end_time^\d{4}-\d{2}-\d{2}[T…New event end as an RFC 3339 date-time. When present, must be sent together with end_timezone.
start_timezoneIANA timezone name for the new start_time. Required (reschedule always sets start_time). Must not be null.
end_timezoneIANA timezone name for the new end_time. Independent of start_timezone. Required when end_time is present. Must not be null.
Series
id^ser_[0-9a-fA-F]{32}…profile_id^prf_[0-9a-fA-F]{32}…Owning profile ID. Null when the profile is no longer visible to the caller.
nameslugdescriptionis_privatecreated_atupdated_atSeriesCreate
nameslugdescriptionis_privateRsvp
id^rsvp_[0-9a-fA-F]{32…event_id^evt_[0-9a-fA-F]{32}…Event containing this RSVP.
attendee_emailattendee_first_nameattendee_last_namestatusrsvp_typenum_guestscreated_atupdated_atRsvpCreate
statusattendee_emailattendee_first_nameattendee_last_namersvp_typenum_guestsRsvpStats
event_id^evt_[0-9a-fA-F]{32}…goingmaybenot_goingwaitlisttotal_attendeesRsvpSettings
enable_capacity_limitcapacity_limitallow_waitlistallow_multiple_attendeesallow_notificationsRsvpSettingsUpdate
enable_capacity_limitcapacity_limitallow_waitlistallow_multiple_attendeesallow_notificationsCalendar
id^cal_[0-9a-fA-F]{32}…namedescriptioncoloris_defaultcreated_atupdated_atCalendarEvent
id^cev_[0-9a-fA-F]{32}…calendar_id^cal_[0-9a-fA-F]{32}…Personal calendar containing this event.
titledescriptionlocationstart_timeend_timestart_timezoneend_timezoneis_all_dayrecurrence_rulestatuscreated_atupdated_attransparencyRFC 5545 busy/free behavior: opaque blocks time; transparent does not.
CalendarEventCreate
titledescriptionlocationstart_time^\d{4}-\d{2}-\d{2}[T…Event start time. Recommended: a naive local time (no offset) interpreted in start_timezone — e.g. "2026-06-06T09:30:00". An offset-bearing RFC 3339 value is also accepted. Must be sent together with start_timezone. Omit for all-day events (use start_date).
end_time^\d{4}-\d{2}-\d{2}[T…Event end time, same formats as start_time. When present, must be sent together with end_timezone. Omit for all-day events (use end_date).
start_timezoneIANA timezone name for start_time. Required. Used for display and recurrence; not used to reinterpret an explicit offset. Must not be null.
end_timezoneIANA timezone name for end_time. Independent of start_timezone. Required when end_time is present. Must not be null.
start_date^\d{4}-\d{2}-\d{2}$All-day start date (YYYY-MM-DD, date only). Required when is_all_day is true; do not send with start_time/end_time.
end_date^\d{4}-\d{2}-\d{2}$All-day end date (YYYY-MM-DD), EXCLUSIVE. Optional; defaults to start_date + 1 day (single day) and must be after start_date (multi-day allowed).
is_all_dayrecurrence_ruleSingle RRULE text (optional RRULE: prefix), or null to clear recurrence. Must produce a first occurrence within a bounded work allowance using the effective event start. Invalid or excessively costly rules return 400 invalid_recurrence_rule. Advanced rules such as BYDAY=2TU are supported.
transparencyRFC 5545 busy/free behavior: opaque blocks time; transparent does not.
CalendarEventUpdate
titledescriptionlocationstart_time^\d{4}-\d{2}-\d{2}[T…Event start time (naive local + start_timezone recommended; offset-bearing also accepted). When present, must be sent together with start_timezone.
end_time^\d{4}-\d{2}-\d{2}[T…Event end time, same formats as start_time. When present, must be sent together with end_timezone. Omit for all-day events (use end_date).
start_timezoneIANA timezone name for start_time. Required when start_time is present. Used for display and recurrence; not used to reinterpret an explicit offset. Must not be null.
end_timezoneIANA timezone name for end_time. Independent of start_timezone. Required when end_time is present. Must not be null.
start_date^\d{4}-\d{2}-\d{2}$All-day start date (YYYY-MM-DD, date only). Required when is_all_day is true; do not send with start_time/end_time.
end_date^\d{4}-\d{2}-\d{2}$All-day end date (YYYY-MM-DD), EXCLUSIVE. Optional; defaults to start_date + 1 day (single day) and must be after start_date (multi-day allowed).
is_all_dayrecurrence_ruleSingle RRULE text (optional RRULE: prefix), or null to clear recurrence. Must produce a first occurrence within a bounded work allowance using the effective event start. Invalid or excessively costly rules return 400 invalid_recurrence_rule. Advanced rules such as BYDAY=2TU are supported.
transparencyRFC 5545 busy/free behavior: opaque blocks time; transparent does not.
Subscription
id^sub_[0-9a-fA-F]{32}…profile_id^prf_[0-9a-fA-F]{32}…Profile source for a profile subscription; otherwise null. A null value for a profile subscription means the source is no longer visible. Use subscription_type to identify the source type.
series_id^ser_[0-9a-fA-F]{32}…Series source for a series subscription; otherwise null. A null value for a series subscription means the source is no longer visible. Use subscription_type to identify the source type.
subscription_typeis_activeaccess_validinclude_personal_calendarcreated_atupdated_atSubscriptionCreate
subscription_typeprofile_id^prf_[0-9a-fA-F]{32}…series_id^ser_[0-9a-fA-F]{32}…include_personal_calendarexternal_calendar_idsConnected external calendars returned by GET /v1/external-calendars. Personal cal_ IDs are not accepted. Omission means no external targets; personal calendar inclusion defaults to true.
consolidateExplicitly adopt matching manual/child-series sync intent into this subscription. Defaults to false. May retire redundant child subscriptions.
Follow
id^fol_[0-9a-fA-F]{32}…following_typetarget_id^(prf|ser|evt)_[0-9a…Prefixed identifier of the followed profile, series, or event. Null only when the original target is no longer visible.
created_atFollowCreate
following_typetarget_id^(prf|ser|evt)_[0-9a… · requiredPrefixed ID of the target resource.
JsonRpcResponse
jsonrpcRequest id echoed from the JSON-RPC request. May be a string, integer, or null.
resultMethod-specific result payload. Present on successful responses; mutually exclusive with error.
Present on failed responses; mutually exclusive with result.
SubscriptionPage
has_morenext_cursorCalendarEventPage
has_morenext_cursorSeriesDeletion
member_countTotal events that were tagged in this series at delete time.
deleted_event_countEvents permanently deleted (only nonzero when cascade_exclusive_events=true).
preserved_event_countEvents that remain on the profile after deletion.
SeriesDeletionPreview
series_namemember_countTotal events tagged in this series.
exclusive_countEvents that would be deleted in cascade mode.
shared_countEvents that would be preserved (also tagged in other series).
member_recurring_countexclusive_recurring_countshared_recurring_countSearchItem
typeid^(evt|prf|ser)_[0-9a…titledescriptionrankimage_urlslugprofile_handle^[A-Za-z0-9_.-]{3,}$date_infoClaimConsumer
consumerName^[a-zA-Z0-9_-]{1,128… · requiredZuplo consumer name (request.user.sub on monetized routes).
ExternalCalendar
id^xcal_[0-9a-fA-F]{32…namedescriptioncolorcan_edittime_zoneis_primarycreated_atExternalCalendarPage
has_morenext_cursorOrganization
id^org_[0-9a-fA-F]{32}… · requiredPublic organization ID accepted by profile creation.
namehandleroleThe authenticated caller's role in this organization.
is_defaultTrue only when this is the caller's single active owned organization and will be used when profile creation omits organization_id.
ProfileCreated
organization_id^org_[0-9a-fA-F]{32}… · requiredThe organization selected explicitly or resolved from the caller's owned default.
id^prf_[0-9a-fA-F]{32}…everyday_id^[A-Za-z0-9_.-]{3,}$Profile handle used in links. This is not a resource ID; use the profile id (prf_...) in ID fields.
display_namedescriptionprofile_image_urlheader_image_urlis_privatedefault_event_duration_minutescreated_atupdated_atAgendaWindow
dateend_datetimezonestartendAgendaSource
calendar_id^(?:cal|xcal)_[0-9a-… · requirednameproviderlast_sync_atstatusAgendaItem
occurrence_idIdentifies this occurrence using the event ID and original slot. No write endpoint accepts it.
calendar_id^(?:cal|xcal)_[0-9a-… · requiredevent_id^(?:cev|xcev)_[0-9a-… · requiredxcev_ IDs are read-only and stable while the stored row exists. Removing and reimporting an event may assign a new ID.
editableTrue only for non-recurring personal events, editable through the calendar-event PATCH route.
titlestartendlocal_startlocal_endis_all_daylocationbusyis_recurringprofilestart_dateAll-day events only; authoritative calendar date.
end_dateAll-day events only; exclusive end date.
descriptionPresent only with detail=full.
