openapi: 3.0.0 info: title: LeanData BookIt API description: >- Programmatic scheduling, availability lookup, and meeting management for the LeanData BookIt scheduling product. Power custom UIs with server-to-server access to availability, round-robin, and meeting CRUD. version: 1.0.0 servers: - url: https://api.leandata.com tags: - name: 🧠 Scheduling Inputs description: '' - name: πŸ—“οΈ Availability description: >

The availability endpoints return meeting configuration and open time slots used to render booking pages or refresh availability. Depending on the request context (routing, direct link, or reschedule), the response includes meeting details, eligible hosts, and available time windows.

- name: πŸ“† Meetings description: >

Manage the full lifecycle of meetings-- including creation, retrieval, updates, cancellations, and rescheduling. These endpoints support booking confirmations, reschedule flows, auditing/debugging, and agentic scheduling workflows.

Retrieve

Create

Manage

- name: πŸ“† Meetings > Retrieve description: '' - name: πŸ“† Meetings > Create description: >

Use these endpoints to finalize and book meetings after a timeslot has been selected.

⚠️ Important: You must support both POST /v1/meeting and POST /v1/round-robin-meeting.

The correct endpoint is determined by the availability response:

This behavior is driven by your scheduling graph configuration and cannot be assumed ahead of time.

- name: πŸ“† Meetings > Manage description: '' - name: Legacy (still supported) description: >

This section outlines the endpoints used to retrieve scheduling data for building a custom calendaring experience. Both endpoints return the same structure of read-only informationβ€”including scheduling metadata, working hours, available time slots, and configured usersβ€”that can be used to render the scheduling page.

These endpoints provide all the data needed to power the UI for selecting a meeting time and pre-populating prospect details.

paths: /v1/scheduling/retrieve-inputs: post: tags: - 🧠 Scheduling Inputs summary: v1/scheduling/retrieve-inputs description: >

This endpoint returns the fields defined in your trigger node. Use this endpoint to dynamically determine what prospect data must be collected (including field types and validation rules) prior to calling the routing availability endpoint.

⚠️ Note: Routing Links Trigger Nodes are not supported.

Common use cases:


Request Body Parameters


Response Body Parameters

requestBody: content: application/json: schema: type: object example: nodeName: New Webform Prospect responses: '200': description: Successful response content: application/json: {} /v1/scheduling/route-and-fetch-availability: post: tags: - πŸ—“οΈ Availability summary: v1/scheduling/route-and-fetch-availability description: >

Use this endpoint when you want LeanData BookIt to determine the correct routing outcome (who/what should be booked) and return the current availability of determined host.

Common use cases:

Notes:


πŸ“‹ Pre-Routing Requirements

Before sending form data to the BookIt API, ensure the following requirements are met:

Unique BookIt Log ID


Request Body Parameters


Response Body Parameters

❗️Availability data is returned only when routing.responseType = "calendar"****.
If responseType is "redirect" or "none", the scheduling object will be null, and no availability data will be returned. Always check routing.responseType before accessing scheduling data.

requestBody: content: application/json: schema: type: object example: triggerNode: New Webform Prospect uid: 3ac6f6f3-2bbd-4401-ab12-0ee9a654b6d1 prospect: Company: LeanData NumEmployees: '500' PhoneNumber: +1(669) 600-5676 ld_bookit_log_id: 3ac6f6f3-2bbd-4401-ab12-0ee9a654b6d1 FirstName: John LastName: Doe Email: johndoe@test.com responses: '200': description: Successful response content: application/json: {} /v1/scheduling/fetch-availability: post: tags: - πŸ—“οΈ Availability summary: v1/scheduling/fetch-availability description: >-

Use this endpoint to:


Request Body Parameters

❗️ Important: The request body must include exactly one of the following parameters:


Response Body Parameters

The response structure varies depending on whether the request used token, linkId, or meetingId.

Top-Level Properties

Property Type Description When Returned
calendarEvent object Details of the existing scheduled event (id, title, scheduledTime, attendees, status, organizer). Reschedule flow only (meetingId)
meeting object Meeting metadata (name, duration, required form fields, styling, etc.). All flows
pageInfo object Page-level metadata including hosts and booking behavior flags. All flows
userIdToInfoMap object Map of user ID β†’ user scheduling metadata (name, email, timezone, phone, conference link). All flows
availability object Available time slots and host index mapping. All flows

