---
title: Cal.diy conferencing
description: Discover conferencing apps and safely change the default or connection state
kind: capability-reference
audience: application-developer
appliesTo: "1.x"
writingStandard: "aip-docs/1.0"
lastReviewedRevision: "97be86e9efedf07ecf1783b03800f683f107fb04"
connector: cal-diy
capabilityIds:
  - cap:cal_diy:conferencing.list
  - cap:cal_diy:conferencing.default.get
  - cap:cal_diy:conferencing.default.set
  - cap:cal_diy:conferencing.connect
  - cap:cal_diy:conferencing.disconnect
---

# Cal.diy conferencing

Use these capabilities to list installed conferencing applications, read or
change the default, and connect or disconnect an app supported by the published
business-operation surface. This page owns all five conferencing operations.

All five use provider API version `2024-08-13`. Browser OAuth authorization and
callback routes remain in the operator control plane and are not agent-callable
capabilities.

## Choose an operation

| Capability | Provider request | Risk | Approval |
|---|---|---|---|
| `cap:cal_diy:conferencing.list` | `GET /v2/conferencing` | Low | No |
| `cap:cal_diy:conferencing.default.get` | `GET /v2/conferencing/default` | Low | No |
| `cap:cal_diy:conferencing.default.set` | `POST /v2/conferencing/{app}/default` | Medium | Required |
| `cap:cal_diy:conferencing.connect` | `POST /v2/conferencing/{app}/connect` | Medium | Required |
| `cap:cal_diy:conferencing.disconnect` | `DELETE /v2/conferencing/{app}/disconnect` | High | Required |

The allowed `app` values differ by mutation:

| App | Set default | Connect | Disconnect |
|---|---|---|---|
| `google-meet` | Yes | Yes | Yes |
| `zoom` | Yes | No | Yes |
| `msteams` | Yes | No | Yes |
| `daily-video` | Yes | No | No |

Do not infer one operation's app set from another operation.

## Discover installed apps and the default

Both reads accept an empty object:

```json
{}
```

Use `conferencing.list` to inspect installed conferencing applications. Use
`conferencing.default.get` to read the current default. Both are low-risk,
approval-free reads at the capability level.

An installed entry or default selection does not prove that provider
credentials are current, that OAuth has completed, or that meeting creation is
healthy. The connector does not publish the provider response field shape.

## Change the default app

Set the default by passing exactly one supported app:

```json
{
  "app": "zoom"
}
```

The exact enum is `google-meet`, `zoom`, `msteams`, or `daily-video`.
Additional input fields are rejected. `app` becomes the provider path segment,
so the request has no JSON body after routing fields are removed.

The connector lists installed apps before dispatch. A successful preflight
does not prove that the selected app appears in the list or can become the
default; Cal.diy still validates the mutation.

Default set is medium risk. It requires approval and an idempotency key, does
not require a plan, and declares no rollback capability.

## Connect the supported non-OAuth app

The published connect operation accepts only:

```json
{
  "app": "google-meet"
}
```

The connector describes this as connecting a supported non-OAuth conferencing
application. `zoom`, `msteams`, and `daily-video` fail the connect input schema
even though some appear in the default or disconnect enums.

OAuth authorization URL and callback routes are intentionally excluded because
they establish browser sessions or credentials. Complete those flows through
the deployment's operator-owned process, not an AIP action.

Connect first lists installed apps. It is medium risk and names
`conferencing.disconnect` as best-effort compensation. Compensation requires a
separate approval and is not invoked automatically.

## Disconnect an app

Disconnect accepts `google-meet`, `zoom`, or `msteams`:

```json
{
  "app": "msteams"
}
```

The connector lists installed apps before sending `DELETE` to the app-specific
path. `daily-video` is not accepted by this capability.

Disconnect is high risk and destructive. It has no rollback contract. A later
connect or OAuth flow is a new provider action and does not restore prior
credential state or meeting history.

