Skip to content

Booker Atom: Multiple critical bugs prevent multi-host bookings from working #23560

@mattlgroff

Description

@mattlgroff

UPDATE: This issue grew into multiple related issues.

  1. Parameter name mismatch (usernameList[] vs usernames[])
  2. Event type API returning wrong data (id: 0, slug: "dynamic")
  3. Frontend forcing dynamic override even with valid event slugs
  4. Availability API not being called due to enabled condition

Issue Summary

Booker atom does not load availability for dynamic bookings (multi-host via username joined with +).
When username="userA+userB", the calendar renders but no days/times become selectable because the GET /v2/slots/available request is not sent at all. With a single username, the request is sent and times render.


Steps to Reproduce

  1. Render the Booker atom with a combined username and valid event slug:
   <Booker eventSlug="thirty-minutes-video" username="campos-...-umbrage-com+aivory.lagto-...-umbrage-com" />
  1. Observe that the calendar shows but no dates are selectable.
  2. Change to a single username:
   <Booker eventSlug="thirty-minutes-video" username="campos-...-umbrage-com" />
  1. Dates and times are selectable.

Any other relevant information: Booker should behave the same for single and multi-host bookings; the missing availability call prevents the UI from populating time slots.


Actual Results

  • Dynamic (two people): Calendar renders, no availability loads.
    Calls observed:

    • GET /v2/provider/<clientId>
    • GET /v2/atoms/event-types/thirty-minutes-video/public?username=<combined>
    • GET /v2/timezones
    • GET /v2/atoms/verification/email/check?...
    • Missing: GET /v2/slots/available?...
  • Single person: Calendar renders with availability.
    Calls observed:

    • GET /v2/provider/<clientId>

    • GET /v2/atoms/event-types/thirty-minutes-video/public?username=<single>

    • GET /v2/timezones

    • GET /v2/atoms/verification/email/check?...

    • Present:

      GET /v2/slots/available
        ?usernameList[]=campos-...-umbrage-com
        &eventTypeId=2972117
        &startTime=2025-09-01T04:00:00.000Z
        &endTime=2025-10-01T03:59:59.999Z
        &timeZone=America/New_York
        &eventTypeSlug=thirty-minutes-video
        &_silentCalendarFailures=false
      

Expected Results

  • For dynamic bookings, Booker should send:

    GET /v2/slots/available
      ?usernameList[]=userA
      &usernameList[]=userB
      &eventTypeId=<resolved>
      &startTime=...
      &endTime=...
      &timeZone=...
      &eventTypeSlug=<slug>
      &_silentCalendarFailures=false
    

    and render selectable dates/times.


Technical details

  • Browser: Brave 1.81.137 (Official Build) (64-bit) — Chromium 139.0.7258.158
  • Node.js: v22.16.0
  • Component: @calcom/atomsBooker

Evidence

  • Reproduced by rendering Booker with a combined username vs a single username as shown in Steps to Reproduce.
  • The only functional difference observed is the absence of the GET /v2/slots/available call in the dynamic (two-person) case.

Metadata

Metadata

Assignees

No one assigned

    Labels

    apiarea: API, enterprise API, access token, OAuthbooking-pagearea: booking page, public booking page, booker🐛 bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions