---
title: "Set your own meeting auto-join opt-in"
method: PUT
path: "/v1/meetings/settings/personal"
tags: ["meetings"]
---

# Set your own meeting auto-join opt-in

`PUT /v1/meetings/settings/personal`

## Request

- Base URL: `https://api.patricia.app` (the document declares no server; this is the origin it was published from)
- URL: `https://api.patricia.app/v1/meetings/settings/personal`
- Auth: HTTP bearer

Turn auto-join on or off for YOUR calendar meetings. This only ever changes the caller's own preference; auto-join additionally needs the workspace toggle and a connected calendar.

## Headers

- `X-Tenant-Id` string, nullable

## Request body

- MeetingsPersonalSettingsUpdate: PUT body for the caller's own meeting preferences.
  - `autojoin_enabled` boolean, nullable: Your consent to automatic meeting joins. Workspace recording and join switches also apply.
  - `recap_email_audience` 'everyone_on_invite' | 'workspace_participants' | 'company_domain' | 'only_me' | 'do_not_send', nullable: Who receives recap emails for your meetings. Null follows the workspace default.
  - `prep_email_audience` 'all_participants' | 'only_me' | 'do_not_send', nullable: Who receives preparation emails for your meetings. Null follows the workspace default.
  - `autojoin_scope` 'any_meeting_link' | 'i_host' | 'internal' | 'external' | 'workspace_teammates', nullable: Your calendar events eligible for automatic joins. Null follows the workspace default.

## Response `200`

Successful Response

