Skip to main content

Service

A service represents a type of appointment.

appointment_typestringrequired

The type of appointment.

Possible values: [in_person, virtual]

booking_policy objectrequired

A booking policy defines the rules for booking a service from public booking interfaces.

advance_notice objectrequired

A policy for requiring minimum advance notice.

enabledbooleanrequired

Whether advance notice is enabled.

minimum_durationstringnullablerequired

The minimum duration of advance notice.

Possible values: Value must match regular expression ^PT(?:(\d+)H)?(?:(\d+)M)?$

allow_bookingbooleanrequired

Whether public booking is allowed for the service.

disabled_messagestringnullablerequired

The message to display when public booking is disabled.

hold objectrequired

A policy for temporarily reserving a slot during the multi-step booking flow.

durationstringnullablerequired

The duration of the hold.

Possible values: Value must match regular expression ^PT(?:(\d+)H)?(?:(\d+)M)?$

enabledbooleanrequired

Whether slot holds are enabled for the service.

maximize_utilization objectrequired

Avoid presenting overlapping time slots for service providers to eliminate gaps in the schedule.

enabledbooleanrequired

Whether maximize utilization is enabled for the service.

buffer_policy objectrequired

A policy for shielding time before and/or after appointments from being booked (e.g. prep time before, charting time after). The policy is captured on the appointment at booking time and continues to shield the surrounding time even if the service configuration changes later.

after_durationstringnullable

The buffer duration after the appointment.

Possible values: Value must match regular expression ^PT(?:(\d+)H)?(?:(\d+)M)?$

before_durationstringnullable

The buffer duration before the appointment.

Possible values: Value must match regular expression ^PT(?:(\d+)H)?(?:(\d+)M)?$

enabledbooleanrequired

Whether buffers are enabled for the service.

cancellation_policy objectrequired

A cancellation policy defines the rules for canceling a service from public booking interfaces.

advance_notice objectrequired

A policy for requiring minimum advance notice.

enabledbooleanrequired

Whether advance notice is enabled.

minimum_durationstringnullablerequired

The minimum duration of advance notice.

Possible values: Value must match regular expression ^PT(?:(\d+)H)?(?:(\d+)M)?$

allow_cancellationbooleanrequired

Whether public cancellation is allowed for the service.

disabled_messagestringnullablerequired

The message to display when public cancellation is disabled.

change_policy_textstringrequired

Displayed to clients in follow-up communication. Use this to explain any important rules about cancellations or rescheduling.

Example: Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.
created_atdatetimerequired

When the service was created.

durationstringrequired

The duration of time slots in ISO-8601 duration format.

Possible values: Value must match regular expression ^PT(?:(\d+)H)?(?:(\d+)M)?$

Example: `PT30M`
forms object[]nullable

