Skip to content

Scheduling

Apple Calendar
API integration

Ship Scheduling features without building the integration. Full Apple Calendar API access via Proxy and 10+ MCP-ready tools for AI agents — extend models and mappings to fit your product.

Talk to us
Apple Calendar

Use Cases

Why integrate with Apple Calendar

Common scenarios for SaaS companies building Apple Calendar integrations for their customers.

01

Offer scheduling for Apple-first users

Booking and scheduling platforms can let freelancers, consultants, and solopreneurs connect their iCloud Calendar to prevent double-booking. Truto abstracts away CalDAV, principal discovery, and partition routing so you can ship this without touching XML or .ics parsing.

02

Sync CRM meetings to personal iCloud calendars

CRMs used by real estate agents, agencies, and independent professionals can push deal-related meetings directly into a user's Apple Calendar and pull back manually-created events. This keeps the source of truth aligned without asking users to switch calendar providers.

03

Provision dedicated calendars for SaaS-generated events

ATSs, project tools, and coaching platforms can create a dedicated calendar inside a user's iCloud account (e.g., 'Interviews' or 'Client Sessions') to isolate app-generated events from personal ones. This keeps the user's main calendar clean and gives your product a clear ownership boundary.

04

Enable personal availability shadowing for enterprise users

Productivity and calendar tools can let users connect their personal Apple Calendar to block time on their work calendar without exposing event details. This is a common ask for professionals who keep work on Google or Outlook but manage life on iCloud.

05

Automate time tracking from iCloud events

Time tracking and billing tools can read events from a consultant's Apple Calendar and turn them into suggested time entries. Truto handles polling and normalization so your app receives clean event objects instead of raw iCalendar payloads.

What You Can Build

Ship these features with Truto + Apple Calendar

Concrete product features your team can ship faster by leveraging Truto’s Apple Calendar integration instead of building from scratch.

01

Two-way event sync with iCloud

Create, read, update, and delete events on a user's Apple Calendar and mirror user-initiated changes back into your product.

02

Automatic calendar provisioning

Create a dedicated sub-calendar inside the user's iCloud account at connection time so all app-generated events live in an isolated, brand-owned space.

03

Multi-calendar selector at connect time

List all calendars on the user's iCloud account and let them choose which ones to read from or write to during onboarding.

04

Calendar lifecycle management

Rename, update, or delete the calendars your app provisions so users can clean up or rebrand without leaving your product.

05

Event lookup and enrichment

Fetch a single event by ID to enrich records in your CRM, ATS, or PM tool with structured meeting metadata.

06

Server and account health checks

Resolve the user's principal, calendar home, and server partition on connection to confirm the account is reachable and correctly routed before you start syncing.

SuperAI

Apple Calendar AI agent tools

Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.

get_single_apple_calendar_principal_by_id

Return the current-user-principal of the connected iCloud account via CalDAV PROPFIND on the root resource (207 Multi-Status XML containing e.g. /200385701/principal/). Truto runs this when the account connects and stores the number, so other tools never need it as input.

get_single_apple_calendar_calendar_home_by_id

Return the calendar-home-set of the connected iCloud account via CalDAV PROPFIND (207 Multi-Status XML), e.g. https://p34-caldav.icloud.com:443/200385701/calendars/. Informational only: every other tool already works on caldav.icloud.com. The iCloud account number is found and stored when the account connects. The id argument is not used: the account always has exactly one calendar home, so any value (for example "me") returns it.

list_all_apple_calendar_calendars

List all calendars of the connected iCloud account via CalDAV PROPFIND (207 Multi-Status XML). Each calendar's href ends in its id; props include displayname, calendar-color, calendar-description, supported-calendar-component-set, getctag and sync-token. The iCloud account number is found and stored when the account connects, so no user id is needed.

get_single_apple_calendar_calendar_by_id

Get a single Apple Calendar calendar by id via CalDAV PROPFIND. Returns displayname, calendar-color, calendar-description, supported-calendar-component-set, getctag and sync-token. Required: id. The iCloud account number is found and stored when the account connects, so no user id is needed.

