LeanData BookIt API

Programmatic scheduling, availability lookup, and meeting management for LeanData BookIt. Retrieve scheduling inputs, fetch raw or routed availability, create and round-robin meetings, retrieve meetings by prospect or meeting ID, patch (reschedule) and delete (cancel) meetings. Power custom booking UIs with secure server-to-server access hosted at `https://api.leandata.com/v1`. Legacy `/v1/scheduling/route`, `/v1/scheduling/retrieve-info`, and `/v1/scheduling/retrieve-modification-info` endpoints remain supported for existing integrations.

LeanData BookIt API is one of 4 APIs that LeanData publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 2 machine-runnable capabilities that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko.

Tagged areas include Scheduling, Meetings, Availability, BookIt, and Booking. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, and 2 Naftiko capability specs.

OpenAPI Specification

leandata-bookit-openapi.yml Raw ↑
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: >
      <p>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.</p>

      <ul>

      <li><p><strong>POST</strong>
      <code>/v1/scheduling/route-and-fetch-availability</code></p>

      </li>

      <li><p><strong>POST</strong>
      <code>/v1/scheduling/fetch-availability</code></p>

      </li>

      </ul>
  - name: 📆 Meetings
    description: >
      <p>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.</p>

      <p><strong>Retrieve</strong></p>

      <ul>

      <li><p><strong>GET</strong> <code>/v1/meetings</code> - retrieve meetings
      associated with a prospect by email</p>

      </li>

      <li><p><strong>GET</strong> <code>/v1/meeting/{meetingId}</code></p>

      </li>

      </ul>

      <p><strong>Create</strong></p>

      <ul>

      <li><p><strong>POST</strong> <code>/v1/meeting</code></p>

      </li>

      <li><p><strong>POST</strong> <code>/v1/round-robin-meeting</code></p>

      </li>

      </ul>

      <p><strong>Manage</strong></p>

      <ul>

      <li><p><strong>PATCH</strong> <code>/v1/meeting/{meetingId}</code></p>

      </li>

      <li><p><strong>DELETE</strong> <code>/v1/meeting/{meetingId}</code></p>

      </li>

      </ul>
  - name: 📆 Meetings > Retrieve
    description: ''
  - name: 📆 Meetings > Create
    description: >
      <p>Use these endpoints to finalize and book meetings after a timeslot has
      been selected.</p>

      <p>⚠️ <strong>Important:</strong> You <strong>must</strong> support both
      <code>POST /v1/meeting</code> and <code>POST
      /v1/round-robin-meeting</code>.</p>

      <p>The correct endpoint is determined by the availability response:</p>

      <ul>

      <li><p>If <code>pageInfo.displayAllPoolAvailability = true</code>, you
      must book using <code>POST /v1/round-robin-meeting</code>.</p>

      </li>

      <li><p>If <code>pageInfo.displayAllPoolAvailability = null</code> or
      <code>false</code>, you must book using <code>POST /v1/meeting</code>.</p>

      </li>

      </ul>

      <p>This behavior is driven by your scheduling graph configuration and
      cannot be assumed ahead of time.</p>
  - name: 📆 Meetings > Manage
    description: ''
  - name: Legacy (still supported)
    description: >
      <p>This section outlines the endpoints used to retrieve scheduling data
      for building a custom calendaring experience. Both endpoints return the
      same structure of <strong>read-only</strong> information—including
      scheduling metadata, working hours, available time slots, and configured
      users—that can be used to render the scheduling page.</p>

      <ul>

      <li><p><strong><code>v1/scheduling/retrieve-info</code></strong> — Use
      this endpoint <strong>when booking a meeting</strong> <strong>for the
      first time</strong>.</p>

      </li>

      <li><p><strong><code>v1/scheduling/retrieve-modification-info</code></strong>
      — Use this endpoint <strong>when modifying an existing meeting</strong>,
      such as rescheduling or canceling.</p>

      </li>

      </ul>

      <p>These endpoints provide all the data needed to power the UI for
      selecting a meeting time and pre-populating prospect details.</p>
