Skip to content
AIPDocs
AIP 1.055 pagesConnector
Release status
DocumentationAIP 1.0ConnectorConnectors

Cal.diy Connector

The Cal.diy connector projects the pinned self-hosted scheduling API into 81 typed AIP capabilities. It is built into aipd and is the reference product connector for governed mutations, tenant credential routing, signed webhook ingress, idempotency fencing, and recovery.

What It Supports

Capability family Count Examples
Profile 2 Read and update the authenticated profile
Event types 15 CRUD, private links, and webhooks
Slots 5 Availability and reservation lifecycle
Bookings 22 Create, reschedule, cancel, attendees, recordings, and transcripts
Calendars 21 Connections, busy time, event CRUD, free/busy, and selection
Conferencing 5 List, default, connect, and disconnect
Schedules 6 List, read, create, update, and delete
User webhooks 5 Signed webhook CRUD

Interactive OAuth callbacks, raw credential capture, deprecated routes, and unbounded outbound URL operations are deliberately excluded.

Configure aipd

Provide exactly one Cal.diy authentication mode through secret files:

cargo run -p aipd -- \
  --bind 0.0.0.0:18080 \
  --service-id agent:aipd:calendar \
  --native-bearer-token-file /run/secrets/aip-native-token \
  --native-principal service:calendar-edge \
  --native-principal-scope action:read \
  --native-principal-scope action:write \
  --trusted-identity-file /run/aip/trusted-identities.json \
  --approval-authority-file /run/aip/approval-authorities.json \
  --postgres-url "$AIP_POSTGRES_URL" \
  --cal-diy-base-url https://calendar.example.com/api \
  --cal-diy-account-id primary \
  --cal-diy-bearer-token-file /run/secrets/cal-diy-token

OAuth client authentication uses --cal-diy-oauth-client-id and --cal-diy-oauth-client-secret-file instead of the bearer-token file.

For multiple tenants, bind each trusted tenant to an external account and opaque credential handle. The trusted identity directory is authoritative; action input cannot select another tenant’s credential.

The command is a composition example, not a complete public-edge deployment. Terminate TLS, restrict health and metrics routes, and grant only the scopes required by the chosen capabilities.

See aipd Configuration for all connector options and Environment Variables for orchestrator equivalents.

Mutation Safety

Every mutation requires an external-account-scoped idempotency key and AIP approval. High-risk booking create, reschedule, and cancel operations require a validated plan before commit.

Cal.diy does not provide universal provider idempotency. The connector therefore claims a durable dispatch fence before sending a mutation and never blindly retries an uncertain provider outcome. When provider response and settlement evidence are both unavailable, the operation remains fenced for operator reconciliation.

Use PostgreSQL for multi-process deployment. The file-backed runtime is a single-host durability option, not a shared cluster coordinator.

Signed Webhooks

Configure one secret selector per owned webhook subscription:

--cal-diy-webhook-secret-file bookings=/run/secrets/cal-diy-bookings-hmac
--cal-diy-webhook-subscriber-prefix https://aip.example.com/connectors/cal-diy/webhooks/

The provider sends to:

POST /connectors/cal-diy/webhooks/bookings

The connector verifies the exact raw body, required version, HMAC signature, timestamp window, replay identity, and payload bound before appending a native event. Provider retries resolve to the same deterministic event id.

Qualification Boundary

The connector has complete frozen-SDK conformance and a retained exact-upstream isolated-live report for its named source and image artifacts. That historical report does not automatically qualify a rebuild or a new Cal.diy revision. Run the campaign again for the exact production artifact.

For the full provider baseline and safety boundaries, read Pinned Upstream Baselines. Evidence is described in Cal.diy Isolated-Live Evidence.