create_a_apple_calendar_calendar

Create a new Apple Calendar (iCloud) calendar via CalDAV extended MKCOL. calendar_id must be a new UUID. Send the mkcol body (see its example) with a display name. Required: calendar_id.

update_a_apple_calendar_calendar_by_id

Update an Apple Calendar (iCloud) calendar's properties, such as its name, color or description, via CalDAV PROPPATCH. Send the change in the propertyupdate body (see its examples). Returns Apple's 207 Multi-Status response, which shows a status for each property. Required: id (the calendar id from the calendar list).

delete_a_apple_calendar_calendar_by_id

Delete an Apple Calendar calendar and all its events. Returns an empty 204 response on success. Required: id. This operation is irreversible. The iCloud account number is found and stored when the account connects, so no user id is needed.

apple_calendar_calendars_search

Run a CalDAV REPORT on one Apple Calendar (iCloud) calendar. For a plain list of events in a date range, use list_all_apple_calendar_events instead. Send exactly one body key: calendar-query (find events by time range, returns each event's iCalendar data), calendar-multiget (fetch specific events by href) or sync-collection (changes since the last sync token; iCloud has no webhooks). The body is the XML report written as JSON (element names as keys, attributes in "_attributes", text in "_text"); see each key for a working example. Returns the 207 Multi-Status response as JSON. Required: calendar_id.

create_a_apple_calendar_event

Create a new Apple Calendar (iCloud) event. Send the full event as iCalendar text in ics (see its example): SUMMARY is the title, DTSTART and DTEND are the times. event_id must be a new UUID WITHOUT the .ics suffix (.ics is added for you; passing it creates an id ending in .ics.ics). The UID line inside ics must be exactly event_id. iCloud does not check either rule, so get them right. If an event with this id already exists, Apple returns 412 and nothing is overwritten. Through the Truto Proxy API, send the iCalendar text as the raw request body with Content-Type: text/calendar and the query parameter truto_body_passthrough=true. Required: calendar_id, event_id, ics.

get_single_apple_calendar_event_by_id

Get a single Apple Calendar (iCloud) event. The result is the event's full iCalendar (VCALENDAR) text. The id is the event file name including the .ics suffix, as returned in the hrefs from list_all_apple_calendar_events. Required: calendar_id, id.

update_a_apple_calendar_event_by_id

Update an existing Apple Calendar (iCloud) event by replacing its whole iCalendar text. iCloud has no partial update: first get the event with get_single_apple_calendar_event_by_id (this also confirms it exists), change only the lines you need, keep the same UID, and send the full text back in ics. Use the id exactly as returned by list events, including the .ics suffix. Note: iCloud treats an update to an id that does not exist as a create, so always get the event first. Through the Truto Proxy API, send the iCalendar text as the raw request body with Content-Type: text/calendar and the query parameter truto_body_passthrough=true. Required: calendar_id, id (the event file name including .ics), ics.

delete_a_apple_calendar_event_by_id

Delete an Apple Calendar event via HTTP DELETE on its .ics resource URL. Use If-Match with the event ETag for safe conditional deletion. Required: calendar_id, id (filename including .ics suffix). The iCloud account number is found and stored when the account connects, so no user id is needed.

list_all_apple_calendar_events

List events in one Apple Calendar (iCloud) calendar between start and end, via a CalDAV calendar-query REPORT. Returns one item per event. In each item, href ends with the event id (for example 3c3d6703-8e4d-4968-9186-cda04a40c796.ics) to use with the get, update and delete event tools, and propstat.prop.calendar-data._cdata is the event's iCalendar text: SUMMARY is the title, DTSTART and DTEND are the start and end, plus LOCATION, DESCRIPTION and ATTENDEE lines. Recurring events are expanded: each occurrence in the range is its own VEVENT with a RECURRENCE-ID, and iCloud returns at most about 50 occurrences per recurring event, so keep the range tight. start and end must be UTC in the form YYYYMMDDTHHMMSSZ (for example 20261105T000000Z); a plain date such as 2026-11-05 is not valid. With no start and end, every event is returned. limit is ignored: iCloud returns all matching events at once. Required: calendar_id.

get_single_apple_calendar_server_by_id

Get the capabilities of the connected Apple Calendar (iCloud) account's calendar home via CalDAV PROPFIND: the reports it supports (supported-report-set), what the account may do there (current-user-privilege-set) and storage quota used and available. Does not return calendars or events.

Why Truto

Why use Truto’s MCP server for Apple Calendar

Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 950+ integrations.

01

Auto-generated, always up to date

Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.

02

Fine-grained access control

Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.

03

Multi-tenant by design

Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.

04

Works with every MCP client

Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.

05

Built-in auth, rate limits, and error handling

Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.

06

Expiring and auditable servers

Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.

For your product

Ship Apple Calendar tools in your product

Give the AI in your product access to each customer’s own Apple Calendar account, with one MCP server per connected account.

Elaichi

For your own team

Use Apple Calendar in ChatGPT or Claude yourself

Connect your company’s Apple Calendar once, then ask in the AI you already use, with exactly your own access.

From the team behind Truto · 14-day free trial

How It Works

From zero to integrated

Go live with Apple Calendar in under an hour. No boilerplate, no maintenance burden.

01

Link your customer’s Apple Calendar account

Use Truto’s frontend SDK to connect your customer’s Apple Calendar account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.

02

We handle authentication

Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.

03

Call our API, we call Apple Calendar

Truto’s Proxy API is a 1-to-1 mapping of the Apple Calendar API. You call us, we call Apple Calendar, and pass the response back in the same cycle.

04

Unified response format

Every response follows a single format across all integrations. We translate Apple Calendar’s pagination into unified cursor-based pagination. Data is always in the result attribute.

FAQs

Common questions about Apple Calendar on Truto

Authentication, rate limits, data freshness, and everything else you need to know before you integrate.

How does authentication with Apple Calendar work?

Apple Calendar uses CalDAV, which authenticates with the user's Apple ID and an app-specific password generated from appleid.apple.com. Truto handles the connection flow and the underlying CalDAV auth so your app only deals with a standard connected account.

Does Apple Calendar support webhooks for real-time updates?

No. Apple Calendar has no webhook mechanism. Data freshness relies on polling the CalDAV sync-collection endpoint, which Truto manages on your behalf so you can consume changes without implementing the polling loop yourself.

Do I need to parse iCalendar (.ics) or CalDAV XML?

No. Even though Apple Calendar is CalDAV under the hood, Truto exposes calendars and events as normalized JSON via tools like list_all_apple_calendar_calendars, create_a_apple_calendar_event, and update_a_apple_calendar_event_by_id. You never touch VCALENDAR, VEVENT, or PROPFIND XML.

How does Truto handle iCloud's partitioned hosts?

iCloud shards accounts across partition hosts (e.g., p34-caldav.icloud.com) that must be discovered per user. Truto resolves the principal, calendar home, and server via get_single_apple_calendar_principal_by_id, get_single_apple_calendar_calendar_home_by_id, and get_single_apple_calendar_server_by_id so requests are always routed to the correct partition.

What operations are supported on events?

You can create, retrieve, update, and delete events on any calendar the user has write access to via create_a_apple_calendar_event, get_single_apple_calendar_event_by_id, update_a_apple_calendar_event_by_id, and delete_a_apple_calendar_event_by_id. Truto handles the underlying ETag and conditional PUT logic so concurrent updates don't clobber each other.

Can I search calendars or manage multiple calendars per user?

Yes. Use list_all_apple_calendar_calendars to enumerate all calendars on a user's account, apple_calendar_calendars_search to filter them, and create_a_apple_calendar_calendar / update_a_apple_calendar_calendar_by_id / delete_a_apple_calendar_calendar_by_id to manage app-owned calendars in the user's iCloud account.

Apple Calendar

Get Apple Calendar integrated into your app

Our team understands what it takes to make a Apple Calendar integration successful. A short, crisp 30 minute call with folks who understand the problem.