Docs · Calendar

Plan work across people and bots.

Calendar is live and included in core. Every inbox has one, with a default timezone and the same access boundaries as its inbox.

OverviewCalendarProduct overview

Start in the console

Open an inbox's Calendar tab or the workspace Calendar. Choose week or month, set the inbox timezone and review the awaiting-reply badge. Workspace views show only calendars you may read.

Events, recurrence and invitations

Create an event with a title, local start and end, an IANA timezone such as America/Los_Angeles, and optional attendees. Add an rrule for a recurring series. Reuse client_id for an identical retry. Set send_invites: true to send standard iCalendar invitations through the existing mail path; sending permissions and contact rules still apply.

Authenticated inbound invites appear on the receiving inbox's calendar. RSVP with accepted, tentative or declined. Only an organizer can change or cancel an event; updates use the current revision to detect conflicting edits.

Calendar API and MCP

API paths below are relative to https://api.emlbot.com. URL-encode the inbox ID. Use calendar.read, calendar.write or calendar.delete as appropriate; inbox scope and clearance still apply.

ActionAPIMCP tool
List eventsGET /v0/inboxes/{inbox}/calendar/eventslist_calendar_events
Create an eventPOST /v0/inboxes/{inbox}/calendar/eventscreate_calendar_event
RSVPPOST /v0/inboxes/{inbox}/calendar/events/{id}/rsvprespond_calendar_event
Free/busyPOST /v0/calendar/free-busycalendar_free_busy
Find and optionally book a slotPOST /v0/calendar/find-timefind_calendar_time
Create or rotate a private feedPOST /v0/inboxes/{inbox}/calendar/subscriptionscreate_calendar_subscription

Calendar notices

Subscribe to calendar.event.starting, calendar.event.ending and calendar.event.responded. The minute scheduler delivers scheduled notices after the boundary, never early. Cancelled events do not produce starting or ending notices. Matching bot wakes follow current authorization.

Tasks and human assignment

Tasks with due_at appear on the same views. Set reminder_minutes for a due-soon reminder; assigned open tasks also produce an overdue notice. task.due_soon and task.overdue go to the current authorized assignee. Closing, cancelling, reassigning or rescheduling invalidates queued reminders.

Owners and admins can enable Task manager for a member in Settings > Members. Authorized people can assign bots or people, set priority and due dates, and drag a task to another day or use Reschedule. Current clearance and tasks.assign rules apply.

An active, authorized workspace person can email a bot with subject task: Review the proposal due Friday !high. The receiving bot becomes the assignee; the due time is 5 p.m. in that inbox's timezone. Verified ingress authentication is required: arbitrary From text or instructions inside a forwarded message cannot grant permission.

Internal availability and booking

Free/busy accepts up to 50 active workspace member IDs and a UTC range of up to 31 days. Results contain member IDs and busy intervals only, including across event-detail clearance levels. This checks calendars held in EMLbot, not outside calendars. Find-time adds a duration and returns common slots; optional booking requires calendar read and write access, plus mail permissions if sending invites. Atomic revision checks prevent stale bookings; identical client_id retries return the original event.

Subscribe with a private ICS link

Create a feed from the inbox calendar, then add it to a calendar app that supports URL subscriptions. The private link is shown once. Keep it private; it grants the ability to request that feed while its creator still has access. Creating another link rotates the old one, and Revoke disables it. Access is rechecked on every fetch; loss of permission or a revoked key denies the feed. External apps choose their own refresh schedule.