Added

OnSched 3.12.0 - reschedule predecessor start time and cancelled interval

API

  • Reschedule predecessor start: After PUT /v3/appointment/{id}/reschedule, the new appointment includes rescheduledFromStartTime — the immediate predecessor's scheduled start instant (Unavailability.startTime at reschedule time). It pairs with rescheduledFromAppointmentId on the same hop. Null when the row was not created by a reschedule. Read-only; sending it on create, update, book, reschedule, cancel, or confirm returns 400.
  • Cancelled scheduled interval: After PUT /v3/appointment/{id}/cancel, private appointment responses include scheduledStartTime and scheduledEndTime — the occupancy interval at cancel time. Nested Unavailability is still destroyed so the slot is free. Read-only; sending either field on create, update, book, reschedule, cancel, or confirm returns 400. GET /v3/appointments from/to filters match cancelled rows via the scheduled start when occupancy is gone.
  • No backfill: Successors created before this release keep null for the start field, including rows that already had rescheduledFromAppointmentId. Appointments cancelled before this release keep null scheduled fields.
  • Audit: Success reschedule audit snapshots include rescheduledFromStartTime when the predecessor had a start time. rescheduleFromTrail stays ids-only. Cancel audit continues to store slotStart/slotEnd.
  • Public and V1 unchanged: Public GET still omits predecessor and scheduled-interval fields; V1 rescheduledId stays null.

See Appointments Guide and Appointment Audit Events.

Dashboard

  • Appointment detail: When a booking has a predecessor, the edit panel shows the predecessor's previous start time above the predecessor id link.
  • Cancelled appointments: The appointments table and appointment detail show scheduledStartTime when occupancy Unavailability is gone after cancel. The operator calendar still hides cancelled rows.
  • Appointment list sort: GET /v3/appointments accepts sort=created|scheduled and order=asc|desc. Default is newest row first (sort=created, order=desc). Use sort=scheduled to order the full paginated result by occupancy start, else scheduledStartTime after cancel (default order=asc). The Merchant Portal appointments table uses scheduled sort.