Apple Calendar#
Apple Calendar is registered for credential-backed CalDAV sync with
sync-coupled user import. It connects to iCloud Calendar through an encrypted
Apple Account/app-specific-password credential, discovers visible CalDAV
calendar collections, pulls bounded VEVENT resources into a reviewable import
session, proposes TeamBoost user mappings from event actors, and projects each
event into the internal integrations task-create draft for operator review.
| Capability | Method | Status |
|---|---|---|
CSV_IMPORT |
— | Not built |
SYNC |
Pull iCloud Calendar events through CalDAV | ✅ Built |
USER_IMPORT |
Organizer and attendees imported during sync | ✅ Built |
WEBHOOK |
— | Not built |
The endpoints below live under /api/v1/providers/apple-calendar/.... All
routes require an organization-scoped user token (see
Authentication).
Credential Setup#
Apple Calendar uses the generic encrypted credential routes:
PUT /api/v1/providers/apple-calendar/credentials?organization_id=<id>
GET /api/v1/providers/apple-calendar/credentials?organization_id=<id>
POST /api/v1/providers/apple-calendar/credentials/verify?organization_id=<id>
DELETE /api/v1/providers/apple-calendar/credentials?organization_id=<id>
The stored secret is a JSON string with these fields:
{
"username": "apple-account@example.com",
"app_specific_password": "xxxx-xxxx-xxxx-xxxx",
"base_url": "https://caldav.icloud.com"
}
base_url must be HTTPS and must point to an Apple CalDAV host. The current
entrypoint used by the adapter is https://caldav.icloud.com; discovered
account shard hosts in the *-caldav.icloud.com family are followed only when
Apple returns them through CalDAV discovery. App-specific password whitespace is
normalized before use. The username, password, authorization header, raw event
body, and account-specific CalDAV URLs are never logged by the adapter.
Verification performs a cheap CalDAV discovery probe:
PROPFINDforDAV:current-user-principal;PROPFINDforCALDAV:calendar-home-set;PROPFINDfor calendar collections.
Invalid credentials return invalid_api_key. CalDAV 429 and server errors are
retried with bounded backoff. HTTP redirects are not followed while sending
Basic Auth; the adapter follows only returned CalDAV hrefs that pass the Apple
host allowlist.
Importing From Apple Calendar#
POST /api/v1/providers/apple-calendar/imports/sync?organization_id=<id>
The first shipped sync is intentionally bounded:
- all visible calendar collections returned by CalDAV discovery;
VEVENTresources only;- a review window from 30 days in the past through 60 days in the future;
- no persisted incremental sync-token state.
The adapter sends CalDAV XML requests and parses returned iCalendar resources.
It preserves the CalDAV resource href, resource URL, ETag, calendar context,
UID, RECURRENCE-ID, SEQUENCE, STATUS, CLASS, TRANSP, categories,
organizer, attendees, and start/end context in the import source record and
projected descriptionJson.
Projection Field Coverage#
| Apple Calendar source | TeamBoost draft field | Notes |
|---|---|---|
SUMMARY |
title |
Missing or hidden summaries are blocking projectionErrors. |
| Calendar event | type |
Calendar events default to OTHER with a mapping note. |
DESCRIPTION |
description |
Passed through when present. |
STATUS |
status |
CONFIRMED and TENTATIVE map to NOT_STARTED; CANCELLED maps to CANCELED; tentative/cancelled statuses add mapping notes. |
| Calendar priority | priority |
iCalendar events have no TeamBoost priority equivalent; defaults to UNKNOWN. |
ORGANIZER |
creatorId |
Resolved through the user mapping when matched; otherwise left unset with a note. |
ATTENDEE |
ownerId |
Attendees are imported for user mapping but are not assigned as owners automatically. |
| Organizer | requestedById |
Preserved in descriptionJson; requester mapping is left unset until the product rule is confirmed. |
DTSTART / DTEND |
plannedStartDate, estimatedStartDate, plannedEndDate |
Calendar length is not converted into TeamBoost effort duration. |
| Calendar display name | projectTitle |
|
| CalDAV/iCalendar refs | descriptionJson |
Preserves resource href/URL, ETag, UID, recurrence, status/class/transparency, categories, actors, and raw parsed start/end context. |
User Import During Sync#
USER_IMPORT rides sync. Proposed users come from iCalendar ORGANIZER and
ATTENDEE values, deduped by normalized e-mail/calendar address and name. Apple
Calendar is not an Apple directory API; standalone Apple user-directory import
is not built.
Not Built Yet#
- CSV or
.icsfile import. - Calendar selection and per-organization sync window preferences.
- Persisted incremental
DAV:sync-tokenstate. - Apple Calendar writeback or two-way sync.
- Apple Calendar webhooks or push notifications.
- Standalone Apple user-directory import.