API Changelog
A log of notable changes to the SavvyCal Appointments API.
March 5, 2026
- New: -- Clients and services now support a
metadatafield for storing custom key-value pairs (maximum 16 KB). See Client and Service. - New: -- The List Clients and List Services endpoints now support filtering by
metadatausing bracket notation. - New: -- Added a ForbiddenResponse schema and 403 status code to the List Appointments endpoint.
March 2, 2026
- New: -- Services now include an optional
internal_namefield for setting an internal admin label. When set, this name is displayed in the admin UI instead of the public name. See Service.
March 1, 2026
- New: -- Services now include a
provider_notificationsfield for configuring staff email notification settings, including which notification types are enabled and additional recipients. See ProviderNotificationConfig and ProviderNotificationType.
February 27, 2026
- New: -- PublicAppointment now includes a
urlsfield containing client-facing action URLs for rescheduling, canceling, adding to calendar, downloading ICS files, and adding to Google Calendar.
February 26, 2026
- New: -- Error responses now include an optional
codefield containing a machine-readable error code (e.g.slot_unavailable,no_available_provider). See GenericErrorResponse and JsonErrorResponse.
February 25, 2026
- Changed: -- The
fromanduntilquery parameters on the List available time slots and List public time slots endpoints are now optional.fromdefaults to today if not provided. Eitheruntilorlimitmust be provided. - New: -- Added a
limitquery parameter to the List available time slots and List public time slots endpoints as an alternative tountilfor controlling the number of aggregated slots returned. - New: -- Added webhook events for booking intents:
booking_intent.created,booking_intent.updated,booking_intent.completed, andbooking_intent.abandoned. See Webhooks. - New: -- Booking intent endpoints now accept an
auto_assign_providerflag. Whentrue, an available provider is automatically assigned for the selected time slot if noprovider_idis specified. Supported on create, update, and complete operations for both authenticated and public booking intents.
February 24, 2026
- New: Booking Intents -- Added 6 authenticated endpoints under
/v1/booking_intentsand 5 public endpoints under/v1/public/booking_intentsfor managing multi-step booking flows with time slot holding. See Booking Intents and Public Booking Intents. - New: Hold Policy -- Services now include a
holdfield withinbooking_policyfor configuring time slot holds during the booking flow. See HoldPolicy and BookingPolicy. - New: Booking Intent schemas -- Added BookingIntent, PublicBookingIntent, HoldPolicy, and related request/response types.