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

# Create appointment booking

> Books an appointment with a specified host for a given meeting type and time slot. Returns appointment confirmation details.



## OpenAPI

````yaml /openapi.json post /v4/booking
openapi: 3.0.0
info:
  title: meetergo Platform API
  description: >-
    Comprehensive scheduling API for creating users, managing availability,
    handling bookings, and connecting calendar providers. Enables seamless
    integration with external platforms and applications.
  version: 0.0.0
  contact: {}
  termsOfService: https://www.meetergo.com/tos/
servers: []
security: []
tags:
  - name: User V4
    description: Create and manage users in your workspace
  - name: Meeting Type V4
    description: Configure meeting templates with durations, buffers, and conferencing
  - name: availability
    description: Manage weekly schedules and availability settings
  - name: Booking V4
    description: Create new bookings
  - name: Booking Availability V4
    description: Query available time slots for booking
  - name: Appointment V4
    description: Manage existing appointments
  - name: Attendee V4
    description: Manage attendee details and notes
  - name: Calendar Connections V4
    description: Connect and sync external calendars
  - name: One Time Booking Link V4
    description: Create single-use booking links
  - name: availability-exception
    description: Override availability for specific dates
  - name: Booking Link V4
    description: Configure various booking page types
  - name: Personal Page V4
    description: Manage user profile pages
  - name: Handoff V4
    description: Reassign meetings to other hosts
  - name: Calendar Auth V4
    description: OAuth callbacks for calendar providers
  - name: Queue V4
    description: Round-robin and queue-based routing (Beta)
  - name: Queue User Group V4
    description: Manage queue user groups (Beta)
  - name: Meeting Type Template V4
    description: Reusable meeting type configurations (Beta)
  - name: Attendee Pending V4
    description: Manage pending attendee approvals (Beta)
  - name: Provisional Booking V4
    description: Manage provisional/unconfirmed bookings (Beta)
paths:
  /v4/booking:
    post:
      tags:
        - Booking V4
      summary: Create appointment booking
      description: >-
        Books an appointment with a specified host for a given meeting type and
        time slot. Returns appointment confirmation details.
      operationId: bookAppointment
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BookingDto'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookingResponseDto'
        default:
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookingResponseDto'
components:
  schemas:
    BookingDto:
      type: object
      properties:
        attendee:
          $ref: '#/components/schemas/CreateAttendeeDto'
        meetingTypeId:
          type: string
          description: ID of the meeting type to book.
        hostIds:
          description: >-
            Host IDs for the booking.

            Required for one-on-one bookings (specific host selection).

            Optional for round-robin/queue bookings where queueId is provided
            instead.
          type: array
          items:
            type: string
        start:
          type: string
        appointmentId:
          type: string
        location:
          type: string
        queueId:
          type: string
          description: >-
            required when meeting type has a queue (round-robin / co-host)

            must be undefined for non-queue meetings (one-to-one / group)

            if host selection is true, queue id is required if fastest host
            selection is chosen

            if hosts selection is true, queue id must be undefined if a specific
            host is chosen
        channel:
          allOf:
            - $ref: '#/components/schemas/MeetingTypeChannel'
        duration:
          type: number
          description: >-
            Duration in minutes for the booking. Optional.

            If not provided, uses the meeting type's default duration.

            If provided, must match either the default duration or one of the
            allowed durations configured for the meeting type.

            Primarily needed when meeting type has multiple duration options
            (allowedDurations).
        routingFormId:
          type: string
        ignoreAvailability:
          type: boolean
          description: >-
            Used mainly for instant booker to skip availability checks and
            payment validation for hosts
        attendeePendingId:
          type: number
          description: >-
            ID of pending attendee that will be deleted after successful
            booking.

            This is only needed when "collect during form entry" feature is
            used.

            If not provided, a successful booking may show up in pending
            contacts.
        paymentId:
          type: string
        paymentProvider:
          description: >-
            Selected payment provider for this booking.

            Required when the meeting type has multiple payment providers
            enabled.

            If not provided, falls back to the first enabled provider.
          allOf:
            - $ref: '#/components/schemas/PaymentProvider'
        couponCode:
          type: string
          description: >-
            Coupon code for a discount on paid bookings.

            Validated during payment order creation and re-validated at booking
            time.
          maxLength: 32
        resourceChannelIds:
          description: Ids of the resource channel entity
          type: array
          items:
            type: string
        oneTimeLinkId:
          type: string
          description: >-
            Id of the one time booking link.

            Required in order to invalidate the booking link, once booking is
            done
        skipNotifications:
          type: boolean
          description: Skip sending email notifications to the attendee for this booking
        phoneOnlyBooking:
          type: boolean
          description: >-
            When true, attendee email is not required and phone becomes the
            identifier.

            Requires the meeting type to have `allowPhoneOnlyBooking` enabled in
            its options.

            Designed for voice agent / phone scheduling use cases where
            collecting email

            from the caller is not viable.
        icsTitle:
          type: string
          description: >-
            Custom ICS calendar invite title. If provided, overrides the
            configured

            meeting type ICS title for this specific booking.

            Useful for AI-generated titles based on conversation context (e.g.,
            from calgent).
          maxLength: 200
        icsDescription:
          type: string
          description: >-
            Custom ICS calendar invite description. If provided, overrides the
            configured

            meeting type ICS description for this specific booking.

            Useful for AI-generated descriptions based on conversation context
            (e.g., from calgent).
          maxLength: 2000
        rwgToken:
          type: string
          description: |-
            Google Actions Center token for conversion tracking.
            This token is passed via the rwg_token URL parameter when users
            click through from Google Maps/Search.
          maxLength: 500
        rwgMerchantId:
          type: string
          description: |-
            Merchant ID associated with the rwg_token for Google Actions Center.
            Used to determine if merchant changed during booking flow.
        bookingPassword:
          type: string
          description: |-
            Password for accessing a password-protected booking page.
            Required when the meeting type has password protection enabled.
        waitlistToken:
          type: string
          description: >-
            Waitlist unsubscribe token. When provided (from the ?wl= URL param
            on the booking link),

            the corresponding waitlist entry is removed after successful booking
            and the attendee

            is tagged as originating from the waitlist.
      required:
        - attendee
        - meetingTypeId
        - start
    BookingResponseDto:
      type: object
      properties:
        appointmentId:
          type: string
          description: ID of appointment. Undefined if DOI flow and not confirmed yet.
        secret:
          type: string
        attendeeEmail:
          type: string
        bookingType:
          description: >-
            Only defined if DOI flow is enabled. If undefined, its a normal
            booking
          enum:
            - doubleOptIn
            - requireHostConfirmation
          type: string
        provisionalBookingId:
          type: string
          description: ID of provsionalBooking. Undefined if its a normal booking.
        redirectUrl:
          type: string
          description: >-
            Redirect URL to navigate to after booking (with any variables
            replaced).

            Only set if meeting type has redirect enabled and a URL is
            configured.

            This is the single source of truth for redirects.
        recurringSeriesId:
          type: string
          description: |-
            ID of the recurring series if this is a recurring booking.
            Undefined for non-recurring bookings.
        recurringOccurrences:
          type: number
          description: |-
            Total number of occurrences booked if this is a recurring booking.
            Undefined for non-recurring bookings.
        appointmentIds:
          description: |-
            IDs of all appointments created in this recurring booking.
            Undefined for non-recurring bookings.
          type: array
          items:
            type: string
        bundleId:
          type: string
          description: |-
            ID of the bundle if this is a bundle booking.
            Undefined for non-bundle bookings.
        isBundleBooking:
          type: boolean
          description: Whether this is a bundle booking.
    CreateAttendeeDto:
      type: object
      properties:
        email:
          type: string
          description: |-
            Attendee email address. Required for all standard bookings.
            Optional only when `BookingDto.phoneOnlyBooking` is true.
            Validated as email format when provided.
          format: email
        firstname:
          type: string
          description: Either fullname or firstname/lastname is required
        lastname:
          type: string
          description: Either fullname or firstname/lastname is required
        fullname:
          type: string
          description: Either fullname or firstname/lastname is required
        receiveReminders:
          type: boolean
        bringalongEmails:
          description: Additional attendee emails (max 5)
          maxItems: 5
          type: array
          items:
            type: string
            format: email
        notes:
          type: object
          description: An object containing attendee form entries.
          additionalProperties:
            type: string
        phone:
          type: string
        language:
          allOf:
            - $ref: '#/components/schemas/Language'
        timezone:
          type: string
        dataPolicyAccepted:
          type: boolean
      required:
        - receiveReminders
        - notes
    MeetingTypeChannel:
      type: string
      enum:
        - local
        - local-attendee
        - google
        - zoom
        - phone
        - phone-incoming
        - whatsapp
        - connect
        - webex
        - skypeForConsumer
        - skypeForBusiness
        - teamsForBusiness
        - teamsForBusiness2
        - teamsForExchange
        - teams2ForExchange
        - custom
        - resource
        - whereby
        - kmeet
        - zava
        - jitsi
      description: Meeting channel/location type
    PaymentProvider:
      type: string
      enum:
        - paypal
        - stripe
        - none
    Language:
      type: string
      enum:
        - en
        - de
        - fr
        - es
        - 'no'
        - nl
        - it
        - pl
        - sv
        - tr
        - da

````