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

# Settings

> What gets recorded and how: settings, the scopes you assign them to, and which one wins.

Two objects decide what happens in a meeting. [Settings](/api-reference/settings/object) hold
values: record or not, how the bot records, the transcription language, the summary, the
branding. [Assignments](/api-reference/settings-assignments/object) say where they apply: a
`scope`, a list of conditions that must all hold. Every workspace, member and meeting carries the
result as [its `settings` block](/api-reference/settings/block-object).

## Scopes

A condition is `<kind>:<set>`: the kind is plural, the set is one item or a group. A scope names
exactly one who: your account, a workspace or a member. A meeting condition stands alone: it
implies its workspace. A member implies their workspace, and a workspace your account.

| Condition | Means |
| - | - |
| `accounts:acc_…` | Every workspace of your account, partner-wide. |
| `workspaces:wks_…` | The workspace's members and meetings. |
| `members:mem_…` | One member's meetings. |
| `meetings:organized`, `meetings:internal`, `meetings:domain`, `meetings:external` | A category, relative to the member whose calendar it is on. |
| `calendar_event_series:<ical_uid>` | Every occurrence of a recurring event, from now on. |
| `meetings:mtg_…` | One meeting, this occurrence only. |

What you want, as scopes:

| Want | `scope` |
| - | - |
| Partner-wide defaults | `["accounts:acc_…"]` |
| Company defaults | `["workspaces:wks_acme"]` |
| Record external meetings | `["workspaces:wks_acme", "meetings:external"]` |
| External *or* organized | two assignments, same `settings_id` |
| External meetings I organize | `["workspaces:wks_acme", "meetings:external", "meetings:organized"]` |
| Ana: Catalan | `["members:mem_ana"]` |
| Ana: never my internal ones | `["members:mem_ana", "meetings:internal"]` |
| One meeting on, or off | `["meetings:mtg_…"]` |
| Skip the all-hands series | `["workspaces:wks_acme", "calendar_event_series:<ical_uid>"]` |
| Same setup for 50 customers | 50 assignments of one `settings_id` |

An `accounts:` scope takes no other condition yet. A scope with a category sets only
`recording.enabled`. Branding is set on a `workspaces:` scope
alone. A meeting takes no `recording.methods.bot.start`: the bot's start is chosen before it is
dispatched. A meeting started by a bot keeps what [`POST /bots`](/api-reference/bots/create-a-bot)
sent; it takes no assignment.

## Set them

Create settings and assign them in one call. A `name` helps you find them again:

```bash theme={null}
curl -X POST "https://api.meetingkit.com/api/v1/settings" \
  -H "Authorization: $MEETINGKIT_API_KEY" \
  -H "Happyscribe-Version: 2026-10-12" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Catalan",
    "transcription": { "language": "ca" },
    "assignments": [{ "scope": ["members:mem_01k69x9s8x7c2dvq3m5n6p4ab"] }]
  }'
```

A scope set is assigned once: a second `POST` for the same scope answers `409 scope_taken`
naming the assignment. Change the settings it applies instead:

```bash theme={null}
curl -X PATCH "https://api.meetingkit.com/api/v1/settings/set_01k6sa1es0000000000000000a" \
  -H "Authorization: $MEETINGKIT_API_KEY" \
  -H "Happyscribe-Version: 2026-10-12" \
  -H "Content-Type: application/json" \
  -d '{ "recording": { "methods": { "bot": { "mode": "audio_only" } } } }'
```

Reuse one object anywhere, here for one more category:

```bash theme={null}
curl -X POST "https://api.meetingkit.com/api/v1/settings_assignments" \
  -H "Authorization: $MEETINGKIT_API_KEY" \
  -H "Happyscribe-Version: 2026-10-12" \
  -H "Content-Type: application/json" \
  -d '{
    "settings_id": "set_01k6rec00000000000000000000",
    "scope": ["workspaces:wks_01k6a2r9s8x7c2dvq3m5n6p4ab", "meetings:organized"]
  }'
```

Delete an assignment to stop applying it there. Delete settings once nothing assigns them
(`409 settings_in_use` until then).

Your account starts with its own settings detecting the language (`transcription.language: auto`),
assigned to the account: every workspace you create inherits them, with nothing to set per
workspace.

## Values and codes

A field is a value or a code, never `null` (`422 invalid`):

| Code | Field | Means |
| - | - | - |
| `inherit` | any | Nothing here: the next assignment down decides. |
| `same_as_transcript` | `summary.language` | The summary is in the transcript's language. |
| `none` | `branding.brand_kit_id` | MeetingKit's own branding. |

`inherit` is stored: a member whose language is `inherit` follows the workspace's language, now
and after you change it.

## Which setting wins

For each field of a meeting, the most specific assignment that sets it:

1. `meetings:mtg_…`
2. `calendar_event_series:`
3. `members:` with categories
4. `members:`
5. `workspaces:` with categories
6. `workspaces:`
7. `accounts:`
8. `happyscribe_defaults`, read with [`GET /settings/happyscribe_defaults`](/api-reference/settings/get-settings).

Within one step, a scope with more conditions wins. Two assignments that tie on
`recording.enabled` don't record. Any other field can't tie: an assignment that would set a
different value on the same step as another answers `409 settings_conflict`.

The `settings` block on the meeting says what applies and, in `sources`, which assignment
supplied each field. When none did, `reason` says why: `happyscribe_default`; for a bot's meeting,
`bot_request`; and for recording, `no_meeting_url`, `unsupported_platform`, `no_calendar_event`, `member_paused` and
`bot_cancelled`.


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