pageInfo Properties

Property Type Description
displayAllPoolAvailability boolean or null ⚠️ Always check displayAllPoolAvailability before booking.
If true, use POST /v1/round-robin-meeting booking endpoint.
If false, use POST /v1/meeting booking endpoint
userIds string[] Represents defined hosts for the meeting. If userIds is empty, this indicates a pooled availability where the host has not been selected. In this case, the selected time slot determines the host assignment.
nonSFDCUserIds string[] IDs for non-SFDC users included in scheduling (group links only).
prefillFields object Prospect values used to pre-populate the booking form (First Name, Email, etc.).

meeting Object

Property Type Description
name string Display name of the meeting type.
duration object Duration metadata (unit, value).
formFields object[] Fields required to book the meeting.
description string Meeting description shown to the prospect.
redirectURL string Post-booking redirect URL (may be empty).
internalName string Internal meeting type identifier.
pageStyle object Styling metadata (e.g., styleColor).
logo string URL or base64 logo string

availability Object

Property Type Description
indexToUserIdMap object Maps numeric index β†’ user ID.
timeSlots object[] List of available time windows.

timeSlots Structure

Property Type Description
start_time number Start time (Unix timestamp in milliseconds).
end_time number End time (Unix timestamp in milliseconds).
users number[] Array of indices referencing indexToUserIdMap.
requestBody: content: application/json: schema: type: object example: token: >- /31AvS7OmROG0U3f1iR1cg/ouvG3T57T0674o0FfVNEDe1oTP0eMWylkgnOmZ7erwPy5Llz+7tYkxuJbyff9PUYdVgKrPk8hkkWlyj6vqa1/Hi3b/ISC9VT2CbG0/vShqEBzU+4MuQv5+0+xCMdnR6i3MK4uwlMK9p7lST6y1FZydHE+VsFj9eZPOxWTKB0lZ5IbFZNJbuvAiA+EJKCPdXw24Z1myG/371ckdjrgwDhFYjGdfXqRRbOQbnyWmXqgjKndHhcwuM4Zn0Qq45+BUnnjKZjyG32qEJaJWLlGQozGQQukcUqupMCzSIyuUgrqpWqFALGbwjf+sYWarqrw/+zKf2n9Jt14/anXkxw1mDWjTVAfnX3PH+XJwIbb/A6mWHe1AjTBtol1M+/6qCWZQwSLrBOiQuO7ySw+Y+F+Y1cfceorE1S6NajM/i7483q5RyMJFsugpiX//KCwBPUIBcP0zola1Uk2KgKc7K03Cq787j5Rlf9yBLs8Z5o2BgT1bY/DqUrTmgOpbIbExnZRX+vltzDQEmIqxsB1kAoC9BbXlWyRsgefyL2Z7nKPeKDxu0FCPO69vMt9AIcmK4TOZQ== responses: '200': description: Successful response content: application/json: {} /v1/meetings: get: tags: - πŸ“† Meetings > Retrieve summary: v1/meetings description: >-

Retrieves meetings associated with a prospect’s email address. By default, the endpoint returns scheduled and canceled meetings from the time of the API call through the future. To query historical meetings, pass a start value in the past (optionally paired with end) to expand the time range backward.


Query Parameters

Parameter Type Required Description
prospectEmail string Yes The email address of the prospect whose meetings you want to retrieve.
start string or number No Start of time range filter. Accepts an ISO 8601 string (YYYY-MM-DDTHH:mm:ss.sssZ) or a Unix timestamp in milliseconds.
end string or number No End of time range filter. Accepts an ISO 8601 string (YYYY-MM-DDTHH:mm:ss.sssZ) or a Unix timestamp in milliseconds.
status string No Filter meetings by status. Allowed values: scheduled, rescheduled,canceled.

Time Filter Behavior


Response Body Parameters

Note: calendarEvent fields are returned from the calendar provider. calendarEvent.status represents the provider’s event status, while bookIt.status represents LeanData’s meeting lifecycle status.

