Skip to main content
POST
/
v4
/
booking
Create appointment booking
curl --request POST \
  --url https://api.example.com/v4/booking \
  --header 'Content-Type: application/json' \
  --data '
{
  "attendee": {
    "email": "[email protected]",
    "receiveReminders": true,
    "notes": {},
    "firstname": "<string>",
    "lastname": "<string>",
    "fullname": "<string>",
    "bringalongEmails": [
      "[email protected]"
    ],
    "phone": "<string>",
    "language": "en",
    "timezone": "<string>",
    "dataPolicyAccepted": true
  },
  "meetingTypeId": "<string>",
  "start": "<string>",
  "hostIds": [
    "<string>"
  ],
  "appointmentId": "<string>",
  "location": "<string>",
  "queueId": "<string>",
  "channel": "local",
  "duration": 123,
  "routingFormId": "<string>",
  "ignoreAvailability": true,
  "attendeePendingId": 123,
  "paymentId": "<string>",
  "resourceChannelIds": [
    "<string>"
  ],
  "oneTimeLinkId": "<string>",
  "skipNotifications": true,
  "icsTitle": "<string>",
  "icsDescription": "<string>"
}
'
{
  "appointmentId": "<string>",
  "secret": "<string>",
  "attendeeEmail": "<string>",
  "bookingType": "doubleOptIn",
  "provisionalBookingId": "<string>",
  "redirectUrl": "<string>"
}

Body

application/json
attendee
object
required
meetingTypeId
string
required
start
string
required
hostIds
string[]

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.

appointmentId
string
location
string
queueId
string

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
enum<string>

Meeting channel/location type

Available options:
local,
local-attendee,
google,
zoom,
phone,
phone-incoming,
whatsapp,
connect,
webex,
whereby,
kmeet,
jitsi,
zava,
teamsForBusiness2,
custom,
resource
duration
number

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
string
ignoreAvailability
boolean

Used mainly for instant booker to skip availability checks and payment validation for hosts

attendeePendingId
number

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
string
resourceChannelIds
string[]

Ids of the resource channel entity

Id of the one time booking link. Required in order to invalidate the booking link, once booking is done

skipNotifications
boolean

Skip sending email notifications to the attendee for this booking

icsTitle
string

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

Maximum string length: 200
icsDescription
string

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

Maximum string length: 2000

Response

appointmentId
string

ID of appointment. Undefined if DOI flow and not confirmed yet.

secret
string
attendeeEmail
string
bookingType
enum<string>

Only defined if DOI flow is enabled. If undefined, its a normal booking

Available options:
doubleOptIn,
requireHostConfirmation
provisionalBookingId
string

ID of provsionalBooking. Undefined if its a normal booking.

redirectUrl
string

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.