Dashboard calendar shows two bookings under the same team member; Bookings API returns two different team members

Two bookings at the same location on the same date appear in the SAME team
member column on the Appointments dashboard calendar. RetrieveBooking returns a
DIFFERENT team_member_id for each one. Both team members are ACTIVE and
distinct.

We rely on appointment_segments.team_member_id to prevent double-booking a
photographer, so if the calendar is authoritative we are checking conflicts
against the wrong person.

Happy to provide full raw JSON, booking IDs, merchant ID and application ID
privately.

ENVIRONMENT

Application ID: sq0idp-EbrDXMV5425dwA3suHafeQ
Square-Version: 2024-07-17
(also reproduced on 2025-01-23, 2025-06-18, 2026-01-22, 2026-06-17 —
identical responses)
Access token: seller-level, single merchant, production
Endpoint: GET /v2/bookings/{booking_id}

Booking IDs are redacted below as BOOKING_A / BOOKING_B. Real booking IDs and
merchant ID available privately on request.

REPRODUCTION

Both bookings start 2026-08-09T19:30:00Z (15:30 EDT).

-– Booking A —

GET /v2/bookings/BOOKING_A

start_at : 2026-08-09T19:30:00Z
status : ACCEPTED
version : 3
source : API

appointment_segments:
60 min team_member_id: TMOhz7F2nX5WYeKO (given_name “1.Beauty.Soho”)
30 min team_member_id: TMdBFuB3_dF3pd3G (given_name “4.Photo.Soho”)
85 min team_member_id: TMdBFuB3_dF3pd3G (given_name “4.Photo.Soho”)

-– Booking B —

GET /v2/bookings/BOOKING_B

start_at : 2026-08-09T19:30:00Z
status : ACCEPTED
version : 5
source : API

appointment_segments:
60 min team_member_id: TMCK2WVvIzzyIg8x (given_name “4.Beauty.Soho”)
35 min team_member_id: TMT9n2LvdZBsfnH9 (given_name “6.Photo.Soho”)
80 min team_member_id: TMT9n2LvdZBsfnH9 (given_name “6.Photo.Soho”)

-– The two photographers are genuinely different records —

GET /v2/team-members/TMdBFuB3_dF3pd3G
given_name: “4.Photo.Soho” status: ACTIVE

GET /v2/team-members/TMT9n2LvdZBsfnH9
given_name: “6.Photo.Soho” status: ACTIVE

Distinct IDs, distinct names, distinct email addresses, both ACTIVE.

EXPECTED VS ACTUAL

Expected: Booking A renders under “4.Photo.Soho” and Booking B under
“6.Photo.Soho”, per each booking’s appointment_segments.team_member_id.

Actual: both render under the SAME photographer column (“4.Photo.Soho”) on the
day view of the Appointments calendar.

Hi thanks for the detailed, well-structured report; the segment-level breakdown made this easy to identify.

First, the direct answer to your question: the Bookings API is authoritative.appointment_segments.team_member_id from RetrieveBooking reflects the actual staff assignment, so your double-booking checks are looking at the right person. The Appointments dashboard calendar rendering is what’s incorrect here.

We identified a bug where editing certain bookings (for example, saving a note on a paid/completed appointment) could cause the calendar view to lose or mis-attribute the staff assignment for a booking, even though the underlying booking data, and everything the API returns, remained correct. A fix has been deployed, so newly created or newly edited bookings should no longer be affected.

However, bookings that were affected before the fix won’t automatically re-render correctly, so please do send me the booking IDs and merchant ID privately (I will DM here or you could escalate via your Square contact) and we’ll get the affected records corrected so the calendar matches the API again.

Apologies for the trouble, and again, appreciate the thorough repro.