Field Type Description
bookIt object LeanData BookIt metadata for the meeting.
bookIt.status string BookIt lifecycle status (for example, scheduled, rescheduled, canceled).
calendarEvent object Calendar-provider event object (source of truth for provider-level fields like organizer, attendees, and provider status).
calendarEvent.id string Unique identifier for the calendar event.
calendarEvent.title string Meeting title.
calendarEvent.status string Calendar provider status (for example, confirmed or canceled).
calendarEvent.scheduledTime.start_time number Meeting start time (Unix epoch milliseconds).
calendarEvent.scheduledTime.end_time number Meeting end time (Unix epoch milliseconds).
calendarEvent.organizer object Organizer details from the calendar provider.
calendarEvent.organizer.email string Organizer email address.
calendarEvent.attendees array List of meeting attendees and their response statuses.
calendarEvent.attendees[].email string Attendee email address.
calendarEvent.attendees[].responseStatus string Attendee response status (calendar provider value, e.g. accepted, needsAction).
calendarEvent.attendees[].organizer boolean Whether the attendee is the organizer (if provided by calendar provider).
calendarEvent.attendees[].self boolean Whether the attendee represents the authenticated calendar user (if provided by calendar provider).
responses: '200': description: Successful response content: application/json: {} /v1/meeting/:meetingId: get: tags: - πŸ“† Meetings > Retrieve summary: v1/meeting/:meetingId description: >-

Retrieves detailed information for a single meeting by its unique identifier.

Use this endpoint to:


Path Parameters

Parameter Type Required Description
meetingId string Yes The unique identifier of the meeting to retrieve.

Response Body Parameters

Note: calendarEvent fields are returned from the calendar provider. calendarEvent.status represents the provider’s event status, while bookIt.status represents LeanData’s meeting lifecycle status.

Field Type Description
bookIt object LeanData BookIt metadata for the meeting.
bookIt.status string BookIt lifecycle status (for example, scheduled, rescheduled, canceled).
calendarEvent object Calendar-provider event object (source of truth for provider-level fields like organizer, attendees, and provider status).
calendarEvent.id string Unique identifier for the calendar event.
calendarEvent.title string Meeting title.
calendarEvent.status string Calendar provider status (for example, confirmed or canceled).
calendarEvent.scheduledTime.start_time number Meeting start time (Unix epoch milliseconds).
calendarEvent.scheduledTime.end_time number Meeting end time (Unix epoch milliseconds).
calendarEvent.organizer object Organizer details from the calendar provider.
calendarEvent.organizer.email string Organizer email address.
calendarEvent.attendees array List of meeting attendees and their response statuses.
calendarEvent.attendees[].email string Attendee email address.
calendarEvent.attendees[].responseStatus string Attendee response status (calendar provider value, e.g. accepted, needsAction).
calendarEvent.attendees[].organizer boolean Whether the attendee is the organizer (if provided by calendar provider).
calendarEvent.attendees[].self boolean Whether the attendee represents the authenticated calendar user (if provided by calendar provider).
responses: '200': description: Successful response content: application/json: {} patch: tags: - πŸ“† Meetings > Manage summary: v1/meeting/:meetingId description: >

This endpoint is used to reschedule an existing meeting by providing a new start and end time.

πŸ’‘ The :meetingId path parameter should be replaced with the unique ID of the meeting you want to update.


Request Body Parameters


Response Body Parameters

requestBody: content: application/json: schema: type: object example: scheduledTime: start_time: 1746547200000 end_time: 1746548100000 timezone: America/Los_Angeles parameters: - name: Content-Type in: header schema: type: string example: application/json responses: '200': description: Successful response content: application/json: {} delete: tags: - πŸ“† Meetings > Manage summary: v1/meeting/:meetingId description: >

This endpoint cancels a previously scheduled meeting. It requires only the meeting ID in the URL pathβ€”no request body is needed.

A successful cancellation returns a 200 OK status. There is no response body.

responses: '200': description: Successful response content: application/json: {} /v1/meeting: post: tags: - πŸ“† Meetings > Create summary: v1/meeting description: >

This endpoint is used to book a meeting with a single rep who has already been assigned by your routing logic. The routing graph has selected the most appropriate user for the prospect based on your configurationβ€”this endpoint simply finalizes the booking.

