Skip to main content
Bookings (appointments) represent scheduled meetings between hosts and attendees. Each booking links a meeting type to a specific time slot.

Booking Lifecycle

Create a Booking

Request Body

*Either hostIds or queueId is required

Attendee Object

*Not required when phoneOnlyBooking is true and the meeting type has allowPhoneOnlyBooking enabled. See Voice AI Bot for details. See Create Booking API Reference for full field documentation, examples with custom ICS content, and UTM tracking.

Response (Standard)

Store the secret to cancel or reschedule without authentication.

Response (Double Opt-In)

If the meeting type requires email confirmation:
The booking is finalized after the attendee confirms via email.

Get Appointments

Get Paginated Appointments

Get Single Appointment

Response

Cancel an Appointment

As Host (Authenticated)

With Secret (Unauthenticated)

For self-service cancellation by attendees:
Both methods trigger:
  • Cancellation emails to all parties
  • booking_cancelled webhook event
  • Calendar event removal (if integrated)

Reschedule an Appointment

With Secret (Unauthenticated)

As Host (Authenticated)

Response

Rescheduling triggers:
  • Updated calendar invites
  • Notification emails
  • booking_rescheduled webhook event

Meeting Transcription & Summary

After a meeting takes place, you can attach a transcription and/or an AI-generated summary. Both fields accept markdown-formatted text, making them ideal for structured meeting records. This is designed for integrations with transcription services (e.g. Otter.ai, Fireflies, Whisper), AI meeting assistants, or any tool that produces meeting records.

Update Transcription

Request Body

Reading Transcription Data

The transcription and summary fields are included in the appointment response when you fetch an appointment:
Both fields are null by default until populated. They are returned in all authenticated appointment endpoints (single, paginated, today, current).

Form Fields and UTM Parameters

Pass form field responses and UTM tracking data via attendee.notes:
Notes values are:
  • Included in webhook payloads
  • Visible in the dashboard
  • Synced to CRM integrations (UTM parameters can be mapped to Salesforce fields via Integrations → Salesforce → Settings)

Round-Robin Bookings

For team meeting types, use queueId instead of hostIds:
The system automatically selects the next available team member based on:
  • Round-robin rotation
  • Current availability
  • Existing bookings

Error Handling

Time Slot Unavailable

Solution: Query fresh availability and select another slot.

Invalid Duration

Solution: Check the meeting type’s allowed durations.

Missing Host

Solution: Provide either hostIds array or queueId.

Best Practices

Always query availability first - Don’t book without checking available slots
Store the secret - You’ll need it for self-service cancel/reschedule
Handle race conditions - Slots can be booked between availability query and booking
Use webhooks - Get real-time notifications instead of polling
Time format - Always include timezone offset in ISO 8601 format (e.g., +01:00)