## Shared read contract

The two reads are synchronous, retry-safe, and eligible for connector retry.
Their idempotency key is optional, action-scoped, and collision-checked against
the input hash. No capability-level human approval is required.

## Shared mutation contract

All three mutations require:

| Contract field | Value |
|---|---|
| Human approval | Required |
| Approval selector | Tenant policy |
| Approval validity window | 900,000 ms |
| Approval evidence | Reason, input snapshot, policy decision |
| Idempotency | Required; external-account scope |
| Collision behavior | Revalidate input hash |
| Connector retry | Not supported |
| Retry safety | Unsafe |
| Execution | Synchronous only |
| Transaction modes | `dry_run`, `plan`, `commit`, `reconcile` |
| Plan before commit | Not required |
| Dry-run fidelity | Policy and schema only |

Default set and connect are medium risk. Disconnect is high risk, destructive,
and uses the destructive approval reason. None of the operations carries the
`send_message` side-effect marker.

Only connect declares best-effort compensation. Default set and disconnect
declare rollback as not supported.

## Data and result contract

The family is classified as confidential. Its contract does not declare PII
and does not require redaction. Deployment policy may still impose stricter
handling based on provider output or tenant context.

The connector returns the validated provider JSON body. A non-empty string
`status` is required. `data`, `pagination`, and additional provider fields are
optional and provider-owned.

The common response scrubber recursively replaces secret-, key-, and
token-named values with `[REDACTED]` even though redaction is not required by
this family's data contract. Do not treat that targeted scrubber as a general
confidential-data filter.

## Failures and recovery

| Failure | Relevant cause | Safe response |
|---|---|---|
| `connector.cal_diy.invalid_action` | Unsupported app or unknown input field | Choose an app from the exact operation enum |
| `connector.cal_diy.policy` | Mutation omitted its required idempotency key | Preserve approved input and add the missing key |
| `connector.cal_diy.idempotency_collision` | One key owns different mutation input | Stop and inspect the original action |
| `connector.cal_diy.in_flight` | A matching conferencing mutation is executing | Read durable state and wait |
| `connector.cal_diy.outcome_unknown` | Prior provider dispatch cannot be proved | Reconcile; do not create a replacement key |
| `connector.cal_diy.authentication` | Provider returned `401` or `403` | Verify account binding and provider credentials |
| `connector.cal_diy.state_conflict` | Provider returned `409` or `412` | Refresh installed and default state before review |
| `connector.cal_diy.rate_limited` | Provider returned `429` | Retry reads within policy; reconcile mutations |
| `connector.cal_diy.remote_temporary` | Provider returned a server error | Retry reads within policy; reconcile mutations |
| `connector.cal_diy.transport` | Provider exchange failed | Retry reads only; treat dispatched mutations as uncertain |
| `connector.cal_diy.invalid_provider_output` | Successful response lacked valid `status` | Preserve evidence and reconcile a mutation |

Permanent rejection, invalid credentials, oversized responses, and durable
settlement failures use the common Cal.diy error family. Gateway and lifecycle
errors are described in the [global error reference](../../../reference/errors.md).

## Verify conferencing state

For a read, retain the capability, actor, tenant, external account, response
status, and provider request id when present.

For a mutation, also retain the exact app, approval evidence, and original
idempotency key. Wait for a completed durable result, then list apps and read
the current default. For uncertain dispatch, reconcile the original operation
before another mutation.

These checks validate application handling. They do not prove OAuth completion,
provider credential health, successful meeting creation, invitation delivery,
live-provider qualification, or production readiness.

## Related documentation

- [Cal.diy capability index](README.md)
- [Booking attendees and artifacts](booking-attendees-and-artifacts.md)
- [Authentication and tenant routing](../getting-started/authentication-and-tenant-routing.md)
- [Approvals and policy](../../../concepts/approvals-and-policy.md)
- [Error reference](../../../reference/errors.md)