paths:
  /v1/scheduling/retrieve-inputs:
    post:
      tags:
        - 🧠 Scheduling Inputs
      summary: v1/scheduling/retrieve-inputs
      description: >
        <p>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.</p>

        <p>⚠️ <strong>Note:</strong> Routing Links Trigger Nodes are
        <strong>not</strong> supported.</p>

        <p><strong>Common use cases:</strong></p>

        <ul>

        <li><p>Agentic scheduling: ask only for missing fields</p>

        </li>

        <li><p>Dynamic UI: render required fields based on trigger
        configuration</p>

        </li>

        </ul>

        <hr />

        <h2 id="request-body-parameters">Request Body Parameters</h2>

        <ul>

        <li><code>nodeName</code> (required) — A <strong>string</strong> value
        that contains the name of your Trigger Node (in the BookIt Flowbuilder).
        For more information, check out the <a
        href="https://leandatahelp.zendesk.com/hc/en-us/articles/5987002499995-New-Prospect-Trigger-Node">Trigger
        Node Implementation guide</a>.</li>

        </ul>

        <hr />

        <h2 id="response-body-parameters">Response Body Parameters</h2>

        <ul>

        <li><p><code>name</code> — A <strong>string</strong> name of the
        requested trigger node.</p>

        </li>

        <li><p><code>inputs</code> — An <strong>array of input field
        objects</strong> that represent the fields required for routing. Each
        input field object contains the following properties:</p>

        <ul>

        <li><p>⚠️ <strong>Note:</strong> All input definitions in the
        <code>inputs</code> array are configured in the LeanData application. If
        any updates or changes are needed—such as adding, removing, or modifying
        input fields—they must be made in the corresponding configuration within
        LeanData. These definitions cannot be modified through the API.</p>

        <ul>

        <li><p><code>name</code> — A <strong>string</strong> that represents the
        unique API name of the input field. This value should be used as the key
        when submitting data for booking or routing requests.</p>

        </li>

        <li><p><code>type</code> — A <strong>string</strong> that represents the
        expected data type of the input field.</p>

        <p>  Supported values include:</p>

        <ul>

        <li><p><code>STRING</code> — A text value</p>

        </li>

        <li><p><code>PHONE</code> — A text value of the phone number (can
        include country code).</p>

        </li>

        <li><p><code>DOUBLE</code> — A numeric value (supports decimal
        values)</p>

        </li>

        <li><p><code>BOOLEAN</code> — A true/false value</p>

        </li>

        </ul>

        </li>

        </ul>

        </li>

        </ul>

        </li>

        </ul>
      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: >
        <p>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.</p>

        <p><strong>Common use cases:</strong></p>

        <ul>

        <li><p>First-time booking when routing is required</p>

        </li>

        <li><p>Agentic flows that need to decide <em>who</em> to book and
        <em>when</em></p>

        </li>

        <li><p>Generating a <code>token</code> that can be reused to refresh
        availability without re-running routing</p>

        </li>

        </ul>

        <p><strong>Notes:</strong></p>

        <ul>

        <li>The response may include a <code>token</code> that can be passed to
        <strong>POST</strong> <code>/v1/scheduling/fetch-availability</code> to
        refetch availability without triggering routing again.</li>

        </ul>

        <hr />

        <h2 id="📋-pre-routing-requirements">📋 Pre-Routing Requirements</h2>

        <p>Before sending form data to the BookIt API, ensure the following
        requirements are met:</p>

        <h3 id="unique-bookit-log-id">Unique BookIt Log ID</h3>

        <ul>

        <li><p><strong>Requirement:</strong></p>

        <ul>

        <li>Each submission must have a unique BookIt Log ID. This Log ID must
        also be populated on the prospect's Salesforce record.</li>

        </ul>

        </li>

        <li><p><strong>Specifications</strong>:</p>

        <ul>

        <li><p><strong>Format</strong>: Universally Unique Identifier (UUID)</p>

        </li>

        <li><p><strong>Example</strong>:
        <code>c149cd78-377c-4549-ae62-3910ebe3b6ed</code></p>

        </li>

        <li><p><strong>Generation</strong>: Can be arbitrarily created by your
        system</p>

        </li>

        <li><p><strong>Integration</strong>: Must be populated on the prospect's
        Salesforce record through your marketing automation platform, preferably
        simultaenously as your first BookIt API callout.</p>

        <ul>

        <li><p>❗️ <strong>Note:</strong> if a prospect submits multiple times,
        each subsequent Log ID must replace the previous ID in Salesforce.</p>

        </li>

        <li><p>❗️<strong>If you are using Marketo as your Marketing Automation,
        please reach out to your LeanData team.</strong></p>

        </li>

        </ul>

        </li>

        </ul>

        </li>

        <li><p><strong>Best Practices</strong>:</p>

        <ul>

        <li><p>Use a reliable UUID generation method to ensure uniqueness</p>

        </li>

        <li><p>Validate the ID format before submission</p>

        </li>

        </ul>

        </li>

        </ul>

        <hr />

        <h2 id="request-body-parameters">Request Body Parameters</h2>

        <ul>

        <li><p><code>triggerNode</code> (required) — A <strong>string</strong>
        value that contains the name of your Trigger Node in the BookIt
        Flowbuilder. This value must exactly match the configured Trigger Node
        name in the LeanData application.</p>

        <ul>

        <li>⚠️ <strong>Note:</strong> Routing Links Trigger Nodes are
        <strong>not</strong> supported.</li>

        </ul>

        </li>

        <li><p><code>uid</code> (required) — A <strong>string</strong> value
        that contains your <a
        href="https://bookit-api.leandata.com/#37d94fab-525c-42e3-bdb2-6cf656f8d7f0">BookIt
        Unique Log ID</a>.</p>

        </li>

        <li><p><code>prospect</code> (required) — An <strong>object</strong>
        that contains all prospect data required for routing and availability
        retrieval.</p>

        <ul>

        <li><p>⚠️ <strong>Important:</strong> The fields included inside the
        <code>prospect</code> object must <strong>exactly match</strong> the
        input field definitions returned by the
        <code>/v1/scheduling/retrieve-inputs</code> endpoint.</p>

        </li>

        <li><p>Field names are <strong>case-sensitive</strong> and must be
        passed exactly as returned in the <code>inputs[].name</code>
        response.</p>

        </li>

        <li><p>Field values must match the corresponding
        <code>inputs[].type</code> response.</p>

        </li>

        <li><p>Missing required fields may result in routing failure or
        incomplete availability results.</p>

        </li>

        </ul>

        </li>

        </ul>

        <hr />

        <h2 id="response-body-parameters">Response Body Parameters</h2>

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

        <ul>

        <li><p><code>routing</code> — An <strong>object</strong> that contains
        the routing outcome determined by the BookIt routing graph.</p>

        <ul>

        <li><p><code>responseType</code> — A <strong>string</strong> that
        indicates the routing outcome determined by the BookIt routing graph.
        Possible values are:</p>

        <ul>

        <li><p><code>"calendar"</code> — The routing graph reached a
        <strong>"Schedule"</strong> node. Encrypted scheduling parameters are
        returned in the <code>token</code> field.</p>

        </li>

        <li><p><code>"redirect"</code> — The routing graph reached a
        <strong>"Redirect to URL"</strong> node. A redirect URL is returned in
        the <code>redirect</code> field.</p>

        </li>

        <li><p><code>"none"</code> — The routing graph reached an <strong>"End
        of Flow"</strong> node. No scheduling or redirect data is returned. This
        can be used to trigger a fallback experience in your UI.</p>

        </li>

        </ul>

        </li>

        <li><p><code>token</code> <em>(optional)</em> — A
        <strong>string</strong> value that is used to refresh availability
        without re-running routing.</p>

        <ul>

        <li>Only present when <code>routing.responseType</code> is
        <code>"calendar"</code>.</li>

        </ul>

        </li>

        <li><p><code>calendarLink</code> (<em>optional</em>) — A
        <strong>string</strong> containing the URL that renders the hosted
        LeanData BookIt scheduling page. Use this link if you prefer to leverage
        LeanData’s native scheduling UI instead of building a custom booking
        experience using the <code>scheduling</code> object. Redirecting a user
        to this URL will load the full BookIt calendar experience.</p>

        <ul>

        <li>Only present when <code>routing.responseType</code> is
        <code>"calendar"</code>.</li>

        </ul>

        </li>

        <li><p><code>redirect</code> <em>(optional)</em> — A
        <strong>string</strong> containing the URL configured in the
        <strong>"Redirect to URL"</strong> node of the BookIt routing graph.</p>

        <ul>

        <li><p>Only present when <code>responseType</code> is
        <code>"redirect"</code>.</p>

        </li>

        <li><p>Redirect users to this URL to continue the scheduling process as
        defined by your routing configuration.</p>

        </li>

        </ul>

        </li>

        </ul>

        </li>

        <li><p><code>scheduling</code> (<em>optional</em>) — An
        <strong>object</strong> (or <strong>null</strong>) that contains the
        full scheduling page configuration and availability data required to
        render a booking experience.</p>

        <ul>

        <li><p>Present only when <code>routing.responseType =
        "calendar"</code>.</p>

        </li>

        <li><p>Returns <code>null</code> when <code>responseType</code> is
        <code>"redirect"</code> or <code>"none"</code>.</p>

        </li>

        <li><p>⚠️ <strong>Note:</strong> All data in the <code>scheduling</code>
        object is sourced directly from the <strong>Meeting Type
        configuration</strong> in the LeanData application (and related LeanData
        configuration). Any updates or changes to this information must be made
        in LeanData. This data cannot be modified through the API.</p>

        </li>

        <li><p><code>meeting</code> — An <strong>object</strong> that contains
        metadata about the meeting type.</p>

        <ul>

        <li><p><code>name</code> — A <strong>string</strong> that contains the
        name of the meeting type.</p>

        </li>

        <li><p><code>duration</code> — An <strong>object</strong> that describes
        the meeting duration.</p>

        <ul>

        <li><p><code>unit</code> — A <strong>string</strong> that represents the
        time unit (e.g., <code>min</code>).</p>

        </li>

        <li><p><code>value</code> — A <strong>number</strong> that represents
        the duration value.</p>

        </li>

        </ul>

        </li>

        <li><p><code>formFields</code> — An <strong>array</strong> of form field
        objects that represent the input fields required to finalize the booking
        of the meeting. These form fields should appear on the final
        confirmation screen before the meeting is booked.</p>

        <ul>

        <li><p>⚠️ <strong>Important:</strong> You must send back values for
        <strong>all defined fields</strong> when booking a meeting.</p>

        </li>

        <li><p><code>name</code> — A <strong>string</strong> of the Field
        label.</p>

        </li>

        <li><p><code>type</code> — A <strong>string</strong> that represents the
        input type (e.g., <code>text</code>)</p>

        </li>

        <li><p><code>required</code> — A <strong>boolean</strong> that signifies
        whether a field is mandatory. This value is based on the settings
        defined in the Meeting Type configuration.</p>

        </li>

        </ul>

        </li>

        <li><p><code>description</code> — A <strong>string</strong> that
        contains the calendar event description</p>

        </li>

        <li><p><code>pageStyle</code> — An <strong>object</strong> that defines
        branding settings for the scheduling page. This is set in the LeanData
        application.</p>

        <ul>

        <li><p><code>styleColor</code> — A <strong>string</strong> representing
        the primary hex color code used to theme UI elements (e.g. buttons,
        highlights) on the scheduling page.</p>

        </li>

        <li><p><code>logo</code> — A <strong>string</strong> representing the
        URL of the company logo (uploaded in the LeanData application) to be
        displayed on the scheduling page. If empty, no logo was uploaded to the
        application.</p>

        </li>

        </ul>

        </li>

        </ul>

        </li>

        <li><p><code>pageInfo</code> — An <strong>object</strong> that contains
        general page metadata.</p>

        <ul>

        <li><p><code>displayAllPoolAvailability</code> — A
        <strong>boolean/null</strong> that indicates to show all availability
        for all pool members. If this value is <code>true</code>, then you will
        need to use the <code>/v1/round-robin-meeting</code> endpoint to book
        the meeting.</p>

        </li>

        <li><p><code>userIds</code> — An <strong>array</strong> that contains
        user IDs involved in the meeting (hosts or pool members). This array can
        be used to display representative names on the scheduling calendar.</p>

        <ul>

        <li><strong>Note:</strong> If the array is <strong>empty</strong>, it
        indicates that the meeting is being scheduled with a round robin pool,
        and the final rep has not yet been selected. The actual rep will be
        determined later based on the selected time slot, availability, and pool
        assignment logic.</li>

        </ul>

        </li>

        <li><p><code>prefillFields</code> — An <strong>object</strong> that
        contains form submission data for the prospect, specifically their
        <code>"First Name"</code>, <code>"Last Name"</code>, and
        <code>"Email"</code>. These values can be used to pre-populate the
        prospect's information before finalizing the meeting booking.</p>

        <ul>

        <li><strong>Note</strong>: to receive these pre-populated values, your
        Trigger Node form fields must be mapped to our default First Name, Last
        Name, Email variables.</li>

        </ul>

        </li>

        </ul>

        </li>

        <li><p><code>availability</code> — An <strong>object</strong> that
        contains available time slots and a mapping of user indices to user
        IDs.</p>

        <ul>

        <li><p>❗️<strong>Note:</strong> If this object is empty, then this is an
        indicator that either the meeting type expired or there are no
        availability in the pool (e.g. all members are on vacations). In this
        scenario, please revert to your fallback experience.</p>

        </li>

        <li><p><code>indexToUserIdMap</code> — An <strong>object</strong> that
        maps numeric indices (used in <code>timeSlots.users</code>) to user IDs
        from the <code>userIdToInfoMap</code> object.</p>

        </li>

        <li><p><code>timeSlots</code> — An <strong>array</strong> of time slot
        objects that represent available meeting windows. You can use this data
        to render available times on your scheduling UI.</p>

        <ul>

        <li><p><code>start_time</code> — A <strong>number</strong> that
        represents the start time in Unix epoch milliseconds.</p>

        </li>

        <li><p><code>end_time</code> — A <strong>number</strong> that represents
        the end time in Unix epoch milliseconds.</p>

        </li>

        <li><p><code>users</code> — An <strong>array</strong> of
        <strong>numbers</strong> that reference user indices from
        <code>indexToUserIdMap</code>. These represent the users who are
        available during this time slot.</p>

        <ul>

        <li>❗️<strong>Note:</strong> You'll need to use the corresponding user
        IDs (from <code>indexToUserIdMap</code>) as part of the request payload
        when booking the meeting.</li>

        </ul>

        </li>

        </ul>

        </li>

        </ul>

        </li>

        <li><p><code>userIdToInfoMap</code> — An <strong>object</strong> that
        maps user IDs to user-specific details used for scheduling.</p>

        <ul>

        <li><p>❗️<strong>Note:</strong> The information in
        <code>userIdToInfoMap</code> is <em><strong>not required</strong></em>
        to build the core calendar UI. It is provided as supplementary
        context.</p>

        </li>

        <li><p><code>[userId]</code> — An <strong>object</strong> where each key
        is a user ID and each value is a user object.</p>

        <ul>

        <li><p><code>FirstName</code> — A <strong>string</strong> that
        represents the user's first name.</p>

        </li>

        <li><p><code>LastName</code> — A <strong>string</strong> that represents
        the user's last name.</p>

        </li>

        <li><p><code>Email</code> — A <strong>string</strong> that represents
        the user's email address.</p>

        </li>

        <li><p><code>TimeZoneSidKey</code> — A <strong>string</strong> that
        represents the user's primary time zone, using the <a
        href="https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List">IANA
        Time Zone Database</a> format. (e.g.
        <code>America/Los_Angeles</code>)</p>

        </li>

        <li><p><code>ConferenceLink</code> — A <strong>string</strong> that
        represents the user's conferencing URL</p>

        </li>

        </ul>

        </li>

        </ul>

        </li>

        </ul>

        </li>

        </ul>
      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: [email protected]
      responses:
        '200':
          description: Successful response
          content:
            application/json: {}
  /v1/scheduling/fetch-availability:
    post:
      tags:
        - 🗓️ Availability
      summary: v1/scheduling/fetch-availability
      description: >-
        <p>Use this endpoint to:</p>

        <ul>

        <li><p><strong>refresh times after routing</strong>, using the
        <code>token</code> returned by
        <code>v1/scheduling/route-and-fetch-availability</code> to refetch
        availability without re-running routing</p>

        </li>

        <li><p>fetch availability for <strong>single-meeting-type BookIt Links
        only</strong> by passing the <code>linkId</code></p>

        <ul>

        <li>⚠️ Multi-Meeting Type Links, Routing Links, Dynamic Links, and
        BookIt Invites/Embedded Meeting Invites Links <strong>are not
        supported</strong> by this endpoint.</li>

        </ul>

        </li>

        <li><p><strong>reschedule flow:</strong> pass <code>meetingId</code> to
        fetch availability for rescheduling an existing meeting</p>

        </li>

        </ul>

        <hr />

        <h2 id="request-body-parameters">Request Body Parameters</h2>

        <p>❗️ <strong>Important:</strong> The request body must include
        <strong>exactly one</strong> of the following parameters:</p>

        <ul>

        <li><p><code>token</code> — A <strong>string</strong> value returned by
        the <code>/v1/scheduling/route-and-fetch-availability</code>
        endpoint.</p>

        <ul>

        <li><p>Use this parameter to <strong>refresh availability after
        routing</strong> <em><strong>and</strong></em> <strong>before a meeting
        has been booked.</strong> This token represents the previously computed
        routing + scheduling context.</p>

        </li>

        <li><p>⚠️ The <code>token</code> is valid <strong>only until a meeting
        is successfully booked</strong> for that routed outcome.</p>

        <ul>

        <li><p>If a meeting has already been created, the token can no longer be
        used.</p>

        </li>

        <li><p>For rescheduling a booked meeting, use <code>meetingId</code>
        instead.</p>

        </li>

        </ul>

        </li>

        <li><p>When <code>token</code> is provided, <code>linkId</code> and
        <code>meetingId</code> must not be included.</p>

        </li>

        </ul>

        </li>

        <li><p><code>linkId</code> — A <strong>string</strong> that represents
        the ID of a <strong>single-meeting-type BookIt Link</strong>.</p>

        <ul>

        <li><p>Use this parameter to fetch availability for standalone BookIt
        Links.</p>

        <ul>

        <li>⚠️ Multi-Meeting Type Links, Routing Links, Dynamic Links, and
        BookIt Invites/Embedded Meeting Invites are <strong>not
        supported</strong> by this endpoint.</li>

        </ul>

        </li>

        <li><p>This value is derived from the BookIt Link URL and corresponds to
        the path segment immediately following <code>/l/</code>. For example,
        given the BookIt Link
        <code>https://leandata.my.leandata.com/l/Lw5mjKK</code>, the linkId is
        <code>Lw5mjKK</code>.</p>

        </li>

        <li><p>When <code>linkId</code> is provided, <code>token</code> and
        <code>meetingId</code> must not be included.</p>

        </li>

        </ul>

        </li>

        <li><p><code>meetingId</code> — A <strong>string</strong> that
        represents the ID of an existing scheduled meeting.</p>

        <ul>

        <li><p>Use this parameter to fetch updated availability <strong>after a
        meeting has already been booked</strong>, for use in a reschedule
        flow.</p>

        </li>

        <li><p>This returns updated availability for the meeting’s associated
        meeting type and host(s).</p>

        </li>

        <li><p>When <code>meetingId</code> is provided, <code>token</code> and
        <code>linkId</code> must not be included.</p>

        </li>

        </ul>

        </li>

        </ul>

        <hr />

        <h2 id="response-body-parameters">Response Body Parameters</h2>

        <p>The response structure varies depending on whether the request used
        <code>token</code>, <code>linkId</code>, or <code>meetingId</code>.</p>

        <h3 id="top-level-properties">Top-Level Properties</h3>

        <div class="click-to-expand-wrapper is-table-wrapper"><table>

        <thead>

        <tr>

        <th>Property</th>

        <th>Type</th>

        <th>Description</th>

        <th>When Returned</th>

        </tr>

        </thead>

        <tbody>

        <tr>

        <td><code>calendarEvent</code></td>

        <td>object</td>

        <td>Details of the existing scheduled event (id, title, scheduledTime,
        attendees, status, organizer).</td>

        <td><strong>Reschedule flow only</strong> (<code>meetingId</code>)</td>

        </tr>

        <tr>

        <td><code>meeting</code></td>

        <td>object</td>

        <td>Meeting metadata (name, duration, required form fields, styling,
        etc.).</td>

        <td>All flows</td>

        </tr>

        <tr>

        <td><code>pageInfo</code></td>

        <td>object</td>

        <td>Page-level metadata including hosts and booking behavior flags.</td>

        <td>All flows</td>

        </tr>

        <tr>

        <td><code>userIdToInfoMap</code></td>

        <td>object</td>

        <td>Map of user ID → user scheduling metadata (name, email, timezone,
        phone, conference link).</td>

        <td>All flows</td>

        </tr>

        <tr>

        <td><code>availability</code></td>

        <td>object</td>

        <td>Available time slots and host index mapping.</td>

        <td>All flows</td>

        </tr>

        </tbody>

        </table>

        </div><h3 id="pageinfo-properties"><code>pageInfo</code> Properties</h3>

        <div class="click-to-expand-wrapper is-table-wrapper"><table>

        <thead>

        <tr>

        <th>Property</th>

        <th>Type</th>

        <th>Description</th>

        </tr>

        </thead>

        <tbody>

        <tr>

        <td><code>displayAllPoolAvailability</code></td>

        <td>boolean or <code>null</code></td>

        <td>⚠️ Always check <code>displayAllPoolAvailability</code> before
        booking.  <br />If <code>true</code>, use <strong>POST</strong>
        <code>/v1/round-robin-meeting</code> booking endpoint.  <br />If
        <code>false</code>, use <strong>POST</strong> <code>/v1/meeting</code>
        booking endpoint</td>

        </tr>

        <tr>

        <td><code>userIds</code></td>

        <td>string[]</td>

        <td>Represents <strong>defined hosts</strong> for the meeting. If
        <code>userIds</code> 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.</td>

        </tr>

        <tr>

        <td><code>nonSFDCUserIds</code></td>

        <td>string[]</td>

        <td>IDs for non-SFDC users included in scheduling (group links
        only).</td>

        </tr>

        <tr>

        <td><code>prefillFields</code></td>

        <td>object</td>

        <td>Prospect values used to pre-populate the booking form (First Name,
        Email, etc.).</td>

        </tr>

        </tbody>

        </table>

        </div><h3 id="meeting-object"><code>meeting</code> Object</h3>

        <div class="click-to-expand-wrapper is-table-wrapper"><table>

        <thead>

        <tr>

        <th>Property</th>

        <th>Type</th>

        <th>Description</th>

        </tr>

        </thead>

        <tbody>

        <tr>

        <td><code>name</code></td>

        <td>string</td>

        <td>Display name of the meeting type.</td>

        </tr>

        <tr>

        <td><code>duration</code></td>

        <td>object</td>

        <td>Duration metadata (<code>unit</code>, <code>value</code>)

# --- truncated at 32 KB (101 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/leandata/refs/heads/main/openapi/leandata-bookit-openapi.yml