> ## 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.

# Create settings

> Sets values and assigns them in one call. For now every settings object has exactly one owner: a member who has
no settings yet (created from the workspace's, with what you send), a meeting, or a new set of meeting categories
for a workspace or member (`recording.enabled: true` only). A workspace, and a member who already has settings,
answer `409 scope_taken` naming the assignment whose settings to change with
[Update settings](#operation/updateSettings).

A change to recording or the bot re-evaluates upcoming meetings and sends `meeting.updated` for each one that
changes. A `meeting:` assignment reaches that occurrence only.




## OpenAPI

````yaml /openapi.yaml post /settings
openapi: 3.1.0
info:
  title: MeetingKit API
  description: >
    The MeetingKit API lets you build a meetings feature into your product:
    users connect

    a calendar, a notetaker joins their calls, and you get the transcript,
    speakers and

    summary of each meeting.
  version: '2026-10-12'
  contact:
    name: MeetingKit Developer Support
    email: dev@happyscribe.co
servers:
  - url: https://api.meetingkit.com/api/v1
security:
  - apiKeyAuth: []
tags:
  - name: Agent sessions
    description: Exchange the code a user hands their AI agent for API credentials.
  - name: Uploads
    description: Get signed URLs to upload media files directly to MeetingKit storage.
  - name: Transcribe
    description: Create transcription orders from media URLs.
  - name: Subtitle
    description: Create subtitling orders from media URLs.
  - name: Translate
    description: Create translation orders from existing conversations.
  - name: Orders
    description: Retrieve and confirm the orders created by the service endpoints.
  - name: Conversations
    description: List, retrieve, update, and delete conversations.
  - name: Exports
    description: Export conversations to text, subtitle, video-editing, and data formats.
  - name: Bots
    description: Send a notetaker bot to Zoom, Google Meet, or Microsoft Teams calls.
  - name: Glossaries
    description: List glossaries to apply custom terminology to orders.
  - name: Style guides
    description: List style guides to apply formatting preferences to orders.
  - name: Workspaces
    description: List the workspaces the authenticated user belongs to.
  - name: Organization memberships
    description: Manage which users belong to a workspace.
  - name: Members
    description: A partner's end users inside a workspace (MeetingKit).
  - name: Meetings
    description: >-
      Every meeting of a workspace, from calendars and bots, with its results
      (MeetingKit).
  - name: Calendar connections
    description: >-
      Members' Google and Microsoft calendars, connected through a hosted
      consent link and synced by MeetingKit.
  - name: Calendar events
    description: Calendar events a partner pushes from its own calendar sync (MeetingKit).
  - name: Settings
    description: >-
      What gets recorded and how, as values you assign to a workspace, a member,
      a meeting category or one meeting (MeetingKit).
  - name: Settings assignments
    description: Where settings apply (MeetingKit).
  - name: Files
    description: Images uploaded to a workspace, to use in a brand kit (MeetingKit).
  - name: Webhook endpoints
    description: Register the receivers of a workspace's webhooks, and test them.
  - name: Webhook events
    description: >-
      The webhooks sent to a workspace's endpoints, how each delivery went, and
      redelivery.
  - name: People
    description: >-
      Language Services. People found in your transcripts (Memory API, private
      beta).
  - name: Companies
    description: >-
      Language Services. Companies found in your transcripts (Memory API,
      private beta).
paths:
  /settings:
    post:
      tags:
        - Settings
      summary: Create settings
      description: >
        Sets values and assigns them in one call. For now every settings object
        has exactly one owner: a member who has

        no settings yet (created from the workspace's, with what you send), a
        meeting, or a new set of meeting categories

        for a workspace or member (`recording.enabled: true` only). A workspace,
        and a member who already has settings,

        answer `409 scope_taken` naming the assignment whose settings to change
        with

        [Update settings](#operation/updateSettings).


        A change to recording or the bot re-evaluates upcoming meetings and
        sends `meeting.updated` for each one that

        changes. A `meeting:` assignment reaches that occurrence only.
      operationId: createSettings
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SettingsCreate'
      responses:
        '201':
          description: The settings, with their assignments.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Settings'
        '401':
          description: >-
            Missing or invalid API key, or the key is not an owner or admin of
            the workspace.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
        '403':
          description: >
            Workspace settings on a plan without notetaker customization
            (`plan_upgrade_required`), or a brand kit only an

            admin of a workspace using it may select
            (`workspace_update_not_allowed`).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
        '409':
          description: >
            An assignment with that scope exists (`scope_taken`; the message
            names it). For a meeting: it is over

            (`meeting_not_upcoming`), live and only stoppable (`meeting_live`),
            no longer in any calendar of the workspace

            (`no_calendar_event`), or attended by another workspace too
            (`shared_meeting`).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
        '422':
          description: >
            A `null` or unknown value (`invalid`), a field no settings have
            (`unknown_field`), a scope that is not one

            workspace or member, or names an id outside the key's workspaces
            (`scope_invalid`), something not supported

            yet (`not_supported`: `name`, `series:`, several categories in one
            scope, `inherit` on write, a value other

            than `recording.enabled: true` on a category, `branding` off a
            workspace, `start` on a meeting), or

            `recording.enabled: true` on a meeting that cannot record
            (`no_meeting_url`, `unsupported_platform`,

            `member_paused`).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
        '503':
          description: >-
            The bot provider refused or failed (`provider_unavailable`); the
            message says what changed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
components:
  schemas:
    SettingsCreate:
      type: object
      description: The values to set, and where they apply.
      properties:
        recording: 4171c998-bf47-4e28-8c09-17e95e3539f0
        transcription: dc5f7927-d58d-48b8-b04d-b1e0b05b2703
        summary: a3e90db2-5dfc-49d1-ae4f-35a91fd2fe9a
        branding: 79d68cd3-b3d2-4efc-8460-8487cc0ff44b
        assignments:
          type: array
          description: >
            Where the settings apply, one scope each. Several are allowed only
            as categories of one owner.
          items:
            type: object
            required:
              - scope
            properties:
              scope:
                type: array
                description: The conditions that must all hold.
                items:
                  $ref: '#/components/schemas/SettingsCondition'
      example:
        transcription:
          language: ca
        assignments:
          - scope:
              - member:mem_01k69x9s8x7c2dvq3m5n6p4ab
    Settings:
      description: |
        Values for the fields a partner sets, applied where its assignments say.
      allOf:
        - type: object
          properties:
            id:
              type: string
              description: Beginning with `set_`.
            object:
              type: string
              description: Always `settings`.
            name:
              type:
                - string
                - 'null'
              description: Always `null` for now; named settings come later.
        - $ref: '#/components/schemas/SettingsValues'
        - type: object
          properties:
            assignments:
              type: array
              description: >-
                Where these settings apply. Read-only; change them with the
                settings assignments endpoints.
              items:
                type: object
                properties:
                  id:
                    type: string
                    description: Beginning with `asg_`.
                  scope:
                    type: array
                    description: The conditions that must all hold.
                    items:
                      $ref: '#/components/schemas/SettingsCondition'
            created_at:
              description: |
                When the settings were created, in ISO 8601.
              type: string
              format: date-time
            updated_at:
              description: |
                When the settings last changed, in ISO 8601.
              type: string
              format: date-time
      example:
        id: set_01k6sa1es0000000000000000a
        object: settings
        name: null
        recording:
          enabled: false
          methods:
            bot:
              start: on_join
              mode: audio_only
              silence_detection:
                alert: true
        transcription:
          language: ca
        summary:
          template: discovery_call
          language: same_as_transcript
        branding:
          brand_kit_id: inherit
        assignments:
          - id: asg_01k6a1ana00000000000000000
            scope:
              - member:mem_01k69x9s8x7c2dvq3m5n6p4ab
        created_at: '2026-09-30T09:12:41Z'
        updated_at: '2026-09-30T09:12:41Z'
    Errors:
      type: object
      required:
        - errors
      description: >
        Every error the API returns, `401` and `429` included. See
        [Errors](/api-reference/errors).
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/Error'
        retry_in_seconds:
          type: integer
          description: >-
            On `429`, how long to wait before retrying. Also sent as
            `Retry-After`.
      example:
        errors:
          - code: invalid
            field: recording.methods.bot.mode
            message: 'must be one of: audio_and_video, audio_only, inherit'
    SettingsCondition:
      type: string
      description: >
        One condition of an assignment's `scope`, written `<kind>:<name>`. Every
        condition of a scope must hold.


        - `workspace:wks_…`: the workspace's members and meetings. A scope names
        exactly one `workspace:` or `member:`.

        - `member:mem_…`: one member's meetings.

        - `meeting:mtg_…`: one meeting, this occurrence only. It implies its
        workspace; a scope with it names no member.

        - `meetings:organized`: meetings the member organizes.

        - `meetings:internal`: meetings where every participant is a workspace
        member.

        - `meetings:domain`: meetings where every participant is on the member's
        email domain.

        - `meetings:external`: meetings with at least one participant outside
        the workspace.


        One category per scope for now; to record external *or* organized
        meetings, make two assignments of the same settings.
      example: meetings:external
    SettingsValues:
      type: object
      description: >
        The values a settings object sets. Every field is a value or a code,
        never `null`: `inherit` leaves the field to

        the next assignment down (see [Settings](/meetingkit/settings)). Writing
        `inherit` is not supported yet except for

        `recording.enabled` on a meeting, which clears that meeting's own
        choice.
      properties:
        recording:
          description: |
            Whether meetings get recorded, and how.
          type: object
          properties:
            enabled:
              description: >
                `true` records, `false` does not, `inherit` leaves it to the
                next assignment. With only a `workspace:` or

                `member:` condition, `true` records every meeting; with a
                `meetings:` category, the only value is `true`.
              oneOf:
                - type: boolean
                - type: string
                  enum:
                    - inherit
            methods:
              description: |
                How meetings are recorded.
              type: object
              properties:
                bot:
                  description: |
                    The notetaker bot that joins the call.
                  type: object
                  properties:
                    start:
                      type: string
                      enum:
                        - on_join
                        - on_command
                        - inherit
                      description: >
                        When the bot starts recording. Not on a meeting.


                        - `on_join`: as soon as it joins the call.

                        - `on_command`: it joins paused, until someone types
                        `!resume` in the chat.

                        - `inherit`: from the next assignment.
                    mode:
                      type: string
                      enum:
                        - audio_and_video
                        - audio_only
                        - inherit
                      description: |
                        What the bot records.

                        - `audio_and_video`: audio and video.
                        - `audio_only`: audio only.
                        - `inherit`: from the next assignment.
                    silence_detection:
                      description: |
                        What the bot does when nobody speaks for a while.
                      type: object
                      properties:
                        alert:
                          description: >
                            Whether the bot posts a chat message after a long
                            silence: `true`, `false` or `inherit`.
                          oneOf:
                            - type: boolean
                            - type: string
                              enum:
                                - inherit
        transcription:
          description: |
            How the recording is transcribed.
          type: object
          properties:
            language:
              type: string
              description: >-
                A language tag, `auto`, `multi` or `inherit`. See
                [Languages](/api-reference/languages).
        summary:
          description: |
            How the summary is written.
          type: object
          properties:
            template:
              type: string
              description: >
                A built-in template's slug, such as `discovery_call`, a custom
                template's `tpl_` id, or `inherit`.
              example: tpl_01k6c4d5e6f7g8h9j0k1m2n3pq
            language:
              type: string
              description: >
                A language tag (see [Languages](/api-reference/languages)),
                `same_as_transcript` for the transcript's

                language, or `inherit`.
        branding:
          description: |
            How the notetaker is branded. Only with a `workspace:` condition.
          type: object
          properties:
            brand_kit_id:
              type: string
              description: >
                A brand kit, beginning with `brk_`, used by a workspace the key
                belongs to; `none` for MeetingKit's own

                branding; or `inherit`. Needs a plan with notetaker
                customization.
    Error:
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: string
          description: >-
            A stable snake_case word, safe to branch on. See
            [Errors](/api-reference/errors) for the list.
        message:
          type: string
          description: A sentence for humans. It may change; do not parse it.
        field:
          type: string
          description: >-
            The dotted path to the request field at fault, such as
            `recording.methods.bot.mode`. Present only when one field is.
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        Your API key, sent bare. See
        [Authentication](/api-reference/authentication).

````