- MeetingsSettingsView: Everything the dashboard's Meetings view needs in one read: settings, calendar, and the gate.
  - `recording_enabled` boolean, required: Effective recording enablement: the workspace toggle AND the platform arming.
  - `team` MeetingsTeamSettingsView, required: The workspace-level meeting settings (the enforced ``meeting_bot_tenant_settings`` values).
    - `autojoin_enabled` boolean, required: Whether auto-join is armed for the workspace. On by default (a workspace that never opened these settings reads on); an admin's explicit opt-out turns it off.
    - `recap_enabled` boolean, required: Whether Patricia auto-posts a recap when a meeting's notes are ready.
    - `recap_destination` 'thread' | 'channel' | 'dm', required: Where a recap goes when there is no asking thread to reply into (an auto-joined meeting): 'thread' replies where asked, 'channel' posts to the chosen channel, 'dm' messages the person whose meeting it was.
    - `recap_channel_id` string, nullable: The channel recaps go to when the destination is 'channel'.
    - `recap_channel_platform` 'slack' | 'teams', nullable: The stored chat platform for the recap channel, or null when none is stored.
    - `recap_share_instructions` string, nullable: How Patricia should write recaps (e.g. 'summarize the action items and name each owner'). Steers the recap text only.
    - `recap_email_audience` 'everyone_on_invite' | 'workspace_participants' | 'company_domain' | 'only_me' | 'do_not_send', required: Workspace default for meeting recap emails.
    - `recap_email_excludes_externals` boolean, required: True when this workspace default asks for people who are not in the workspace but recording_visibility refuses them, so none of them receive the recap email. Server-derived from the same two rules the sender applies; the dashboard renders it as a plain warning.
    - `prep_email_audience` 'all_participants' | 'only_me' | 'do_not_send', required: Workspace default for meeting-preparation emails.
    - `autojoin_scope` 'any_meeting_link' | 'i_host' | 'internal' | 'external' | 'workspace_teammates', required: Workspace default for which calendar meetings Patricia joins.
    - `recording_visibility` 'teammates_and_link' | 'participants_and_teammates' | 'participants' | 'teammates' | 'only_me', required: This policy controls who can open a recording, its recap, and transcript in the meetings area. It also controls whose chat questions can surface the meeting's notes from Patricia's memory.
    - `public_access_enabled` boolean, required: Saved intent for future public meeting links.
  - `personal` MeetingsPersonalSettingsView, required: The caller's own meeting preferences (per-person, self-set).
    - `autojoin_enabled` boolean, required: Whether auto-join is on for THIS person's own calendar meetings. On by default; only their explicit opt-out turns it off. It acts only once their own calendar is connected.
    - `recap_email_audience` 'everyone_on_invite' | 'workspace_participants' | 'company_domain' | 'only_me' | 'do_not_send', nullable: The caller's override, or null to follow the workspace default.
    - `prep_email_audience` 'all_participants' | 'only_me' | 'do_not_send', nullable: The caller's override, or null to follow the workspace default.
    - `autojoin_scope` 'any_meeting_link' | 'i_host' | 'internal' | 'external' | 'workspace_teammates', nullable: The caller's override, or null to follow the workspace default.
  - `effective` MeetingsEffectiveSettingsView, required: The resolved personal policies this caller actually receives.
    - `recap_email_audience` 'everyone_on_invite' | 'workspace_participants' | 'company_domain' | 'only_me' | 'do_not_send', required
    - `recap_email_excludes_externals` boolean, required: The same clamp as the team field, answered for THIS caller's resolved audience: true when their own recap emails reach nobody outside the workspace even though their audience asks for them. Separate from the team answer, which can differ whenever they override it.
    - `prep_email_audience` 'all_participants' | 'only_me' | 'do_not_send', required
    - `autojoin_scope` 'any_meeting_link' | 'i_host' | 'internal' | 'external' | 'workspace_teammates', required
  - `workspace_domains` string[]: Every non-consumer email domain represented by non-deactivated workspace members.
  - `calendar` CalendarConnectionView, required: Whether a calendar is connected: the caller's own, and one shared with the team.
    - `personal_connected` boolean, required: The caller has connected their own calendar.
    - `team_connected` boolean, required: A team-shared calendar connection exists.
    - `connected_provider_slugs` string[]: Which calendar providers the caller has personally connected (e.g. googlecalendar, outlook).
  - `autojoin` AutojoinStateView, required: The resolved auto-join decision for the caller, with machine-readable blockers.
    - `active` boolean, required: True when auto-join would actually run for this person's meetings.
    - `blockers` string[]: Why auto-join is not active, in fix-it order: 'recording_off', 'team_autojoin_off', 'personal_autojoin_off', 'calendar_not_connected'. Empty when active.
  - `recording_visibility_choices` RecordingVisibilityChoiceView[]: Every recording-visibility value with the consequence of choosing it, resolved against the workspace's current recap-email audience. The dashboard renders these rather than recomputing anything, so a stated consequence is the sender's own answer.
    - `value` 'teammates_and_link' | 'participants_and_teammates' | 'participants' | 'teammates' | 'only_me', required
    - `behaves_like` 'teammates_and_link' | 'participants_and_teammates' | 'participants' | 'teammates' | 'only_me', required: The value whose enforced behavior is identical to this one's, which is this value itself when it is the one worth offering. Five stored values enforce three behaviors: 'teammates_and_link' promises a public link that does not exist and 'participants' reads as participant-scoped while enforcing owner-only. A picker offering a distinction the system does not implement is the defect; this field is how a client avoids offering one without keeping its own list of which values are redundant.
    - `workspace_can_open` boolean, required: Whether a teammate who was not in the meeting can open the recording under this value. The access half of the answer, separate from the email half because the two come apart: a workspace-wide policy can still mail nobody outside the workspace.
    - `recap_email_excludes_externals` boolean, required: What the team-level clamp becomes if this value is saved, holding the workspace's current recap-email audience.
    - `recap_email_reaches_externals` boolean, required: Whether anybody outside the workspace would actually be mailed the recap under this value. NOT the negation of the field above: both are false whenever the audience never named an outsider to begin with. A client that reads 'not excluded' as 'included' tells a workspace sending no recap email at all that its guests receive one.
    - `recap_email_clamped_to_owner` boolean, required: True when choosing this value collapses the whole recap-email audience to the recording owner, so teammates lose the email too. A wider loss than the field above and a different sentence: calling it 'people outside your workspace miss out' would understate it.
  - `recap_email_audience_choices` RecapEmailAudienceChoiceView[]: The same, for the other picker: every recap-email audience value with the consequence of choosing it, resolved against the workspace's current recording policy.
    - `value` 'everyone_on_invite' | 'workspace_participants' | 'company_domain' | 'only_me' | 'do_not_send', required
    - `recap_email_excludes_externals` boolean, required: What the clamp becomes if this value is saved, holding the workspace's current recording policy. The other direction of the same coupling as the visibility choices, answered by the same function so a surface cannot warn about one direction and stay silent on the other.
    - `selectable` boolean, required: Whether the write path would accept this value for this workspace. Derived by running the write path's own validator, so this list can never offer a value the API would reject.
    - `unavailable_reason` string, nullable: Why not, when selectable is false: 'no_company_domain'. Null otherwise.
  - `can_edit_team` boolean, required: Whether the caller may change the team-level settings (admin/owner).
  - `can_edit_personal` boolean, required: Whether the caller may change their own auto-join opt-in (holds preferences:edit; a read-only viewer cannot). The UI disables the personal switch when false.

## Other responses

- `400`: Bad request
- `401`: Unauthorized
- `403`: Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)
- `404`: Not found
- `409`: Conflict
- `422`: Validation error

---

[API](https://skmtc.dev/patricia/apis/patricia-api.md) · [All operations](https://skmtc.dev/patricia/apis/patricia-api/llms.txt) · [OpenAPI document](https://skmtc.dev/patricia/apis/patricia-api/revisions/0dfb44495ea1?raw)
