agentlyleads docs
Bookings API

The Booking object

A booking is a meeting someone picked on a host's booking page (/book/<workspace>/<host>/<type>), or one you booked for them with POST /api/v1/bookings. Each booking also creates a MEETING task on the CRM calendar and links the invitee to a contact, or to a new lead.

Scopes

ScopeAllows
read:bookingsList and read bookings, meeting types, hours, hosts and open slots
write:bookingsBook, cancel and reschedule; create, change, pause and archive meeting types; change hours and host timezones
write:calendarPut a meeting on the CRM calendar, and refresh a user's connected calendars

An API key belongs to the workspace, not to a person. Endpoints that act for a particular person take a hostUserId, which must be an active user in the key's workspace. GET /api/v1/booking-hosts lists them.

Fields

FieldTypeNotes
idstringThe booking ID
statusstringCONFIRMED or CANCELLED
startAt, endAtstringISO 8601 instants in UTC
hostTimezonestringThe host's timezone when the meeting was booked
inviteeTimezonestringThe invitee's timezone
hostobject{ id, name, email }
bookingTypeobject{ id, title, slug, durationMin, locationKind, locationValue }
inviteeName, inviteeEmailstring
inviteePhone, inviteeNotesstring or null
guestsstring[]Extra attendee emails
answersobject[]{ label, value } for each booking-form question, with the label as it was asked
contactId, leadIdstring or nullThe contact the invitee matched, or the lead created for them
taskIdstring or nullThe MEETING task on the CRM calendar
joinUrlstring or nullThe video link. Null once cancelled
onHostCalendarbooleanThe meeting is on the host's Google or Outlook calendar
sequenceintegerGoes up by one on every reschedule and on cancel
cancelReason, cancelledBy, cancelledAtstring or nullcancelledBy is host or invitee
createdAtstring
{
  "id": "cmq9book0alk34567890",
  "status": "CONFIRMED",
  "startAt": "2026-10-05T13:00:00.000Z",
  "endAt": "2026-10-05T13:30:00.000Z",
  "hostTimezone": "America/New_York",
  "inviteeTimezone": "Europe/London",
  "host": { "id": "cmq1user0alk34567890", "name": "Kevin Shah", "email": "kevin@example.com" },
  "bookingType": { "id": "cmq8type0alk34567890", "title": "Intro call", "slug": "intro-call", "durationMin": 30, "locationKind": "GOOGLE_MEET", "locationValue": null },
  "inviteeName": "Dana Reed",
  "inviteeEmail": "dana@example.com",
  "inviteePhone": null,
  "inviteeNotes": "Pricing for 40 seats.",
  "guests": [],
  "answers": [{ "label": "Company size", "value": "40" }],
  "contactId": "cmq2cont0alk34567891",
  "leadId": null,
  "taskId": "cmq7task0alk34567890",
  "joinUrl": "https://meet.google.com/abc-defg-hij",
  "onHostCalendar": true,
  "sequence": 0,
  "cancelReason": null,
  "cancelledBy": null,
  "cancelledAt": null,
  "createdAt": "2026-09-27T14:02:00.000Z"
}

The invitee's private reschedule and cancel link is never part of a booking in the API. Anyone holding it could change the meeting without signing in, so it only ever goes to the invitee by email.

On this page