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

# Update a booking event type

> Update an event type; only provided fields change.

**Required scope:** `bookings:write` (keys without scope restrictions have full access).



## OpenAPI

````yaml /api-reference/openapi.json patch /booking-event-types/{id}
openapi: 3.1.0
info:
  title: Famulor API
  version: 1.0.0
  description: >-
    REST API for Famulor. Authenticate with an API key (`fam_...`, created under
    **Settings → API Keys**) or an OAuth 2.0 access token (`fam_at_...`) as a
    Bearer token.


    Every response uses a consistent envelope: `{ "data": ... , "meta": { ... }
    }` on success and `{ "error": { "code", "message" } }` on failure. List
    endpoints paginate with `?limit=` (default 50, max 200) and `?offset=`;
    `meta.pagination.total` carries the total match count.


    REST operations require API Access through the workspace plan or a recurring
    add-on. Without it, regular operations return `403 api_access_required`. The
    invoice-payment and billing-portal operations remain available with a valid
    `billing:write` credential after a failed plan payment so an authorized
    owner, admin, or billing member can recover billing.


    The same customer-facing capabilities are available as MCP tools at
    `https://app.famulor.io/mcp` (Model Context Protocol, streamable HTTP) using
    the same credentials, scopes, and workspace access. MCP availability is
    controlled separately by Connect AI / MCP, not by API Access.
servers:
  - url: https://app.famulor.io/api/v1
    description: Hosted platform.
  - url: https://{domain}/api/v1
    description: White-label tenant domain — same paths, tenant branding.
    variables:
      domain:
        default: app.famulor.io
        description: Your white-label tenant domain.
security:
  - bearerAuth: []
tags:
  - name: Account
    description: Self-inspection of the calling credential.
  - name: Migrations
    description: Preview and import data from supported legacy platforms.
  - name: Assistants
    description: Create and manage voice assistants.
  - name: Tools
    description: >-
      Reusable tools (HTTP APIs and external MCP servers) assistants can call
      mid-conversation.
  - name: Voices
    description: Browse the text-to-speech voice library.
  - name: Calls
    description: Start outbound calls and read call history, transcripts and recordings.
  - name: History
    description: Unified conversation history across calls, messaging and assistant emails.
  - name: Campaigns
    description: Outbound calling campaigns with a compliant power dialer.
  - name: Leads
    description: Manage Audience contacts across campaigns, channels and Call QA metrics.
  - name: Segments
    description: >-
      Saved, dynamic lead filters — reusable audience definitions used for
      Audience search and campaign lead assignment.
  - name: Suppression
    description: Cross-channel marketing opt-outs and active workspace suppression records.
  - name: Callbacks
    description: >-
      Scheduled callbacks booked by the Schedule callback tool across voice,
      chat, and email.
  - name: Phone Numbers
    description: Marketplace numbers and customer-provided numbers.
  - name: Famulor Loop
    description: >-
      Personal business-phone access, directory, presence, devices, and Loop
      call recents.
  - name: SIP Trunks
    description: Bring your own SIP provider and numbers.
  - name: Carrier Connections
    description: Connect a supported carrier account and import its existing phone numbers.
  - name: Knowledge Bases
    description: RAG knowledge bases and documents for assistants.
  - name: Settings
    description: Workspace-level settings such as caller-memory defaults.
  - name: Billing
    description: Balance and transaction ledger of the API key's workspace.
  - name: Automations
    description: >-
      Native workspace automations — list, create, update, trigger. Requires
      Automations in the workspace plan.
  - name: Milian Missions
    description: Recurring jobs that Milian runs unattended on schedule.
  - name: Integrations
    description: >-
      Calendar integrations (Cal.com, Calendly, Acuity Scheduling, Google
      Calendar, Outlook, native booking engine). Assign them to assistants to
      provide availability and booking tools, plus provider-supported
      appointment lookup, cancellation, and rescheduling.
  - name: Bookings
    description: >-
      Native booking engine — event types with weekly availability, public
      booking pages at /book/{workspace}/{slug}, and the bookings they produce.
  - name: Dashboards
    description: >-
      Custom analytics dashboards, reusable widgets, and tenant-scoped
      performance analytics. Requires Custom dashboards in the workspace plan.
  - name: Catalog
    description: >-
      Read-only platform catalogs — available models, supported assistant
      languages, and prompt templates.
  - name: Simulations
    description: Assistant simulation tests (plan-gated).
  - name: Versions
    description: Assistant configuration version history.
  - name: Caller IDs
    description: Outbound caller ID verification.
  - name: Widgets
    description: Web widget connectors.
  - name: Messaging
    description: >-
      Telegram, Slack, and Messenger text bots linked to assistants (Chat SDK).
      Includes conversation delay, inactivity end, and conversation-ended
      webhooks.
  - name: QA
    description: Cohort AI Quality Assurance runs over call transcripts.
  - name: White Label
    description: >-
      Manage white-label customer accounts, defaults, credit transfers and
      customer plan offers. Each endpoint documents its required scope and
      workspace eligibility.
  - name: API Keys
    description: >-
      Self-service API keys for the calling workspace or a same-brand workspace
      where the credential's user is owner/admin. A key can only mint further
      keys with a scope subset of its own.
  - name: Workspaces
    description: >-
      List visible workspaces, create an additional workspace for the key owner,
      and mint a dedicated credential for a selected owner/admin workspace.
  - name: SMS
    description: Outbound SMS from workspace phone numbers.
  - name: Milian
    description: >-
      Ask Milian, the AI co-worker in your workspace, and start voice sessions
      with it.
  - name: Translation
    description: >-
      Live translation sessions that interpret a conversation between two
      languages.
