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

# Create a Scheduling Page

> Create a one-on-one, group, round robin or collective scheduling page with its durations, locations, hosts, booking form and notifications. The page is bookable as soon as it is created.



## OpenAPI

````yaml POST /event-types
openapi: 3.0.0
info:
  title: Zeeg Public API
  description: >-
    Zeeg public API documentation.


    ## Authentication

    All endpoints require a Bearer token. You can generate an API token from
    [your Zeeg dashboard](https://app.zeeg.me/account/settings/api-access).


    Each token is scoped to specific permissions (e.g. `events:read`,
    `webhooks:write`). Make sure your token has the required scopes for the
    endpoints you want to use.


    ## Responses

    Every response is JSON, whatever `Accept` header the request sends.
  version: 2.0.0
  x-logo:
    url: https://app.zeeg.me/img/logo-dark.2ca83593.svg
    backgroundColor: '#f7f7f9'
    altText: zeeg
  contact:
    name: Zeeg Support
    email: support@zeeg.me
    url: https://zeeg.me/en/contact
  license:
    name: Proprietary
    url: https://zeeg.me/en/legal/terms
  termsOfService: https://zeeg.me/en/legal/terms
servers:
  - url: https://api.zeeg.me/v2
    description: Production
security:
  - bearer: []
tags:
  - name: Scheduled Events
    description: Management of events scheduled via Zeeg
  - name: Scheduling Pages
    description: Scheduling pages information and management
  - name: Availability Schedule
    description: Read and change availability for users
  - name: Webhooks
    description: Webhooks management
  - name: Notes
    description: Notes for scheduled events
  - name: Workspaces & Teams
    description: Workspace users and team member management
  - name: AI Agent
    description: AI Agent integration endpoints
  - name: Payloads
    description: Webhook payload schemas
  - name: CRM - Objects
    description: >-
      Discover the schema of CRM objects (standard and custom) including all
      attribute definitions
  - name: CRM - Companies
    description: Create, read, update, and delete CRM company records
  - name: CRM - People
    description: Create, read, update, and delete CRM person records
  - name: Routing Forms - Forms
    description: Read routing forms with their questions and their routes
  - name: Routing Forms - Submissions
    description: Read and delete the submissions that invitees send through a routing form
paths:
  /event-types:
    parameters: []
    post:
      tags:
        - Scheduling Pages
      summary: Create a scheduling page
      description: >-
        Creates a one-on-one, group, round robin or collective scheduling page
        and answers with it as fetching it returns it, `expand` included. The
        page is bookable at once unless `isActive` is false. The same call can
        set the booking form (`questionSettings`) and the notification settings
        (`notificationSettings`); the page and both are written together, so
        when any part is refused, nothing is created. Requires the
        `event_types:write` scope.
      operationId: post-api-event-types
      parameters:
        - $ref: '#/components/parameters/SchedulingPageExpand'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SchedulingPageCreate'
            examples:
              One-on-one phone call:
                value:
                  type: ONE_ON_ONE
                  title: Intro call
                  eventDurations:
                    - minutes: 30
                      default: true
                  locations:
                    - location: PHONE_CALL
                      options:
                        callType: I_WILL_CALL
              Group workshop:
                value:
                  type: GROUP
                  title: Onboarding workshop
                  maxActiveInvitees: 12
                  eventDurations:
                    - minutes: 60
                      default: true
                  locations:
                    - location: ZOOM
              Round robin for a team:
                value:
                  type: ROUND_ROBIN
                  title: Product demo
                  slug: product-demo
                  teamId: 9b1f3c52-4a7e-4d1b-9c6a-2e8f0d4b7a13
                  hosts:
                    - uuid: 9d4e2b1a-7c3f-4a5b-8e6d-0f1a2b3c4d5e
                      priority: 3
                    - uuid: 5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d
                  locations:
                    - location: GOOGLE_MEET
              With a booking form and notifications:
                value:
                  type: ONE_ON_ONE
                  title: Discovery call
                  locations:
                    - location: ZOOM
                  questionSettings:
                    askForPhoneNumber: true
                    questions:
                      - label: What would you like to discuss?
                        type: TEXTAREA
                        required: true
                      - label: Team size
                        type: SELECT
                        required: false
                        choices:
                          - 1-10
                          - 11-50
                          - 51+
                  notificationSettings:
                    inviteeConfirmation: email
                    customNotifications:
                      inviteeConfirmation:
                        subject: 'Confirmed: :scheduling_page_name on :event_start_date'
                        body: >-
                          <p>Hi :invitee_first_name, see you at
                          :event_start_time.</p>
      responses:
        '201':
          description: >-
            Created. The body is the page as `GET /event-types/{uuid}` returns
            it.
          content:
            application/json:
              schema:
                type: object
                required:
                  - resource
                properties:
                  resource:
                    $ref: '#/components/schemas/SchedulingPageDetail'
        '400':
          description: >-
            No host the body names is an active member of the team or workspace,
            or the team does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SchedulingPageWriteError'
              examples:
                No host:
                  value:
                    success: false
                    message: No host has been selected.
                    status: 400
        '401':
          $ref: '#/components/responses/401'
        '403':
          description: >-
            Your role does not allow this page to be written, for example a
            member creating a page for a team they do not manage.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SchedulingPageWriteError'
        '422':
          description: >-
            The body or `expand` is invalid (`errors` names each field), or your
            plan does not include this kind of page, the number of questions, or
            custom notification texts. Nothing is created.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  errors:
                    type: object
                    additionalProperties:
                      type: array
                      items:
                        type: string
              examples:
                Slug taken:
                  value:
                    message: The slug has already been taken.
                    errors:
                      slug:
                        - The slug has already been taken.
                Question without a label:
                  value:
                    message: The questionSettings.questions.0.label field is required.
                    errors:
                      questionSettings.questions.0.label:
                        - >-
                          The questionSettings.questions.0.label field is
                          required.
      security:
        - bearer: []
components:
  parameters:
    SchedulingPageExpand:
      in: query
      name: expand
      description: >-
        Comma-separated sub-resources to add to the page, each under its own
        key: `questionSettings`, the booking form as `GET
        /event-types/{uuid}/questions` returns it, and `notificationSettings`,
        the notification settings as `GET /event-types/{uuid}/notifications`
        returns them. The list form
        `expand[]=questionSettings&expand[]=notificationSettings` is read the
        same way. Needs a page you may manage, as those endpoints do. Any other
        name answers 422.
      required: false
      schema:
        type: string
        example: questionSettings,notificationSettings
  schemas:
    SchedulingPageCreate:
      type: object
      required:
        - type
        - title
      properties:
        type:
          type: string
          enum:
            - ONE_ON_ONE
            - GROUP
            - ROUND_ROBIN
            - COLLECTIVE
          description: >-
            `ONE_ON_ONE` books the page owner. `GROUP` books the page owner too,
            and lets up to `maxActiveInvitees` invitees book the same time slot;
            it takes one duration and at most one location. `ROUND_ROBIN` books
            one of the hosts, `COLLECTIVE` books every host at once. A group
            page needs a plan that includes group pages.
        title:
          type: string
          maxLength: 100
        slug:
          type: string
          description: >-
            The last part of the booking link. Defaults to one made from the
            title. A round robin or collective page without `teamId` always gets
            a generated slug.
        description:
          type: string
          nullable: true
          description: HTML shown on the booking page, up to 4000 visible characters.
        language:
          type: string
          enum:
            - en
            - de
            - de-du
            - nl
            - fi
            - es
            - fr
            - pl
            - da
            - sv
            - it
          description: >-
            The language of the booking page and of the emails its invitees get:
            `en` English, `de` German addressing the invitee formally (Sie),
            `de-du` German addressing the invitee informally (du), `nl` Dutch,
            `fi` Finnish, `es` Spanish, `fr` French, `pl` Polish, `da` Danish,
            `sv` Swedish, `it` Italian. Defaults to your own language. Any other
            value answers 422.
        eventDurations:
          type: array
          minItems: 1
          maxItems: 5
          items:
            $ref: '#/components/schemas/SchedulingPageDurationInput'
          description: Defaults to one 30-minute duration.
        locations:
          type: array
          maxItems: 10
          items:
            $ref: '#/components/schemas/SchedulingPageLocationInput'
        teamId:
          type: string
          description: >-
            The team that owns the page, by its id or slug. A team outside your
            workspace answers 422. Without it a one-on-one page belongs to you,
            and a round robin or collective page is shared across the workspace.
        hosts:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/SchedulingPageHostInput'
          description: >-
            Round robin and collective only, and required unless `allMembersIn`
            is true. With `teamId` every host must be a member of that team.
        allMembersIn:
          type: boolean
          description: >-
            Round robin and collective pages of a team only. Every team member
            is a host, now and as the team changes.
        maxActiveInvitees:
          type: integer
          minimum: 1
          maximum: 1000
          description: >-
            How many invitees one time slot takes. Required for a group page,
            which takes 2 or more. On a round robin page more than 1 lets
            several invitees book the same slot with the same host; defaults to
            1. Other types ignore it.
        isActive:
          type: boolean
          description: >-
            Defaults to true. When your plan allows no more active one-on-one or
            group pages, the page is created inactive and the response reads
            `isActive` false.
        questionSettings:
          allOf:
            - $ref: '#/components/schemas/SchedulingPageQuestionsReplace'
          description: >-
            The booking form, in the body `PUT /event-types/{uuid}/questions`
            takes. Every question is new, so none carries an `id`. Replaces the
            two default questions a new page starts with; without it the page
            keeps them. A refusal is keyed under this name, for example
            `questionSettings.questions.0.label`.
        notificationSettings:
          allOf:
            - $ref: '#/components/schemas/SchedulingPageNotificationsUpdate'
          description: >-
            The notification settings, in the body `PATCH
            /event-types/{uuid}/notifications` takes; a setting left out keeps
            the default a new page gets. A refusal is keyed under this name, for
            example
            `notificationSettings.customNotifications.inviteeConfirmation.body`.
    SchedulingPageDetail:
      description: >-
        A scheduling page (event type) with full details, as returned when
        fetching a single scheduling page. Extends the list shape with hosts,
        notifications, and Flexi configuration.
      allOf:
        - $ref: '#/components/schemas/SchedulingPage'
        - type: object
          properties:
            notifications:
              type: object
              description: >-
                Notification settings for this scheduling page, including
                invitee email behaviour, host email behaviour and the templates
                used by the dashboard UI.
              properties:
                inviteeConfirmation:
                  type: string
                  enum:
                    - calendar_invitation
                    - email
                    - none
                  description: >-
                    How the invitee is notified once a booking is confirmed.
                    `calendar_invitation` sends a calendar invite from the
                    host's connected calendar, `email` sends a Zeeg confirmation
                    email, `none` sends nothing.
                addEventLinkNotif:
                  type: boolean
                  description: >-
                    When true, invitee notification emails include a link to the
                    event detail page.
                excludePII:
                  type: boolean
                  description: >-
                    When true, host notification emails omit the invitee's
                    personal information.
                excludeHostEmails:
                  type: boolean
                  description: >-
                    When true, hosts do not receive confirmation, update or
                    cancellation emails for events booked on this scheduling
                    page.
                privateCalendarEvent:
                  type: boolean
                  description: >-
                    When true, the calendar event synced to the host's connected
                    calendar (Google, Microsoft or Exchange) is marked as
                    private, so people with access to the host's calendar see
                    only the busy time and not the subject, attendees or
                    location.
                defaultNotifications:
                  type: object
                  description: >-
                    Pre-filled default templates (subject, body and available
                    variables), keyed by notification type: the invitee emails
                    and calendar invitation in the scheduling page language, and
                    the texts the hosts read (the host confirmation and
                    cancellation emails and the CRM meeting notes) in the
                    requesting user's dashboard language. Primarily consumed by
                    the dashboard UI.
                  additionalProperties: true
                customNotifications:
                  type: object
                  description: >-
                    Customized template overrides (subject and body), keyed by
                    notification type. Only populated for notification types the
                    user has customized.
                  additionalProperties: true
                notificationVariables:
                  type: array
                  description: >-
                    Template variables available for use in custom notification
                    templates.
                  items:
                    type: object
                    properties:
                      key:
                        type: string
                      title:
                        type: string
            hosts:
              type: array
              description: >-
                Assigned hosts for the scheduling page. Populated for
                ONE_ON_ONE, GROUP, ROUND_ROBIN and COLLECTIVE pages. For FLEXI
                pages this array is empty; see `flexiCollections` instead.
              items:
                type: object
                properties:
                  uuid:
                    type: string
                    description: Stable identifier of the host user.
                  firstName:
                    type: string
                  lastName:
                    type: string
                    nullable: true
                  email:
                    type: string
                    format: email
                  avatarUrl:
                    type: string
                    format: uri
                    nullable: true
                  slug:
                    type: string
                  priority:
                    type: integer
                    nullable: true
                    description: Round-robin priority weighting, when applicable.
                  schedule:
                    nullable: true
                    allOf:
                      - $ref: '#/components/schemas/EmbeddedSchedule'
                      - type: object
                        required:
                          - isDefault
                        properties:
                          isDefault:
                            type: boolean
                            description: >-
                              Whether this is the host's default schedule, or
                              one dedicated to this page.
                    x-mint:
                      post:
                        - Alpha
                    description: >-
                      The availability schedule this host uses for this
                      scheduling page, inlined. Only populated when
                      `availabilityType` is `per_host`; `null` when the page
                      uses a shared schedule (see the top-level `schedule`).
            flexiCollections:
              type: array
              description: >-
                Host collections for FLEXI scheduling pages. Empty for all other
                page types.
              items:
                type: object
                properties:
                  hostStatus:
                    type: string
                  members:
                    type: array
                    items:
                      type: object
                      properties:
                        uuid:
                          type: string
                        firstName:
                          type: string
                        lastName:
                          type: string
                          nullable: true
                        email:
                          type: string
                          format: email
                        avatarUrl:
                          type: string
                          format: uri
                          nullable: true
                        slug:
                          type: string
            schedule:
              nullable: true
              allOf:
                - $ref: '#/components/schemas/EmbeddedSchedule'
              x-mint:
                post:
                  - Alpha
              description: >-
                The page-level availability schedule shared by all hosts,
                inlined with full hours (the list endpoint returns a reference
                only). Only populated when `availabilityType` is `shared`.
            currentTime:
              type: string
              format: date-time
              description: Current server time
            isSecret:
              type: boolean
            questionSettings:
              allOf:
                - $ref: '#/components/schemas/SchedulingPageQuestions'
              description: >-
                Present only when `expand` names it. The booking form as `GET
                /event-types/{uuid}/questions` returns it, hidden questions and
                CRM fields included.
            notificationSettings:
              allOf:
                - $ref: '#/components/schemas/SchedulingPageNotifications'
              description: >-
                Present only when `expand` names it. The notification settings
                as `GET /event-types/{uuid}/notifications` returns them, custom
                texts included.
    SchedulingPageWriteError:
      type: object
      properties:
        success:
          type: boolean
        message:
          type: string
        status:
          type: integer
    SchedulingPageDurationInput:
      type: object
      required:
        - minutes
        - default
      properties:
        minutes:
          type: integer
          minimum: 1
          maximum: 720
        default:
          type: boolean
          description: >-
            The duration the booking page preselects. Exactly one entry is the
            default.
    SchedulingPageLocationInput:
      type: object
      description: >-
        One location invitees can pick, in the shape `locations` has on a
        fetched scheduling page. The options each type needs:


        - `IN_PERSON`: `options.address` (required).

        - `PHONE_CALL`: `options.callType` (required). `I_WILL_CALL` means the
        host calls the invitee, so the booking asks for the invitee's phone
        number. `INVITEE_SHOULD_CALL` means the invitee calls the host and needs
        `options.phoneNumber` (up to 15 characters).

        - `CUSTUM`: `options.custom` (required), the text shown to the invitee.

        - `WHATSAPP`, `WHEREBY`, `JITSI`: `options.link` (required), the meeting
        link.

        - `GOOGLE_MEET`, `MICROSOFT_TEAMS`, `MICROSOFT_SKYPE`, `ZOOM`, `WEBEX`,
        `ALFAVIEW`, `DEMODESK`: no options; the meeting is created through the
        host's connected integration.


        `IN_PERSON`, `PHONE_CALL` and `CUSTUM` also take an optional
        `options.details` note (up to 250 characters).
      required:
        - location
      properties:
        location:
          type: string
          enum:
            - IN_PERSON
            - PHONE_CALL
            - GOOGLE_MEET
            - MICROSOFT_TEAMS
            - MICROSOFT_SKYPE
            - ZOOM
            - WEBEX
            - DEMODESK
            - ALFAVIEW
            - CUSTUM
            - WHATSAPP
            - WHEREBY
            - JITSI
        options:
          type: object
          properties:
            address:
              type: string
            callType:
              type: string
              enum:
                - I_WILL_CALL
                - INVITEE_SHOULD_CALL
            phoneNumber:
              type: string
            custom:
              type: string
            link:
              type: string
            details:
              type: string
        position:
          type: integer
          minimum: 0
          description: Order in which invitees see the locations.
    SchedulingPageHostInput:
      type: object
      required:
        - uuid
      properties:
        uuid:
          type: string
          description: >-
            The member's `uuid`, as `hosts[].uuid` of a fetched scheduling page
            or `GET /organizations/users` returns it.
        priority:
          type: integer
          minimum: 1
          maximum: 4
          description: >-
            Round robin only. How often the host is picked compared with the
            others, 1 lowest to 4 highest. Defaults to 2 on create; on update a
            host already on the page keeps its own.
    SchedulingPageQuestionsReplace:
      type: object
      required:
        - questions
      properties:
        questions:
          type: array
          description: >-
            The complete list in display order. A stored question the list
            leaves out is deleted; an empty list deletes every question.
          items:
            $ref: '#/components/schemas/SchedulingPageQuestionInput'
        askForPhoneNumber:
          type: boolean
          description: Left out, it keeps its value.
        allowAdditionalGuests:
          type: boolean
          description: >-
            Left out, it keeps its value. Has no effect while the workspace
            requires invitee email verification.
        nameFormat:
          type: string
          enum:
            - FULL_NAME
            - SEPARATED
            - SEPARATED_WITH_SALUTATION
          description: Left out, it keeps its value.
    SchedulingPageNotificationsUpdate:
      type: object
      description: Every field is optional; a field left out keeps its value.
      properties:
        inviteeConfirmation:
          type: string
          enum:
            - calendar_invitation
            - email
            - none
          description: >-
            A page with several invitees per slot stores `email` for
            `calendar_invitation`.
        addEventLinkNotif:
          type: boolean
          description: >-
            Removing the links needs a plan that allows it; on any other plan
            they stay in.
        privateCalendarEvent:
          type: boolean
        excludePII:
          type: boolean
        excludeHostEmails:
          type: boolean
        calendarAdditionalAttendees:
          type: array
          maxItems: 3
          items:
            type: string
            format: email
          description: >-
            Replaces the list; an empty list clears it. Each new address is
            asked to confirm before it receives anything. Needs a plan with
            notification forwarding; on any other plan the list is stored empty.
        customNotifications:
          description: >-
            Changes only the notifications it names. A subject or body left out
            keeps its stored text, so an email that has no text of its own yet
            needs both, or the call answers 422. A subject and body both left
            empty, or equal to the default, go back to the default text. Needs a
            plan with custom notifications.
          allOf:
            - $ref: '#/components/schemas/SchedulingPageCustomNotifications'
    SchedulingPage:
      type: object
      required:
        - uri
        - uuid
        - title
        - type
        - slug
        - schedulingUrl
        - isActive
        - duration
        - profile
        - color
        - language
        - maxActiveInvitees
        - inviteeNameFormat
      properties:
        uri:
          type: string
          format: uri
        uuid:
          type: string
          format: uuid
        title:
          type: string
        type:
          type: string
        slug:
          type: string
        schedulingUrl:
          type: string
          format: uri
        isActive:
          type: boolean
        duration:
          type: integer
        eventDurations:
          type: array
          description: The durations an invitee can pick, shortest first.
          items:
            type: object
            properties:
              minutes:
                type: integer
              default:
                type: boolean
              price:
                type: number
                nullable: true
                description: >-
                  Price charged for this duration on a paid scheduling page, in
                  the page currency. `null` when the duration is free.
                example: 10.5
        profile:
          type: object
          nullable: true
          required:
            - type
          properties:
            type:
              type: string
            firstName:
              type: string
            lastName:
              type: string
              nullable: true
            slug:
              type: string
            url:
              type: string
              format: uri
            avatarUrl:
              type: string
              format: uri
              nullable: true
            email:
              type: string
              format: email
        description:
          type: string
          nullable: true
        color:
          type: string
        language:
          type: string
          enum:
            - en
            - de
            - de-du
            - nl
            - fi
            - es
            - fr
            - pl
            - da
            - sv
            - it
          description: >-
            The language of the booking page and of the emails its invitees get:
            `en` English, `de` German addressing the invitee formally (Sie),
            `de-du` German addressing the invitee informally (du), `nl` Dutch,
            `fi` Finnish, `es` Spanish, `fr` French, `pl` Polish, `da` Danish,
            `sv` Swedish, `it` Italian.
        maxActiveInvitees:
          type: integer
        inviteeNameFormat:
          type: string
        inviteePhoneNumber:
          type: boolean
        inviteeQuestions:
          type: array
          nullable: true
          items:
            type: object
            required:
              - order
              - question
              - isActive
              - isRequired
              - type
            properties:
              id:
                type: integer
                description: >-
                  Numeric ID of the question, used when submitting answers via
                  the booking API.
              order:
                type: integer
              question:
                type: string
              isActive:
                type: boolean
              isRequired:
                type: boolean
              type:
                type: string
              options:
                type: array
                nullable: true
                items: {}
        availabilityType:
          type: string
          enum:
            - shared
            - per_host
          x-mint:
            post:
              - Alpha
          description: >-
            Where the availability schedule for this scheduling page lives.
            `shared` — one schedule is set on the page itself and applies to
            everyone; see `schedule`. `per_host` — each host has their own
            schedule for this page (COLLECTIVE / ROUND_ROBIN); the per-host
            schedules are returned on the single-page endpoint in
            `hosts[].schedule`.
        schedule:
          type: object
          nullable: true
          required:
            - uri
            - uuid
            - title
          x-mint:
            post:
              - Alpha
          description: >-
            Reference to the page-level availability schedule shared by all
            hosts. `null` when `availabilityType` is `per_host`. In list
            responses this is a reference only; the single-page endpoint inlines
            the full schedule (hours and overrides).
          properties:
            uri:
              type: string
              format: uri
              example: https://api.zeeg.me/v2/schedules/Q1ZYo391da
              description: API resource URI for this schedule
            uuid:
              type: string
              description: Schedule identifier
              example: Q1ZYo391da
            title:
              type: string
              description: Display name of the schedule
        confirmation:
          type: object
          required:
            - redirectEnabled
            - redirectUrl
            - confirmationDataInUrl
            - redirectDelay
          description: >-
            What happens after a booking is confirmed on this scheduling page.
            Always present, in its off state when no redirect is configured, so
            the fields can be read without first testing whether a redirect
            exists. Returned identically by this endpoint and by `GET
            /event-types/{uuid}`.
          properties:
            redirectEnabled:
              type: boolean
              description: >-
                Whether the invitee is sent to an external URL after booking
                instead of staying on the Zeeg confirmation page.
              example: true
            redirectUrl:
              type: string
              format: uri
              nullable: true
              description: >-
                Destination the invitee is sent to. Can be `null` while
                `redirectEnabled` is `true`, so test it before you use it.
              example: https://acme.com/thanks
            confirmationDataInUrl:
              type: boolean
              description: >-
                Whether the booking details are appended to `redirectUrl` as
                query parameters. Carries `invitee_uuid` and `assigned_to`
                alongside the start and end times, the guests, the invitee name
                and email, the answers to booking questions, and any `c__`
                custom query parameters. `invitee_uuid` is the same identifier
                the `invitee.scheduled` webhook sends as `inviteeUuid`.
              example: true
            redirectDelay:
              type: integer
              minimum: 0
              description: >-
                Seconds the confirmation page is shown before the redirect
                happens. `0` redirects immediately.
              example: 10
      description: A scheduling page (event type) as returned in list responses.
    EmbeddedSchedule:
      type: object
      description: >-
        An availability schedule embedded in a scheduling-page response. Same
        identifiers and hours vocabulary as the Availability Schedules
        endpoints; `uuid` can be used directly with `GET /schedules/{uuid}`.
        User-level time off (vacation, out-of-office) is per user, not per
        schedule, and is not embedded — fetch it via `GET
        /schedules?email={host}`.
      required:
        - uri
        - uuid
        - title
        - timezone
        - weeklyHours
        - specialHours
      properties:
        uri:
          type: string
          format: uri
          example: https://api.zeeg.me/v2/schedules/Q1ZYo391da
          description: API resource URI for this schedule
        uuid:
          type: string
          description: Schedule identifier
          example: Q1ZYo391da
        title:
          type: string
          description: Display name of the schedule
        timezone:
          type: string
          description: IANA timezone identifier
        weeklyHours:
          type: array
          items:
            type: object
            properties:
              day:
                type: string
                enum:
                  - Mon
                  - Tue
                  - Wed
                  - Thu
                  - Fri
                  - Sat
                  - Sun
                description: Day of the week (3-letter).
              timesets:
                type: array
                items:
                  type: array
                  minItems: 2
                  maxItems: 2
                  items:
                    type: string
                    pattern: ^\d{2}:\d{2}$
                description: Time intervals for the day
          description: Weekly recurring availability hours
        specialHours:
          type: array
          nullable: true
          items:
            type: object
            properties:
              date:
                type: string
                format: date
              timesets:
                type: array
                nullable: true
                items:
                  type: array
                  minItems: 2
                  maxItems: 2
                  items:
                    type: string
                    pattern: ^\d{2}:\d{2}$
          description: Date-specific availability overrides
    SchedulingPageQuestions:
      type: object
      required:
        - askForPhoneNumber
        - allowAdditionalGuests
        - nameFormat
        - questions
      properties:
        askForPhoneNumber:
          type: boolean
          description: Whether the booking form asks for the invitee's phone number.
        allowAdditionalGuests:
          type: boolean
          description: >-
            Whether invitees may add guests. Always false while the workspace
            requires invitee email verification, whatever was set.
        nameFormat:
          type: string
          enum:
            - FULL_NAME
            - SEPARATED
            - SEPARATED_WITH_SALUTATION
          description: >-
            One name field, first and last name, or first and last name with a
            salutation.
        questions:
          type: array
          description: Every question in display order, hidden ones included.
          items:
            $ref: '#/components/schemas/SchedulingPageQuestion'
    SchedulingPageNotifications:
      type: object
      required:
        - inviteeConfirmation
        - addEventLinkNotif
        - privateCalendarEvent
        - excludePII
        - excludeHostEmails
        - calendarAdditionalAttendees
        - customNotifications
      properties:
        inviteeConfirmation:
          type: string
          enum:
            - calendar_invitation
            - email
            - none
          description: How the invitee is told about the booking.
        addEventLinkNotif:
          type: boolean
          description: Whether invitee emails carry the links to reschedule or cancel.
        privateCalendarEvent:
          type: boolean
          description: Whether the calendar entry is marked private.
        excludePII:
          type: boolean
          description: >-
            Whether host emails and calendar entries leave out the invitee's
            details.
        excludeHostEmails:
          type: boolean
          description: Whether the hosts get no booking emails.
        calendarAdditionalAttendees:
          type: array
          maxItems: 3
          items:
            type: string
            format: email
          description: >-
            Addresses added to every calendar invitation once each has
            confirmed.
        customNotifications:
          description: >-
            Only the notifications with their own text; every other one sends
            its default.
          allOf:
            - $ref: '#/components/schemas/SchedulingPageCustomNotifications'
    SchedulingPageQuestionInput:
      type: object
      required:
        - label
        - type
        - required
      properties:
        id:
          type: integer
          description: >-
            The id of a question of this page to keep and update. Leave it out
            to add a question.
        label:
          type: string
          maxLength: 1024
        type:
          type: string
          enum:
            - TEXT_INPUT
            - TEXTAREA
            - SELECT
            - RADIO_INPUT
            - CHECKBOX
            - DATE_INPUT
            - PHONE_NUMBER
            - CRM_ATTRIBUTE
        required:
          type: boolean
        active:
          type: boolean
          default: true
          description: false hides the question without deleting it.
        choices:
          type: array
          minItems: 1
          maxItems: 20
          items:
            type: string
          description: >-
            Required for SELECT, RADIO_INPUT and CHECKBOX; ignored for other
            types.
        crmAttribute:
          type: object
          description: >-
            Required for CRM_ATTRIBUTE. Each attribute may back one question of
            the page.
          required:
            - objectSlug
            - attributeSlug
          properties:
            objectSlug:
              type: string
            attributeSlug:
              type: string
            overrideValue:
              type: boolean
              default: false
    SchedulingPageCustomNotifications:
      type: object
      description: >-
        Own texts per notification. Tags are written as `:tag`, for example
        `:invitee_full_name`, `:scheduling_page_name`, `:event_start_date`,
        `:event_start_time`, `:location`, `:meeting_link`, `:cancellation_link`,
        `:rescheduling_link` and `:questions_and_answers`; cancellation texts
        also take `:canceled_by` and `:cancellation_reason`.
      properties:
        inviteeConfirmation:
          description: The email the invitee gets when they book.
          allOf:
            - $ref: '#/components/schemas/SchedulingPageNotificationText'
        inviteeCancellation:
          description: The email the invitee gets when the booking is cancelled.
          allOf:
            - $ref: '#/components/schemas/SchedulingPageNotificationText'
        hostConfirmation:
          description: The email the hosts get for a new booking.
          allOf:
            - $ref: '#/components/schemas/SchedulingPageNotificationText'
        hostCancellation:
          description: The email the hosts get when a booking is cancelled.
          allOf:
            - $ref: '#/components/schemas/SchedulingPageNotificationText'
        inviteeInvitation:
          description: >-
            The calendar invitation. The subject is the event title, the body
            its description.
          allOf:
            - $ref: '#/components/schemas/SchedulingPageNotificationText'
        hubspot:
          description: The meeting note written to HubSpot for a booking.
          allOf:
            - $ref: '#/components/schemas/SchedulingPageNotificationText'
        hubspot_group:
          description: >-
            The HubSpot note for a booking on a page with several invitees per
            slot.
          allOf:
            - $ref: '#/components/schemas/SchedulingPageNotificationText'
        pipedrive:
          description: The meeting note written to Pipedrive for a booking.
          allOf:
            - $ref: '#/components/schemas/SchedulingPageNotificationText'
        pipedrive_group:
          description: >-
            The Pipedrive note for a booking on a page with several invitees per
            slot.
          allOf:
            - $ref: '#/components/schemas/SchedulingPageNotificationText'
        salesforce:
          description: The meeting note written to Salesforce for a booking.
          allOf:
            - $ref: '#/components/schemas/SchedulingPageNotificationText'
        salesforce_group:
          description: >-
            The Salesforce note for a booking on a page with several invitees
            per slot.
          allOf:
            - $ref: '#/components/schemas/SchedulingPageNotificationText'
    SchedulingPageQuestion:
      type: object
      required:
        - id
        - label
        - type
        - required
        - active
        - choices
        - crmAttribute
      properties:
        id:
          type: integer
          example: 812
        label:
          type: string
          example: What would you like to discuss?
        type:
          type: string
          enum:
            - TEXT_INPUT
            - TEXTAREA
            - SELECT
            - RADIO_INPUT
            - CHECKBOX
            - DATE_INPUT
            - PHONE_NUMBER
            - CRM_ATTRIBUTE
        required:
          type: boolean
        active:
          type: boolean
          description: false while the question is hidden from the booking form.
        choices:
          type: array
          nullable: true
          items:
            type: string
          description: >-
            The answers to pick from, for SELECT, RADIO_INPUT and CHECKBOX; null
            for other types.
        crmAttribute:
          type: object
          nullable: true
          description: >-
            The CRM field the answer is saved to, for CRM_ATTRIBUTE; null for
            other types.
          properties:
            objectSlug:
              type: string
              example: people
            attributeSlug:
              type: string
              example: job_title
            overrideValue:
              type: boolean
              description: true overwrites a value the CRM record already holds.
    SchedulingPageNotificationText:
      type: object
      required:
        - subject
        - body
      properties:
        subject:
          type: string
          maxLength: 500
          example: 'Confirmed: :scheduling_page_name on :event_start_date'
        body:
          type: string
          maxLength: 3000
          description: >-
            Simple HTML (p, br, b, strong, i, em, u, a, ul, ol, li, blockquote,
            code, span, div, table). The lengths count text without markup.
          example: <p>Hi :invitee_first_name, see you at :event_start_time.</p>
        isModerationValid:
          type: boolean
          readOnly: true
          description: >-
            false when moderation rejected this text. It is not sent, and the
            default text goes out instead.
  responses:
    '401':
      description: Unauthorized
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                example: Unauthenticated.
          examples:
            Unauthenticated:
              value:
                message: Unauthenticated.
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      description: ''

````

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