⚠️ Use this endpoint only when pageInfo.displayAllPoolAvailability = null or false in the availability response.

If pageInfo.displayAllPoolAvailability = true, you must instead call POST /v1/round-robin-meeting.

The request payload contains the encrypted scheduling context, the selected time window, prefilled user data, and optional links to support canceling or rescheduling the meeting after it's booked.


Request Body Parameters

❗️ If your availability response indicates pageInfo.displayAllPoolAvailability = true, you must book using POST /v1/round-robin-meeting instead of this endpoint.

This endpoint supports three request modes. Your request body must include exactly one of:


Required fields for all requests

Field Type Required Description
scheduledTime object Yes The time slot the prospect selected.
scheduledTime.start_time number Yes Start time (Unix timestamp in milliseconds).
scheduledTime.end_time number Yes End time (Unix epoch timestamp in milliseconds).
scheduledTime.timezone string Yes IANA timezone (e.g., America/Los_Angeles).
userFields array Yes Prospect + form field values. Must include values for all required meeting.formFields returned by the availability endpoint.

userFields Important Notes:


Identification Modes

Mode selector rules

❗️Exactly one of token, linkId, or params must be provided. Do not send more than one.

Field Required? When to use Notes
token Required if using token mode Use when booking after calling /v1/scheduling/route-and-fetch-availability or /v1/scheduling/fetch-availability and you have a booking token Recommended path. Avoids needing legacy params.
linkId Required if using link mode Use when booking directly from a single-meeting-type BookIt Link Must be a supported Link type. (Multi-meeting-type / routing / dynamic links aren’t supported.)
params Required if using legacy mode Legacy integrations that already rely on the encrypted params payload Requires additional fields below.

Legacy-only Fields (params mode)

Field Type Required Applies when Description
cancelLink string Optional params mode Base cancel URL prefix used by legacy flows (often includes ?meetingId=).
rescheduleLink string Optional params mode Base reschedule URL prefix used by legacy flows (often includes ?meetingId=).

These links will be included in the confirmation email sent to the prospect. The values must be the base URL-- You can include any query parameters you'd like in the base URL. The BookIt system will automatically append the meetingId to the end of the URL.

❗️ Note: Make sure the base URL is formatted to support appending the meetingId correctly, depending on whether you want it as a path or a query parameter.


Response Body Parameters

requestBody: content: application/json: schema: type: object example: scheduledTime: startTime: 1746644400000 endTime: 1746646200000 timezone: America/Los_Angeles params: >- /SX/uPyXb00nUaCDWL5oMxM1Bx8WpQFn/o/oxd+lUGJtn6LHAxmuXEN0kJFtAIVAKHzgZwyVP1oO7U6//YDFIUnehI4PzKEMg3rXI8WrRN9AukpVuPrvb81WoWG4Z6xuvzeT2o9hYkiVreX4C7SP93JHcLD6A4WCvOclsZZlaS+7PbonkTm2gSOMJ74mAwfK8azheT9s39DZa35VZdkGYRZ8yk0pdctpWdA1LHID1XLbGG8wxQw3Y1GbPCrIh/ML4CDEmO9MhZZHQ9vXjfQqP1Zhb3cTvZUM2WSfW+n1tZxQicgviTX4UQ+VwcnBXvApdmBlJO3UXPpr+0DtprsfECABeIdMfRqR8fkqNQ0cFP5C29VWTq49hEUQrQBhpF0jEFoeExxfUchhBrWMuRJ1YabTy+Mh2+hT66yw8o/vqnZwTrJdmxHKlrX+aNKM6D6h4DR+HkoeGvBJOtzzjdA6izF1GOQCgzVpk55xELGedb7b15yWPMHDP11PQNbSXM+ilmoz3aG0PFqwd4PHg2goOi+E4zwLS6jAU1U9zXo5nVY= cancelLink: https://testdomain.com/cancel?= rescheduleLink: https://testdomain.com/reschedule?= userFields: - name: First Name type: text value: LeanData - name: Last Name type: text value: Dev - name: Email type: text value: test@test.com - name: Additional Guest Emails type: textarea value: - test1@test.com responses: '200': description: Successful response content: application/json: {} /v1/round-robin-meeting: post: tags: - πŸ“† Meetings > Create summary: v1/round-robin-meeting description: >

