Skip to main content

API Changelog

A log of notable changes to the SavvyCal Appointments API.

March 25, 2026

  • New: -- Booking intents now include requirements and workflow fields. 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_fields field on BookingIntent, PublicBookingIntent, and related request schemas is now a typed enum array instead of a freeform string array.
  • Changed: -- The locked_fields enum values start_at, end_at, and time_zone have been consolidated into a single slot value on BookingIntent, PublicBookingIntent, and related request schemas.

March 23, 2026

March 21, 2026

  • New: -- Booking intents now include a submissions field for attaching form responses during the booking flow. See BookingIntent and IntentSubmissionInput.
  • New: -- The Get Client and List Clients endpoints now support an include_sensitive query parameter for controlling whether sensitive fields (name, email, phone) are included in the response.
  • New: -- Booking intents now include an errors field 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

March 10, 2026

  • Removed: -- The deprecated client_locale, client_reference_id, client_time_zone, and fields properties have been removed from the Appointment schema. Use client_data instead.

March 5, 2026

March 2, 2026

  • New: -- Services now include an optional internal_name field 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

February 27, 2026

  • New: -- PublicAppointment now includes a urls field 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 code field containing a machine-readable error code (e.g. slot_unavailable, no_available_provider). See GenericErrorResponse and JsonErrorResponse.

February 25, 2026

  • Changed: -- The from and until query parameters on the List available time slots and List public time slots endpoints are now optional. from defaults to today if not provided. Either until or limit must be provided.
  • New: -- Added a limit query parameter to the List available time slots and List public time slots endpoints as an alternative to until for controlling the number of aggregated slots returned.
  • New: -- Added webhook events for booking intents: booking_intent.created, booking_intent.updated, booking_intent.completed, and booking_intent.abandoned. See Webhooks.
  • New: -- Booking intent endpoints now accept an auto_assign_provider flag. When true, an available provider is automatically assigned for the selected time slot if no provider_id is 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_intents and 5 public endpoints under /v1/public/booking_intents for managing multi-step booking flows with time slot holding. See Booking Intents and Public Booking Intents.
  • New: Hold Policy -- Services now include a hold field within booking_policy for 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.