Forms attached to this service.

  • Array [
  • created_atdatetimerequired

    When the service form was created.

    form_idstringrequired

    The ID of the attached form.

    Possible values: Value must match regular expression ^frm_\w{12}$

    form_namestringrequired

    The name of the attached form.

    idstringrequired

    Unique identifier for the service form.

    Possible values: Value must match regular expression ^sf_\w{12}$

    objectstringrequired

    String representing the object's type.

    Possible values: [service_form]

    sort_orderintegerrequired

    Display order of the form within the service.

    updated_atdatetimerequired

    When the service form was last updated.

  • ]
  • idstringrequired

    Unique identifier for the object.

    Possible values: Value must match regular expression ^srv_\w{12}$

    internal_namestringnullable

    An optional internal label for admin use. When set, this is displayed in the admin UI instead of the public name.

    metadata objectrequired

    Set of key-value pairs attached to this service. Maximum size is 16 KB.

    property name*any

    Set of key-value pairs attached to this service. Maximum size is 16 KB.

    namestringrequired

    The name of the service.

    objectstringrequired

    String representing the object's type.

    Possible values: [service]

    provider_notifications objectrequired

    Configuration for staff notification emails on a service, including which notification types are enabled and who receives them.

    additional_recipientsemail[]required

    Additional email addresses that receive staff notification emails for this service.

    notify_providerbooleanrequired

    Whether the assigned provider receives notification emails for this service.

    types object[]required

    Array of enabled staff notification types for the service.

  • Array [
  • typestringrequired

    The notification type.

    Possible values: [new_appointment, rescheduled, canceled]

  • ]
  • rescheduling_policy objectrequired

    A rescheduling policy defines the rules for rescheduling a service from public booking interfaces.

    advance_notice objectrequired

    A policy for requiring minimum advance notice.

    enabledbooleanrequired

    Whether advance notice is enabled.

    minimum_durationstringnullablerequired

    The minimum duration of advance notice.

    Possible values: Value must match regular expression ^PT(?:(\d+)H)?(?:(\d+)M)?$

    allow_reschedulingbooleanrequired

    Whether public rescheduling is allowed for the service.

    disabled_messagestringnullablerequired

    The message to display when public rescheduling is disabled.

    slot_rules object[]required

    Array of slot rules for the service.

  • Array [
  • recurrence_rule objectrequired

    A recurrence rule describes a repeating pattern of times. Recurrences rules in SavvyCal are modeled after the conventions of iCalendar recurrence rules (RRULE), but are a subset of the full specification.

    bydaystring[]

    The days of the week on which the recurrence occurs.

    Possible values: Value must match regular expression (mo|tu|we|th|fr|sa|su)$

    Example: ["mo","we","fr"]
    countintegernullable

    Number of occurrences at which to end the recurrence.

    Possible values: >= 1

    freqstringrequired

    The frequency of the recurrence.

    Possible values: [daily, weekly]

    intervalinteger

    How often the recurrence rule repeats.

    Possible values: >= 1

    Example: 2
    untildatenullable

    Date at which to end the recurrence (in ISO-8601 format).

    Example: 2024-01-02
    start_timesstring[]required

    Array of start times for slots.

    Possible values: Value must match regular expression ^\d{2}:\d{2}$

  • ]
  • updated_atdatetimerequired

    When the service was last updated.

    Service
    {
    "appointment_type": "in_person",
    "booking_policy": {
    "advance_notice": {
    "enabled": true,
    "minimum_duration": "PT1H"
    },
    "allow_booking": true,
    "disabled_message": "Booking is disabled for this service.",
    "hold": {
    "duration": "PT10M",
    "enabled": true
    },
    "maximize_utilization": {
    "enabled": true
    }
    },
    "buffer_policy": {
    "after_duration": "PT1H",
    "before_duration": "PT15M",
    "enabled": true
    },
    "cancellation_policy": {
    "advance_notice": {
    "enabled": true,
    "minimum_duration": "PT1H"
    },
    "allow_cancellation": true,
    "disabled_message": "Cancellation is disabled for this service."
    },
    "change_policy_text": "Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.",
    "created_at": "2025-02-17T17:49:19Z",
    "duration": "PT1H30M",
    "forms": [
    {
    "created_at": "2025-02-17T17:49:19Z",
    "form_id": "frm_d025a96ac0c6",
    "form_name": "Intake Form",
    "id": "sf_d025a96ac0c6",
    "object": "service_form",
    "sort_order": 1,
    "updated_at": "2025-02-17T17:49:19Z"
    }
    ],
    "id": "srv_d025a96ac0c6",
    "internal_name": null,
    "metadata": {
    "external_id": "123"
    },
    "name": "Initial Consult",
    "object": "service",
    "provider_notifications": {
    "additional_recipients": [
    "admin@example.com"
    ],
    "notify_provider": true,
    "types": [
    {
    "type": "new_appointment"
    }
    ]
    },
    "rescheduling_policy": {
    "advance_notice": {
    "enabled": true,
    "minimum_duration": "PT1H"
    },
    "allow_rescheduling": true,
    "disabled_message": "Rescheduling is disabled for this service."
    },
    "slot_rules": [
    {
    "recurrence_rule": {
    "byday": [
    "mo",
    "we",
    "fr"
    ],
    "freq": "weekly"
    },
    "start_times": [
    "09:00",
    "10:00"
    ]
    }
    ],
    "updated_at": "2025-02-17T17:49:19Z"
    }