Browse the manual
Calendar tools
Read work dates, prepare and save events, exchange ICS files and request exact approval for invitations and private feeds.
On this page
For: developers connecting an HTTP or MCP client. What you need: a connection delegated to an active staff member with Calendar permission and the required grants.
Calendar tools use the same permissions and actions as the browser. Read the Calendar manual for event timing, source dates and exchange behavior. The tool reference lists all 29 Calendar tools and routes.
Use calendar:read for reads and previews, calendar:prepare for ordinary saved changes, and calendar:execute for approval and sensitive execution. Both generic view tools use calendar:read. The person needs calendar.use; owned shared-calendar writes also require calendar.manage.
Personal calendars stay private to their owner. Shared readers cannot edit events. Guests cannot use Calendar. Current source-record access applies to every linked event and projected date.
Read a period
Call calendar_read, or GET /api/v1/calendar.
| Input | Meaning |
|---|---|
date |
Selected date as YYYY-MM-DD; defaults to today |
view |
month, week, day or agenda; defaults to month |
timezone |
Viewer time zone; defaults to the company time zone |
sources |
Up to 64 registered source keys; an empty array includes all permitted sources |
projects |
Up to 50 project IDs |
calendars |
Up to 100 permitted calendar IDs |
Read the returned data projection and its more flag. more: true means the bounded view is incomplete. Narrow the selection before exporting or claiming completeness.
calendar_calendars lists up to 100 accessible calendars. calendar_calendar_get returns one calendar and its current version. calendar_event_get returns one event and its current event and calendar versions.
calendar_lookups finds permitted users, teams, contacts or leads. Pass kind, optional search of up to 100 characters and up to 100 selected IDs. Results contain up to 150 choices.
Generic views_work_calendar and views_calendar_event use the record-view format. Their current record access still applies.
Preview and save an event
- Read the destination with
calendar_calendar_get. - Call
calendar_event_preparewith itscalendar_id,calendar_version,titleandtiming. - Show the normalized proposal to the person.
- Call
calendar_event_createwith those values and an idempotency key. - Keep the returned event
versionandcalendar_versionfor later changes.
Preparation validates and normalizes the event. It saves nothing, reserves no identifier and sends no mail.
| Event input | Meaning and limit |
|---|---|
title |
Required title, up to 255 characters through the API |
description |
Optional plain text, up to 20,000 characters |
location |
Optional plain text, up to 1,000 characters |
timing |
Required local dates or times, time zone and all-day flag |
attendees |
Up to 100 typed user, contact or lead identities, each with type and id |
reminder_offsets |
Up to 5 distinct integers from 0 to 40,320, in minutes before the start |
record_type and record_id |
Optional permitted parent; supply both or neither |
Supported parents are customer, lead, deal, project (engagement), task, financial document (document), purchase, board, board list, card, Doc and booking. Derived records such as files and comments cannot be parents. Linking grants no access.
Keep timing exact
Pass starts_local and ends_local as YYYY-MM-DDTHH:mm for a timed event. For all-day events, use YYYY-MM-DD dates. Always include timezone and boolean all_day.
Use recurrence: null for a single event. A recurrence has frequency (daily, weekly, monthly or yearly) and integer interval from 1 to 366. Weekly rules can include weekdays, using 1 for Monday through 7 for Sunday. An optional count from 1 to 5,000 or inclusive until date ends the rule; use only one.
An all-day end is exclusive. Timed repetitions retain their event-zone wall clock, month-end and leap-day rules. A daylight-saving gap advances the occurrence; a repeated time uses the earlier instant. See the worked rules.
Returned exceptions is an array. Each row names its original recurrence_id and its cancellation or replacement fields. Do not turn that array into an object keyed by dates. Omit it from ordinary create or update input; use calendar_event_exception for a change to one occurrence.
Change or cancel
calendar_event_update needs the event id, current version, calendar_version and changed fields inside input. calendar_event_cancel needs the same identities and versions. Both need an idempotency key.
Use calendar_event_exception for one original occurrence. Include its recurrence_id and an input containing cancelled, title or replacement timing. Replacement timing keeps the series zone and all-day policy, with recurrence: null. A moved occurrence keeps its original identity.
Calendar updates and archiving need their current version. Calendar creation accepts name, optional visibility (personal or shared) and readers with users and teams arrays. A personal calendar cannot keep reader grants.
Every ordinary write needs an idempotency key. Keep the same key and payload when a response is uncertain. Re-read after a version conflict and review the changed proposal before using a new key. A replay still checks current authority.
Import and export
calendar_import accepts calendar_id, calendar_version, ics and an idempotency key. Send the ICS text, up to 2,097,152 bytes and 500 event series. Parsing and saving are atomic. An unchanged UID reimport creates no duplicate; changed content updates that imported event in the same calendar.
Imported addresses remain data only. Import never sends mail, accepts an invitation or loads remote content.
For export, call calendar_export_prepare with the selected query. Show the returned review_url to the person. After approval, call calendar_export with the approval id, nonce and an idempotency key.
The result provides an expiring, single-use download_url and MCP resource_uri. They are temporary capabilities. Do not keep them in logs or history. Download still checks current access. An approved replay can provide a fresh link.
A selected repeating event exports its complete series. Repetitions can extend beyond the chosen period. A truncated view refuses export.
Create and revoke a feed
Call calendar_feed_create_prepare with filters. The person reviews ongoing disclosure and the named selection. After approval, execute calendar_feed_create with the approval id, nonce and an idempotency key.
The result's url appears once and is temporary output. Do not persist it in client history, logs or approval receipts. A lost-response replay returns url: null. Revoke the returned subscription id, then prepare a replacement.
calendar_subscriptions returns owned active feed metadata without its secret or address. If any selected calendar or project becomes unreadable, filters is null. The original selection stays in force. The owned subscription id still permits revocation. Null hides selection details and differs from empty filter arrays, which mean All. Feed creation still requires a non-null filters object.
Each person can keep up to 100 active feeds. Feed filters can include timezone; omitted values use the company time zone.
calendar_subscription_revoke permanently revokes one owned subscription. It needs its id and an idempotency key. A future grant or account reactivation does not restore a revoked feed.
Feeds select from 31 days before today until 335 days after today, excluding that final date in the saved zone. Current actor and record access apply on every fetch. Selected repeating events retain their complete series. See feed access and offboarding.
Review invitations and delivery
- Call
calendar_invitation_reviewwith the event ID and current event and calendar versions. - Read the frozen review with
calendar_invitation_get. - Call
calendar_invite_preparewith that preparation's ID. - Show the returned approval
review_urlto the person. - After approval, execute
calendar_invitewith the approvalid,nonceand an idempotency key. - Call
calendar_invitation_statuswith the invitation preparation's ID to check actual delivery results.
The invitation review lasts 15 minutes. Event content, recipients, sender, versions and permissions must still match. Client-supplied addresses cannot replace approved recipient identities.
pending means no invitation was queued. queued and uncertain do not confirm transport acceptance. delivered means the mail transport accepted the invitation; it does not prove inbox receipt.
A failed or uncertain delivery can expose a delivery-record ID in the result. To retry, call calendar_mail_retry_prepare with that ID. The person must approve the exact recipient, content, lifetime attempt count and duplicate warning. Execute calendar_mail_retry with the new approval's ID and nonce. Never retry an uncertain invitation automatically.
The original attempt may already have reached its recipient. A retry can send a duplicate. A new review is required after a change or lost authority; an approval cannot restore access.
For errors and approval expiry, use Errors, retries and revocation and Approve sensitive steps.
The read result includes the company’s week_start (monday or sunday). Week ranges use that choice. Agenda covers seven days.
Need help with the product?
Contact support