---
title: Apple Calendar API Integration on Truto
slug: apple-calendar
category: Scheduling
canonical: "https://truto.one/integrations/detail/apple-calendar/"
---

# Apple Calendar API Integration on Truto



**Category:** Scheduling  
**Status:** Generally available

## MCP-ready AI tools

Truto exposes 13 tools for Apple Calendar that AI agents can call directly.

- **get_single_apple_calendar_principal_by_id** — Discover the current-user-principal for the authenticated Apple Calendar user via CalDAV PROPFIND on the root resource. Returns a CalDAV 207 Multi-Status XML document containing the user's principal path (e.g., /200385701/principal/). Use the principal path with calendar_home.get to discover the partition host and calendar home URL.
- **get_single_apple_calendar_calendar_home_by_id** — Discover the calendar-home-set URL for a principal via CalDAV PROPFIND. Returns a CalDAV 207 Multi-Status XML document containing the calendar home URL on the account's partition host (e.g., https://p34-caldav.icloud.com:443/200385701/calendars/). All subsequent calendar and event requests must use that partition host as base_url. Required: principal_path (from principals.get). Send XML body: <d:propfind xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:caldav"><d:prop><c:calendar-home-set/></d:prop></d:propfind>.
- **list_all_apple_calendar_calendars** — List all Apple Calendar calendars for a user via CalDAV PROPFIND. Returns: displayname, calendar_color, resourcetype, supported_calendar_component_set, current_user_privilege_set, getctag, sync_token. Required: user_id.
- **get_single_apple_calendar_calendar_by_id** — Get a single Apple Calendar calendar by id via CalDAV PROPFIND. Returns: displayname, calendar_color, resourcetype, supported_calendar_component_set, current_user_privilege_set, getctag, sync_token. Required: user_id, id.
- **create_a_apple_calendar_calendar** — Create a new Apple Calendar calendar via CalDAV MKCALENDAR. The calendar_id should be a newly generated UUID. Returns an empty 201 response on success. Required: user_id, calendar_id.
- **update_a_apple_calendar_calendar_by_id** — Update Apple Calendar calendar properties such as displayname, calendar_color, description, or timezone via CalDAV PROPPATCH. Returns: displayname, calendar_color, resourcetype, supported_calendar_component_set, current_user_privilege_set, getctag, sync_token. Required: user_id, id.
- **delete_a_apple_calendar_calendar_by_id** — Delete an Apple Calendar calendar and all its events. Returns an empty 204 response on success. Required: user_id, id. This operation is irreversible.
- **apple_calendar_calendars_search** — Run a CalDAV REPORT against a calendar collection on Apple Calendar / iCloud. The XML request body selects the report type: calendar-query (RFC 4791) to filter/list VEVENTs, calendar-multiget to fetch specific event hrefs, sync-collection (RFC 6578) for incremental sync (iCloud has no webhooks — poll this report), or free-busy-query (RFC 6638) for VFREEBUSY data. All report types use HTTP REPORT on the same calendar collection URL; only the XML body differs. Returns 207 Multi-Status XML. Required: user_id, id (calendar collection id).
- **create_a_apple_calendar_event** — Create a new Apple Calendar event by uploading a full iCalendar VCALENDAR via HTTP PUT. event_id must be a new UUID without the .ics suffix (the .ics extension is appended to the URL automatically). Request body is raw text/calendar content. If-None-Match: * is sent automatically. Required: user_id, calendar_id, event_id.
- **get_single_apple_calendar_event_by_id** — Fetch a single Apple Calendar event as an iCalendar (.ics) resource via HTTP GET. The id is the event resource filename including the .ics suffix (e.g., 603275E4-6A47-4EFA-BAEF-CCD33A314C30.ics). Returns text/calendar with an ETag header for conditional updates. Required: user_id, calendar_id, id.
- **update_a_apple_calendar_event_by_id** — Update an existing Apple Calendar event by replacing the entire iCalendar VCALENDAR via HTTP PUT. iCloud does not support PATCH — GET the event first, modify VEVENT properties, then PUT the complete VCALENDAR back as raw text/calendar. Use If-Match with the event ETag for safe conditional updates. Required: user_id, calendar_id, id (filename including .ics suffix).
- **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: user_id, calendar_id, id (filename including .ics suffix).
- **get_single_apple_calendar_server_by_id** — Probe Apple Calendar (iCloud) CalDAV server capabilities via HTTP OPTIONS on the root URL. Returns response headers such as DAV, Allow, and supported feature classes (calendar-access, calendar-schedule, sync-collection). Use during discovery before PROPFIND; does not return user or calendar data.

## How it works

1. **Link your customer's Apple Calendar account.** Use Truto's frontend SDK; we handle every OAuth and API key flow so you don't need to create the OAuth app.
2. **Authentication is automatic.** Truto refreshes tokens, stores credentials securely, and injects them into every API request.
3. **Call Truto's API to reach Apple Calendar.** The Proxy API is a 1-to-1 mapping of the Apple Calendar API.
4. **Get a unified response format.** Every response uses a single shape, with cursor-based pagination and data in the `result` field.

## Use cases

- **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.
- **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.
- **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.
- **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.
- **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

- **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.
- **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.
- **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.
- **Calendar lifecycle management** — Rename, update, or delete the calendars your app provisions so users can clean up or rebrand without leaving your product.
- **Event lookup and enrichment** — Fetch a single event by ID to enrich records in your CRM, ATS, or PM tool with structured meeting metadata.
- **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.

## FAQs

### 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.

## Related reading

- [How to Write an Apple Calendar Support Status FAQ (PM Templates & Architecture)](https://truto.one/blog/how-to-create-an-faq-page-for-apple-calendar-support-status/) — Learn which calendar providers a unified API actually supports - Google, Outlook, Apple/iCloud, Calendly, Cal.com - with a provider matrix, per-provider caveats, and copy-paste FAQ templates.
- [Connect Apple Calendar to ChatGPT: Manage Calendars & Sync Events](https://truto.one/blog/connect-apple-calendar-to-chatgpt-manage-calendars-sync-events/) — Learn how to connect Apple Calendar to ChatGPT using an MCP server. Automate scheduling workflows, navigate CalDAV discovery, and execute tool calls securely.
- [Connect Apple Calendar to Claude: Search Schedules & Update Events](https://truto.one/blog/connect-apple-calendar-to-claude-search-schedules-update-events/) — Learn how to connect Apple Calendar to Claude using an MCP server. Bypass CalDAV XML complexities and automate scheduling with dynamic AI tools.
- [Connect Apple Calendar to AI Agents: Sync Events & Discover Calendars](https://truto.one/blog/connect-apple-calendar-to-ai-agents-sync-events-discover-calendars/) — Learn how to connect Apple Calendar to AI agents using Truto. Discover CalDAV workflows, manage iCal events, and handle tools with LangChain.