This endpoint is used to book a meeting with a user from a round robin pool. If your routing logic has determined that a pool of users should be considered for this meeting, this endpoint handles the final assignment and booking of the meeting with the most appropriate available user.

πŸ’‘ Use this endpoint when the availability response indicates pageInfo.displayAllPoolAvailability is true.

The request payload includes the encrypted scheduling context, the chosen time window, prefilled prospect data, and optional links for canceling or rescheduling the meeting after booking.


Request Body Parameters

Required for all requests

Field Type Required Description
scheduledTime object Yes Defines the selected meeting time and the eligible host pool for that time.
scheduledTime.start_time number Yes Meeting start time (Unix epoch milliseconds).
scheduledTime.end_time number Yes Meeting end time (Unix epoch milliseconds).
scheduledTime.timezone string Yes IANA timezone (e.g. America/Los_Angeles). Used for formatting the prospect confirmation email; the actual meeting time is based on the timestamps.
scheduledTime.users string[] Yes Ordered list of user IDs eligible for the selected timeslot. Order matters and must match the order implied by availability.timeSlots[].users via availability.indexToUserIdMap from the availability response (preserves round-robin priority).
userFields array Yes Form field values submitted by the prospect. Must include values for all required meeting.formFields returned by the availability endpoint.

Identification Modes

Mode selector rules

❗️Exactly one of token, linkId, or params must be provided. Do not send more than one.

Field Required? When to use Notes
token Required if using token mode Use when booking after calling /v1/scheduling/route-and-fetch-availability or /v1/scheduling/fetch-availability and you have a booking token Recommended path. Avoids needing legacy params.
linkId Required if using link mode Use when booking directly from a single-meeting-type BookIt Link Must be a supported Link type. (Multi-meeting-type / routing / dynamic links aren’t supported.)
params Required if using legacy mode Legacy integrations that already rely on the encrypted params payload Requires additional fields below.

Legacy-only Fields (params mode)

Field Type Required Applies when Description
cancelLink string Optional params mode Base cancel URL prefix used by legacy flows (often includes ?meetingId=).
rescheduleLink string Optional params mode Base reschedule URL prefix used by legacy flows (often includes ?meetingId=).

These links will be included in the confirmation email sent to the prospect. The values must be the base URL-- You can include any query parameters you'd like in the base URL. The BookIt system will automatically append the meetingId to the end of the URL.

❗️ Note: Make sure the base URL is formatted to support appending the meetingId correctly, depending on whether you want it as a path or a query parameter.


Response Body Parameters

requestBody: content: application/json: schema: type: object example: scheduledTime: start_time: 1746486000000 end_time: 1746486900000 timezone: America/Los_Angeles users: - 0058c00000CssZGAAZ - 0058c00000CtXJhAAN - 0058c00000AukyPAAR - 0058c00000CtXKaAAN - 0058c000009wAEKAA2 - 0058c00000CssZLAAZ cancelLink: https://testdomain.com/cancel?meetingId= rescheduleLink: https://testdomain.com/reschedule?meetingId= params: >- +aELYG7xzbgpE4sSyByw27/J11+QuSnMHV/Z5UDYfWhTYqOWLqSPG2bqRUBjUncGDhALE5PZ9lTtTK1n9yoQVLnHT58AUVANEe23Dzi1/62oOBZx+lpw7NeB0zqAYnGkVXjbchNC7PtZLcWA4VXjwuZvkIfkFqxZqA5hf9u2NpC6AMUyTo7j+Svyoc/S2Dit9IBrmbWhZcdn3eaNkVTkfqcW6RjX/LA+A9MgomWe9eQbgibpJGgUBN4KwmVQYQxiuwaSe4pMNyckOGg9EymjVPizsLSq9Iwc/tbj11RW6fPTbgquUyymeGYhIeIt0uONE/vAGiHO7Vkdn9gvAsQG5Y5aKvRF84zmd+vePfh7h43VvVoWH1w2lff5/Ks0rSDvAgRgdwXauZwudGoX0YWXHJfZEwEcgAbw16aLJiY6r+eLkgInglI2ZA9DfmE753JSbJ1PrtP7WNZYPI6NUvRORaKTg7xHPQg6ZrLTo1jo4L6qfP0nnn9D3sEmnVVxyfDeE+CVZWbawxjVTZFVTXL9/hVu2djwzEKlI9VxapB9qc1VK7cwBNLgC3qlnaaMr5Js userFields: - name: First Name type: text value: Test - name: Last Name type: text value: pool - name: Email type: text value: test@test.com - name: Additional Guest Emails type: textarea value: [] responses: '200': description: Successful response content: application/json: {} /v1/scheduling/route: post: tags: - Legacy (still supported) summary: /v1/scheduling/route (legacy) description: >

