API Changelog
A log of notable changes to the SavvyCal Appointments API.
March 25, 2026
- New: -- Booking intents now include
requirementsandworkflowfields. Requirements provides per-section completeness status for booking, info, and form submission steps. Workflow provides server-computed step routing, completability, and defunct state. See BookingIntentRequirements, BookingIntentWorkflow, and SubmissionRequirement. - Changed: -- The
locked_fieldsfield on BookingIntent, PublicBookingIntent, and related request schemas is now a typed enum array instead of a freeform string array. - Changed: -- The
locked_fieldsenum valuesstart_at,end_at, andtime_zonehave been consolidated into a singleslotvalue on BookingIntent, PublicBookingIntent, and related request schemas.
March 23, 2026
- New: -- Added a BookingIntentBookingPolicy schema representing hold policy overrides applied to a booking intent.
- Changed: -- The
hold_durationandhold_enabledfields on BookingIntent, CreateBookingIntentRequest, and UpdateBookingIntentRequest have been replaced with a nestedbooking_policyobject. Hold settings are now atbooking_policy.hold.durationandbooking_policy.hold.enabled.
March 21, 2026
- New: -- Booking intents now include a
submissionsfield for attaching form responses during the booking flow. See BookingIntent and IntentSubmissionInput. - New: -- The Get Client and List Clients endpoints now support an
include_sensitivequery parameter for controlling whether sensitive fields (name, email, phone) are included in the response. - New: -- Booking intents now include an
errorsfield containing validation errors in JSON:API format. See BookingIntent and JsonError. - New: -- Added a JsonError schema representing a single validation error object.
March 20, 2026
- New: Forms -- Added endpoints for managing intake forms with typed fields: Create Form, Get Form, List Forms, Update Form, and Delete Form. See Form.
- New: Client Fields -- Added endpoints for managing custom client fields: Create Client Field, Get Client Field, List Client Fields, Update Client Field, and Delete Client Field. See ClientField.
- New: Service Forms -- Added endpoints for attaching forms to services: Attach Service Form, List Service Forms, Sort Service Forms, and Detach Service Form. See ServiceForm.
- New: -- Services now include a
formsfield containing attached intake forms. See Service.
March 10, 2026
- Removed: -- The deprecated
client_locale,client_reference_id,client_time_zone, andfieldsproperties have been removed from the Appointment schema. Useclient_datainstead.
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.