paths:
  /booking-event-types/{id}:
    patch:
      tags:
        - Bookings
      summary: Update a booking event type
      description: >-
        Update an event type; only provided fields change.


        **Required scope:** `bookings:write` (keys without scope restrictions
        have full access).
      operationId: updateBookingEventType
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Event type ID
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BookingEventTypeInput'
      responses:
        '200':
          description: The updated event type.
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  data:
                    $ref: '#/components/schemas/BookingEventType'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '503':
          $ref: '#/components/responses/RequestProtectionUnavailable'
components:
  schemas:
    BookingEventTypeInput:
      type: object
      required:
        - name
        - slug
        - duration_min
        - timezone
        - availability
      properties:
        name:
          type: string
          maxLength: 128
        slug:
          type: string
          pattern: ^[a-z0-9-]{3,64}$
        duration_min:
          type: integer
          minimum: 5
          maximum: 480
        timezone:
          type: string
          example: Europe/Berlin
        availability:
          type: object
          example:
            mon:
              - start: '09:00'
                end: '17:00'
            fri:
              - start: '09:00'
                end: '12:00'
        description:
          type: string
          maxLength: 2000
        buffer_before_min:
          type: integer
          default: 0
        buffer_after_min:
          type: integer
          default: 0
        min_notice_min:
          type: integer
          default: 60
        max_days_ahead:
          type: integer
          default: 30
        slot_increment_min:
          type:
            - integer
            - 'null'
        reminder_hours:
          type:
            - integer
            - 'null'
        is_active:
          type: boolean
          default: true
        booking_fields:
          type: array
          maxItems: 30
          description: >-
            Custom booking questions, in display order. Name is always required;
            email_required and phone_required control the system contact fields.
          items:
            $ref: '#/components/schemas/BookingField'
        phone_required:
          type: boolean
          default: false
          description: >-
            Require the visitor's phone number (E.164) to book. When false
            (default), phone is still asked but optional.
        email_required:
          type: boolean
          default: true
          description: >-
            Whether an invitee email is required. Google Meet and Microsoft
            Teams always require a valid email.
        sender_email_address_id:
          type: string
          format: uuid
          nullable: true
          description: >-
            Active verified email address belonging to this workspace. Null uses
            automatic workspace or inherited reseller SMTP, then the platform
            identity for eligible workspaces.
        confirmation_email_subject:
          type: string
          nullable: true
          maxLength: 200
          description: >-
            Custom initial confirmation subject; empty uses the standard
            subject. Supports the same booking variables as the message.
        confirmation_email_body:
          type: string
          nullable: true
          maxLength: 10000
          description: >-
            Custom plain-text confirmation. Supported variables are returned by
            GET /booking-email-templates. Blank/null restores the localized
            standard message.
        email_templates:
          type: object
          nullable: true
          additionalProperties: false
          description: >-
            Complete replacement of the six additional guest/host email
            templates. Omit to preserve saved values; null or {} restores all
            six defaults. Confirmation uses the existing confirmation
            subject/body fields. GET /booking-email-templates returns standard
            templates and supported variables.
          properties:
            cancellation:
              $ref: '#/components/schemas/BookingEmailTemplate'
            reschedule:
              $ref: '#/components/schemas/BookingEmailTemplate'
            reminder:
              $ref: '#/components/schemas/BookingEmailTemplate'
            host_confirmation:
              $ref: '#/components/schemas/BookingEmailTemplate'
            host_cancellation:
              $ref: '#/components/schemas/BookingEmailTemplate'
            host_reschedule:
              $ref: '#/components/schemas/BookingEmailTemplate'
        email_locale:
          type: string
          nullable: true
          enum:
            - en
            - de
            - fr
            - es
            - null
          description: >-
            Language of the standard booking email texts (guest and host) for
            this event type. null (default) uses each recipient's language.
            Custom subject/body text is sent as written.
        guest_emails_enabled:
          type: boolean
          default: true
          description: >-
            Send emails to the invitee. false = no confirmation, cancellation,
            reschedule or reminder emails to guests and no invitations from the
            connected calendar (the guest is not added as an attendee); host
            notifications still send.
        hour_cycle:
          type: string
          enum:
            - 12h
            - 24h
          default: 24h
          description: >-
            Time format for the weekly availability editor and host emails.
            Availability values remain HH:mm. Guest emails follow the guest's
            saved booking-page preference, falling back to this format for older
            bookings.
    BookingEventType:
      type: object
      description: >-
        An event type of the native booking engine. Each active event type has a
        public, embeddable booking page at `/book/{workspace}/{slug}`.
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        slug:
          type: string
          pattern: ^[a-z0-9-]{3,64}$
          description: >-
            Unique within the workspace; public page URL is
            /book/{workspace}/{slug}.
        workspace:
          type: string
          description: >-
            Tenant booking_handle used in the public URL
            /book/{workspace}/{slug}.
        description:
          type: string
        duration_min:
          type: integer
          minimum: 5
          maximum: 480
        timezone:
          type: string
          description: IANA timezone the weekly availability is defined in.
        availability:
          type: object
          description: >-
            Weekly windows: `{ "mon": [{"start":"09:00","end":"17:00"}], …
            "sun": [] }` ("HH:MM" 24h, non-overlapping per day).
        buffer_before_min:
          type: integer
        buffer_after_min:
          type: integer
        min_notice_min:
          type: integer
        max_days_ahead:
          type: integer
        slot_increment_min:
          type:
            - integer
            - 'null'
          description: Slot step in minutes; null = duration_min.
        calendar_connection_id:
          type:
            - string
            - 'null'
          description: >-
            Optional Google/Outlook connection for free/busy subtraction + event
            push.
        reminder_hours:
          type:
            - integer
            - 'null'
          description: Reminder email N hours before the meeting; null = no reminder.
        is_active:
          type: boolean
        booking_fields:
          type: array
          maxItems: 30
          description: >-
            Custom booking questions, in display order. Name is always required;
            email_required and phone_required control the system contact fields.
          items:
            $ref: '#/components/schemas/BookingField'
        phone_required:
          type: boolean
          description: >-
            Whether the system "Phone" field is required to book. When false,
            phone is still asked but optional.
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        email_required:
          type: boolean
          default: true
          description: >-
            Whether an invitee email is required. Google Meet and Microsoft
            Teams always require a valid email.
        sender_email_address_id:
          type: string
          format: uuid
          nullable: true
          description: >-
            Active verified email address belonging to this workspace. Null uses
            automatic workspace or inherited reseller SMTP, then the platform
            identity for eligible workspaces.
        confirmation_email_subject:
          type: string
          nullable: true
          maxLength: 200
          description: >-
            Custom initial confirmation subject; empty uses the standard
            subject. Supports the same booking variables as the message.
        confirmation_email_body:
          type: string
          nullable: true
          maxLength: 10000
          description: >-
            Custom plain-text confirmation. Supported variables are returned by
            GET /booking-email-templates. Blank/null restores the localized
            standard message.
        email_templates:
          type: object
          nullable: true
          additionalProperties: false
          description: >-
            Complete replacement of the six additional guest/host email
            templates. Omit to preserve saved values; null or {} restores all
            six defaults. Confirmation uses the existing confirmation
            subject/body fields. GET /booking-email-templates returns standard
            templates and supported variables.
          properties:
            cancellation:
              $ref: '#/components/schemas/BookingEmailTemplate'
            reschedule:
              $ref: '#/components/schemas/BookingEmailTemplate'
            reminder:
              $ref: '#/components/schemas/BookingEmailTemplate'
            host_confirmation:
              $ref: '#/components/schemas/BookingEmailTemplate'
            host_cancellation:
              $ref: '#/components/schemas/BookingEmailTemplate'
            host_reschedule:
              $ref: '#/components/schemas/BookingEmailTemplate'
        email_locale:
          type: string
          nullable: true
          enum:
            - en
            - de
            - fr
            - es
            - null
          description: >-
            Language of the standard booking email texts (guest and host) for
            this event type. null (default) uses each recipient's language.
            Custom subject/body text is sent as written.
        guest_emails_enabled:
          type: boolean
          default: true
          description: >-
            Send emails to the invitee. false = no confirmation, cancellation,
            reschedule or reminder emails to guests and no invitations from the
            connected calendar (the guest is not added as an attendee); host
            notifications still send.
        hour_cycle:
          type: string
          enum:
            - 12h
            - 24h
          default: 24h
          description: >-
            Time format for the weekly availability editor and host emails.
            Availability values remain HH:mm. Guest emails follow the guest's
            saved booking-page preference, falling back to this format for older
            bookings.
    BookingField:
      type: object
      description: >-
        A custom booking question asked on the public booking page. Answers are
        keyed by `id` on a booking's `answers` object and can be prefilled on
        the public booking page via the matching URL parameter.
      required:
        - id
        - type
        - label
        - required
      properties:
        id:
          type: string
          pattern: ^[a-z][a-z0-9_-]{0,39}$
          description: >-
            Identifier, unique within the event type. Doubles as the answers key
            and the URL prefill parameter, e.g. ?company=Acme. Reserved and not
            allowed: name, email, phone, notes, start, timezone, website,
            answers, call_id.
        type:
          type: string
          enum:
            - email
            - phone
            - address
            - short_text
            - number
            - long_text
            - select
            - multiselect
            - multiple_emails
            - checkbox_group
            - radio_group
            - checkbox
            - url
          description: Input type shown on the booking page.
        label:
          type: string
          minLength: 1
          maxLength: 120
          description: Question label shown to the visitor.
        placeholder:
          type: string
          maxLength: 120
        required:
          type: boolean
          description: Whether the visitor must answer this question before booking.
        options:
          type: array
          items:
            type: string
            maxLength: 80
          minItems: 1
          maxItems: 50
          uniqueItems: true
          description: >-
            Choices, in display order. Required for select, multiselect,
            checkbox_group and radio_group; unused for other types.
        disable_if_prefilled:
          type: boolean
          description: >-
            When true, the field becomes read-only on the public page if its
            value was prefilled via URL parameter.
    BookingEmailTemplate:
      type: object
      nullable: true
      additionalProperties: false
      properties:
        subject:
          type: string
          nullable: true
          maxLength: 200
          description: >-
            Single-line subject with booking template variables. Blank/null
            restores the standard subject.
        body:
          type: string
          nullable: true
          maxLength: 10000
          description: >-
            Plain-text message with booking template variables. Blank/null
            restores the standard message.
    ErrorEnvelope:
      type: object
      description: Error envelope returned by every /api/v1 endpoint on failure.
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              enum:
                - unauthorized
                - forbidden
                - api_access_required
                - not_found
                - invalid_request
                - rate_limited
                - conflict
                - telephony_configuration_error
                - telephony_unavailable
                - destination_forbidden
                - internal_error
                - service_unavailable
              description: >-
                Stable, machine-readable error code. `service_unavailable` is
                returned by POST /bookings and GET
                /booking-event-types/{id}/slots specifically when the
                availability engine could not be reached (see
                AvailabilityOrProtectionUnavailable).
            message:
              type: string
              description: Human-readable description of the error.
  responses:
    BadRequest:
      description: Invalid request body or parameters.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            error:
              code: invalid_request
              message: '"to_number" is required (E.164 format, e.g. +4930123456).'
    Unauthorized:
      description: Missing, invalid, expired or revoked API key / access token.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            error:
              code: unauthorized
              message: Invalid API key.
    Forbidden:
      description: >-
        The credential lacks the required scope or role, or the workspace does
        not have the required capability.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          examples:
            scopeDenied:
              summary: Required scope is missing
              value:
                error:
                  code: forbidden
                  message: >-
                    This API key is missing the required scope
                    "assistants:write".
            apiAccessRequired:
              summary: API Access is not available
              value:
                error:
                  code: api_access_required
                  message: >-
                    API Access is not available for this workspace. Review
                    Settings → Plan.
    NotFound:
      description: Resource not found (or it belongs to another workspace).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            error:
              code: not_found
              message: Assistant not found
    RateLimited:
      description: Too many requests. Retry after the indicated delay.
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
            minimum: 1
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            error:
              code: rate_limited
              message: Too many requests. Retry after the indicated delay.
    RequestProtectionUnavailable:
      description: Request protection is temporarily unavailable.
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
            minimum: 1
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            error:
              code: internal_error
              message: Request protection is temporarily unavailable.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API key
      description: >-
        API key (`fam_...`, created under **Settings → API Keys**) or an OAuth
        2.0 access token (`fam_at_...`). REST operations also require API Access
        for the credential's workspace. Keys can be restricted to scopes such as
        `assistants:read`, `calls:write`, `campaigns:write`, `automations:read`,
        `dashboards:read`, `dashboards:write`, `leads:write`, `segments:write`,
        `loop:read`, `loop:write`, `phone_numbers:write`, `sip_trunks:write`,
        `knowledge:write`, `voices:read`, `billing:read`, `billing:write`,
        `settings:write`, `platform:read`, `platform:write`; a `*:write` scope
        implies the matching `*:read`. Automation and dashboard endpoints also
        accept the legacy `calls:*` scope. Keys without scope restrictions have
        full access within the workspace's available capabilities.

````

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