Legacy routing-only endpoint. Runs routing and returns routing results as encrypted token, but does not return availability. Existing integrations may continue using this endpoint. For new builds, prefer POST /v1/scheduling/route-and-fetch-availability.

Depending on the concluding routing decision, this endpoint will either return data needed to query for the next endpoint, a redirect link, or an indication to render your fallback experience.

Typical follow-up:

Call POST /v1/scheduling/retrieve-info (legacy) or use the combined endpoint instead.


Request Body Parameters


Response Body Parameters

requestBody: content: application/json: schema: type: object example: _ld_nodeName: API Demo _ld_uid: 6f1df9c8-479d-44e0-b98c-2f329b3d6ac8 formData: state: California phone: '1234567899' email: test@test.com lastname: pool firstname: Test parameters: - name: Content-Type in: header schema: type: string example: application/json responses: '200': description: Successful response content: application/json: {} /v1/scheduling/retrieve-info: post: tags: - Legacy (still supported) summary: /v1/scheduling/retrieve-info (legacy) description: >

Use this endpoint when booking a meeting for the first time. This endpoint returns comprehensive scheduling data needed to build a booking experience, including meeting configuration, host availability, and user information. This data enables the construction of a scheduling page with available time slots, host details, working hours, and meeting parameters.


Request Body Parameters


Response Body Parameters

requestBody: content: application/json: schema: type: object example: params: >- nrnDRrVpi6nUm+gY7Lw1BZQZy9kfhw4IdS7sIIwN6d2ft5qxOweTl78xlhFaJB02xSw/7eocYRiNWO+RSlsVjLk+EK4Dek7jnUxQnsJktz3fV6N47WjcN0hvmYXVs1t97XvgdfrvasqhfM6VYrgmQwDquxf8MH06URvXxVtcSpKi98X3jYG4S/R10nz9S1upt1XhVpMu+vSeLhS4kNMM5s1fWlVVZLEvHb0T5x8ZV1gkSUDZ33tZsIbBInrGuZ/382TI6behsySaNaW3fpPap1y8vXgM3V9JH2YlM6S9VDvDFJ7TYbhdglVnsTHHZpEeRGcMoY7cnD3VSHKdG4aA/tgYWkJiNQShFIV7CTHD3alvVALdGhEP/XHFQsrAhbfu52+Vm7vRdyrqMCWIUOWCNcQzQBDqP63S2pKltNGZUrM4xj0WJfTMNd4z/5O5jjRYC1s1TvleepGPYM0OeLu+E6Fmpi5jVlHKSCI7oMK4Pgtt8uSXHt4JP3OoJjuHt8IDB9xVKXA/tdWL/utiTyexjRlkOpnj8wobVU+8mDyxq9bG7ytLJBrhx1gvTx0k157C parameters: - name: Content-Type in: header schema: type: string example: application/json responses: '200': description: Successful response content: application/json: {} /v1/scheduling/retrieve-modification-info: post: tags: - Legacy (still supported) summary: v1/scheduling/retrieve-modification-info (legacy) description: >

This endpoint returns the same scheduling payload as v1/scheduling/retrieve-info, but is specifically used when rescheduling or canceling an existing meeting. Use this endpoint to retrieve all necessary data to re-render the scheduling UI in a modification flow.


Request Body Parameters


Response Body Parameters

requestBody: content: application/json: schema: type: object example: meetingId: 91s64s27ep6mqlig89936kqmat76oh2he923ep3p8tckee2ncsog responses: '200': description: Successful response content: application/json: {}