> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aefer.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Meeting settings

> The user's connected account with reconnect and disconnect, and which of their meetings get recorded.

In their settings, a user sees which calendar is connected, reconnects or disconnects it,
and chooses which of their meetings get recorded.

![A settings screen: Connected as ana@acme.com with Reconnect and Disconnect, and a Record my meetings choice of All meetings, Only with external guests, or None. Notes: Reconnect is a connect link with member\_id, shown after calendar\_connection.error; Disconnect is DELETE /calendar\_connections; Record my meetings is the member's settings and their meetings: categories.](https://mintcdn.com/meeting-kit/WXugirGtEPkJGTVC/images/diagrams/user-settings.svg?fit=max\&auto=format\&n=WXugirGtEPkJGTVC\&q=85\&s=6596b7e457bf16626522f950a8c498f1)

## The connected calendar

```bash theme={null}
curl -G "https://api.aefer.ai/api/v1/calendar_connections" \
  -H "Authorization: $AEFER_API_KEY" \
  -H "Aefer-Version: 2026-11-13" \
  -d workspace_id=wks_01k6a2r9s8x7c2dvq3m5n6p4ab \
  -d member_id=mem_01k69x9s8x7c2dvq3m5n6p4ab
```

```json theme={null}
{
  "object": "list",
  "data": [
    {
      "id": "cal_01k6c1r9s8x7c2dvq3m5n6p4ab",
      "object": "calendar_connection",
      "member_id": "mem_01k69x9s8x7c2dvq3m5n6p4ab",
      "provider": "google",
      "status": "active",
      "account_email": "ana@acme.com",
      "error": null,
      "last_synced_at": "2026-09-29T10:13:02Z",
      "…": "…"
    }
  ],
  "has_more": false,
  "_links": {}
}
```

Show "Connected as" with `account_email`. A member has at most one calendar.

| `status` | Show |
| - | - |
| `syncing` | Syncing your calendar… |
| `active` | Connected as `account_email`, with Disconnect. |
| `error` | Access was revoked or expired: a Reconnect button. |
| `disconnected` | The Connect call to action again. |

`calendar_connection.error` and `calendar_connection.disconnected` tell you when the status
changes; `syncing` turns `active` on its own within seconds.

A connected calendar is read 28 days ahead, a window that moves with time: a later event
appears as it comes within 28 days. Looking back, only events that started in the last 30
minutes are read: a meeting in progress when the user connects is picked up, a short one that
already ended in that half hour comes in as `past`, and nothing earlier is read. Meetings already
in stay, and turn `past` when they end; changes to an event made more than 30 minutes after it
started aren't read.

## Reconnect

To reconnect a connection in `error`, create a connect link with the `member_id` instead of
`member_data`, and send the user to its `url`:

```bash theme={null}
curl -X POST "https://api.aefer.ai/api/v1/calendar_connect_links" \
  -H "Authorization: $AEFER_API_KEY" \
  -H "Aefer-Version: 2026-11-13" \
  -H "Content-Type: application/json" \
  -d '{
    "workspace_id": "wks_01k6a2r9s8x7c2dvq3m5n6p4ab",
    "provider": "google",
    "return_url": "https://app.example.com/settings/meetings",
    "member_id": "mem_01k69x9s8x7c2dvq3m5n6p4ab"
  }'
```

The connection comes back on the same member, keeping their meetings and preferences.
Send `member_id` or `member_data`, never both (`422`).

A member has one calendar at a time. To switch from Google to Microsoft,
[disconnect](#disconnect) first, then create the link with the new `provider`: while the
old calendar is connected, the link answers `409 calendar_already_connected`.

## Disconnect

```bash theme={null}
curl -X DELETE "https://api.aefer.ai/api/v1/calendar_connections/cal_01k6c1r9s8x7c2dvq3m5n6p4ab" \
  -H "Authorization: $AEFER_API_KEY" \
  -H "Aefer-Version: 2026-11-13"
```

Syncing stops and the bots scheduled from that calendar are cancelled. Past meetings, the
member and their preferences stay.

The member's upcoming meetings from that calendar stay listed, but they are no longer recorded:
their `settings.recording.enabled` reads `false`, and `settings.sources` gives the reason
`no_calendar_event`. A change made in that calendar afterwards, such as a new time or a
cancellation, no longer reaches them. A meeting that another member's connected calendar still
holds keeps following that calendar. Meetings you sent with [`POST /calendar_events`](https://docs.aefer.ai/guides/calendar-sync) are not
affected.

## Record my meetings

A user's own choice overrides the [company default](https://docs.aefer.ai/guides/settings.md#which-setting-wins). It is
the member's settings: `GET /members/{id}` shows them in `settings`, with the member's own
assignments marked `own: true`. A member without settings of their own gets them in one call:

```bash theme={null}
curl -X POST "https://api.aefer.ai/api/v1/settings" \
  -H "Authorization: $AEFER_API_KEY" \
  -H "Aefer-Version: 2026-11-13" \
  -H "Content-Type: application/json" \
  -d '{
    "recording": { "enabled": true },
    "assignments": [{ "scope": ["members:mem_01k69x9s8x7c2dvq3m5n6p4ab"] }]
  }'
```

Once they have them, change them with `PATCH /settings/{id}` (the `settings_id` of their own
assignment).

| Choice | Settings |
| - | - |
| All meetings | `recording.enabled: true` on `["members:mem_…"]` |
| Meetings I organize | `recording.enabled: false`, and `true` on `["members:mem_…", "meetings:organized"]` |
| Only with external guests | `recording.enabled: false`, and `true` on `["members:mem_…", "meetings:external"]` |
| None | `recording.enabled: false`, and no category |

Upcoming meetings are re-evaluated straight away; each one whose recording changes sends
`meeting.updated`. The same settings hold the user's audio or video choice
(`recording.methods.bot.mode`), transcription language and summary template: see
[Company settings](https://docs.aefer.ai/guides/settings.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.