{"components":{"responses":{},"schemas":{"UpdateProviderScheduleRequest":{"description":"Request schema for updating a provider schedule.","example":{"effective_from":"2025-01-01","effective_to":"2025-12-31","public_bookings":{"enabled":true},"weekly_rules":[{"day":"mo","end_time":"17:00","start_time":"09:00"}]},"properties":{"effective_from":{"description":"The effective date of the provider schedule.","format":"date_time","type":"string"},"effective_to":{"description":"The effective end date of the provider schedule.","format":"date_time","nullable":true,"type":"string"},"public_bookings":{"description":"Public booking settings for the schedule.","example":{"enabled":true},"properties":{"enabled":{"default":true,"description":"Whether public bookings are enabled for the schedule.","type":"boolean"}},"required":["enabled"],"type":"object"},"weekly_rules":{"description":"Weekly rules for the schedule.","items":{"$ref":"#/components/schemas/WeeklyRule"},"type":"array"}},"title":"UpdateProviderScheduleRequest","type":"object"},"ConfirmationEvent":{"description":"This is an object representing when an appointment was confirmed.","example":{"actor":null,"end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"initiated_by":"client","object":"confirmation_event","occurred_at":"2023-01-01T03:00:00Z","source":"client_ui","start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"}},"properties":{"actor":{"description":"The actor that initiated the confirmation (user ID or bearer token ID).","nullable":true,"type":"string"},"end_at":{"$ref":"#/components/schemas/ZonedDateTime"},"initiated_by":{"description":"The entity that initiated the confirmation.","enum":["user","client"],"type":"string"},"object":{"enum":["confirmation_event"],"type":"string"},"occurred_at":{"description":"The time at which the confirmation occurred (ISO-8601 format).","format":"datetime","type":"string"},"source":{"description":"The source of the confirmation event.","enum":["client_ui","dashboard","api"],"type":"string"},"start_at":{"$ref":"#/components/schemas/ZonedDateTime"}},"required":["object","source","initiated_by","actor","start_at","end_at","occurred_at"],"title":"ConfirmationEvent","type":"object"},"PublicAppointment":{"description":"A public appointment represents a booking that a client has made with a provider for a service.\n","example":{"cancellation":{"allowed":true,"disabled_message":null},"confirmed_at":"2025-03-10T15:30:00Z","end_at":{"local":"2025-03-01T11:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2025-03-01T04:00:00Z"},"id":"appt_a1b2c3d4e5f6","object":"public_appointment","rescheduling":{"allowed":false,"disabled_message":"Rescheduling is not available within 24 hours of your appointment"},"start_at":{"local":"2025-03-01T10:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2025-03-01T03:00:00Z"},"status":"scheduled","urls":{"add_to_calendar":["https://example.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar"],"add_to_google_calendar":["https://example.com/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://example.com/c/appointments/appt_a1b2c3d4e5f6/cancel"],"ics":["https://example.com/c/appointments/appt_a1b2c3d4e5f6/ics"],"reschedule":["https://example.com/c/appointments/appt_a1b2c3d4e5f6/reschedule"]}},"properties":{"cancellation":{"description":"Information about whether the appointment can be canceled by the client.","properties":{"allowed":{"description":"Whether the appointment can be canceled by the client.","type":"boolean"},"disabled_message":{"description":"A message explaining why cancellation is disabled, if applicable. Only present when allowed is false.","nullable":true,"type":"string"}},"required":["allowed","disabled_message"],"type":"object"},"confirmed_at":{"description":"Time at which the object was confirmed.","format":"date-time","nullable":true,"type":"string"},"end_at":{"$ref":"#/components/schemas/ZonedDateTime"},"id":{"description":"Unique identifier for the object.","pattern":"^appt_\\w{12}$","type":"string"},"object":{"description":"String representing the object's type.","enum":["public_appointment"],"type":"string"},"rescheduling":{"description":"Information about whether the appointment can be rescheduled by the client.","properties":{"allowed":{"description":"Whether the appointment can be rescheduled by the client.","type":"boolean"},"disabled_message":{"description":"A message explaining why rescheduling is disabled, if applicable. Only present when allowed is false.","nullable":true,"type":"string"}},"required":["allowed","disabled_message"],"type":"object"},"start_at":{"$ref":"#/components/schemas/ZonedDateTime"},"status":{"description":"The status of the appointment.","enum":["scheduled","canceled"],"type":"string"},"urls":{"description":"URLs related to the appointment for client-facing actions.","properties":{"add_to_calendar":{"description":"URLs for adding the appointment to a calendar.","items":{"format":"uri","type":"string"},"type":"array"},"add_to_google_calendar":{"description":"URLs for adding the appointment to Google Calendar.","items":{"format":"uri","type":"string"},"type":"array"},"cancel":{"description":"URLs for canceling the appointment.","items":{"format":"uri","type":"string"},"type":"array"},"ics":{"description":"URLs for downloading an ICS file for the appointment.","items":{"format":"uri","type":"string"},"type":"array"},"reschedule":{"description":"URLs for rescheduling the appointment.","items":{"format":"uri","type":"string"},"type":"array"}},"required":["reschedule","cancel","add_to_calendar","add_to_google_calendar","ics"],"type":"object"}},"required":["object","status","confirmed_at","id","start_at","end_at","cancellation","rescheduling","urls"],"title":"PublicAppointment","type":"object","x-tags":["Public Booking"]},"BlocksResponse":{"description":"Response schema for a list of blocks","example":{"data":[{"all_day":false,"attachment_type":"provider","attachments":["prov_d025a96ac0c6"],"created_at":"2017-09-12T12:34:55Z","end_date":"2025-10-27","end_time":"17:00","exception_dates":["2025-10-27T09:00:00"],"id":"blk_d025a96ac0c6","object":"block","recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"service_id":null,"start_date":"2025-10-27","start_time":"09:00","time_zone":"America/New_York","title":"Team Meeting","updated_at":"2017-09-13T10:11:12Z"}],"meta":{"current_page":1,"page_size":10,"total_count":50,"total_pages":5}},"properties":{"data":{"description":"List of blocks","items":{"$ref":"#/components/schemas/Block"},"type":"array"},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","meta"],"title":"BlocksResponse","type":"object"},"ProviderUpdatedEventData":{"description":"This is an object representing data for the provider updated event.","example":{"object":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"type":"provider.updated"},"properties":{"object":{"$ref":"#/components/schemas/Provider"},"type":{"description":"The event type.","enum":["provider.updated"],"type":"string"}},"required":["type","object"],"title":"ProviderUpdatedEventData","type":"object","x-account-event-data":true},"AppointmentRescheduledEventData":{"description":"This is an object representing data for the appointment rescheduled event.","example":{"object":{"appointment_type":"in_person","cancellation_events":[{"actor":null,"cancellation_reason":{"id":"cr_a1b2c3d4e5f6","name":"Distance too far","object":"cancellation_reason","sort_order":1},"custom_reason_text":"I'm sick","initiated_by":"client","object":"cancellation_event","occurred_at":"2023-01-01T03:00:00Z","source":"client_ui"}],"client":{"created_at":"2025-01-15T14:30:00Z","email":"jane.smith@example.com","first_name":"Jane","id":"clnt_a1b2c3d4e5f6","last_name":"Smith","locale":"en-US","metadata":{"external_id":"123"},"object":"client","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago","updated_at":"2025-03-10T09:45:00Z"},"client_data":{"email":"jane.smith@example.com","first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirmation_events":[{"actor":null,"end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"initiated_by":"client","object":"confirmation_event","occurred_at":"2023-01-01T03:00:00Z","source":"client_ui","start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"}}],"confirmed_at":"2025-03-10T15:30:00Z","created_at":"2025-03-10T14:30:00Z","end_at":{"local":"2025-03-01T11:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2025-03-01T04:00:00Z"},"id":"appt_a1b2c3d4e5f6","object":"appointment","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"reschedule_events":[{"actor":null,"initiated_by":"client","new_end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"new_start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"},"object":"reschedule_event","occurred_at":"2023-01-01T03:00:00Z","previous_end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"previous_start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"},"source":"client_ui"}],"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}},"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","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"},"start_at":{"local":"2025-03-01T10:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2025-03-01T03:00:00Z"},"status":"scheduled","updated_at":"2025-03-10T14:30:00Z","urls":{"add_to_google_calendar":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/reschedule"]}},"previous_attributes":{"end_at":{"local":"2025-03-01T11:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2025-03-01T04:00:00Z"},"start_at":{"local":"2025-03-01T10:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2025-03-01T03:00:00Z"}},"type":"appointment.rescheduled"},"properties":{"object":{"$ref":"#/components/schemas/Appointment"},"previous_attributes":{"properties":{"end_at":{"$ref":"#/components/schemas/ZonedDateTime"},"start_at":{"$ref":"#/components/schemas/ZonedDateTime"}},"required":["start_at","end_at"],"type":"object"},"type":{"description":"The event type.","enum":["appointment.rescheduled"],"type":"string"}},"required":["type","object","previous_attributes"],"title":"AppointmentRescheduledEventData","type":"object","x-account-event-data":true},"ForbiddenResponse":{"description":"Response schema for forbidden requests","example":{"errors":[{"detail":"Forbidden","status":"403"}]},"properties":{"errors":{"items":{"properties":{"detail":{"description":"Error message","type":"string"},"status":{"description":"HTTP status code","type":"string"},"title":{"description":"Error title","type":"string"}},"required":["detail"],"type":"object"},"type":"array"}},"required":["errors"],"title":"ForbiddenResponse","type":"object"},"ServiceSlotResponse":{"description":"Response schema for service slots","example":{"data":{"aggregated_slots":[{"count":1,"end_at":"2025-03-10T10:00:00Z","end_at_ts":1736464800,"object":"aggregated_slot","start_at":"2025-03-10T09:00:00Z","start_at_ts":1736461200,"time_zone":"Etc/UTC"},{"count":1,"end_at":"2025-03-10T12:00:00Z","end_at_ts":1736468400,"object":"aggregated_slot","start_at":"2025-03-10T11:00:00Z","start_at_ts":1736464800,"time_zone":"Etc/UTC"}],"provider_slots":[{"open":[{"end_at":"2025-03-10T10:00:00Z","end_at_ts":1736464800,"object":"slot","start_at":"2025-03-10T09:00:00Z","start_at_ts":1736461200,"time_zone":"Etc/UTC"},{"end_at":"2025-03-10T12:00:00Z","end_at_ts":1736468400,"object":"slot","start_at":"2025-03-10T11:00:00Z","start_at_ts":1736464800,"time_zone":"Etc/UTC"}],"service_provider":{"created_at":"2025-02-19T17:36:36Z","id":"sp_d025a96ac0c6","object":"service_provider","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"service_id":"srv_d025a96ac0c6","updated_at":"2025-02-19T17:36:36Z"}}]}},"properties":{"data":{"properties":{"aggregated_slots":{"items":{"$ref":"#/components/schemas/AggregatedSlot"},"type":"array"},"provider_slots":{"items":{"properties":{"open":{"items":{"$ref":"#/components/schemas/Slot"},"type":"array"},"service_provider":{"$ref":"#/components/schemas/ServiceProvider"}},"type":"object"},"type":"array"}},"type":"object"}},"required":["data"],"title":"ServiceSlotResponse","type":"object"},"ConfirmAppointmentRequest":{"description":"Request schema for confirming an appointment","example":{"initiated_by":"client"},"properties":{"initiated_by":{"default":"client","description":"The entity that initiated the confirmation.","enum":["user","client"],"type":"string"}},"title":"ConfirmAppointmentRequest","type":"object"},"AccountUser":{"description":"This is an object representing a user in an account.","example":{"object":"account_user","passive":false,"roles":[{"id":"role_123456789012","name":"Admin","object":"role","type":"admin"}],"user":{"created_at":"2025-03-15T13:01:08Z","email":"avery@tendermedical.com","first_name":"Avery","id":"user_d025a96ac0c6","last_name":"Evans","object":"user","updated_at":"2025-03-15T13:01:08Z"}},"properties":{"object":{"description":"String representing the object's type.","enum":["account_user"],"type":"string"},"passive":{"description":"Whether this user is passive. Passive users do not receive direct email notifications (e.g., OAuth reconnection notices).","type":"boolean"},"roles":{"description":"The roles assigned to the user in this account.","items":{"$ref":"#/components/schemas/Role"},"type":"array"},"user":{"$ref":"#/components/schemas/User"}},"required":["object","user","roles","passive"],"title":"AccountUser","type":"object","x-tags":["Account Users"]},"UpdateBlockRequest":{"description":"Request schema for updating a block.","example":{"all_day":false,"attachment_type":"provider","attachments":["prov_d025a96ac0c6"],"end_date":"2025-10-27","end_time":"17:00","exception_dates":["2025-10-27T09:00:00"],"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_date":"2025-10-27","start_time":"09:00","time_zone":"America/New_York","title":"Initial Consult"},"properties":{"all_day":{"description":"Whether the block is all day.","type":"boolean"},"attachment_type":{"description":"The type of attachment for the block.","enum":["location","service","provider","service_provider"],"type":"string"},"attachments":{"description":"The resources to which this block is attached. These can be service IDs (to block availabilty for all providers on a service), provider IDs (to block availability for a specific provider), service provider IDs (to block availability for a specific service provider), or location IDs (to block availability for a specific location).","items":{"type":"string"},"type":"array"},"end_date":{"description":"The end date of the block.","format":"date","type":"string"},"end_time":{"description":"The end time of the block.","nullable":true,"pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$","type":"string"},"exception_dates":{"description":"The exception dates for the block.","items":{"example":"2025-03-01T10:00:00","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","type":"string"},"type":"array"},"recurrence_rule":{"allOf":[{"$ref":"#/components/schemas/RecurrenceRule"}],"description":"The recurrence rule for the block (or null if there is no recurrence).","nullable":true,"type":"object"},"service_id":{"description":"The ID of the service for the block. Required when `attachment_type` is `service_provider`.","nullable":true,"type":"string"},"start_date":{"description":"The start date of the block.","format":"date","type":"string"},"start_time":{"description":"The start time of the block.","nullable":true,"pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$","type":"string"},"time_zone":{"description":"The time zone of the block.","type":"string"},"title":{"description":"The title of the block.","type":"string"}},"title":"UpdateBlockRequest","type":"object"},"BookingIntentCompletedEventData":{"description":"This is an object representing data for the booking intent completed event.","example":{"object":{"abandoned_at":null,"appointment":null,"client":null,"client_data":{"email":"jane@example.com","first_name":"Jane","last_name":"Doe","locale":"en","phone":"+15551234567","reference_id":"ext_123","time_zone":"America/New_York"},"completed_at":null,"created_at":"2026-02-22T10:00:00Z","end_at":{"local":"2026-02-23T10:30:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1771947000,"utc":"2026-02-23T15:30:00Z"},"hold_duration":"PT10M","hold_enabled":true,"hold_until":"2026-02-22T10:10:00Z","id":"bi_abc123def456abc123def456","locked_fields":["provider_id","start_at","end_at","time_zone"],"metadata":{"source":"web"},"object":"booking_intent","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"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}},"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","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"},"start_at":{"local":"2026-02-23T10:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1771945200,"utc":"2026-02-23T15:00:00Z"},"status":"slot_selected","updated_at":"2026-02-22T10:00:00Z"},"type":"booking_intent.completed"},"properties":{"object":{"$ref":"#/components/schemas/BookingIntent"},"type":{"description":"The event type.","enum":["booking_intent.completed"],"type":"string"}},"required":["type","object"],"title":"BookingIntentCompletedEventData","type":"object","x-account-event-data":true},"AccountResponse":{"description":"Response schema for a single account","example":{"data":{"created_at":"2017-09-12T12:34:55Z","id":"acct_d025a96ac0c6","name":"Tender Medical","object":"account","updated_at":"2017-09-13T10:11:12Z"}},"properties":{"data":{"$ref":"#/components/schemas/Account"}},"title":"AccountResponse","type":"object"},"UpdateConnectedAccountRequest":{"description":"Request schema for updating a connected account","example":{"display_name":"Work Calendar"},"properties":{"display_name":{"description":"The display name for the connected account.","nullable":true,"type":"string"}},"title":"UpdateConnectedAccountRequest","type":"object"},"HoldPolicy":{"description":"A policy for temporarily reserving a slot during the multi-step booking flow.\n","example":{"duration":"PT10M","enabled":true},"properties":{"duration":{"description":"The duration of the hold.","nullable":true,"pattern":"^PT(?:(\\d+)H)?(?:(\\d+)M)?$","type":"string"},"enabled":{"description":"Whether slot holds are enabled for the service.","type":"boolean"}},"required":["enabled","duration"],"title":"HoldPolicy","type":"object"},"CreateBookingIntentRequest":{"description":"Request schema for creating a booking intent","example":{"hold_duration":"PT10M","hold_enabled":true,"metadata":{"source":"web"},"service_id":"srv_1234567890"},"properties":{"auto_assign_provider":{"description":"When true, automatically assigns an available provider for the selected time slot if no provider_id is specified.","nullable":true,"type":"boolean"},"client_data":{"description":"Progressive client data to collect during the booking flow.","nullable":true,"properties":{"email":{"nullable":true,"type":"string"},"first_name":{"nullable":true,"type":"string"},"last_name":{"nullable":true,"type":"string"},"locale":{"nullable":true,"type":"string"},"phone":{"nullable":true,"type":"string"},"reference_id":{"nullable":true,"type":"string"},"time_zone":{"nullable":true,"type":"string"}},"type":"object"},"client_id":{"description":"The ID of an existing client to link.","nullable":true,"type":"string"},"end_at":{"description":"The end time of the slot as an ISO-8601 datetime string with a timezone offset.","format":"date-time","nullable":true,"type":"string"},"hold_duration":{"description":"The hold duration as an ISO 8601 duration string (e.g., PT10M). When omitted, falls back to the service's hold policy duration.","nullable":true,"type":"string"},"hold_enabled":{"description":"Whether to enable slot holding. When omitted, falls back to the service's hold policy.","nullable":true,"type":"boolean"},"locked_fields":{"description":"Fields to lock from public API updates. Possible values: service_id, provider_id, start_at, end_at, time_zone, client_data.","items":{"type":"string"},"nullable":true,"type":"array"},"metadata":{"additionalProperties":true,"description":"Custom metadata key-value pairs.","nullable":true,"type":"object"},"provider_id":{"description":"The ID of the provider to assign.","nullable":true,"type":"string"},"service_id":{"description":"The ID of the service for this booking intent.","nullable":true,"type":"string"},"slot_prevalidated":{"default":false,"description":"Whether the slot has been prevalidated. When true, public completion skips slot validation.","type":"boolean"},"start_at":{"description":"The start time of the slot as an ISO-8601 datetime string with a timezone offset.","format":"date-time","nullable":true,"type":"string"},"time_zone":{"description":"The local time zone for the slot (IANA format).","nullable":true,"type":"string"}},"title":"CreateBookingIntentRequest","type":"object"},"BookingIntentAbandonedEventData":{"description":"This is an object representing data for the booking intent abandoned event.","example":{"object":{"abandoned_at":null,"appointment":null,"client":null,"client_data":{"email":"jane@example.com","first_name":"Jane","last_name":"Doe","locale":"en","phone":"+15551234567","reference_id":"ext_123","time_zone":"America/New_York"},"completed_at":null,"created_at":"2026-02-22T10:00:00Z","end_at":{"local":"2026-02-23T10:30:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1771947000,"utc":"2026-02-23T15:30:00Z"},"hold_duration":"PT10M","hold_enabled":true,"hold_until":"2026-02-22T10:10:00Z","id":"bi_abc123def456abc123def456","locked_fields":["provider_id","start_at","end_at","time_zone"],"metadata":{"source":"web"},"object":"booking_intent","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"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}},"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","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"},"start_at":{"local":"2026-02-23T10:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1771945200,"utc":"2026-02-23T15:00:00Z"},"status":"slot_selected","updated_at":"2026-02-22T10:00:00Z"},"type":"booking_intent.abandoned"},"properties":{"object":{"$ref":"#/components/schemas/BookingIntent"},"type":{"description":"The event type.","enum":["booking_intent.abandoned"],"type":"string"}},"required":["type","object"],"title":"BookingIntentAbandonedEventData","type":"object","x-account-event-data":true},"GenericErrorResponse":{"description":"Response schema for generic error messages","example":{"errors":[{"detail":"You must use an account-scoped token to access this endpoint.","status":"400","title":"Invalid value"}]},"properties":{"errors":{"items":{"properties":{"code":{"description":"Machine-readable error code (e.g. slot_unavailable, no_available_provider)","nullable":true,"type":"string"},"detail":{"description":"Error message","type":"string"},"status":{"description":"HTTP status code","type":"string"},"title":{"description":"Error title","type":"string"}},"required":["detail"],"type":"object"},"type":"array"}},"required":["errors"],"title":"GenericErrorResponse","type":"object"},"CancelPublicAppointmentRequest":{"description":"Request schema for canceling a public appointment","example":{"cancellation_reason_id":"cr_d025a96ac0c6","custom_reason_text":"I'm sick"},"properties":{"cancellation_reason_id":{"description":"ID of the cancellation reason.","pattern":"^cr_\\w{12}$","type":"string"},"custom_reason_text":{"description":"Custom reason text for the cancellation.","type":"string"}},"title":"CancelPublicAppointmentRequest","type":"object"},"DashboardSessionResponse":{"description":"Response schema for a dashboard session","example":{"data":{"created_at":"2017-09-12T12:34:55Z","id":"ds_d025a96ac0c6","object":"dashboard_session","return_url":"https://example.com/dashboard","url":"https://savvycal.app/d/session/ds_d025a96ac0c6/XXXXXXX","user_id":"user_d025a96ac0c6"}},"properties":{"data":{"$ref":"#/components/schemas/DashboardSession"}},"required":["data"],"title":"DashboardSessionResponse","type":"object"},"ServiceProvidersResponse":{"description":"Response schema for a list of service providers","example":{"data":[{"created_at":"2025-02-19T17:36:36Z","id":"sp_d025a96ac0c6","object":"service_provider","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"service_id":"srv_d025a96ac0c6","updated_at":"2025-02-19T17:36:36Z"}]},"properties":{"data":{"items":{"$ref":"#/components/schemas/ServiceProvider"},"type":"array"}},"required":["data"],"title":"ServiceProvidersResponse","type":"object"},"CreateProviderRequest":{"description":"Request schema for creating a provider","example":{"add_user":true,"display_name":"John Smith","email":"john.smith@tendermedical.com","first_name":"John","last_name":"Smith","metadata":{"external_id":"123"},"notify":false,"role_ids":["role_123456789012"]},"properties":{"add_user":{"default":false,"description":"Whether to grant the provider access to the dashboard.","type":"boolean"},"display_name":{"description":"The provider's display name.","type":"string"},"email":{"description":"The provider's email address.","type":"string"},"first_name":{"description":"The provider's first name.","type":"string"},"last_name":{"description":"The provider's last name.","type":"string"},"metadata":{"additionalProperties":true,"description":"Set of key-value pairs to attach to this provider. Maximum size is 16 KB.","type":"object"},"notify":{"default":false,"description":"Whether to send an email notification to the user (if `add_user` is true). If they don't already have an account, they will receive an email with instructions to set their password when this property is true.","type":"boolean"},"role_ids":{"description":"List of role IDs to assign to the user (if `add_user` is true).","items":{"description":"A role ID","pattern":"^role_\\w{12}$","type":"string"},"type":"array"}},"required":["display_name","first_name","last_name","email"],"title":"CreateProviderRequest","type":"object"},"ServiceProvider":{"description":"A service provider","example":{"created_at":"2025-02-19T17:36:36Z","id":"sp_d025a96ac0c6","object":"service_provider","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"service_id":"srv_d025a96ac0c6","updated_at":"2025-02-19T17:36:36Z"},"properties":{"created_at":{"description":"When the service provider was created.","format":"date-time","type":"string"},"id":{"description":"Service Provider ID","pattern":"^sp_\\w{12}$","type":"string"},"object":{"description":"String representing the object's type.","enum":["service_provider"],"type":"string"},"provider":{"$ref":"#/components/schemas/Provider"},"service_id":{"description":"Service ID","pattern":"^srv_\\w{12}$","type":"string"},"updated_at":{"description":"When the service provider was last updated.","format":"date-time","type":"string"}},"required":["object","id","service_id","provider","created_at","updated_at"],"title":"ServiceProvider","type":"object"},"PaginationMeta":{"description":"Metadata for paginated responses","example":{"current_page":1,"page_size":10,"total_count":50,"total_pages":5},"properties":{"current_page":{"description":"Current page number","type":"integer"},"page_size":{"description":"Number of records per page","type":"integer"},"total_count":{"description":"Total number of records","type":"integer"},"total_pages":{"description":"Total number of pages","type":"integer"}},"required":["total_count","total_pages","current_page","page_size"],"title":"PaginationMeta","type":"object"},"ServiceResponse":{"description":"Response schema for a service","example":{"data":{"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}},"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","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"}},"properties":{"data":{"$ref":"#/components/schemas/Service"}},"required":["data"],"title":"ServiceResponse","type":"object"},"BookingIntentUpdatedEventData":{"description":"This is an object representing data for the booking intent updated event.","example":{"object":{"abandoned_at":null,"appointment":null,"client":null,"client_data":{"email":"jane@example.com","first_name":"Jane","last_name":"Doe","locale":"en","phone":"+15551234567","reference_id":"ext_123","time_zone":"America/New_York"},"completed_at":null,"created_at":"2026-02-22T10:00:00Z","end_at":{"local":"2026-02-23T10:30:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1771947000,"utc":"2026-02-23T15:30:00Z"},"hold_duration":"PT10M","hold_enabled":true,"hold_until":"2026-02-22T10:10:00Z","id":"bi_abc123def456abc123def456","locked_fields":["provider_id","start_at","end_at","time_zone"],"metadata":{"source":"web"},"object":"booking_intent","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"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}},"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","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"},"start_at":{"local":"2026-02-23T10:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1771945200,"utc":"2026-02-23T15:00:00Z"},"status":"slot_selected","updated_at":"2026-02-22T10:00:00Z"},"type":"booking_intent.updated"},"properties":{"object":{"$ref":"#/components/schemas/BookingIntent"},"type":{"description":"The event type.","enum":["booking_intent.updated"],"type":"string"}},"required":["type","object"],"title":"BookingIntentUpdatedEventData","type":"object","x-account-event-data":true},"CreateCancellationReasonRequest":{"description":"Request schema for creating a cancellation reason","example":{"name":"I'm no longer interested"},"properties":{"name":{"description":"The cancellation reason's name.","type":"string"}},"required":["name"],"title":"CreateCancellationReasonRequest","type":"object"},"RescheduleEvent":{"description":"This is an object representing when an appointment was rescheduled.","example":{"actor":null,"initiated_by":"client","new_end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"new_start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"},"object":"reschedule_event","occurred_at":"2023-01-01T03:00:00Z","previous_end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"previous_start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"},"source":"client_ui"},"properties":{"actor":{"nullable":true,"type":"string"},"initiated_by":{"enum":["user","client"],"type":"string"},"new_end_at":{"$ref":"#/components/schemas/ZonedDateTime"},"new_start_at":{"$ref":"#/components/schemas/ZonedDateTime"},"object":{"enum":["reschedule_event"],"type":"string"},"occurred_at":{"description":"The time at which the reschedule occurred (ISO-8601 format).","format":"datetime","type":"string"},"previous_end_at":{"$ref":"#/components/schemas/ZonedDateTime"},"previous_start_at":{"$ref":"#/components/schemas/ZonedDateTime"},"source":{"enum":["client_ui","dashboard","api"],"type":"string"}},"required":["object","source","initiated_by","actor","previous_start_at","previous_end_at","new_start_at","new_end_at","occurred_at"],"title":"RescheduleEvent","type":"object"},"CreateAccountUserRequest":{"description":"Request schema for creating a user in an account","example":{"add_provider":false,"display_name":"Dr. John Doe","email":"john.doe@example.com","first_name":"John","last_name":"Doe","notify":false,"passive":false,"role_ids":["role_123456789012"],"time_zone":"America/Chicago"},"properties":{"add_provider":{"default":false,"description":"Whether to create a staff member (provider) for this user. If a provider with the same email already exists, it will be affiliated with this user instead of creating a new one.","type":"boolean"},"display_name":{"description":"The display name for the staff member. Only used when `add_provider` is true. Defaults to 'FirstName LastName' if not provided.","type":"string"},"email":{"description":"The user's email address.","format":"email","type":"string"},"first_name":{"description":"The user's first name.","type":"string"},"last_name":{"description":"The user's last name.","type":"string"},"notify":{"default":false,"description":"Whether to send an email notification to the user. If they don't already have an account, they will receive an email with instructions to set their password when this property is true.","type":"boolean"},"passive":{"default":false,"description":"Whether this user is passive. Passive users do not receive direct email notifications (e.g., OAuth reconnection notices). Use this for platform/headless scenarios where the platform handles user communication.","type":"boolean"},"role_ids":{"description":"List of role IDs to assign to the user.","items":{"description":"A role ID","pattern":"^role_\\w{12}$","type":"string"},"type":"array"},"time_zone":{"description":"The user's time zone.","type":"string"}},"required":["email","first_name","last_name","role_ids","time_zone"],"title":"CreateAccountUserRequest","type":"object"},"ConnectedAccountDeletedEventData":{"description":"This is an object representing data for the connected account deleted event.","example":{"object":{"connection_scope":"user","created_at":"2025-03-12T12:34:55Z","display_name":"John Doe","email":"user@example.com","external_account_id":null,"external_subject":"123456789","id":"cact_d025a96ac0c6","object":"connected_account","provider":"google","status":"active","updated_at":"2025-03-13T10:11:12Z","user_id":"user_d025a96ac0c6"},"type":"connected_account.deleted"},"properties":{"object":{"$ref":"#/components/schemas/ConnectedAccount"},"type":{"description":"The event type.","enum":["connected_account.deleted"],"type":"string"}},"required":["type","object"],"title":"ConnectedAccountDeletedEventData","type":"object","x-account-event-data":true},"CompleteBookingIntentRequest":{"description":"Request schema for completing a booking intent. Update fields (service_id, provider_id, etc.) may be provided inline and are applied atomically before completion.","example":{"client_data":{"email":"jane@example.com","first_name":"Jane"},"end_at":"2026-02-23T10:30:00-05:00","provider_id":"prov_1234567890","service_id":"srv_1234567890","start_at":"2026-02-23T10:00:00-05:00","time_zone":"America/New_York"},"properties":{"auto_assign_provider":{"description":"When true, automatically assigns an available provider for the selected time slot if no provider_id is specified.","nullable":true,"type":"boolean"},"client_data":{"description":"Progressive client data. Provided fields are merged with existing values.","nullable":true,"properties":{"email":{"nullable":true,"type":"string"},"first_name":{"nullable":true,"type":"string"},"last_name":{"nullable":true,"type":"string"},"locale":{"nullable":true,"type":"string"},"phone":{"nullable":true,"type":"string"},"reference_id":{"nullable":true,"type":"string"},"time_zone":{"nullable":true,"type":"string"}},"type":"object"},"client_id":{"description":"The ID of an existing client to link.","nullable":true,"type":"string"},"end_at":{"description":"The end time of the slot as an ISO-8601 datetime string with a timezone offset.","format":"date-time","nullable":true,"type":"string"},"metadata":{"additionalProperties":true,"description":"Custom metadata key-value pairs. Replaces existing metadata entirely.","nullable":true,"type":"object"},"provider_id":{"description":"The ID of the provider to assign.","nullable":true,"type":"string"},"service_id":{"description":"The ID of the service.","nullable":true,"type":"string"},"start_at":{"description":"The start time of the slot as an ISO-8601 datetime string with a timezone offset.","format":"date-time","nullable":true,"type":"string"},"time_zone":{"description":"The local time zone for the slot (IANA format).","nullable":true,"type":"string"}},"title":"CompleteBookingIntentRequest","type":"object"},"BookingIntentsResponse":{"description":"Response schema for multiple booking intents","example":{"data":[{"abandoned_at":null,"appointment":null,"client":null,"client_data":{"email":"jane@example.com","first_name":"Jane","last_name":"Doe","locale":"en","phone":"+15551234567","reference_id":"ext_123","time_zone":"America/New_York"},"completed_at":null,"created_at":"2026-02-22T10:00:00Z","end_at":{"local":"2026-02-23T10:30:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1771947000,"utc":"2026-02-23T15:30:00Z"},"hold_duration":"PT10M","hold_enabled":true,"hold_until":"2026-02-22T10:10:00Z","id":"bi_abc123def456abc123def456","locked_fields":["provider_id","start_at","end_at","time_zone"],"metadata":{"source":"web"},"object":"booking_intent","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"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}},"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","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"},"start_at":{"local":"2026-02-23T10:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1771945200,"utc":"2026-02-23T15:00:00Z"},"status":"slot_selected","updated_at":"2026-02-22T10:00:00Z"}],"meta":{"current_page":1,"page_size":10,"total_count":50,"total_pages":5}},"properties":{"data":{"description":"The booking intent details","items":{"$ref":"#/components/schemas/BookingIntent"},"type":"array"},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","meta"],"title":"BookingIntentsResponse","type":"object"},"RolesResponse":{"description":"Response schema for multiple roles","example":{"data":[{"id":"role_123456789012","name":"Admin","object":"role","type":"admin"}]},"properties":{"data":{"description":"The roles details","items":{"$ref":"#/components/schemas/Role"},"type":"array"}},"required":["data"],"title":"RolesResponse","type":"object"},"CreateServiceProviderRequest":{"description":"Request schema for creating a service provider","example":{"provider_id":"prov_d025a96ac0c6"},"properties":{"provider_id":{"description":"Provider ID","pattern":"^prov_\\w{12}$","type":"string"}},"required":["provider_id"],"title":"CreateServiceProviderRequest","type":"object"},"CancellationPolicy":{"description":"A cancellation policy defines the rules for canceling a service from public booking interfaces.\n","example":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"properties":{"advance_notice":{"$ref":"#/components/schemas/AdvanceNoticePolicy"},"allow_cancellation":{"description":"Whether public cancellation is allowed for the service.","type":"boolean"},"disabled_message":{"description":"The message to display when public cancellation is disabled.","nullable":true,"type":"string"}},"required":["allow_cancellation","advance_notice","disabled_message"],"title":"CancellationPolicy","type":"object"},"AccountUserUpdatedEventData":{"description":"This is an object representing data for the account user updated event.","example":{"object":{"object":"account_user","passive":false,"roles":[{"id":"role_123456789012","name":"Admin","object":"role","type":"admin"}],"user":{"created_at":"2025-03-15T13:01:08Z","email":"avery@tendermedical.com","first_name":"Avery","id":"user_d025a96ac0c6","last_name":"Evans","object":"user","updated_at":"2025-03-15T13:01:08Z"}},"type":"account_user.updated"},"properties":{"object":{"$ref":"#/components/schemas/AccountUser"},"type":{"description":"The event type.","enum":["account_user.updated"],"type":"string"}},"required":["type","object"],"title":"AccountUserUpdatedEventData","type":"object","x-account-event-data":true},"ClientDeletedEventData":{"description":"This is an object representing data for the client deleted event.","example":{"object":{"created_at":"2025-01-15T14:30:00Z","email":"jane.smith@example.com","first_name":"Jane","id":"clnt_a1b2c3d4e5f6","last_name":"Smith","locale":"en-US","metadata":{"external_id":"123"},"object":"client","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago","updated_at":"2025-03-10T09:45:00Z"},"type":"client.deleted"},"properties":{"object":{"$ref":"#/components/schemas/Client"},"type":{"description":"The event type.","enum":["client.deleted"],"type":"string"}},"required":["type","object"],"title":"ClientDeletedEventData","type":"object","x-account-event-data":true},"ProviderScheduleDeletedEventData":{"description":"This is an object representing data for the provider schedule deleted event.","example":{"object":{"created_at":"2025-02-17T17:49:19Z","effective_from":"2025-01-01","effective_to":"2025-12-31","id":"psch_d025a96ac0c6","object":"provider_schedule","public_bookings":{"enabled":true},"updated_at":"2025-02-17T17:49:19Z","weekly_rules":[{"day":"mo","end_time":"17:00","start_time":"09:00"}]},"type":"provider_schedule.deleted"},"properties":{"object":{"$ref":"#/components/schemas/ProviderSchedule"},"type":{"description":"The event type.","enum":["provider_schedule.deleted"],"type":"string"}},"required":["type","object"],"title":"ProviderScheduleDeletedEventData","type":"object","x-account-event-data":true},"BookingIntentCreatedEventData":{"description":"This is an object representing data for the booking intent created event.","example":{"object":{"abandoned_at":null,"appointment":null,"client":null,"client_data":{"email":"jane@example.com","first_name":"Jane","last_name":"Doe","locale":"en","phone":"+15551234567","reference_id":"ext_123","time_zone":"America/New_York"},"completed_at":null,"created_at":"2026-02-22T10:00:00Z","end_at":{"local":"2026-02-23T10:30:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1771947000,"utc":"2026-02-23T15:30:00Z"},"hold_duration":"PT10M","hold_enabled":true,"hold_until":"2026-02-22T10:10:00Z","id":"bi_abc123def456abc123def456","locked_fields":["provider_id","start_at","end_at","time_zone"],"metadata":{"source":"web"},"object":"booking_intent","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"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}},"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","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"},"start_at":{"local":"2026-02-23T10:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1771945200,"utc":"2026-02-23T15:00:00Z"},"status":"slot_selected","updated_at":"2026-02-22T10:00:00Z"},"type":"booking_intent.created"},"properties":{"object":{"$ref":"#/components/schemas/BookingIntent"},"type":{"description":"The event type.","enum":["booking_intent.created"],"type":"string"}},"required":["type","object"],"title":"BookingIntentCreatedEventData","type":"object","x-account-event-data":true},"Account":{"description":"This is an object representing an account in the app.","example":{"created_at":"2017-09-12T12:34:55Z","id":"acct_d025a96ac0c6","name":"Tender Medical","object":"account","updated_at":"2017-09-13T10:11:12Z"},"properties":{"created_at":{"description":"Time at which the object was created.","format":"date-time","type":"string"},"id":{"description":"Unique identifier for the object.","pattern":"^acct_\\w{12}$","type":"string"},"name":{"description":"The account's name.","type":"string"},"object":{"description":"String representing the object's type.","enum":["account"],"type":"string"},"updated_at":{"description":"Time at which the object was last updated.","format":"date-time","type":"string"}},"required":["object","created_at","id","name","updated_at"],"title":"Account","type":"object","x-tags":["Accounts"]},"PublicServiceEarliestSlotResponse":{"description":"Response schema for the earliest available service slot via the public API","example":{"data":{"end_at":"2025-03-10T10:00:00Z","end_at_ts":1736464800,"object":"slot","start_at":"2025-03-10T09:00:00Z","start_at_ts":1736461200,"time_zone":"Etc/UTC"}},"properties":{"data":{"allOf":[{"$ref":"#/components/schemas/Slot"}],"description":"The earliest available slot, or null if no slots are available","nullable":true}},"required":["data"],"title":"PublicServiceEarliestSlotResponse","type":"object"},"UpdateProviderRequest":{"description":"Request body for updating a provider","example":{"display_name":"John Smith","first_name":"John","last_name":"Smith","metadata":{"external_id":"123"}},"properties":{"display_name":{"description":"Provider's display name","type":"string"},"first_name":{"description":"Provider's first name","type":"string"},"last_name":{"description":"Provider's last name","type":"string"},"metadata":{"additionalProperties":true,"description":"Set of key-value pairs to attach to this provider. Maximum size is 16 KB.","type":"object"}},"title":"UpdateProviderRequest","type":"object"},"PublicCancellationReason":{"description":"A cancellation reason that can be used when canceling an appointment.","example":{"id":"cr_d025a96ac0c6","name":"Schedule conflict","object":"public_cancellation_reason","sort_order":0},"properties":{"id":{"description":"Unique identifier for the object.","pattern":"^cr_\\w{12}$","type":"string"},"name":{"description":"The name of the cancellation reason.","type":"string"},"object":{"description":"String representing the object's type.","enum":["public_cancellation_reason"],"type":"string"},"sort_order":{"description":"The sort order of the cancellation reason.","type":"integer"}},"required":["object","id","name","sort_order"],"title":"PublicCancellationReason","type":"object"},"BlockUpdatedEventData":{"description":"This is an object representing data for the block updated event.","example":{"object":{"all_day":false,"attachment_type":"provider","attachments":["prov_d025a96ac0c6"],"created_at":"2017-09-12T12:34:55Z","end_date":"2025-10-27","end_time":"17:00","exception_dates":["2025-10-27T09:00:00"],"id":"blk_d025a96ac0c6","object":"block","recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"service_id":null,"start_date":"2025-10-27","start_time":"09:00","time_zone":"America/New_York","title":"Team Meeting","updated_at":"2017-09-13T10:11:12Z"},"type":"block.updated"},"properties":{"object":{"$ref":"#/components/schemas/Block"},"type":{"description":"The event type.","enum":["block.updated"],"type":"string"}},"required":["type","object"],"title":"BlockUpdatedEventData","type":"object","x-account-event-data":true},"ReschedulePublicAppointmentRequest":{"description":"Request schema for rescheduling a public appointment","example":{"end_at":"2025-03-01T11:00:00-05:00","provider_id":"prv_1234567890","start_at":"2025-03-01T10:00:00-05:00","time_zone":"America/New_York"},"properties":{"end_at":{"description":"The new end time of the appointment as an ISO-8601 datetime string with a timezone offset (e.g., `2025-03-01T11:00:00-05:00` or `2025-03-01T16:00:00Z`). The `time_zone` field determines the canonical timezone.","example":"2025-03-01T11:00:00-05:00","format":"date-time","type":"string"},"provider_id":{"description":"The ID of the provider to assign to the appointment. If not provided, the provider assigned to the original appointment will be used.","nullable":true,"type":"string"},"start_at":{"description":"The new start time of the appointment as an ISO-8601 datetime string with a timezone offset (e.g., `2025-03-01T10:00:00-05:00` or `2025-03-01T15:00:00Z`). The `time_zone` field determines the canonical timezone.","example":"2025-03-01T10:00:00-05:00","format":"date-time","type":"string"},"time_zone":{"description":"The local time zone for the appointment (IANA format).","example":"America/New_York","type":"string"}},"required":["start_at","end_at","time_zone"],"title":"ReschedulePublicAppointmentRequest","type":"object"},"CancellationReason":{"description":"This is an object representing a cancellation reason.","example":{"id":"cr_a1b2c3d4e5f6","name":"Distance too far","object":"cancellation_reason","sort_order":1},"properties":{"id":{"description":"Unique identifier for the object.","pattern":"^cr_\\w{12}$","type":"string"},"name":{"description":"The name of the cancellation reason.","type":"string"},"object":{"description":"String representing the object's type.","enum":["cancellation_reason"],"type":"string"},"sort_order":{"description":"The sort order of the cancellation reason.","type":"integer"}},"required":["object","id","name","sort_order"],"title":"CancellationReason","type":"object","x-tags":["Cancellation Reasons"]},"SlotRule":{"description":"A slot rule defines the recurring time slots available for a service.\nSlot rules are described by a list of start times and a [recurrence rule](/api/schemas/recurrencerule).\n","example":{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]},"properties":{"recurrence_rule":{"$ref":"#/components/schemas/RecurrenceRule"},"start_times":{"description":"Array of start times for slots.","items":{"pattern":"^\\d{2}:\\d{2}$","type":"string"},"type":"array"}},"required":["start_times","recurrence_rule"],"title":"SlotRule","type":"object"},"ConnectedAccountReconnectedEventData":{"description":"This is an object representing data for the connected account reconnected event. This event is triggered when a previously failed connection is successfully reauthenticated.","example":{"object":{"connection_scope":"user","created_at":"2025-03-12T12:34:55Z","display_name":"John Doe","email":"user@example.com","external_account_id":null,"external_subject":"123456789","id":"cact_d025a96ac0c6","object":"connected_account","provider":"google","status":"active","updated_at":"2025-03-13T10:11:12Z","user_id":"user_d025a96ac0c6"},"type":"connected_account.reconnected"},"properties":{"object":{"$ref":"#/components/schemas/ConnectedAccount"},"type":{"description":"The event type.","enum":["connected_account.reconnected"],"type":"string"}},"required":["type","object"],"title":"ConnectedAccountReconnectedEventData","type":"object","x-account-event-data":true},"Client":{"description":"This is an object representing a client.","example":{"created_at":"2025-01-15T14:30:00Z","email":"jane.smith@example.com","first_name":"Jane","id":"clnt_a1b2c3d4e5f6","last_name":"Smith","locale":"en-US","metadata":{"external_id":"123"},"object":"client","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago","updated_at":"2025-03-10T09:45:00Z"},"properties":{"created_at":{"description":"Time at which the object was created.","format":"date-time","type":"string"},"email":{"description":"The client's email address. This field will be `null` unless `include_sensitive` is `true`.","format":"email","nullable":true,"type":"string"},"first_name":{"description":"The client's first name. This field will be `null` unless `include_sensitive` is `true`.","nullable":true,"type":"string"},"id":{"description":"Unique identifier for the object.","pattern":"^clnt_\\w{12}$","type":"string"},"last_name":{"description":"The client's last name. This field will be `null` unless `include_sensitive` is `true`.","nullable":true,"type":"string"},"locale":{"description":"The locale of the client.","example":"en-US","type":"string"},"metadata":{"additionalProperties":true,"description":"Set of key-value pairs attached to this client. Maximum size is 16 KB.","type":"object"},"object":{"description":"String representing the object's type.","enum":["client"],"type":"string"},"phone":{"description":"The client's phone number (E.164 format). This field will be `null` unless `include_sensitive` is `true`.","nullable":true,"type":"string"},"reference_id":{"description":"External reference identifier for the client.","nullable":true,"type":"string"},"time_zone":{"description":"The client's time zone (IANA format).","example":"America/Chicago","type":"string"},"updated_at":{"description":"Time at which the object was last updated.","format":"date-time","type":"string"}},"required":["id","object","reference_id","time_zone","locale","created_at","updated_at"],"title":"Client","type":"object","x-tags":["Clients"]},"Platform":{"description":"This is an object representing a platform in the app.","example":{"created_at":"2017-09-12T12:34:55Z","id":"plat_d025a96ac0c6","name":"Tender Medical","object":"platform","updated_at":"2017-09-13T10:11:12Z"},"properties":{"created_at":{"description":"Time at which the object was created.","format":"date-time","type":"string"},"id":{"description":"Unique identifier for the object.","pattern":"^plat_\\w{12}$","type":"string"},"name":{"description":"The platform's name.","type":"string"},"object":{"description":"String representing the object's type.","enum":["platform"],"type":"string"},"updated_at":{"description":"Time at which the object was last updated.","format":"date-time","type":"string"}},"required":["object","created_at","id","name","updated_at"],"title":"Platform","type":"object","x-tags":["Platforms"]},"ConnectedAccountResponse":{"description":"Response schema for a single connected account","example":{"data":{"connection_scope":"user","created_at":"2025-03-12T12:34:55Z","display_name":"John Doe","email":"user@example.com","external_account_id":null,"external_subject":"123456789","id":"cact_d025a96ac0c6","object":"connected_account","provider":"google","status":"active","updated_at":"2025-03-13T10:11:12Z","user_id":"user_d025a96ac0c6"}},"properties":{"data":{"$ref":"#/components/schemas/ConnectedAccount"}},"required":["data"],"title":"ConnectedAccountResponse","type":"object"},"ServiceDeletedEventData":{"description":"This is an object representing data for the service deleted event.","example":{"object":{"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}},"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","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"},"type":"service.deleted"},"properties":{"object":{"$ref":"#/components/schemas/Service"},"type":{"description":"The event type.","enum":["service.deleted"],"type":"string"}},"required":["type","object"],"title":"ServiceDeletedEventData","type":"object","x-account-event-data":true},"PublicServiceSlotsResponse":{"description":"Response schema for service slots via the public API","example":{"data":[{"end_at":"2025-03-10T10:00:00Z","end_at_ts":1736464800,"object":"slot","start_at":"2025-03-10T09:00:00Z","start_at_ts":1736461200,"time_zone":"Etc/UTC"},{"end_at":"2025-03-10T12:00:00Z","end_at_ts":1736468400,"object":"slot","start_at":"2025-03-10T11:00:00Z","start_at_ts":1736464800,"time_zone":"Etc/UTC"}]},"properties":{"data":{"items":{"$ref":"#/components/schemas/Slot"},"type":"array"}},"required":["data"],"title":"PublicServiceSlotsResponse","type":"object"},"PlatformResponse":{"description":"Response schema for a single platform","example":{"data":{"created_at":"2017-09-12T12:34:55Z","id":"plat_d025a96ac0c6","name":"Tender Medical","object":"platform","updated_at":"2017-09-13T10:11:12Z"}},"properties":{"data":{"$ref":"#/components/schemas/Platform"}},"title":"PlatformResponse","type":"object"},"AccountUserResponse":{"description":"Response schema for a single account user","example":{"object":"account_user","passive":false,"roles":[{"id":"role_123456789012","name":"Admin","object":"role","type":"admin"}],"user":{"created_at":"2025-03-15T13:01:08Z","email":"avery@tendermedical.com","first_name":"Avery","id":"user_d025a96ac0c6","last_name":"Evans","object":"user","updated_at":"2025-03-15T13:01:08Z"}},"properties":{"object":{"description":"String representing the object's type.","enum":["account_user"],"type":"string"},"passive":{"description":"Whether this user is passive. Passive users do not receive direct email notifications (e.g., OAuth reconnection notices).","type":"boolean"},"roles":{"description":"The roles assigned to the user in this account.","items":{"$ref":"#/components/schemas/Role"},"type":"array"},"user":{"$ref":"#/components/schemas/User"}},"required":["object","user","roles","passive"],"title":"AccountUserResponse","type":"object"},"AppointmentConfirmedEventData":{"description":"This is an object representing data for the appointment confirmed event.","example":{"object":{"appointment_type":"in_person","cancellation_events":[{"actor":null,"cancellation_reason":{"id":"cr_a1b2c3d4e5f6","name":"Distance too far","object":"cancellation_reason","sort_order":1},"custom_reason_text":"I'm sick","initiated_by":"client","object":"cancellation_event","occurred_at":"2023-01-01T03:00:00Z","source":"client_ui"}],"client":{"created_at":"2025-01-15T14:30:00Z","email":"jane.smith@example.com","first_name":"Jane","id":"clnt_a1b2c3d4e5f6","last_name":"Smith","locale":"en-US","metadata":{"external_id":"123"},"object":"client","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago","updated_at":"2025-03-10T09:45:00Z"},"client_data":{"email":"jane.smith@example.com","first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirmation_events":[{"actor":null,"end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"initiated_by":"client","object":"confirmation_event","occurred_at":"2023-01-01T03:00:00Z","source":"client_ui","start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"}}],"confirmed_at":"2025-03-10T15:30:00Z","created_at":"2025-03-10T14:30:00Z","end_at":{"local":"2025-03-01T11:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2025-03-01T04:00:00Z"},"id":"appt_a1b2c3d4e5f6","object":"appointment","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"reschedule_events":[{"actor":null,"initiated_by":"client","new_end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"new_start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"},"object":"reschedule_event","occurred_at":"2023-01-01T03:00:00Z","previous_end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"previous_start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"},"source":"client_ui"}],"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}},"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","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"},"start_at":{"local":"2025-03-01T10:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2025-03-01T03:00:00Z"},"status":"scheduled","updated_at":"2025-03-10T14:30:00Z","urls":{"add_to_google_calendar":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/reschedule"]}},"type":"appointment.confirmed"},"properties":{"object":{"$ref":"#/components/schemas/Appointment"},"type":{"description":"The event type.","enum":["appointment.confirmed"],"type":"string"}},"required":["type","object"],"title":"AppointmentConfirmedEventData","type":"object","x-account-event-data":true},"CancellationReasonResponse":{"description":"Response schema for a single cancellation reason","example":{"data":{"id":"cr_a1b2c3d4e5f6","name":"Distance too far","object":"cancellation_reason","sort_order":1}},"properties":{"data":{"description":"The cancellation reason details","items":{"$ref":"#/components/schemas/CancellationReason"},"type":"object"}},"required":["data"],"title":"CancellationReasonResponse","type":"object"},"ClientsResponse":{"description":"Response schema for multiple clients","example":{"data":[{"created_at":"2025-01-15T14:30:00Z","email":"jane.smith@example.com","first_name":"Jane","id":"clnt_a1b2c3d4e5f6","last_name":"Smith","locale":"en-US","metadata":{"external_id":"123"},"object":"client","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago","updated_at":"2025-03-10T09:45:00Z"}],"meta":{"current_page":1,"page_size":10,"total_count":50,"total_pages":5}},"properties":{"data":{"description":"A list of clients","items":{"$ref":"#/components/schemas/Client"},"type":"array"},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","meta"],"title":"ClientsResponse","type":"object"},"Slot":{"description":"A time slot with start and end times","example":{"end_at":"2025-03-10T10:00:00-04:00","end_at_ts":1736464800,"object":"slot","start_at":"2025-03-10T09:00:00-04:00","start_at_ts":1736461200,"time_zone":"America/New_York"},"properties":{"end_at":{"format":"date-time","type":"string"},"end_at_ts":{"description":"Unix timestamp in seconds","type":"integer"},"object":{"description":"String representing the object's type.","enum":["slot"],"type":"string"},"start_at":{"format":"date-time","type":"string"},"start_at_ts":{"description":"Unix timestamp in seconds","type":"integer"},"time_zone":{"description":"IANA time zone name","type":"string"}},"required":["object","start_at","start_at_ts","end_at","end_at_ts","time_zone"],"title":"Slot","type":"object"},"ConnectedAccountRefreshFailedEventData":{"description":"This is an object representing data for the connected account refresh failed event. This event is triggered when an OAuth token refresh permanently fails, indicating the integration needs to be reauthorized.","example":{"object":{"connection_scope":"user","created_at":"2025-03-12T12:34:55Z","display_name":"John Doe","email":"user@example.com","external_account_id":null,"external_subject":"123456789","id":"cact_d025a96ac0c6","object":"connected_account","provider":"google","status":"active","updated_at":"2025-03-13T10:11:12Z","user_id":"user_d025a96ac0c6"},"type":"connected_account.refresh_failed"},"properties":{"object":{"$ref":"#/components/schemas/ConnectedAccount"},"type":{"description":"The event type.","enum":["connected_account.refresh_failed"],"type":"string"}},"required":["type","object"],"title":"ConnectedAccountRefreshFailedEventData","type":"object","x-account-event-data":true},"AccountEvent":{"description":"This is an object representing an account event in the app.","example":{"created_at":"2025-03-12T12:34:55Z","data":{"object":{"appointment_type":"in_person","cancellation_events":[{"actor":null,"cancellation_reason":{"id":"cr_a1b2c3d4e5f6","name":"Distance too far","object":"cancellation_reason","sort_order":1},"custom_reason_text":"I'm sick","initiated_by":"client","object":"cancellation_event","occurred_at":"2023-01-01T03:00:00Z","source":"client_ui"}],"client":{"created_at":"2025-01-15T14:30:00Z","email":"jane.smith@example.com","first_name":"Jane","id":"clnt_a1b2c3d4e5f6","last_name":"Smith","locale":"en-US","metadata":{"external_id":"123"},"object":"client","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago","updated_at":"2025-03-10T09:45:00Z"},"client_data":{"email":"jane.smith@example.com","first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirmation_events":[{"actor":null,"end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"initiated_by":"client","object":"confirmation_event","occurred_at":"2023-01-01T03:00:00Z","source":"client_ui","start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"}}],"confirmed_at":"2025-03-10T15:30:00Z","created_at":"2025-03-10T14:30:00Z","end_at":{"local":"2025-03-01T11:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2025-03-01T04:00:00Z"},"id":"appt_a1b2c3d4e5f6","object":"appointment","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"reschedule_events":[{"actor":null,"initiated_by":"client","new_end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"new_start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"},"object":"reschedule_event","occurred_at":"2023-01-01T03:00:00Z","previous_end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"previous_start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"},"source":"client_ui"}],"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}},"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","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"},"start_at":{"local":"2025-03-01T10:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2025-03-01T03:00:00Z"},"status":"scheduled","updated_at":"2025-03-10T14:30:00Z","urls":{"add_to_google_calendar":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/reschedule"]}},"type":"appointment.created"},"id":"evt_d025a96ac0c6","object":"account_event","version":"1.0"},"properties":{"created_at":{"description":"The event creation time.","format":"date-time","type":"string"},"data":{"description":"The event data.","discriminator":{"mapping":{"provider_schedule.updated":"#/components/schemas/ProviderScheduleUpdatedEventData","connected_account.created":"#/components/schemas/ConnectedAccountCreatedEventData","provider.deactivated":"#/components/schemas/ProviderDeactivatedEventData","connected_account.refresh_failed":"#/components/schemas/ConnectedAccountRefreshFailedEventData","provider.updated":"#/components/schemas/ProviderUpdatedEventData","provider_schedule.created":"#/components/schemas/ProviderScheduleCreatedEventData","connected_account.reconnected":"#/components/schemas/ConnectedAccountReconnectedEventData","booking_intent.created":"#/components/schemas/BookingIntentCreatedEventData","service_provider.deleted":"#/components/schemas/ServiceProviderDeletedEventData","appointment.rescheduled":"#/components/schemas/AppointmentRescheduledEventData","service.created":"#/components/schemas/ServiceCreatedEventData","provider_schedule.deleted":"#/components/schemas/ProviderScheduleDeletedEventData","service.deleted":"#/components/schemas/ServiceDeletedEventData","appointment.deleted":"#/components/schemas/AppointmentDeletedEventData","account_user.created":"#/components/schemas/AccountUserCreatedEventData","service.updated":"#/components/schemas/ServiceUpdatedEventData","appointment.created":"#/components/schemas/AppointmentCreatedEventData","client.deleted":"#/components/schemas/ClientDeletedEventData","client.updated":"#/components/schemas/ClientUpdatedEventData","account_user.deleted":"#/components/schemas/AccountUserDeletedEventData","booking_intent.completed":"#/components/schemas/BookingIntentCompletedEventData","client.created":"#/components/schemas/ClientCreatedEventData","booking_intent.updated":"#/components/schemas/BookingIntentUpdatedEventData","provider.created":"#/components/schemas/ProviderCreatedEventData","appointment.confirmed":"#/components/schemas/AppointmentConfirmedEventData","service_provider.created":"#/components/schemas/ServiceProviderCreatedEventData","block.created":"#/components/schemas/BlockCreatedEventData","block.updated":"#/components/schemas/BlockUpdatedEventData","connected_account.deleted":"#/components/schemas/ConnectedAccountDeletedEventData","account_user.updated":"#/components/schemas/AccountUserUpdatedEventData","block.deleted":"#/components/schemas/BlockDeletedEventData","booking_intent.abandoned":"#/components/schemas/BookingIntentAbandonedEventData","appointment.canceled":"#/components/schemas/AppointmentCanceledEventData","provider.reactivated":"#/components/schemas/ProviderReactivatedEventData"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/AccountUserCreatedEventData"},{"$ref":"#/components/schemas/AccountUserDeletedEventData"},{"$ref":"#/components/schemas/AccountUserUpdatedEventData"},{"$ref":"#/components/schemas/AppointmentCreatedEventData"},{"$ref":"#/components/schemas/AppointmentRescheduledEventData"},{"$ref":"#/components/schemas/AppointmentCanceledEventData"},{"$ref":"#/components/schemas/AppointmentConfirmedEventData"},{"$ref":"#/components/schemas/AppointmentDeletedEventData"},{"$ref":"#/components/schemas/BlockCreatedEventData"},{"$ref":"#/components/schemas/BlockUpdatedEventData"},{"$ref":"#/components/schemas/BlockDeletedEventData"},{"$ref":"#/components/schemas/BookingIntentAbandonedEventData"},{"$ref":"#/components/schemas/BookingIntentCompletedEventData"},{"$ref":"#/components/schemas/BookingIntentCreatedEventData"},{"$ref":"#/components/schemas/BookingIntentUpdatedEventData"},{"$ref":"#/components/schemas/ClientCreatedEventData"},{"$ref":"#/components/schemas/ClientDeletedEventData"},{"$ref":"#/components/schemas/ClientUpdatedEventData"},{"$ref":"#/components/schemas/ConnectedAccountCreatedEventData"},{"$ref":"#/components/schemas/ConnectedAccountDeletedEventData"},{"$ref":"#/components/schemas/ConnectedAccountRefreshFailedEventData"},{"$ref":"#/components/schemas/ConnectedAccountReconnectedEventData"},{"$ref":"#/components/schemas/ProviderCreatedEventData"},{"$ref":"#/components/schemas/ProviderUpdatedEventData"},{"$ref":"#/components/schemas/ProviderDeactivatedEventData"},{"$ref":"#/components/schemas/ProviderReactivatedEventData"},{"$ref":"#/components/schemas/ProviderScheduleCreatedEventData"},{"$ref":"#/components/schemas/ProviderScheduleDeletedEventData"},{"$ref":"#/components/schemas/ProviderScheduleUpdatedEventData"},{"$ref":"#/components/schemas/ServiceCreatedEventData"},{"$ref":"#/components/schemas/ServiceDeletedEventData"},{"$ref":"#/components/schemas/ServiceUpdatedEventData"},{"$ref":"#/components/schemas/ServiceProviderCreatedEventData"},{"$ref":"#/components/schemas/ServiceProviderDeletedEventData"}],"type":"object"},"id":{"description":"Unique identifier for the object.","type":"string"},"object":{"description":"String representing the object's type.","enum":["account_event"],"type":"string"},"version":{"description":"The event version.","type":"string"}},"required":["data","id","version","created_at"],"title":"AccountEvent","type":"object"},"ProviderCreatedEventData":{"description":"This is an object representing data for the provider created event.","example":{"object":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"type":"provider.created"},"properties":{"object":{"$ref":"#/components/schemas/Provider"},"type":{"description":"The event type.","enum":["provider.created"],"type":"string"}},"required":["type","object"],"title":"ProviderCreatedEventData","type":"object","x-account-event-data":true},"UpdateBookingIntentRequest":{"description":"Request schema for updating a booking intent","example":{"client_data":{"email":"jane@example.com","first_name":"Jane"},"end_at":"2026-02-23T10:30:00-05:00","provider_id":"prov_1234567890","start_at":"2026-02-23T10:00:00-05:00","time_zone":"America/New_York"},"properties":{"auto_assign_provider":{"description":"When true, automatically assigns an available provider for the selected time slot if no provider_id is specified.","nullable":true,"type":"boolean"},"client_data":{"description":"Progressive client data. Provided fields are merged with existing values.","nullable":true,"properties":{"email":{"nullable":true,"type":"string"},"first_name":{"nullable":true,"type":"string"},"last_name":{"nullable":true,"type":"string"},"locale":{"nullable":true,"type":"string"},"phone":{"nullable":true,"type":"string"},"reference_id":{"nullable":true,"type":"string"},"time_zone":{"nullable":true,"type":"string"}},"type":"object"},"client_id":{"description":"The ID of an existing client to link.","nullable":true,"type":"string"},"end_at":{"description":"The end time of the slot as an ISO-8601 datetime string with a timezone offset.","format":"date-time","nullable":true,"type":"string"},"hold_duration":{"description":"The hold duration as an ISO 8601 duration string (e.g., PT10M). When omitted, falls back to the service's hold policy duration.","nullable":true,"type":"string"},"hold_enabled":{"description":"Whether to enable slot holding. When omitted, falls back to the service's hold policy if service is changing.","nullable":true,"type":"boolean"},"locked_fields":{"description":"Fields to lock from public API updates. Possible values: service_id, provider_id, start_at, end_at, time_zone, client_data. Replaces existing locked_fields entirely.","items":{"type":"string"},"nullable":true,"type":"array"},"metadata":{"additionalProperties":true,"description":"Custom metadata key-value pairs. Replaces existing metadata entirely.","nullable":true,"type":"object"},"provider_id":{"description":"The ID of the provider to assign.","nullable":true,"type":"string"},"service_id":{"description":"The ID of the service.","nullable":true,"type":"string"},"slot_prevalidated":{"description":"Whether the slot has been prevalidated. Automatically reset to false when slot-relevant fields (service_id, provider_id, start_at, end_at, time_zone) change, unless explicitly set to true in the same request.","nullable":true,"type":"boolean"},"start_at":{"description":"The start time of the slot as an ISO-8601 datetime string with a timezone offset.","format":"date-time","nullable":true,"type":"string"},"time_zone":{"description":"The local time zone for the slot (IANA format).","nullable":true,"type":"string"}},"title":"UpdateBookingIntentRequest","type":"object"},"AccountUserCreatedEventData":{"description":"This is an object representing data for the account user created event.","example":{"object":{"object":"account_user","passive":false,"roles":[{"id":"role_123456789012","name":"Admin","object":"role","type":"admin"}],"user":{"created_at":"2025-03-15T13:01:08Z","email":"avery@tendermedical.com","first_name":"Avery","id":"user_d025a96ac0c6","last_name":"Evans","object":"user","updated_at":"2025-03-15T13:01:08Z"}},"type":"account_user.created"},"properties":{"object":{"$ref":"#/components/schemas/AccountUser"},"type":{"description":"The event type.","enum":["account_user.created"],"type":"string"}},"required":["type","object"],"title":"AccountUserCreatedEventData","type":"object","x-account-event-data":true},"AppointmentsResponse":{"description":"Response schema for multiple appointments","example":{"data":[{"appointment_type":"in_person","cancellation_events":[{"actor":null,"cancellation_reason":{"id":"cr_a1b2c3d4e5f6","name":"Distance too far","object":"cancellation_reason","sort_order":1},"custom_reason_text":"I'm sick","initiated_by":"client","object":"cancellation_event","occurred_at":"2023-01-01T03:00:00Z","source":"client_ui"}],"client":{"created_at":"2025-01-15T14:30:00Z","email":"jane.smith@example.com","first_name":"Jane","id":"clnt_a1b2c3d4e5f6","last_name":"Smith","locale":"en-US","metadata":{"external_id":"123"},"object":"client","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago","updated_at":"2025-03-10T09:45:00Z"},"client_data":{"email":"jane.smith@example.com","first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirmation_events":[{"actor":null,"end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"initiated_by":"client","object":"confirmation_event","occurred_at":"2023-01-01T03:00:00Z","source":"client_ui","start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"}}],"confirmed_at":"2025-03-10T15:30:00Z","created_at":"2025-03-10T14:30:00Z","end_at":{"local":"2025-03-01T11:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2025-03-01T04:00:00Z"},"id":"appt_a1b2c3d4e5f6","object":"appointment","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"reschedule_events":[{"actor":null,"initiated_by":"client","new_end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"new_start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"},"object":"reschedule_event","occurred_at":"2023-01-01T03:00:00Z","previous_end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"previous_start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"},"source":"client_ui"}],"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}},"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","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"},"start_at":{"local":"2025-03-01T10:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2025-03-01T03:00:00Z"},"status":"scheduled","updated_at":"2025-03-10T14:30:00Z","urls":{"add_to_google_calendar":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/reschedule"]}}],"meta":{"current_page":1,"page_size":10,"total_count":50,"total_pages":5}},"properties":{"data":{"description":"The appointments details","items":{"$ref":"#/components/schemas/Appointment"},"type":"array"},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","meta"],"title":"AppointmentsResponse","type":"object"},"UpdateServiceRequest":{"description":"Request schema for updating a service.","example":{"appointment_type":"virtual","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}},"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.","duration":"PT1H30M","internal_name":"IC - New Patient","metadata":{"external_id":"123"},"name":"Initial Consultation","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"]}]},"properties":{"appointment_type":{"description":"The type of appointment.","enum":["in_person","virtual"],"type":"string"},"booking_policy":{"$ref":"#/components/schemas/BookingPolicy"},"cancellation_policy":{"$ref":"#/components/schemas/CancellationPolicy"},"change_policy_text":{"description":"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.","type":"string"},"duration":{"description":"The duration of time slots in [ISO-8601 duration format](https://en.wikipedia.org/wiki/ISO_8601#Durations).","example":"PT1H30M","pattern":"^PT(?:(\\d+)H)?(?:(\\d+)M)?$","type":"string"},"internal_name":{"description":"An optional internal label for admin use. When set, this is displayed in the admin UI instead of the public name.","nullable":true,"type":"string"},"metadata":{"additionalProperties":true,"description":"Set of key-value pairs to attach to this service. Maximum size is 16 KB.","type":"object"},"name":{"description":"The service name.","type":"string"},"provider_notifications":{"$ref":"#/components/schemas/ProviderNotificationConfig"},"rescheduling_policy":{"$ref":"#/components/schemas/ReschedulingPolicy"},"slot_rules":{"description":"Array of slot rules for the service.","items":{"$ref":"#/components/schemas/SlotRule"},"type":"array"}},"title":"UpdateServiceRequest","type":"object"},"UpdateClientRequest":{"description":"Request schema for updating a client","example":{"email":"john.smith@tendermedical.com","first_name":"John","last_name":"Smith","locale":"en","metadata":{"external_id":"123"},"phone":"+15551234567","reference_id":"your-reference-id","time_zone":"America/New_York"},"properties":{"email":{"description":"The client's email address.","type":"string"},"first_name":{"description":"The client's first name.","type":"string"},"last_name":{"description":"The client's last name.","type":"string"},"locale":{"description":"The client's locale.","type":"string"},"metadata":{"additionalProperties":true,"description":"Set of key-value pairs to attach to this client. Maximum size is 16 KB.","type":"object"},"phone":{"description":"The client's phone number (E.164 format).","type":"string"},"reference_id":{"description":"The client's external reference identifier.","type":"string"},"time_zone":{"description":"The client's time zone (IANA format).","type":"string"}},"title":"UpdateClientRequest","type":"object"},"DashboardSession":{"description":"This is an object representing a dashboard session in the app.","example":{"created_at":"2017-09-12T12:34:55Z","id":"ds_d025a96ac0c6","object":"dashboard_session","return_url":"https://example.com/dashboard","url":"https://savvycal.app/d/session/ds_d025a96ac0c6/XXXXXXX","user_id":"user_d025a96ac0c6"},"properties":{"created_at":{"description":"Time at which the object was created.","format":"date-time","type":"string"},"id":{"description":"Unique identifier for the object.","pattern":"^ds_\\w{12}$","type":"string"},"object":{"description":"String representing the object's type.","enum":["dashboard_session"],"type":"string"},"return_url":{"description":"The URL to redirect to when the user signs out of the session.","format":"uri","nullable":true,"type":"string"},"url":{"description":"The short-lived URL of the dashboard session. When the user visits this URL, their browser will be logged in to the account.","format":"uri","type":"string"},"user_id":{"description":"The ID of the user associated with the dashboard session.","pattern":"^user_\\w{12}$","type":"string"}},"required":["object","created_at","id","user_id","url","return_url"],"title":"DashboardSession","type":"object","x-tags":["Dashboard Sessions"]},"ProviderNotificationType":{"description":"An enabled staff notification type on a service.\n","example":{"type":"new_appointment"},"properties":{"type":{"description":"The notification type.","enum":["new_appointment","rescheduled","canceled"],"type":"string"}},"required":["type"],"title":"ProviderNotificationType","type":"object"},"CreateBlockRequest":{"description":"Request schema for creating a block.","example":{"all_day":false,"attachment_type":"provider","attachments":["prov_d025a96ac0c6"],"end_date":"2025-10-27","end_time":"17:00","exception_dates":["2025-10-27T09:00:00"],"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_date":"2025-10-27","start_time":"09:00","time_zone":"America/New_York","title":"Initial Consult"},"properties":{"all_day":{"description":"Whether the block is all day.","type":"boolean"},"attachment_type":{"description":"The type of attachment for the block.","enum":["location","service","provider","service_provider"],"type":"string"},"attachments":{"description":"The resources to which this block is attached. These can be service IDs (to block availabilty for all providers on a service), provider IDs (to block availability for a specific provider), service provider IDs (to block availability for a specific service provider), or location IDs (to block availability for a specific location).","items":{"type":"string"},"type":"array"},"end_date":{"description":"The end date of the block.","format":"date","type":"string"},"end_time":{"description":"The end time of the block.","nullable":true,"pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$","type":"string"},"exception_dates":{"description":"Exceptions for recurring block instances (in naive date time format).","items":{"example":"2025-03-01T10:00:00","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","type":"string"},"type":"array"},"recurrence_rule":{"allOf":[{"$ref":"#/components/schemas/RecurrenceRule"}],"description":"The recurrence rule for the block (or null if there is no recurrence).","nullable":true,"type":"object"},"service_id":{"description":"The ID of the service for the block. Required when `attachment_type` is `service_provider`.","nullable":true,"type":"string"},"start_date":{"description":"The start date of the block.","format":"date","type":"string"},"start_time":{"description":"The start time of the block.","nullable":true,"pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$","type":"string"},"time_zone":{"description":"The time zone of the block.","type":"string"},"title":{"description":"The title of the block.","type":"string"}},"required":["start_date","end_date","attachment_type"],"title":"CreateBlockRequest","type":"object"},"AppointmentResponse":{"description":"Response schema for a single appointment","example":{"data":{"appointment_type":"in_person","cancellation_events":[{"actor":null,"cancellation_reason":{"id":"cr_a1b2c3d4e5f6","name":"Distance too far","object":"cancellation_reason","sort_order":1},"custom_reason_text":"I'm sick","initiated_by":"client","object":"cancellation_event","occurred_at":"2023-01-01T03:00:00Z","source":"client_ui"}],"client":{"created_at":"2025-01-15T14:30:00Z","email":"jane.smith@example.com","first_name":"Jane","id":"clnt_a1b2c3d4e5f6","last_name":"Smith","locale":"en-US","metadata":{"external_id":"123"},"object":"client","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago","updated_at":"2025-03-10T09:45:00Z"},"client_data":{"email":"jane.smith@example.com","first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirmation_events":[{"actor":null,"end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"initiated_by":"client","object":"confirmation_event","occurred_at":"2023-01-01T03:00:00Z","source":"client_ui","start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"}}],"confirmed_at":"2025-03-10T15:30:00Z","created_at":"2025-03-10T14:30:00Z","end_at":{"local":"2025-03-01T11:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2025-03-01T04:00:00Z"},"id":"appt_a1b2c3d4e5f6","object":"appointment","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"reschedule_events":[{"actor":null,"initiated_by":"client","new_end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"new_start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"},"object":"reschedule_event","occurred_at":"2023-01-01T03:00:00Z","previous_end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"previous_start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"},"source":"client_ui"}],"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}},"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","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"},"start_at":{"local":"2025-03-01T10:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2025-03-01T03:00:00Z"},"status":"scheduled","updated_at":"2025-03-10T14:30:00Z","urls":{"add_to_google_calendar":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/reschedule"]}}},"properties":{"data":{"$ref":"#/components/schemas/Appointment"}},"required":["data"],"title":"AppointmentResponse","type":"object"},"ClientResponse":{"description":"Response schema for a single client","example":{"data":{"created_at":"2025-01-15T14:30:00Z","email":"jane.smith@example.com","first_name":"Jane","id":"clnt_a1b2c3d4e5f6","last_name":"Smith","locale":"en-US","metadata":{"external_id":"123"},"object":"client","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago","updated_at":"2025-03-10T09:45:00Z"}},"properties":{"data":{"$ref":"#/components/schemas/Client"}},"required":["data"],"title":"ClientResponse","type":"object"},"ServiceProviderResponse":{"description":"Response schema for a service","example":{"data":{"created_at":"2025-02-19T17:36:36Z","id":"sp_d025a96ac0c6","object":"service_provider","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"service_id":"srv_d025a96ac0c6","updated_at":"2025-02-19T17:36:36Z"}},"properties":{"data":{"$ref":"#/components/schemas/ServiceProvider"}},"required":["data"],"title":"ServiceProviderResponse","type":"object"},"EmptyResponse":{"description":"Empty response with no content","example":"","title":"EmptyResponse","type":"string"},"UpdateAccountRequest":{"description":"Request schema for updating an account","example":{"name":"My Account"},"properties":{"name":{"description":"The account name.","type":"string"}},"title":"UpdateAccountRequest","type":"object"},"ClientUpdatedEventData":{"description":"This is an object representing data for the client updated event.","example":{"object":{"created_at":"2025-01-15T14:30:00Z","email":"jane.smith@example.com","first_name":"Jane","id":"clnt_a1b2c3d4e5f6","last_name":"Smith","locale":"en-US","metadata":{"external_id":"123"},"object":"client","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago","updated_at":"2025-03-10T09:45:00Z"},"type":"client.updated"},"properties":{"object":{"$ref":"#/components/schemas/Client"},"type":{"description":"The event type.","enum":["client.updated"],"type":"string"}},"required":["type","object"],"title":"ClientUpdatedEventData","type":"object","x-account-event-data":true},"ProvidersResponse":{"description":"Response schema for multiple providers","example":{"data":[{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"}],"meta":{"current_page":1,"page_size":10,"total_count":50,"total_pages":5}},"properties":{"data":{"description":"The providers details","items":{"$ref":"#/components/schemas/Provider"},"type":"array"},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","meta"],"title":"ProvidersResponse","type":"object"},"BlockDeletedEventData":{"description":"This is an object representing data for the block deleted event.","example":{"object":{"all_day":false,"attachment_type":"provider","attachments":["prov_d025a96ac0c6"],"created_at":"2017-09-12T12:34:55Z","end_date":"2025-10-27","end_time":"17:00","exception_dates":["2025-10-27T09:00:00"],"id":"blk_d025a96ac0c6","object":"block","recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"service_id":null,"start_date":"2025-10-27","start_time":"09:00","time_zone":"America/New_York","title":"Team Meeting","updated_at":"2017-09-13T10:11:12Z"},"type":"block.deleted"},"properties":{"object":{"$ref":"#/components/schemas/Block"},"type":{"description":"The event type.","enum":["block.deleted"],"type":"string"}},"required":["type","object"],"title":"BlockDeletedEventData","type":"object","x-account-event-data":true},"BookingPolicy":{"description":"A booking policy defines the rules for booking a service from public booking interfaces.\n","example":{"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}},"properties":{"advance_notice":{"$ref":"#/components/schemas/AdvanceNoticePolicy"},"allow_booking":{"description":"Whether public booking is allowed for the service.","type":"boolean"},"disabled_message":{"description":"The message to display when public booking is disabled.","nullable":true,"type":"string"},"hold":{"$ref":"#/components/schemas/HoldPolicy"},"maximize_utilization":{"$ref":"#/components/schemas/MaximizeUtilizationPolicy"}},"required":["allow_booking","advance_notice","hold","maximize_utilization","disabled_message"],"title":"BookingPolicy","type":"object"},"Service":{"description":"A service represents a type of appointment.\n","example":{"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}},"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","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"},"properties":{"appointment_type":{"description":"The type of appointment.","enum":["in_person","virtual"],"type":"string"},"booking_policy":{"$ref":"#/components/schemas/BookingPolicy"},"cancellation_policy":{"$ref":"#/components/schemas/CancellationPolicy"},"change_policy_text":{"description":"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.","type":"string"},"created_at":{"description":"When the service was created.","format":"datetime","type":"string"},"duration":{"description":"The duration of time slots in [ISO-8601 duration format](https://en.wikipedia.org/wiki/ISO_8601#Durations).","example":"`PT30M`","pattern":"^PT(?:(\\d+)H)?(?:(\\d+)M)?$","type":"string"},"id":{"description":"Unique identifier for the object.","pattern":"^srv_\\w{12}$","type":"string"},"internal_name":{"description":"An optional internal label for admin use. When set, this is displayed in the admin UI instead of the public name.","nullable":true,"type":"string"},"metadata":{"additionalProperties":true,"description":"Set of key-value pairs attached to this service. Maximum size is 16 KB.","type":"object"},"name":{"description":"The name of the service.","type":"string"},"object":{"description":"String representing the object's type.","enum":["service"],"type":"string"},"provider_notifications":{"$ref":"#/components/schemas/ProviderNotificationConfig"},"rescheduling_policy":{"$ref":"#/components/schemas/ReschedulingPolicy"},"slot_rules":{"description":"Array of slot rules for the service.","items":{"$ref":"#/components/schemas/SlotRule"},"type":"array"},"updated_at":{"description":"When the service was last updated.","format":"datetime","type":"string"}},"required":["object","appointment_type","booking_policy","cancellation_policy","rescheduling_policy","change_policy_text","created_at","duration","metadata","name","provider_notifications","slot_rules","id","updated_at"],"title":"Service","type":"object","x-tags":["Services"]},"ProviderReactivatedEventData":{"description":"This is an object representing data for the provider reactivated event.","example":{"object":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"type":"provider.reactivated"},"properties":{"object":{"$ref":"#/components/schemas/Provider"},"type":{"description":"The event type.","enum":["provider.reactivated"],"type":"string"}},"required":["type","object"],"title":"ProviderReactivatedEventData","type":"object","x-account-event-data":true},"AccountUserDeletedEventData":{"description":"This is an object representing data for the account user deleted event.","example":{"object":{"object":"account_user","passive":false,"roles":[{"id":"role_123456789012","name":"Admin","object":"role","type":"admin"}],"user":{"created_at":"2025-03-15T13:01:08Z","email":"avery@tendermedical.com","first_name":"Avery","id":"user_d025a96ac0c6","last_name":"Evans","object":"user","updated_at":"2025-03-15T13:01:08Z"}},"type":"account_user.deleted"},"properties":{"object":{"$ref":"#/components/schemas/AccountUser"},"type":{"description":"The event type.","enum":["account_user.deleted"],"type":"string"}},"required":["type","object"],"title":"AccountUserDeletedEventData","type":"object","x-account-event-data":true},"CompletePublicBookingIntentRequest":{"description":"Request schema for completing a booking intent via a public interface. Update fields may be provided inline and are applied atomically before completion.","example":{"client_data":{"email":"jane@example.com","first_name":"Jane"},"service_id":"srv_1234567890"},"properties":{"auto_assign_provider":{"description":"When true, automatically assigns an available provider for the selected time slot if no provider_id is specified.","nullable":true,"type":"boolean"},"client_data":{"description":"Progressive client data. Provided fields are merged with existing values.","nullable":true,"properties":{"email":{"nullable":true,"type":"string"},"first_name":{"nullable":true,"type":"string"},"last_name":{"nullable":true,"type":"string"},"locale":{"nullable":true,"type":"string"},"phone":{"nullable":true,"type":"string"},"reference_id":{"nullable":true,"type":"string"},"time_zone":{"nullable":true,"type":"string"}},"type":"object"},"end_at":{"description":"The end time of the slot as an ISO-8601 datetime string with a timezone offset.","format":"date-time","nullable":true,"type":"string"},"provider_id":{"description":"The ID of the provider to assign.","nullable":true,"type":"string"},"service_id":{"description":"The ID of the service.","nullable":true,"type":"string"},"start_at":{"description":"The start time of the slot as an ISO-8601 datetime string with a timezone offset.","format":"date-time","nullable":true,"type":"string"},"time_zone":{"description":"The local time zone for the slot (IANA format).","nullable":true,"type":"string"}},"title":"CompletePublicBookingIntentRequest","type":"object"},"ProviderResponse":{"description":"Response schema for a single provider","example":{"data":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"}},"properties":{"data":{"$ref":"#/components/schemas/Provider"}},"required":["data"],"title":"ProviderResponse","type":"object"},"ProviderSchedulesResponse":{"description":"Response schema for a list of provider schedules","example":{"data":[{"created_at":"2025-02-17T17:49:19Z","effective_from":"2025-01-01","effective_to":"2025-12-31","id":"psch_d025a96ac0c6","object":"provider_schedule","public_bookings":{"enabled":true},"updated_at":"2025-02-17T17:49:19Z","weekly_rules":[{"day":"mo","end_time":"17:00","start_time":"09:00"}]}],"meta":{"current_page":1,"page_size":10,"total_count":50,"total_pages":5}},"properties":{"data":{"description":"List of provider schedules","items":{"$ref":"#/components/schemas/ProviderSchedule"},"type":"array"},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","meta"],"title":"ProviderSchedulesResponse","type":"object"},"NotFoundResponse":{"description":"Response schema for not found requests","example":{"errors":[{"detail":"Not Found","status":"404"}]},"properties":{"errors":{"items":{"properties":{"detail":{"description":"Error message","enum":["Not Found"],"type":"string"},"status":{"description":"HTTP status code","enum":["404"],"type":"string"}},"required":["status","detail"],"type":"object"},"type":"array"}},"required":["errors"],"title":"NotFoundResponse","type":"object"},"PublicCancellationReasonsResponse":{"description":"Response schema for listing public cancellation reasons","example":{"data":[{"id":"cr_d025a96ac0c6","name":"Schedule conflict","object":"public_cancellation_reason","sort_order":0},{"id":"cr_e136b07bd1d7","name":"Found another provider","object":"public_cancellation_reason","sort_order":1}]},"properties":{"data":{"items":{"$ref":"#/components/schemas/PublicCancellationReason"},"type":"array"}},"required":["data"],"title":"PublicCancellationReasonsResponse","type":"object"},"CancelAppointmentRequest":{"description":"Request schema for canceling an appointment","example":{"cancellation_reason_id":"cr_d025a96ac0c6","custom_reason_text":"I'm sick"},"properties":{"cancellation_reason_id":{"description":"ID of the cancellation reason.","pattern":"^cr_\\w{12}$","type":"string"},"custom_reason_text":{"description":"Custom reason text for the cancellation.","type":"string"},"initiated_by":{"default":"client","description":"The entity that initiated the cancellation.","enum":["user","client"],"type":"string"}},"title":"CancelAppointmentRequest","type":"object"},"ServiceUpdatedEventData":{"description":"This is an object representing data for the service updated event.","example":{"object":{"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}},"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","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"},"type":"service.updated"},"properties":{"object":{"$ref":"#/components/schemas/Service"},"type":{"description":"The event type.","enum":["service.updated"],"type":"string"}},"required":["type","object"],"title":"ServiceUpdatedEventData","type":"object","x-account-event-data":true},"CancellationEvent":{"description":"This is an object representing when an appointment was canceled.","example":{"actor":null,"cancellation_reason":{"id":"cr_a1b2c3d4e5f6","name":"Distance too far","object":"cancellation_reason","sort_order":1},"custom_reason_text":"I'm sick","initiated_by":"client","object":"cancellation_event","occurred_at":"2023-01-01T03:00:00Z","source":"client_ui"},"properties":{"actor":{"description":"The actor that initiated the cancellation (user ID or bearer token ID).","nullable":true,"type":"string"},"cancellation_reason":{"anyOf":[{"$ref":"#/components/schemas/CancellationReason"}],"description":"The cancellation reason.","nullable":true},"custom_reason_text":{"description":"Custom reason text for the cancellation.","nullable":true,"type":"string"},"initiated_by":{"description":"The entity that initiated the cancellation.","enum":["user","client"],"type":"string"},"object":{"enum":["cancellation_event"],"type":"string"},"occurred_at":{"description":"The time at which the cancellation occurred (ISO-8601 format).","format":"datetime","type":"string"},"source":{"description":"The source of the cancellation event.","enum":["client_ui","dashboard","api"],"type":"string"}},"required":["object","source","initiated_by","actor","cancellation_reason","custom_reason_text","occurred_at"],"title":"CancellationEvent","type":"object"},"User":{"description":"This is an object representing a user of the app.","example":{"created_at":"2025-03-15T13:01:08Z","email":"avery@tendermedical.com","first_name":"Avery","id":"user_d025a96ac0c6","last_name":"Evans","object":"user","updated_at":"2025-03-15T13:01:08Z"},"properties":{"created_at":{"description":"Time at which the object was created.","format":"date-time","type":"string"},"email":{"description":"The user's email address.","format":"email","type":"string"},"first_name":{"description":"The user's first name.","type":"string"},"id":{"description":"Unique identifier for the object.","pattern":"^user_\\w{12}$","type":"string"},"last_name":{"description":"The user's last name.","type":"string"},"object":{"description":"String representing the object's type.","enum":["user"],"type":"string"},"updated_at":{"description":"Time at which the object was last updated.","format":"date-time","type":"string"}},"required":["object","created_at","first_name","last_name","email","id","updated_at"],"title":"User","type":"object"},"ConnectedAccountCreatedEventData":{"description":"This is an object representing data for the connected account created event.","example":{"object":{"connection_scope":"user","created_at":"2025-03-12T12:34:55Z","display_name":"John Doe","email":"user@example.com","external_account_id":null,"external_subject":"123456789","id":"cact_d025a96ac0c6","object":"connected_account","provider":"google","status":"active","updated_at":"2025-03-13T10:11:12Z","user_id":"user_d025a96ac0c6"},"type":"connected_account.created"},"properties":{"object":{"$ref":"#/components/schemas/ConnectedAccount"},"type":{"description":"The event type.","enum":["connected_account.created"],"type":"string"}},"required":["type","object"],"title":"ConnectedAccountCreatedEventData","type":"object","x-account-event-data":true},"ProviderScheduleCreatedEventData":{"description":"This is an object representing data for the provider schedule created event.","example":{"object":{"created_at":"2025-02-17T17:49:19Z","effective_from":"2025-01-01","effective_to":"2025-12-31","id":"psch_d025a96ac0c6","object":"provider_schedule","public_bookings":{"enabled":true},"updated_at":"2025-02-17T17:49:19Z","weekly_rules":[{"day":"mo","end_time":"17:00","start_time":"09:00"}]},"type":"provider_schedule.created"},"properties":{"object":{"$ref":"#/components/schemas/ProviderSchedule"},"type":{"description":"The event type.","enum":["provider_schedule.created"],"type":"string"}},"required":["type","object"],"title":"ProviderScheduleCreatedEventData","type":"object","x-account-event-data":true},"CancellationReasonsResponse":{"description":"Response schema for multiple cancellation reasons","example":{"data":[{"id":"cr_a1b2c3d4e5f6","name":"Distance too far","object":"cancellation_reason","sort_order":1}]},"properties":{"data":{"description":"The cancellation reasons details","items":{"$ref":"#/components/schemas/CancellationReason"},"type":"array"}},"required":["data"],"title":"CancellationReasonsResponse","type":"object"},"BlockCreatedEventData":{"description":"This is an object representing data for the block created event.","example":{"object":{"all_day":false,"attachment_type":"provider","attachments":["prov_d025a96ac0c6"],"created_at":"2017-09-12T12:34:55Z","end_date":"2025-10-27","end_time":"17:00","exception_dates":["2025-10-27T09:00:00"],"id":"blk_d025a96ac0c6","object":"block","recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"service_id":null,"start_date":"2025-10-27","start_time":"09:00","time_zone":"America/New_York","title":"Team Meeting","updated_at":"2017-09-13T10:11:12Z"},"type":"block.created"},"properties":{"object":{"$ref":"#/components/schemas/Block"},"type":{"description":"The event type.","enum":["block.created"],"type":"string"}},"required":["type","object"],"title":"BlockCreatedEventData","type":"object","x-account-event-data":true},"ServicesResponse":{"description":"Response schema for a list of services","example":{"data":[{"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}},"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","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"}],"meta":{"current_page":1,"page_size":10,"total_count":50,"total_pages":5}},"properties":{"data":{"description":"List of services","items":{"$ref":"#/components/schemas/Service"},"type":"array"},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","meta"],"title":"ServicesResponse","type":"object"},"ProviderNotificationConfig":{"description":"Configuration for staff notification emails on a service, including which\nnotification types are enabled and who receives them.\n","example":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"properties":{"additional_recipients":{"description":"Additional email addresses that receive staff notification emails for this service.","items":{"format":"email","type":"string"},"type":"array"},"notify_provider":{"description":"Whether the assigned provider receives notification emails for this service.","type":"boolean"},"types":{"description":"Array of enabled staff notification types for the service.","items":{"$ref":"#/components/schemas/ProviderNotificationType"},"type":"array"}},"required":["types","notify_provider","additional_recipients"],"title":"ProviderNotificationConfig","type":"object"},"ReschedulingPolicy":{"description":"A rescheduling policy defines the rules for rescheduling a service from public booking interfaces.\n","example":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"properties":{"advance_notice":{"$ref":"#/components/schemas/AdvanceNoticePolicy"},"allow_rescheduling":{"description":"Whether public rescheduling is allowed for the service.","type":"boolean"},"disabled_message":{"description":"The message to display when public rescheduling is disabled.","nullable":true,"type":"string"}},"required":["allow_rescheduling","advance_notice","disabled_message"],"title":"ReschedulingPolicy","type":"object"},"ProviderScheduleResponse":{"description":"Response schema for a single provider schedule","example":{"data":{"created_at":"2025-02-17T17:49:19Z","effective_from":"2025-01-01","effective_to":"2025-12-31","id":"psch_d025a96ac0c6","object":"provider_schedule","public_bookings":{"enabled":true},"updated_at":"2025-02-17T17:49:19Z","weekly_rules":[{"day":"mo","end_time":"17:00","start_time":"09:00"}]}},"properties":{"data":{"$ref":"#/components/schemas/ProviderSchedule"}},"required":["data"],"title":"ProviderScheduleResponse","type":"object"},"PublicBookingIntent":{"description":"A public booking intent that tracks the lifecycle of a booking attempt.\nThis is a simplified view without sensitive or admin-only fields.\n","example":{"appointment":null,"end_at":{"local":"2026-02-23T10:30:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1771947000,"utc":"2026-02-23T15:30:00Z"},"hold_until":"2026-02-22T10:10:00Z","id":"bi_abc123def456abc123def456","locked_fields":[],"object":"public_booking_intent","start_at":{"local":"2026-02-23T10:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1771945200,"utc":"2026-02-23T15:00:00Z"},"status":"slot_selected"},"properties":{"appointment":{"anyOf":[{"$ref":"#/components/schemas/PublicAppointment"}],"description":"The linked appointment (set when completed)","nullable":true},"end_at":{"anyOf":[{"$ref":"#/components/schemas/ZonedDateTime"}],"description":"The end time of the selected slot","nullable":true},"hold_until":{"description":"When the hold expires (UTC)","format":"date-time","nullable":true,"type":"string"},"id":{"description":"The booking intent ID","pattern":"^bi_\\w{24}$","type":"string"},"locked_fields":{"description":"Fields that are locked and cannot be updated via the public API. Possible values: service_id, provider_id, start_at, end_at, time_zone, client_data.","items":{"type":"string"},"type":"array"},"object":{"description":"String representing the object's type.","enum":["public_booking_intent"],"type":"string"},"start_at":{"anyOf":[{"$ref":"#/components/schemas/ZonedDateTime"}],"description":"The start time of the selected slot","nullable":true},"status":{"description":"The current status of the booking intent","enum":["pending","slot_selected","completed","abandoned"],"type":"string"}},"required":["object","id","status"],"title":"PublicBookingIntent","type":"object","x-tags":["Public Booking"]},"UpdateAccountUserRequest":{"description":"Request schema for updating a user in an account","example":{"email":"john.doe@example.com","first_name":"John","last_name":"Doe","passive":true,"role_ids":["role_abc123def456"],"time_zone":"America/Chicago"},"properties":{"email":{"description":"The user's email address.","format":"email","type":"string"},"first_name":{"description":"The user's first name.","type":"string"},"last_name":{"description":"The user's last name.","type":"string"},"passive":{"description":"Whether this user is passive. Passive users do not receive direct email notifications (e.g., OAuth reconnection notices). Use this for platform/headless scenarios where the platform handles user communication.","type":"boolean"},"role_ids":{"description":"List of role IDs to assign to the user. Replaces all existing role assignments.","items":{"description":"A role ID","pattern":"^role_\\w{12}$","type":"string"},"type":"array"},"time_zone":{"description":"The user's time zone.","type":"string"}},"title":"UpdateAccountUserRequest","type":"object"},"AdvanceNoticePolicy":{"description":"A policy for requiring minimum advance notice.\n","example":{"enabled":true,"minimum_duration":"PT1H"},"properties":{"enabled":{"description":"Whether advance notice is enabled.","type":"boolean"},"minimum_duration":{"description":"The minimum duration of advance notice.","nullable":true,"pattern":"^PT(?:(\\d+)H)?(?:(\\d+)M)?$","type":"string"}},"required":["enabled","minimum_duration"],"title":"AdvanceNoticePolicy","type":"object"},"AppointmentCanceledEventData":{"description":"This is an object representing data for the appointment canceled event.","example":{"object":{"appointment_type":"in_person","cancellation_events":[{"actor":null,"cancellation_reason":{"id":"cr_a1b2c3d4e5f6","name":"Distance too far","object":"cancellation_reason","sort_order":1},"custom_reason_text":"I'm sick","initiated_by":"client","object":"cancellation_event","occurred_at":"2023-01-01T03:00:00Z","source":"client_ui"}],"client":{"created_at":"2025-01-15T14:30:00Z","email":"jane.smith@example.com","first_name":"Jane","id":"clnt_a1b2c3d4e5f6","last_name":"Smith","locale":"en-US","metadata":{"external_id":"123"},"object":"client","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago","updated_at":"2025-03-10T09:45:00Z"},"client_data":{"email":"jane.smith@example.com","first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirmation_events":[{"actor":null,"end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"initiated_by":"client","object":"confirmation_event","occurred_at":"2023-01-01T03:00:00Z","source":"client_ui","start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"}}],"confirmed_at":"2025-03-10T15:30:00Z","created_at":"2025-03-10T14:30:00Z","end_at":{"local":"2025-03-01T11:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2025-03-01T04:00:00Z"},"id":"appt_a1b2c3d4e5f6","object":"appointment","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"reschedule_events":[{"actor":null,"initiated_by":"client","new_end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"new_start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"},"object":"reschedule_event","occurred_at":"2023-01-01T03:00:00Z","previous_end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"previous_start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"},"source":"client_ui"}],"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}},"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","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"},"start_at":{"local":"2025-03-01T10:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2025-03-01T03:00:00Z"},"status":"scheduled","updated_at":"2025-03-10T14:30:00Z","urls":{"add_to_google_calendar":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/reschedule"]}},"type":"appointment.canceled"},"properties":{"object":{"$ref":"#/components/schemas/Appointment"},"type":{"description":"The event type.","enum":["appointment.canceled"],"type":"string"}},"required":["type","object"],"title":"AppointmentCanceledEventData","type":"object","x-account-event-data":true},"UpdatePublicBookingIntentRequest":{"description":"Request schema for updating a booking intent via a public interface.","example":{"client_data":{"email":"jane@example.com","first_name":"Jane"},"end_at":"2026-02-23T10:30:00-05:00","provider_id":"prov_1234567890","start_at":"2026-02-23T10:00:00-05:00","time_zone":"America/New_York"},"properties":{"auto_assign_provider":{"description":"When true, automatically assigns an available provider for the selected time slot if no provider_id is specified.","nullable":true,"type":"boolean"},"client_data":{"description":"Progressive client data. Provided fields are merged with existing values.","nullable":true,"properties":{"email":{"nullable":true,"type":"string"},"first_name":{"nullable":true,"type":"string"},"last_name":{"nullable":true,"type":"string"},"locale":{"nullable":true,"type":"string"},"phone":{"nullable":true,"type":"string"},"reference_id":{"nullable":true,"type":"string"},"time_zone":{"nullable":true,"type":"string"}},"type":"object"},"end_at":{"description":"The end time of the slot as an ISO-8601 datetime string with a timezone offset.","format":"date-time","nullable":true,"type":"string"},"provider_id":{"description":"The ID of the provider to assign.","nullable":true,"type":"string"},"service_id":{"description":"The ID of the service.","nullable":true,"type":"string"},"start_at":{"description":"The start time of the slot as an ISO-8601 datetime string with a timezone offset.","format":"date-time","nullable":true,"type":"string"},"time_zone":{"description":"The local time zone for the slot (IANA format).","nullable":true,"type":"string"}},"title":"UpdatePublicBookingIntentRequest","type":"object"},"CreateDashboardSessionRequest":{"description":"Request schema for creating a dashboard session","example":{"return_url":"https://example.com/home","user_id":"user_d025a96ac0c6"},"properties":{"return_url":{"description":"The URL to redirect to when the user signs out of the session.","format":"uri","nullable":true,"type":"string"},"user_id":{"description":"The ID of the user to create the session for.","pattern":"^user_\\w{12}$","type":"string"}},"required":["user_id"],"title":"CreateDashboardSessionRequest","type":"object"},"ProviderScheduleUpdatedEventData":{"description":"This is an object representing data for the provider schedule updated event.","example":{"object":{"created_at":"2025-02-17T17:49:19Z","effective_from":"2025-01-01","effective_to":"2025-12-31","id":"psch_d025a96ac0c6","object":"provider_schedule","public_bookings":{"enabled":true},"updated_at":"2025-02-17T17:49:19Z","weekly_rules":[{"day":"mo","end_time":"17:00","start_time":"09:00"}]},"type":"provider_schedule.updated"},"properties":{"object":{"$ref":"#/components/schemas/ProviderSchedule"},"type":{"description":"The event type.","enum":["provider_schedule.updated"],"type":"string"}},"required":["type","object"],"title":"ProviderScheduleUpdatedEventData","type":"object","x-account-event-data":true},"PublicBookingIntentResponse":{"description":"Response schema for a single booking intent via a public interface.","example":{"data":{"appointment":null,"end_at":{"local":"2026-02-23T10:30:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1771947000,"utc":"2026-02-23T15:30:00Z"},"hold_until":"2026-02-22T10:10:00Z","id":"bi_abc123def456abc123def456","locked_fields":[],"object":"public_booking_intent","start_at":{"local":"2026-02-23T10:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1771945200,"utc":"2026-02-23T15:00:00Z"},"status":"slot_selected"}},"properties":{"data":{"$ref":"#/components/schemas/PublicBookingIntent"}},"required":["data"],"title":"PublicBookingIntentResponse","type":"object"},"Provider":{"description":"A provider represents a staff member who can provide services to clients.\n","example":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"properties":{"created_at":{"description":"Time at which the object was created.","format":"date-time","type":"string"},"display_name":{"description":"The provider's display name.","type":"string"},"first_name":{"description":"The provider's first name.","type":"string"},"id":{"description":"Unique identifier for the object.","pattern":"^prov_\\w{12}$","type":"string"},"last_name":{"description":"The provider's last name.","type":"string"},"metadata":{"additionalProperties":true,"description":"Set of key-value pairs attached to this provider. Maximum size is 16 KB.","type":"object"},"object":{"description":"String representing the object's type.","enum":["provider"],"type":"string"},"updated_at":{"description":"Time at which the object was last updated.","format":"date-time","type":"string"}},"required":["object","created_at","id","first_name","last_name","display_name","updated_at"],"title":"Provider","type":"object","x-tags":["Providers"]},"CreateProviderScheduleRequest":{"description":"Request schema for creating a provider schedule.","example":{"effective_from":"2025-01-01","effective_to":"2025-12-31","public_bookings":{"enabled":true},"weekly_rules":[{"day":"mo","end_time":"17:00","start_time":"09:00"}]},"properties":{"effective_from":{"description":"The effective date of the provider schedule.","format":"date_time","type":"string"},"effective_to":{"description":"The effective end date of the provider schedule.","format":"date_time","nullable":true,"type":"string"},"public_bookings":{"description":"Public booking settings for the schedule.","example":{"enabled":true},"properties":{"enabled":{"default":true,"description":"Whether public bookings are enabled for the schedule.","type":"boolean"}},"required":["enabled"],"type":"object"},"weekly_rules":{"description":"Weekly rules for the schedule.","items":{"$ref":"#/components/schemas/WeeklyRule"},"type":"array"}},"required":["effective_from"],"title":"CreateProviderScheduleRequest","type":"object"},"RecurrenceRule":{"description":"A recurrence rule describes a repeating pattern of times. Recurrences rules in SavvyCal are modeled\nafter the conventions of [iCalendar](https://en.wikipedia.org/wiki/ICalendar) recurrence rules (RRULE),\nbut are a subset of the full specification.\n","example":{"byday":["mo","we","fr"],"freq":"weekly"},"properties":{"byday":{"description":"The days of the week on which the recurrence occurs.","example":["mo","we","fr"],"items":{"pattern":"(mo|tu|we|th|fr|sa|su)$","type":"string"},"type":"array","uniqueItems":true},"count":{"description":"Number of occurrences at which to end the recurrence.","minimum":1,"nullable":true,"type":"integer"},"freq":{"description":"The frequency of the recurrence.","enum":["daily","weekly"],"type":"string"},"interval":{"description":"How often the recurrence rule repeats.","example":2,"minimum":1,"type":"integer"},"until":{"description":"Date at which to end the recurrence (in ISO-8601 format).","example":"2024-01-02","nullable":true,"type":"date"}},"required":["freq"],"title":"RecurrenceRule","type":"object"},"Block":{"description":"This is an object representing a range of blocked time for a provider, service, service provider, or location.","example":{"all_day":false,"attachment_type":"provider","attachments":["prov_d025a96ac0c6"],"created_at":"2017-09-12T12:34:55Z","end_date":"2025-10-27","end_time":"17:00","exception_dates":["2025-10-27T09:00:00"],"id":"blk_d025a96ac0c6","object":"block","recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"service_id":null,"start_date":"2025-10-27","start_time":"09:00","time_zone":"America/New_York","title":"Team Meeting","updated_at":"2017-09-13T10:11:12Z"},"properties":{"all_day":{"description":"Whether the block is all day.","type":"boolean"},"attachment_type":{"description":"The type of attachment for the block.","enum":["location","service","provider","service_provider"],"type":"string"},"attachments":{"description":"The resources to which this block is attached. These can be service IDs (to block availabilty for all providers on a service), provider IDs (to block availability for a specific provider), or location IDs (to block availability for a specific location).","items":{"type":"string"},"type":"array"},"created_at":{"description":"Time at which the object was created.","format":"date-time","type":"string"},"end_date":{"description":"The end date of the block.","format":"date","type":"string"},"end_time":{"description":"The end time of the block.","nullable":true,"pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$","type":"string"},"exception_dates":{"description":"The exception dates for the block.","items":{"example":"2025-03-01T00:00:00","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","type":"string"},"type":"array"},"id":{"description":"Unique identifier for the object.","pattern":"^blk_\\w{12}$","type":"string"},"object":{"description":"String representing the object's type.","enum":["block"],"type":"string"},"recurrence_rule":{"allOf":[{"$ref":"#/components/schemas/RecurrenceRule"}],"description":"The recurrence rule for the block (or null if there is no recurrence).","nullable":true,"type":"object"},"service_id":{"description":"The ID of the service for the block. Required when `attachment_type` is `service_provider`.","nullable":true,"type":"string"},"start_date":{"description":"The start date of the block.","format":"date","type":"string"},"start_time":{"description":"The start time of the block.","nullable":true,"pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$","type":"string"},"time_zone":{"description":"The time zone of the block.","nullable":true,"type":"string"},"title":{"description":"The title of the block.","nullable":true,"type":"string"},"updated_at":{"description":"Time at which the object was last updated.","format":"date-time","type":"string"}},"required":["object","created_at","id","updated_at","title","attachment_type","attachments","start_date","start_time","end_date","end_time","time_zone","all_day","recurrence_rule","exception_dates","service_id"],"title":"Block","type":"object","x-tags":["Blocks"]},"ServiceProviderDeletedEventData":{"description":"This is an object representing data for the service provider deleted event.","example":{"object":{"created_at":"2025-02-19T17:36:36Z","id":"sp_d025a96ac0c6","object":"service_provider","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"service_id":"srv_d025a96ac0c6","updated_at":"2025-02-19T17:36:36Z"},"type":"service_provider.deleted"},"properties":{"object":{"$ref":"#/components/schemas/ServiceProvider"},"type":{"description":"The event type.","enum":["service_provider.deleted"],"type":"string"}},"required":["type","object"],"title":"ServiceProviderDeletedEventData","type":"object","x-account-event-data":true},"ConnectedAccountsResponse":{"description":"Response schema for multiple connected accounts","example":{"data":[{"connection_scope":"user","created_at":"2025-03-12T12:34:55Z","display_name":"John Doe","email":"user@example.com","external_account_id":null,"external_subject":"123456789","id":"cact_d025a96ac0c6","object":"connected_account","provider":"google","status":"active","updated_at":"2025-03-13T10:11:12Z","user_id":"user_d025a96ac0c6"}],"meta":{"current_page":1,"page_size":10,"total_count":50,"total_pages":5}},"properties":{"data":{"description":"A list of connected accounts","items":{"$ref":"#/components/schemas/ConnectedAccount"},"type":"array"},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","meta"],"title":"ConnectedAccountsResponse","type":"object"},"AccountsResponse":{"description":"Response schema for a list of accounts","example":{"data":[{"created_at":"2017-09-12T12:34:55Z","id":"acct_d025a96ac0c6","name":"Tender Medical","object":"account","updated_at":"2017-09-13T10:11:12Z"}],"meta":{"current_page":1,"page_size":10,"total_count":50,"total_pages":5}},"properties":{"data":{"description":"List of accounts","items":{"$ref":"#/components/schemas/Account"},"type":"array"},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","meta"],"title":"AccountsResponse","type":"object"},"WeeklyRule":{"description":"Weekly rule for a provider schedule.","example":{"day":"mo","end_time":"17:00","start_time":"09:00"},"properties":{"day":{"description":"The day of the week.","enum":["mo","tu","we","th","fr","sa","su"],"type":"string"},"end_time":{"description":"The end time of the rule.","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$","type":"string"},"start_time":{"description":"The start time of the rule.","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$","type":"string"}},"required":["day","start_time","end_time"],"title":"WeeklyRule","type":"object"},"MaximizeUtilizationPolicy":{"description":"Avoid presenting overlapping time slots for service providers to eliminate gaps in the schedule.\n","example":{"enabled":true},"properties":{"enabled":{"description":"Whether maximize utilization is enabled for the service.","type":"boolean"}},"required":["enabled"],"title":"MaximizeUtilizationPolicy","type":"object"},"CreateAccountRequest":{"description":"Request schema for creating an account","example":{"name":"My Account","time_zone":"America/Chicago"},"properties":{"name":{"description":"The account name.","type":"string"},"time_zone":{"description":"The account time zone (IANA format).","type":"string"}},"required":["name","time_zone"],"title":"CreateAccountRequest","type":"object"},"CreateAppointmentRequest":{"description":"Request schema for creating an appointment","example":{"client_data":{"email":"john.doe@example.com","first_name":"John","last_name":"Doe","locale":"en-US","phone":"+15551234567","reference_id":"1234567890","time_zone":"America/New_York"},"end_at":"2025-03-01T11:00:00-05:00","service_id":"srv_1234567890","start_at":"2025-03-01T10:00:00-05:00","time_zone":"America/New_York","validate_slot":true},"properties":{"client_data":{"description":"Information about the client booking the appointment. You can either provide an `id` or `reference_id` for an existing client,\nor provide a new client's details.\n","properties":{"email":{"description":"The client's email address. Required if no existing client is provided.","format":"email","nullable":true,"type":"string"},"first_name":{"description":"The client's first name. Required if no existing client is provided.","nullable":true,"type":"string"},"id":{"description":"The ID of an existing client to attach to the appointment. If not provided, a new client will be created\nif the `reference_id` does not correspond to an existing client. If there does exist a client with\nthe `reference_id` provided, the existing client will be attached to the appointment.\n","nullable":true,"type":"string"},"last_name":{"description":"The client's last name. Required if no existing client is provided.","nullable":true,"type":"string"},"locale":{"description":"The locale of the client booking the appointment.","example":"en-US","nullable":true,"type":"string"},"phone":{"description":"The client's phone number (E.164 format).","example":"+1234567890","nullable":true,"type":"string"},"reference_id":{"description":"External reference identifier for the client.","nullable":true,"type":"string"},"time_zone":{"description":"The client's time zone (IANA format). This field will be used to represent the appointment time slot in the client's local time zone (in the event that it differs from the appointment's local time zone).","example":"America/New_York","type":"string"}},"required":["time_zone"],"type":"object"},"end_at":{"description":"The end time of the appointment as an ISO-8601 datetime string with a timezone offset (e.g., `2025-03-01T11:00:00-05:00` or `2025-03-01T16:00:00Z`). The `time_zone` field determines the canonical timezone.","example":"2025-03-01T11:00:00-05:00","format":"date-time","type":"string"},"provider_id":{"description":"The ID of the provider to assign to the appointment. If not provided, an available provider will be randomly assigned.","nullable":true,"type":"string"},"service_id":{"description":"The ID of the service for this appointment.","type":"string"},"start_at":{"description":"The start time of the appointment as an ISO-8601 datetime string with a timezone offset (e.g., `2025-03-01T10:00:00-05:00` or `2025-03-01T15:00:00Z`). The `time_zone` field determines the canonical timezone.","example":"2025-03-01T10:00:00-05:00","format":"date-time","type":"string"},"time_zone":{"description":"The local time zone for the appointment (IANA format).","example":"America/New_York","type":"string"},"validate_slot":{"default":true,"description":"Whether to validate the slot availability for the appointment.","type":"boolean"}},"required":["service_id","start_at","end_at","time_zone","client_data"],"title":"CreateAppointmentRequest","type":"object"},"ProviderSchedule":{"description":"A provider schedule represents a schedule for a provider at a location.\n","example":{"created_at":"2025-02-17T17:49:19Z","effective_from":"2025-01-01","effective_to":"2025-12-31","id":"psch_d025a96ac0c6","object":"provider_schedule","public_bookings":{"enabled":true},"updated_at":"2025-02-17T17:49:19Z","weekly_rules":[{"day":"mo","end_time":"17:00","start_time":"09:00"}]},"properties":{"created_at":{"description":"When the service was created.","format":"datetime","type":"string"},"effective_from":{"description":"The start date of the schedule.","format":"date","type":"string"},"effective_to":{"description":"The end date of the schedule.","format":"date","nullable":true,"type":"string"},"id":{"description":"Unique identifier for the object.","pattern":"^psch_\\w{12}$","type":"string"},"object":{"description":"String representing the object's type.","enum":["provider_schedule"],"type":"string"},"public_bookings":{"description":"Public booking settings for the schedule.","example":{"enabled":true},"properties":{"enabled":{"description":"Whether public bookings are enabled for the schedule.","type":"boolean"}},"required":["enabled"],"type":"object"},"updated_at":{"description":"When the schedule was last updated.","format":"datetime","type":"string"},"weekly_rules":{"description":"Weekly rules for the schedule.","items":{"$ref":"#/components/schemas/WeeklyRule"},"type":"array"}},"required":["object","effective_from","effective_to","created_at","id","public_bookings","weekly_rules","updated_at"],"title":"ProviderSchedule","type":"object","x-tags":["Provider Schedules"]},"CreatePublicBookingIntentRequest":{"description":"Request schema for creating a booking intent via a public interface.","example":{"account_id":"acct_1234567890","end_at":"2026-02-23T10:30:00-05:00","service_id":"srv_1234567890","start_at":"2026-02-23T10:00:00-05:00","time_zone":"America/New_York"},"properties":{"account_id":{"description":"The account ID.","type":"string"},"auto_assign_provider":{"description":"When true, automatically assigns an available provider for the selected time slot if no provider_id is specified.","nullable":true,"type":"boolean"},"client_data":{"description":"Progressive client data to collect during the booking flow.","nullable":true,"properties":{"email":{"nullable":true,"type":"string"},"first_name":{"nullable":true,"type":"string"},"last_name":{"nullable":true,"type":"string"},"locale":{"nullable":true,"type":"string"},"phone":{"nullable":true,"type":"string"},"reference_id":{"nullable":true,"type":"string"},"time_zone":{"nullable":true,"type":"string"}},"type":"object"},"end_at":{"description":"The end time of the slot as an ISO-8601 datetime string with a timezone offset.","format":"date-time","nullable":true,"type":"string"},"provider_id":{"description":"The ID of the provider to assign.","nullable":true,"type":"string"},"service_id":{"description":"The ID of the service for this booking intent.","nullable":true,"type":"string"},"start_at":{"description":"The start time of the slot as an ISO-8601 datetime string with a timezone offset.","format":"date-time","nullable":true,"type":"string"},"time_zone":{"description":"The local time zone for the slot (IANA format).","nullable":true,"type":"string"}},"required":["account_id"],"title":"CreatePublicBookingIntentRequest","type":"object"},"BookingIntentResponse":{"description":"Response schema for a single booking intent","example":{"data":{"abandoned_at":null,"appointment":null,"client":null,"client_data":{"email":"jane@example.com","first_name":"Jane","last_name":"Doe","locale":"en","phone":"+15551234567","reference_id":"ext_123","time_zone":"America/New_York"},"completed_at":null,"created_at":"2026-02-22T10:00:00Z","end_at":{"local":"2026-02-23T10:30:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1771947000,"utc":"2026-02-23T15:30:00Z"},"hold_duration":"PT10M","hold_enabled":true,"hold_until":"2026-02-22T10:10:00Z","id":"bi_abc123def456abc123def456","locked_fields":["provider_id","start_at","end_at","time_zone"],"metadata":{"source":"web"},"object":"booking_intent","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"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}},"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","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"},"start_at":{"local":"2026-02-23T10:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1771945200,"utc":"2026-02-23T15:00:00Z"},"status":"slot_selected","updated_at":"2026-02-22T10:00:00Z"}},"properties":{"data":{"$ref":"#/components/schemas/BookingIntent"}},"required":["data"],"title":"BookingIntentResponse","type":"object"},"Role":{"description":"This is an object representing a role in the system.","example":{"id":"role_123456789012","name":"Admin","object":"role","type":"admin"},"properties":{"id":{"description":"Unique identifier for the role.","pattern":"^role_\\w{12}$","type":"string"},"name":{"description":"The name of the role.","type":"string"},"object":{"description":"String representing the object's type.","enum":["role"],"type":"string"},"type":{"description":"The type of the role.","enum":["admin","staff","developer","superuser","custom"],"type":"string"}},"required":["id","name","type","object"],"title":"Role","type":"object","x-tags":["Roles"]},"AppointmentDeletedEventData":{"description":"This is an object representing data for the appointment deleted event.","example":{"object":{"appointment_type":"in_person","cancellation_events":[{"actor":null,"cancellation_reason":{"id":"cr_a1b2c3d4e5f6","name":"Distance too far","object":"cancellation_reason","sort_order":1},"custom_reason_text":"I'm sick","initiated_by":"client","object":"cancellation_event","occurred_at":"2023-01-01T03:00:00Z","source":"client_ui"}],"client":{"created_at":"2025-01-15T14:30:00Z","email":"jane.smith@example.com","first_name":"Jane","id":"clnt_a1b2c3d4e5f6","last_name":"Smith","locale":"en-US","metadata":{"external_id":"123"},"object":"client","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago","updated_at":"2025-03-10T09:45:00Z"},"client_data":{"email":"jane.smith@example.com","first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirmation_events":[{"actor":null,"end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"initiated_by":"client","object":"confirmation_event","occurred_at":"2023-01-01T03:00:00Z","source":"client_ui","start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"}}],"confirmed_at":"2025-03-10T15:30:00Z","created_at":"2025-03-10T14:30:00Z","end_at":{"local":"2025-03-01T11:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2025-03-01T04:00:00Z"},"id":"appt_a1b2c3d4e5f6","object":"appointment","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"reschedule_events":[{"actor":null,"initiated_by":"client","new_end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"new_start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"},"object":"reschedule_event","occurred_at":"2023-01-01T03:00:00Z","previous_end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"previous_start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"},"source":"client_ui"}],"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}},"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","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"},"start_at":{"local":"2025-03-01T10:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2025-03-01T03:00:00Z"},"status":"scheduled","updated_at":"2025-03-10T14:30:00Z","urls":{"add_to_google_calendar":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/reschedule"]}},"type":"appointment.deleted"},"properties":{"object":{"$ref":"#/components/schemas/Appointment"},"type":{"description":"The event type.","enum":["appointment.deleted"],"type":"string"}},"required":["type","object"],"title":"AppointmentDeletedEventData","type":"object","x-account-event-data":true},"ClientCreatedEventData":{"description":"This is an object representing data for the client created event.","example":{"object":{"created_at":"2025-01-15T14:30:00Z","email":"jane.smith@example.com","first_name":"Jane","id":"clnt_a1b2c3d4e5f6","last_name":"Smith","locale":"en-US","metadata":{"external_id":"123"},"object":"client","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago","updated_at":"2025-03-10T09:45:00Z"},"type":"client.created"},"properties":{"object":{"$ref":"#/components/schemas/Client"},"type":{"description":"The event type.","enum":["client.created"],"type":"string"}},"required":["type","object"],"title":"ClientCreatedEventData","type":"object","x-account-event-data":true},"UnauthorizedResponse":{"description":"Response schema for unauthorized requests","example":{"errors":[{"detail":"Unauthorized","status":"401"}]},"properties":{"errors":{"items":{"properties":{"detail":{"description":"Error message","type":"string"},"status":{"description":"HTTP status code","type":"string"},"title":{"description":"Error title","type":"string"}},"required":["detail"],"type":"object"},"type":"array"}},"required":["errors"],"title":"UnauthorizedResponse","type":"object"},"CreatePublicAppointmentRequest":{"description":"Request schema for creating an appointment via a public interface.","example":{"client_data":{"email":"john.doe@example.com","first_name":"John","last_name":"Doe","locale":"en-US","phone":"+15551234567","reference_id":"1234567890","time_zone":"America/New_York"},"end_at":"2025-03-01T11:00:00-05:00","service_id":"srv_1234567890","start_at":"2025-03-01T10:00:00-05:00","time_zone":"America/New_York"},"properties":{"client_data":{"description":"Information about the client booking the appointment. You can either provide an `id` or `reference_id` for an existing client,\nor provide a new client's details.\n","properties":{"email":{"description":"The client's email address. Required if no existing client is provided.","format":"email","nullable":true,"type":"string"},"first_name":{"description":"The client's first name. Required if no existing client is provided.","nullable":true,"type":"string"},"id":{"description":"The ID of an existing client to attach to the appointment. If not provided, a new client will be created\nif the `reference_id` does not correspond to an existing client. If there does exist a client with\nthe `reference_id` provided, the existing client will be attached to the appointment.\n","nullable":true,"type":"string"},"last_name":{"description":"The client's last name. Required if no existing client is provided.","nullable":true,"type":"string"},"locale":{"description":"The locale of the client booking the appointment.","example":"en-US","nullable":true,"type":"string"},"phone":{"description":"The client's phone number (E.164 format).","example":"+1234567890","nullable":true,"type":"string"},"reference_id":{"description":"External reference identifier for the client.","nullable":true,"type":"string"},"time_zone":{"description":"The client's time zone (IANA format). This field will be used to represent the appointment time slot in the client's local time zone (in the event that it differs from the appointment's local time zone).","example":"America/New_York","type":"string"}},"required":["time_zone"],"type":"object"},"end_at":{"description":"The end time of the appointment as an ISO-8601 datetime string with a timezone offset (e.g., `2025-03-01T11:00:00-05:00` or `2025-03-01T16:00:00Z`). The `time_zone` field determines the canonical timezone.","example":"2025-03-01T11:00:00-05:00","format":"date-time","type":"string"},"provider_id":{"description":"The ID of the provider to assign to the appointment. If not provided, an available provider will be randomly assigned.","nullable":true,"type":"string"},"service_id":{"description":"The ID of the service for this appointment.","type":"string"},"start_at":{"description":"The start time of the appointment as an ISO-8601 datetime string with a timezone offset (e.g., `2025-03-01T10:00:00-05:00` or `2025-03-01T15:00:00Z`). The `time_zone` field determines the canonical timezone.","example":"2025-03-01T10:00:00-05:00","format":"date-time","type":"string"},"time_zone":{"description":"The local time zone for the appointment (IANA format).","example":"America/New_York","type":"string"}},"required":["service_id","start_at","end_at","time_zone","client_data"],"title":"CreatePublicAppointmentRequest","type":"object"},"UpdateCancellationReasonRequest":{"description":"Request schema for updating a cancellation reason","example":{"name":"I'm no longer interested"},"properties":{"name":{"description":"The cancellation reason's name.","type":"string"}},"title":"UpdateCancellationReasonRequest","type":"object"},"BlockResponse":{"description":"Response schema for a block","example":{"data":{"all_day":false,"attachment_type":"provider","attachments":["prov_d025a96ac0c6"],"created_at":"2017-09-12T12:34:55Z","end_date":"2025-10-27","end_time":"17:00","exception_dates":["2025-10-27T09:00:00"],"id":"blk_d025a96ac0c6","object":"block","recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"service_id":null,"start_date":"2025-10-27","start_time":"09:00","time_zone":"America/New_York","title":"Team Meeting","updated_at":"2017-09-13T10:11:12Z"}},"properties":{"data":{"$ref":"#/components/schemas/Block"}},"required":["data"],"title":"BlockResponse","type":"object"},"JsonErrorResponse":{"description":"Response schema for validation errors","properties":{"errors":{"items":{"properties":{"code":{"description":"Machine-readable error code (e.g. slot_unavailable, no_available_provider, time_range_conflict)","example":"slot_unavailable","nullable":true,"type":"string"},"detail":{"example":"is not available","type":"string"},"source":{"properties":{"pointer":{"example":"/start_at","type":"string"}},"required":["pointer"],"type":"object"},"title":{"example":"Invalid value","type":"string"}},"required":["title","source","detail"],"type":"object"},"type":"array"}},"required":["errors"],"title":"JsonErrorResponse","type":"object"},"Appointment":{"description":"An appointment represents a booking that a client has made with a provider for a service.\n","example":{"appointment_type":"in_person","cancellation_events":[{"actor":null,"cancellation_reason":{"id":"cr_a1b2c3d4e5f6","name":"Distance too far","object":"cancellation_reason","sort_order":1},"custom_reason_text":"I'm sick","initiated_by":"client","object":"cancellation_event","occurred_at":"2023-01-01T03:00:00Z","source":"client_ui"}],"client":{"created_at":"2025-01-15T14:30:00Z","email":"jane.smith@example.com","first_name":"Jane","id":"clnt_a1b2c3d4e5f6","last_name":"Smith","locale":"en-US","metadata":{"external_id":"123"},"object":"client","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago","updated_at":"2025-03-10T09:45:00Z"},"client_data":{"email":"jane.smith@example.com","first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirmation_events":[{"actor":null,"end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"initiated_by":"client","object":"confirmation_event","occurred_at":"2023-01-01T03:00:00Z","source":"client_ui","start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"}}],"confirmed_at":"2025-03-10T15:30:00Z","created_at":"2025-03-10T14:30:00Z","end_at":{"local":"2025-03-01T11:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2025-03-01T04:00:00Z"},"id":"appt_a1b2c3d4e5f6","object":"appointment","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"reschedule_events":[{"actor":null,"initiated_by":"client","new_end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"new_start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"},"object":"reschedule_event","occurred_at":"2023-01-01T03:00:00Z","previous_end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"previous_start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"},"source":"client_ui"}],"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}},"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","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"},"start_at":{"local":"2025-03-01T10:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2025-03-01T03:00:00Z"},"status":"scheduled","updated_at":"2025-03-10T14:30:00Z","urls":{"add_to_google_calendar":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/reschedule"]}},"properties":{"appointment_type":{"description":"The type of appointment.","enum":["in_person","virtual"],"type":"string"},"cancellation_events":{"items":{"$ref":"#/components/schemas/CancellationEvent"},"type":"array"},"client":{"$ref":"#/components/schemas/Client"},"client_data":{"description":"Client data provided while creating the appointment. Some fields will be `null` unless `include_sensitive` is `true`.","properties":{"email":{"description":"The client's email address. This field will be `null` unless `include_sensitive` is `true`.","format":"email","nullable":true,"type":"string"},"first_name":{"description":"The client's first name. This field will be `null` unless `include_sensitive` is `true`.","nullable":true,"type":"string"},"last_name":{"description":"The client's last name. This field will be `null` unless `include_sensitive` is `true`.","nullable":true,"type":"string"},"locale":{"description":"The locale of the client booking the appointment.","example":"en-US","nullable":true,"type":"string"},"phone":{"description":"The client's phone number (E.164 format). This field will be `null` unless `include_sensitive` is `true`.","nullable":true,"type":"string"},"reference_id":{"description":"The client's external reference identifier.","nullable":true,"type":"string"},"time_zone":{"description":"The client's time zone (IANA format).","example":"America/Chicago","type":"string"}},"required":["reference_id","time_zone","locale"],"type":"object"},"confirmation_events":{"items":{"$ref":"#/components/schemas/ConfirmationEvent"},"type":"array"},"confirmed_at":{"description":"Time at which the object was confirmed.","format":"date-time","nullable":true,"type":"string"},"created_at":{"description":"Time at which the object was created.","format":"date-time","type":"string"},"end_at":{"$ref":"#/components/schemas/ZonedDateTime"},"id":{"description":"Unique identifier for the object.","pattern":"^appt_\\w{12}$","type":"string"},"object":{"description":"String representing the object's type.","enum":["appointment"],"type":"string"},"provider":{"$ref":"#/components/schemas/Provider"},"reschedule_events":{"items":{"$ref":"#/components/schemas/RescheduleEvent"},"type":"array"},"service":{"$ref":"#/components/schemas/Service"},"start_at":{"$ref":"#/components/schemas/ZonedDateTime"},"status":{"description":"The status of the appointment.","enum":["scheduled","canceled"],"type":"string"},"updated_at":{"description":"Time at which the object was last updated.","format":"date-time","type":"string"},"urls":{"description":"URLs for this appointment.","properties":{"add_to_calendar":{"description":"URLs for the client to use to add this appointment to their calendar.","items":{"format":"uri","type":"string"},"type":"array"},"add_to_google_calendar":{"description":"URLs for the client to use to add this appointment to Google Calendar.","items":{"format":"uri","type":"string"},"type":"array"},"cancel":{"description":"URLs for the client to use to cancel this appointment.","items":{"format":"uri","type":"string"},"type":"array"},"confirm":{"description":"URLs for the client to use to confirm this appointment.","items":{"format":"uri","type":"string"},"type":"array"},"ics":{"description":"URLs for the client to use to download an iCal file for this appointment.","items":{"format":"uri","type":"string"},"type":"array"},"join":{"description":"URLs for the client to use to join this appointment.","items":{"format":"uri","type":"string"},"type":"array"},"reschedule":{"description":"URLs for the client to use to reschedule this appointment.","items":{"format":"uri","type":"string"},"type":"array"}},"required":["reschedule","cancel","confirm","join","add_to_google_calendar","ics"],"type":"object"}},"required":["object","appointment_type","status","confirmed_at","created_at","id","client","client_data","start_at","end_at","provider","service","reschedule_events","cancellation_events","confirmation_events"],"title":"Appointment","type":"object","x-tags":["Appointments"]},"ProviderDeactivatedEventData":{"description":"This is an object representing data for the provider deactivated event.","example":{"object":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"type":"provider.deactivated"},"properties":{"object":{"$ref":"#/components/schemas/Provider"},"type":{"description":"The event type.","enum":["provider.deactivated"],"type":"string"}},"required":["type","object"],"title":"ProviderDeactivatedEventData","type":"object","x-account-event-data":true},"PublicAppointmentResponse":{"description":"Response schema for a single appointment created via a public interface.","example":{"data":{"cancellation":{"allowed":true,"disabled_message":null},"confirmed_at":"2025-03-10T15:30:00Z","end_at":{"local":"2025-03-01T11:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2025-03-01T04:00:00Z"},"id":"appt_a1b2c3d4e5f6","object":"public_appointment","rescheduling":{"allowed":false,"disabled_message":"Rescheduling is not available within 24 hours of your appointment"},"start_at":{"local":"2025-03-01T10:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2025-03-01T03:00:00Z"},"status":"scheduled","urls":{"add_to_calendar":["https://example.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar"],"add_to_google_calendar":["https://example.com/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://example.com/c/appointments/appt_a1b2c3d4e5f6/cancel"],"ics":["https://example.com/c/appointments/appt_a1b2c3d4e5f6/ics"],"reschedule":["https://example.com/c/appointments/appt_a1b2c3d4e5f6/reschedule"]}}},"properties":{"data":{"$ref":"#/components/schemas/PublicAppointment"}},"required":["data"],"title":"PublicAppointmentResponse","type":"object"},"ServiceProviderCreatedEventData":{"description":"This is an object representing data for the service provider created event.","example":{"object":{"created_at":"2025-02-19T17:36:36Z","id":"sp_d025a96ac0c6","object":"service_provider","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"service_id":"srv_d025a96ac0c6","updated_at":"2025-02-19T17:36:36Z"},"type":"service_provider.created"},"properties":{"object":{"$ref":"#/components/schemas/ServiceProvider"},"type":{"description":"The event type.","enum":["service_provider.created"],"type":"string"}},"required":["type","object"],"title":"ServiceProviderCreatedEventData","type":"object","x-account-event-data":true},"AggregatedSlot":{"description":"An aggregated time slot with start, end times and count","example":{"count":3,"end_at":"2025-03-10T10:00:00-04:00","end_at_ts":1736464800,"object":"aggregated_slot","start_at":"2025-03-10T09:00:00-04:00","start_at_ts":1736461200,"time_zone":"America/New_York"},"properties":{"count":{"type":"integer"},"end_at":{"format":"date-time","type":"string"},"end_at_ts":{"description":"Unix timestamp in seconds","type":"integer"},"object":{"description":"String representing the object's type.","enum":["aggregated_slot"],"type":"string"},"start_at":{"format":"date-time","type":"string"},"start_at_ts":{"description":"Unix timestamp in seconds","type":"integer"},"time_zone":{"description":"IANA time zone name","type":"string"}},"required":["object","start_at","end_at","count","time_zone"],"title":"AggregatedSlot","type":"object"},"AccountUsersResponse":{"description":"Response schema for multiple account users","example":{"data":[{"object":"account_user","passive":false,"roles":[{"id":"role_123456789012","name":"Admin","object":"role","type":"admin"}],"user":{"created_at":"2025-03-15T13:01:08Z","email":"avery@tendermedical.com","first_name":"Avery","id":"user_d025a96ac0c6","last_name":"Evans","object":"user","updated_at":"2025-03-15T13:01:08Z"}}]},"properties":{"data":{"description":"The account users details","items":{"$ref":"#/components/schemas/AccountUser"},"type":"array"}},"title":"AccountUsersResponse","type":"object"},"ServiceCreatedEventData":{"description":"This is an object representing data for the service created event.","example":{"object":{"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}},"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","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"},"type":"service.created"},"properties":{"object":{"$ref":"#/components/schemas/Service"},"type":{"description":"The event type.","enum":["service.created"],"type":"string"}},"required":["type","object"],"title":"ServiceCreatedEventData","type":"object","x-account-event-data":true},"ConnectedAccount":{"description":"This is an object representing a connected external account (e.g., a Google Calendar or Microsoft 365 integration).","example":{"connection_scope":"user","created_at":"2025-03-12T12:34:55Z","display_name":"John Doe","email":"user@example.com","external_account_id":null,"external_subject":"123456789","id":"cact_d025a96ac0c6","object":"connected_account","provider":"google","status":"active","updated_at":"2025-03-13T10:11:12Z","user_id":"user_d025a96ac0c6"},"properties":{"connection_scope":{"description":"The scope of this connection. 'user' means owned by a specific user, 'account' means shared across the account.","enum":["user","account"],"type":"string"},"created_at":{"description":"Time at which the object was created.","format":"date-time","type":"string"},"display_name":{"description":"The display name from the provider.","nullable":true,"type":"string"},"email":{"description":"The email address associated with this connected account.","type":"string"},"external_account_id":{"description":"The unique identifier for the organization at the provider (e.g., Zoom account number).","nullable":true,"type":"string"},"external_subject":{"description":"The unique identifier for this account at the provider.","type":"string"},"id":{"description":"Unique identifier for the object.","pattern":"^cact_\\w{12}$","type":"string"},"object":{"description":"String representing the object's type.","enum":["connected_account"],"type":"string"},"provider":{"description":"The provider for this connected account.","enum":["google","microsoft","zoom_admin"],"type":"string"},"status":{"description":"The current status of the connection. 'active' means the connection is working, 'reconnect_required' means the OAuth token has failed and needs reauthorization, 'insufficient_permissions' means the user did not grant all required OAuth scopes.","enum":["active","reconnect_required","insufficient_permissions"],"type":"string"},"updated_at":{"description":"Time at which the object was last updated.","format":"date-time","type":"string"},"user_id":{"description":"The ID of the user who owns this connected account.","nullable":true,"type":"string"}},"required":["object","id","provider","email","display_name","external_subject","external_account_id","connection_scope","status","user_id","created_at","updated_at"],"title":"ConnectedAccount","type":"object","x-tags":["Connected Accounts"]},"BookingIntent":{"description":"A booking intent that tracks the lifecycle of a booking attempt.","example":{"abandoned_at":null,"appointment":null,"client":null,"client_data":{"email":"jane@example.com","first_name":"Jane","last_name":"Doe","locale":"en","phone":"+15551234567","reference_id":"ext_123","time_zone":"America/New_York"},"completed_at":null,"created_at":"2026-02-22T10:00:00Z","end_at":{"local":"2026-02-23T10:30:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1771947000,"utc":"2026-02-23T15:30:00Z"},"hold_duration":"PT10M","hold_enabled":true,"hold_until":"2026-02-22T10:10:00Z","id":"bi_abc123def456abc123def456","locked_fields":["provider_id","start_at","end_at","time_zone"],"metadata":{"source":"web"},"object":"booking_intent","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"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}},"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","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"},"start_at":{"local":"2026-02-23T10:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1771945200,"utc":"2026-02-23T15:00:00Z"},"status":"slot_selected","updated_at":"2026-02-22T10:00:00Z"},"properties":{"abandoned_at":{"description":"When the intent was abandoned","format":"date-time","nullable":true,"type":"string"},"appointment":{"anyOf":[{"$ref":"#/components/schemas/Appointment"}],"description":"The linked appointment (set when completed)","nullable":true},"client":{"anyOf":[{"$ref":"#/components/schemas/Client"}],"description":"The linked client","nullable":true},"client_data":{"description":"Progressive client data collected during the booking flow. Sensitive fields (first_name, last_name, email, phone) are redacted unless include_sensitive is true.","nullable":true,"properties":{"email":{"nullable":true,"type":"string"},"first_name":{"nullable":true,"type":"string"},"last_name":{"nullable":true,"type":"string"},"locale":{"nullable":true,"type":"string"},"phone":{"nullable":true,"type":"string"},"reference_id":{"nullable":true,"type":"string"},"time_zone":{"nullable":true,"type":"string"}},"type":"object"},"completed_at":{"description":"When the intent was completed","format":"date-time","nullable":true,"type":"string"},"created_at":{"description":"When the intent was created","format":"date-time","type":"string"},"end_at":{"anyOf":[{"$ref":"#/components/schemas/ZonedDateTime"}],"description":"The end time of the selected slot","nullable":true},"hold_duration":{"description":"The hold duration as an ISO 8601 duration string (e.g., PT10M)","nullable":true,"type":"string"},"hold_enabled":{"description":"Whether slot holding is enabled","type":"boolean"},"hold_until":{"description":"When the hold expires (UTC)","format":"date-time","nullable":true,"type":"string"},"id":{"description":"The booking intent ID","pattern":"^bi_\\w{24}$","type":"string"},"locked_fields":{"description":"Fields that are locked and cannot be updated via the public API. Possible values: service_id, provider_id, start_at, end_at, time_zone, client_data.","items":{"type":"string"},"type":"array"},"metadata":{"additionalProperties":true,"description":"Custom metadata key-value pairs","type":"object"},"object":{"description":"The object type","enum":["booking_intent"],"type":"string"},"provider":{"anyOf":[{"$ref":"#/components/schemas/Provider"}],"description":"The assigned provider","nullable":true},"service":{"anyOf":[{"$ref":"#/components/schemas/Service"}],"description":"The selected service","nullable":true},"slot_prevalidated":{"description":"Whether the slot has been prevalidated. When true, public completion skips slot validation.","type":"boolean"},"start_at":{"anyOf":[{"$ref":"#/components/schemas/ZonedDateTime"}],"description":"The start time of the selected slot","nullable":true},"status":{"description":"The current status of the booking intent","enum":["pending","slot_selected","completed","abandoned"],"type":"string"},"updated_at":{"description":"When the intent was last updated","format":"date-time","type":"string"}},"required":["object","id","status","hold_enabled","created_at","updated_at"],"title":"BookingIntent","type":"object","x-tags":["Booking Intents"]},"CreateServiceRequest":{"description":"Request schema for creating a service.","example":{"appointment_type":"virtual","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}},"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.","duration":"PT1H30M","internal_name":"IC - New Patient","metadata":{"external_id":"123"},"name":"Initial Consult","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"]}]},"properties":{"appointment_type":{"description":"The type of appointment.","enum":["in_person","virtual"],"type":"string"},"booking_policy":{"$ref":"#/components/schemas/BookingPolicy"},"cancellation_policy":{"$ref":"#/components/schemas/CancellationPolicy"},"change_policy_text":{"description":"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.","type":"string"},"duration":{"description":"The duration of time slots in [ISO-8601 duration format](https://en.wikipedia.org/wiki/ISO_8601#Durations).","example":"PT1H30M","pattern":"^PT(?:(\\d+)H)?(?:(\\d+)M)?$","type":"string"},"internal_name":{"description":"An optional internal label for admin use. When set, this is displayed in the admin UI instead of the public name.","nullable":true,"type":"string"},"metadata":{"additionalProperties":true,"description":"Set of key-value pairs to attach to this service. Maximum size is 16 KB.","type":"object"},"name":{"description":"The service name.","type":"string"},"provider_notifications":{"$ref":"#/components/schemas/ProviderNotificationConfig"},"rescheduling_policy":{"$ref":"#/components/schemas/ReschedulingPolicy"},"slot_rules":{"description":"Array of slot rules for the service.","items":{"$ref":"#/components/schemas/SlotRule"},"type":"array"}},"required":["name"],"title":"CreateServiceRequest","type":"object"},"AppointmentCreatedEventData":{"description":"This is an object representing data for the appointment created event.","example":{"object":{"appointment_type":"in_person","cancellation_events":[{"actor":null,"cancellation_reason":{"id":"cr_a1b2c3d4e5f6","name":"Distance too far","object":"cancellation_reason","sort_order":1},"custom_reason_text":"I'm sick","initiated_by":"client","object":"cancellation_event","occurred_at":"2023-01-01T03:00:00Z","source":"client_ui"}],"client":{"created_at":"2025-01-15T14:30:00Z","email":"jane.smith@example.com","first_name":"Jane","id":"clnt_a1b2c3d4e5f6","last_name":"Smith","locale":"en-US","metadata":{"external_id":"123"},"object":"client","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago","updated_at":"2025-03-10T09:45:00Z"},"client_data":{"email":"jane.smith@example.com","first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirmation_events":[{"actor":null,"end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"initiated_by":"client","object":"confirmation_event","occurred_at":"2023-01-01T03:00:00Z","source":"client_ui","start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"}}],"confirmed_at":"2025-03-10T15:30:00Z","created_at":"2025-03-10T14:30:00Z","end_at":{"local":"2025-03-01T11:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2025-03-01T04:00:00Z"},"id":"appt_a1b2c3d4e5f6","object":"appointment","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","first_name":"John","id":"prov_d025a96ac0c6","last_name":"Smith","metadata":{"external_id":"123"},"object":"provider","updated_at":"2017-09-13T10:11:12Z"},"reschedule_events":[{"actor":null,"initiated_by":"client","new_end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"new_start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"},"object":"reschedule_event","occurred_at":"2023-01-01T03:00:00Z","previous_end_at":{"local":"2023-01-01T01:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736464800,"utc":"2023-01-01T04:00:00Z"},"previous_start_at":{"local":"2023-01-01T00:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2023-01-01T03:00:00Z"},"source":"client_ui"}],"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}},"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","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"},"start_at":{"local":"2025-03-01T10:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2025-03-01T03:00:00Z"},"status":"scheduled","updated_at":"2025-03-10T14:30:00Z","urls":{"add_to_google_calendar":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://savvycal.app/c/appointments/appt_a1b2c3d4e5f6/reschedule"]}},"type":"appointment.created"},"properties":{"object":{"$ref":"#/components/schemas/Appointment"},"type":{"description":"The event type.","enum":["appointment.created"],"type":"string"}},"required":["type","object"],"title":"AppointmentCreatedEventData","type":"object","x-account-event-data":true},"RescheduleAppointmentRequest":{"description":"Request schema for rescheduling an appointment","example":{"end_at":"2025-03-01T11:00:00-05:00","initiated_by":"client","provider_id":"prv_1234567890","start_at":"2025-03-01T10:00:00-05:00","time_zone":"America/New_York"},"properties":{"end_at":{"description":"The new end time of the appointment as an ISO-8601 datetime string with a timezone offset (e.g., `2025-03-01T11:00:00-05:00` or `2025-03-01T16:00:00Z`). The `time_zone` field determines the canonical timezone.","example":"2025-03-01T11:00:00-05:00","format":"date-time","type":"string"},"initiated_by":{"default":"client","description":"The entity that initiated the reschedule.","enum":["user","client"],"type":"string"},"provider_id":{"description":"The ID of the provider to assign to the appointment. If not provided, the provider assigned to the original appointment will be used.","nullable":true,"type":"string"},"start_at":{"description":"The new start time of the appointment as an ISO-8601 datetime string with a timezone offset (e.g., `2025-03-01T10:00:00-05:00` or `2025-03-01T15:00:00Z`). The `time_zone` field determines the canonical timezone.","example":"2025-03-01T10:00:00-05:00","format":"date-time","type":"string"},"time_zone":{"description":"The local time zone for the appointment (IANA format).","example":"America/New_York","type":"string"}},"required":["start_at","end_at","time_zone"],"title":"RescheduleAppointmentRequest","type":"object"},"CreateClientRequest":{"description":"Request schema for creating a client","example":{"email":"john.smith@tendermedical.com","first_name":"John","last_name":"Smith","locale":"en","metadata":{"external_id":"123"},"phone":"+15551234567","reference_id":"your-reference-id","time_zone":"America/New_York"},"properties":{"email":{"description":"The client's email address.","type":"string"},"first_name":{"description":"The client's first name.","type":"string"},"last_name":{"description":"The client's last name.","type":"string"},"locale":{"description":"The client's locale.","type":"string"},"metadata":{"additionalProperties":true,"description":"Set of key-value pairs to attach to this client. Maximum size is 16 KB.","type":"object"},"phone":{"description":"The client's phone number (E.164 format).","type":"string"},"reference_id":{"description":"The client's external reference identifier.","type":"string"},"time_zone":{"description":"The client's time zone (IANA format).","type":"string"}},"required":["first_name","last_name","email","time_zone"],"title":"CreateClientRequest","type":"object"},"ZonedDateTime":{"description":"An object describing a date/time in local time and in UTC.","example":{"local":"2025-03-01T10:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736461200,"utc":"2025-03-01T03:00:00Z"},"properties":{"local":{"description":"The local date/time in ISO-8601 format, including the UTC offset (e.g., `2025-03-01T10:00:00-05:00`).","example":"2025-03-01T10:00:00-05:00","format":"date-time","type":"string"},"object":{"description":"String representing the object's type.","enum":["zoned_date_time"],"type":"string"},"time_zone":{"description":"The time zone of the local time (IANA format).","example":"America/New_York","type":"string"},"unix_ts":{"description":"The UTC date/time in Unix timestamp format (seconds).","example":1736461200,"type":"integer"},"utc":{"description":"The UTC date/time in ISO-8601 format (with time zone information).","example":"2025-03-01T03:00:00Z","format":"date-time","type":"string"}},"required":["object","local","utc","time_zone","unix_ts"],"title":"ZonedDateTime","type":"object"}},"securitySchemes":{"authorization":{"scheme":"bearer","type":"http"}}},"info":{"title":"SavvyCal Appointments API","version":"1.0"},"openapi":"3.0.0","paths":{"/v1/appointments/{appointment_id}":{"get":{"callbacks":{},"description":"Get an existing appointment.","operationId":"getAppointment","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Appointment ID","in":"path","name":"appointment_id","required":true,"schema":{"type":"string"}},{"description":"Whether to include sensitive fields (such as client name, email, and phone)","in":"query","name":"include_sensitive","required":false,"schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppointmentResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Get appointment","tags":["Appointments"]}},"/v1/booking_intents/{booking_intent_id}":{"get":{"callbacks":{},"description":"Get an existing booking intent.","operationId":"getBookingIntent","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Booking Intent ID","in":"path","name":"booking_intent_id","required":true,"schema":{"type":"string"}},{"description":"Whether to include sensitive fields (such as client name, email, and phone)","in":"query","name":"include_sensitive","required":false,"schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingIntentResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"}},"summary":"Get booking intent","tags":["Booking Intents"]},"patch":{"callbacks":{},"description":"Update an existing booking intent.\n\nAccepts slot fields, client data, and metadata. When all slot fields\n(provider_id, start_at, end_at, time_zone) are present, automatically\ntransitions to `slot_selected`. Cannot update intents in terminal status\n(completed or abandoned).\n","operationId":"updateBookingIntent","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Booking Intent ID","in":"path","name":"booking_intent_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBookingIntentRequest"}}},"description":"Update booking intent params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingIntentResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Update booking intent","tags":["Booking Intents"]}},"/v1/dashboard_sessions":{"post":{"callbacks":{},"description":"The Dashboard Sessions API allows you to generate a short-lived session link\nthat grants an account member access to the dashboard without requiring login credentials.\nThis is useful for creating seamless, secure login experiences from external systems or integrations.\n\nBefore you can generate a session link for someone, you'll need to add them to your SavvyCal account.\nYou can do this by navigating to [Settings → Members & permissions](https://savvycal.app/users)\nand following the instructions to add a new user. Alternatively, you may use the\n[Create account user API](https://developers.savvycal.app/api/create-account-user) to add them\nprogrammatically.\n\nThe `user_id` property property can be retrieved from the [List account users API](https://developers.savvycal.app/api/list-account-users),\nor by copying it directly from the [Settings → Members & permissions](https://savvycal.app/users) page.\n\nTo sign the user in, redirect the browser to the dashboard session `url` returned in the response.\n\n## Example Flow\n\n1. User clicks a button in your application to \"Manage appointments\".\n2. Your application receives this request and creates a dashboard session via the API.\n3. Your application redirects the user to the dashboard session URL.\n4. The user is automatically signed in to the dashboard and redirected to the home screen.\n","operationId":"createDashboardSession","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDashboardSessionRequest"}}},"description":"Dashboard session params","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardSessionResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Create dashboard session","tags":["Dashboard Sessions"]}},"/v1/accounts":{"get":{"callbacks":{},"description":"List all accounts associated with the current platform (requires a platform token).","operationId":"listAccounts","parameters":[{"description":"Page number","in":"query","name":"page","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"Number of items per page","in":"query","name":"page_size","required":false,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountsResponse"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericErrorResponse"}}},"description":"GenericError"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"List accounts","tags":["Accounts"]},"post":{"callbacks":{},"description":"Create a new account (requires a platform token).","operationId":"createAccount","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAccountRequest"}}},"description":"Account params","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountResponse"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericErrorResponse"}}},"description":"GenericError"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Create account","tags":["Accounts"]}},"/v1/booking_intents/{booking_intent_id}/complete":{"post":{"callbacks":{},"description":"Complete a booking intent by creating an appointment from the accumulated\nintent data.\n\nUpdate fields (service_id, provider_id, client_id, slot fields, client_data,\nmetadata) may be provided inline alongside `validate_slot`. These updates are\napplied atomically before completion — if the update or completion fails, the\nentire operation is rolled back.\n\nRequires the intent to be in `slot_selected` status with a service assigned\n(either before or after applying inline updates).\n","operationId":"completeBookingIntent","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Booking Intent ID","in":"path","name":"booking_intent_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteBookingIntentRequest"}}},"description":"Complete booking intent params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingIntentResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Complete booking intent","tags":["Booking Intents"]}},"/v1/provider_schedules/{provider_schedule_id}":{"delete":{"callbacks":{},"description":"Delete an existing provider schedule.","operationId":"deleteProviderSchedule","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Provider schedule ID","in":"path","name":"provider_schedule_id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"content":{"text/plain":{"schema":{"description":"Empty response with no content","example":"","title":"EmptyResponse","type":"string"}}},"description":"No Content"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"}},"summary":"Delete provider schedule","tags":["Provider Schedules"]},"get":{"callbacks":{},"description":"Get a provider schedule by ID.","operationId":"getProviderSchedule","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Provider schedule ID","in":"path","name":"provider_schedule_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderScheduleResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"}},"summary":"Get provider schedule","tags":["Provider Schedules"]},"patch":{"callbacks":{},"description":"Update an existing provider schedule.","operationId":"updateProviderSchedule","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProviderScheduleRequest"}}},"description":"Provider schedule params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderScheduleResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Update provider schedule","tags":["Provider Schedules"]}},"/v1/public/appointments":{"post":{"callbacks":{},"description":"Create a new appointment via a public interface (no authentication required).\n\nYou can find available time slots using the [List available time slots](/api/list-public-service-slots) endpoint.\n","operationId":"createPublicAppointment","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePublicAppointmentRequest"}}},"description":"Create public appointment params","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicAppointmentResponse"}}},"description":"Success"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Create appointment","tags":["Public Booking"]}},"/v1/users/{user_id}":{"patch":{"callbacks":{},"description":"Update a user's settings in the specified account.","operationId":"updateAccountUser","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"The user's unique identifier","example":"user_abcdef123456","in":"path","name":"user_id","required":true,"schema":{"pattern":"^user_\\w{12}$","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAccountUserRequest"}}},"description":"User update details","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountUserResponse"}}},"description":"User updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericErrorResponse"}}},"description":"GenericError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Update account user","tags":["Account Users"]}},"/v1/clients/{client_id}":{"delete":{"callbacks":{},"description":"Deletes an existing client.","operationId":"deleteClient","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Client ID","in":"path","name":"client_id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"content":{"text/plain":{"schema":{"description":"Empty response with no content","example":"","title":"EmptyResponse","type":"string"}}},"description":"No Content"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"}},"summary":"Delete client","tags":["Clients"]},"get":{"callbacks":{},"description":"Get a single client by ID.","operationId":"getClient","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Client ID","in":"path","name":"client_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"}},"summary":"Get client","tags":["Clients"]},"patch":{"callbacks":{},"description":"Update an existing client.","operationId":"updateClient","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Client ID","in":"path","name":"client_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateClientRequest"}}},"description":"Client params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Update client","tags":["Clients"]}},"/v1/booking_intents/{booking_intent_id}/abandon":{"post":{"callbacks":{},"description":"Transition a non-terminal booking intent to `abandoned`.\n\nWorks from both `pending` and `slot_selected` statuses. Cannot abandon\nintents that are already completed or abandoned.\n","operationId":"abandonBookingIntent","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Booking Intent ID","in":"path","name":"booking_intent_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingIntentResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Abandon booking intent","tags":["Booking Intents"]}},"/v1/public/appointments/{appointment_id}":{"get":{"callbacks":{},"description":"Get an existing appointment via a public interface (no authentication required).","operationId":"getPublicAppointment","parameters":[{"description":"Appointment ID","in":"path","name":"appointment_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicAppointmentResponse"}}},"description":"Success"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Get appointment","tags":["Public Booking"]}},"/v1/services/{service_id}":{"delete":{"callbacks":{},"description":"Delete an existing service.","operationId":"deleteService","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Service ID","in":"path","name":"service_id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"content":{"text/plain":{"schema":{"description":"Empty response with no content","example":"","title":"EmptyResponse","type":"string"}}},"description":"No Content"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"}},"summary":"Delete service","tags":["Services"]},"get":{"callbacks":{},"description":"Get a single service by ID.","operationId":"getService","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Service ID","in":"path","name":"service_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"}},"summary":"Get service","tags":["Services"]},"patch":{"callbacks":{},"description":"Update an existing service.","operationId":"updateService","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Service ID","in":"path","name":"service_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateServiceRequest"}}},"description":"Service params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Update service","tags":["Services"]}},"/v1/public/appointments/{appointment_id}/cancel":{"post":{"callbacks":{},"description":"Cancel an existing appointment via a public interface (no authentication required).\n\nThis action will fail with a 403 Forbidden response if cancellation is not allowed for the appointment based on the service's cancellation policy.\n","operationId":"cancelPublicAppointment","parameters":[{"description":"Appointment ID","in":"path","name":"appointment_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelPublicAppointmentRequest"}}},"description":"Cancel appointment params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicAppointmentResponse"}}},"description":"Success"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Cancel appointment","tags":["Public Booking"]}},"/v1/public/appointments/{appointment_id}/cancellation_reasons":{"get":{"callbacks":{},"description":"List all active cancellation reasons that can be used when canceling the specified appointment.","operationId":"listPublicCancellationReasons","parameters":[{"description":"Appointment ID","in":"path","name":"appointment_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCancellationReasonsResponse"}}},"description":"Success"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"List cancellation reasons","tags":["Public Booking"]}},"/v1/public/booking_intents":{"post":{"callbacks":{},"description":"Create a new booking intent via a public interface (no authentication required).\n\nThe `account_id` field is required to identify which account the intent belongs to.\n","operationId":"createPublicBookingIntent","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePublicBookingIntentRequest"}}},"description":"Create public booking intent params","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicBookingIntentResponse"}}},"description":"Success"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Create booking intent","tags":["Public Booking"]}},"/v1/accounts/{account_id}":{"get":{"callbacks":{},"description":"Get the account by ID.","operationId":"getAccountById","parameters":[{"description":"Account ID","in":"path","name":"account_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"}},"summary":"Get account by ID","tags":["Accounts"]},"patch":{"callbacks":{},"description":"Update an existing account.","operationId":"updateAccount","parameters":[{"description":"Account ID","in":"path","name":"account_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAccountRequest"}}},"description":"Account params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Update account","tags":["Accounts"]}},"/v1/services/{service_id}/providers":{"get":{"callbacks":{},"description":"List all providers associated with a service.","operationId":"listServiceProviders","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Service ID","in":"path","name":"service_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceProvidersResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"}},"summary":"List service providers","tags":["Services"]},"post":{"callbacks":{},"description":"Add a provider to the rotation for a specific service.","operationId":"createServiceProvider","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Service ID","in":"path","name":"service_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateServiceProviderRequest"}}},"description":"Service provider params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceProviderResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Add provider to service","tags":["Services"]}},"/v1/services":{"get":{"callbacks":{},"description":"List all services for an account","operationId":"listServices","parameters":[{"description":"Page number","in":"query","name":"page","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"Number of items per page","in":"query","name":"page_size","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Filter services by metadata using bracket notation. See [Metadata Filtering](https://developers.savvycal.app/metadata-filtering) for more details.\n","explode":true,"in":"query","name":"metadata","required":false,"schema":{"additionalProperties":true,"type":"object"},"style":"deepObject"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServicesResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"List services","tags":["Services"]},"post":{"callbacks":{},"description":"Create a new service in the account.","operationId":"createService","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateServiceRequest"}}},"description":"Service params","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Create service","tags":["Services"]}},"/v1/service_providers/{service_provider_id}":{"delete":{"callbacks":{},"description":"Remove a provider from the rotation for a service.","operationId":"deleteServiceProvider","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Service Provider ID","in":"path","name":"service_provider_id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"content":{"text/plain":{"schema":{"description":"Empty response with no content","example":"","title":"EmptyResponse","type":"string"}}},"description":"No Content"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"}},"summary":"Remove service provider","tags":["Services"]}},"/v1/public/services/{service_id}/earliest_slot":{"get":{"callbacks":{},"description":"Get the earliest available time slot for a service, useful for displaying next available appointment.","operationId":"getEarliestPublicServiceSlot","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Service ID","example":"srv_123456789012","in":"path","name":"service_id","required":true,"schema":{"type":"string"}},{"description":"Time zone for the slot (IANA format)","example":"\"America/New_York\"","in":"query","name":"time_zone","required":false,"schema":{"default":"Etc/UTC","type":"string"}},{"deprecated":true,"description":"Filter slot by specific provider ID (deprecated, use provider_ids)","example":"prv_123456789012","in":"query","name":"provider_id","required":false,"schema":{"type":"string"}},{"description":"Filter slots by provider IDs (comma-separated)","example":"prv_123456789012,prv_234567890123","in":"query","name":"provider_ids","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicServiceEarliestSlotResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Get earliest available slot","tags":["Public Booking"]}},"/v1/cancellation_reasons/{cancellation_reason_id}":{"delete":{"callbacks":{},"description":"Delete an existing cancellation reason.","operationId":"deleteCancellationReason","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Cancellation reason ID","in":"path","name":"cancellation_reason_id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"content":{"text/plain":{"schema":{"description":"Empty response with no content","example":"","title":"EmptyResponse","type":"string"}}},"description":"No Content"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"}},"summary":"Delete cancellation reason","tags":["Cancellation Reasons"]},"get":{"callbacks":{},"description":"Get a single cancellation reason by ID.","operationId":"getCancellationReason","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Cancellation reason ID","in":"path","name":"cancellation_reason_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancellationReasonResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"}},"summary":"Get cancellation reason","tags":["Cancellation Reasons"]},"patch":{"callbacks":{},"description":"Update an existing cancellation reason.","operationId":"updateCancellationReason","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Cancellation reason ID","in":"path","name":"cancellation_reason_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCancellationReasonRequest"}}},"description":"Cancellation reason params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancellationReasonResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Update cancellation reason","tags":["Cancellation Reasons"]}},"/v1/appointments/{appointment_id}/confirm":{"post":{"callbacks":{},"description":"Confirm an existing appointment.","operationId":"confirmAppointment","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Appointment ID","in":"path","name":"appointment_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmAppointmentRequest"}}},"description":"Confirm appointment params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppointmentResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Confirm appointment","tags":["Appointments"]}},"/v1/providers/{provider_id}/schedules":{"post":{"callbacks":{},"description":"Create a new provider schedule.","operationId":"createProviderSchedule","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProviderScheduleRequest"}}},"description":"Provider schedule params","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderScheduleResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Create provider schedule","tags":["Provider Schedules"]}},"/v1/public/booking_intents/{booking_intent_id}/complete":{"post":{"callbacks":{},"description":"Complete a booking intent by creating an appointment from the accumulated\nintent data via a public interface (no authentication required).\n\nUpdate fields (service_id, provider_id, slot fields, client_data)\nmay be provided inline. These updates are applied atomically before\ncompletion — if the update or completion fails, the entire operation is\nrolled back.\n","operationId":"completePublicBookingIntent","parameters":[{"description":"Booking Intent ID","in":"path","name":"booking_intent_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompletePublicBookingIntentRequest"}}},"description":"Complete public booking intent params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicBookingIntentResponse"}}},"description":"Success"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Complete booking intent","tags":["Public Booking"]}},"/v1/cancellation_reasons":{"get":{"callbacks":{},"description":"List all cancellation reasons for an account","operationId":"listCancellationReasons","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancellationReasonsResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"List cancellation reasons","tags":["Cancellation Reasons"]},"post":{"callbacks":{},"description":"Create a new cancellation reason in the account.","operationId":"createCancellationReason","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCancellationReasonRequest"}}},"description":"Cancellation reason params","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancellationReasonResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Create cancellation reason","tags":["Cancellation Reasons"]}},"/v1/connected_accounts/{connected_account_id}":{"delete":{"callbacks":{},"description":"Deletes (disconnects) an existing connected account.","operationId":"deleteConnectedAccount","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Connected Account ID","in":"path","name":"connected_account_id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"content":{"text/plain":{"schema":{"description":"Empty response with no content","example":"","title":"EmptyResponse","type":"string"}}},"description":"No Content"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"}},"summary":"Delete connected account","tags":["Connected Accounts"]},"get":{"callbacks":{},"description":"Get a single connected account by ID.","operationId":"getConnectedAccount","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Connected Account ID","in":"path","name":"connected_account_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccountResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"}},"summary":"Get connected account","tags":["Connected Accounts"]},"patch":{"callbacks":{},"description":"Update an existing connected account.","operationId":"updateConnectedAccount","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Connected Account ID","in":"path","name":"connected_account_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateConnectedAccountRequest"}}},"description":"Connected account params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccountResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Update connected account","tags":["Connected Accounts"]}},"/v1/roles":{"get":{"callbacks":{},"description":"List all roles that belong to the specified account.","operationId":"listRoles","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RolesResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"List roles","tags":["Roles"]}},"/v1/clients":{"get":{"callbacks":{},"description":"List all clients that belong to the account.","operationId":"listClients","parameters":[{"description":"Page number","in":"query","name":"page","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"Number of items per page","in":"query","name":"page_size","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Only return clients that match the search query (name or email).","in":"query","name":"search","required":false,"schema":{"type":"string"}},{"description":"Filter clients by metadata using bracket notation. See [Metadata Filtering](https://developers.savvycal.app/metadata-filtering) for more details.\n","explode":true,"in":"query","name":"metadata","required":false,"schema":{"additionalProperties":true,"type":"object"},"style":"deepObject"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientsResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"List clients","tags":["Clients"]},"post":{"callbacks":{},"description":"Create a new client in the account.","operationId":"createClient","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateClientRequest"}}},"description":"Client params","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Create client","tags":["Clients"]}},"/v1/public/booking_intents/{booking_intent_id}":{"get":{"callbacks":{},"description":"Get an existing booking intent via a public interface (no authentication required).","operationId":"getPublicBookingIntent","parameters":[{"description":"Booking Intent ID","in":"path","name":"booking_intent_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicBookingIntentResponse"}}},"description":"Success"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Get booking intent","tags":["Public Booking"]},"patch":{"callbacks":{},"description":"Update an existing booking intent via a public interface (no authentication required).\n\nAccepts slot fields and client data. When all slot fields\n(provider_id, start_at, end_at, time_zone) are present, automatically\ntransitions to `slot_selected`. Cannot update intents in terminal status\n(completed or abandoned).\n","operationId":"updatePublicBookingIntent","parameters":[{"description":"Booking Intent ID","in":"path","name":"booking_intent_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePublicBookingIntentRequest"}}},"description":"Update public booking intent params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicBookingIntentResponse"}}},"description":"Success"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Update booking intent","tags":["Public Booking"]}},"/v1/public/appointments/{appointment_id}/reschedule":{"post":{"callbacks":{},"description":"Reschedule an existing appointment via a public interface (no authentication required).\n\nThe new time slot for the appointment must be available. You can find available time slots using the [List available time slots](/api/list-public-service-slots) endpoint.\n\nThis action will fail with a 403 Forbidden response if rescheduling is not allowed for the appointment based on the service's rescheduling policy.\n","operationId":"reschedulePublicAppointment","parameters":[{"description":"Appointment ID","in":"path","name":"appointment_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReschedulePublicAppointmentRequest"}}},"description":"Reschedule appointment params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicAppointmentResponse"}}},"description":"Success"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Reschedule appointment","tags":["Public Booking"]}},"/v1/booking_intents":{"get":{"callbacks":{},"description":"List all booking intents that belong to the account.","operationId":"listBookingIntents","parameters":[{"description":"Page number","in":"query","name":"page","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"Number of items per page","in":"query","name":"page_size","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Whether to include sensitive fields (such as client name, email, and phone)","in":"query","name":"include_sensitive","required":false,"schema":{"default":false,"type":"boolean"}},{"description":"Filter by status.","in":"query","name":"status","required":false,"schema":{"enum":["pending","slot_selected","completed","abandoned"],"type":"string"}},{"description":"Filter by provider ID(s). Accepts a single ID or comma-delimited list.","in":"query","name":"provider_ids","required":false,"schema":{"type":"string"}},{"description":"Filter by service ID(s). Accepts a single ID or comma-delimited list.","in":"query","name":"service_ids","required":false,"schema":{"type":"string"}},{"description":"Filter by client ID(s). Accepts a single ID or comma-delimited list.","in":"query","name":"client_ids","required":false,"schema":{"type":"string"}},{"description":"Filter by metadata using bracket notation. See [Metadata Filtering](https://developers.savvycal.app/metadata-filtering) for more details.\n","explode":true,"in":"query","name":"metadata","required":false,"schema":{"additionalProperties":true,"type":"object"},"style":"deepObject"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingIntentsResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"List booking intents","tags":["Booking Intents"]},"post":{"callbacks":{},"description":"Create a new booking intent.\n\nA booking intent tracks the lifecycle of a multi-step booking flow. It starts\nin `pending` status and automatically transitions to `slot_selected` when all\nslot fields (provider_id, start_at, end_at, time_zone) are provided.\n","operationId":"createBookingIntent","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBookingIntentRequest"}}},"description":"Create booking intent params","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingIntentResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Create booking intent","tags":["Booking Intents"]}},"/v1/public/booking_intents/{booking_intent_id}/abandon":{"post":{"callbacks":{},"description":"Transition a non-terminal booking intent to `abandoned` via a public\ninterface (no authentication required).\n","operationId":"abandonPublicBookingIntent","parameters":[{"description":"Booking Intent ID","in":"path","name":"booking_intent_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicBookingIntentResponse"}}},"description":"Success"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Abandon booking intent","tags":["Public Booking"]}},"/v1/providers":{"get":{"callbacks":{},"description":"List all providers that belong to the account.","operationId":"listProviders","parameters":[{"description":"Page number","in":"query","name":"page","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"Number of items per page","in":"query","name":"page_size","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Only return providers that match the search query (name or email).","in":"query","name":"search","required":false,"schema":{"type":"string"}},{"description":"Filter providers by metadata using bracket notation. See [Metadata Filtering](https://developers.savvycal.app/metadata-filtering) for more details.\n","explode":true,"in":"query","name":"metadata","required":false,"schema":{"additionalProperties":true,"type":"object"},"style":"deepObject"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvidersResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"List providers","tags":["Providers"]},"post":{"callbacks":{},"description":"Create a new provider in the account.","operationId":"createProvider","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProviderRequest"}}},"description":"Provider params","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Create provider","tags":["Providers"]}},"/v1/public/services/{service_id}/slots":{"get":{"callbacks":{},"description":"List all available time slots for a service in a specific time range, for use on public booking interfaces.","operationId":"listPublicServiceSlots","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Service ID","example":"srv_123456789012","in":"path","name":"service_id","required":true,"schema":{"type":"string"}},{"description":"Start of time range (ISO date format). Defaults to today if not provided.","example":"\"2025-04-01\"","in":"query","name":"from","required":false,"schema":{"format":"date","type":"string"}},{"description":"End of time range (ISO date format). Either `until` or `limit` must be provided.","example":"\"2025-04-07\"","in":"query","name":"until","required":false,"schema":{"format":"date","type":"string"}},{"description":"Maximum number of aggregated slots to return. Either `limit` or `until` must be provided.","example":"5","in":"query","name":"limit","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"Time zone for the slots (IANA format)","example":"\"America/New_York\"","in":"query","name":"time_zone","required":false,"schema":{"default":"Etc/UTC","type":"string"}},{"deprecated":true,"description":"Filter slots by specific provider ID (deprecated, use provider_ids)","example":"prv_123456789012","in":"query","name":"provider_id","required":false,"schema":{"type":"string"}},{"description":"Filter slots by provider IDs (comma-separated)","example":"prv_123456789012,prv_234567890123","in":"query","name":"provider_ids","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicServiceSlotsResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"List available time slots","tags":["Public Booking"]}},"/v1/provider_schedules":{"get":{"callbacks":{},"description":"List all provider schedules account-wide or for a specific provider.","operationId":"listProviderSchedules","parameters":[{"description":"Page number","in":"query","name":"page","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"Number of items per page","in":"query","name":"page_size","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Filter by provider ID(s). Accepts a single ID or comma-delimited list of IDs.","in":"query","name":"provider_ids","required":false,"schema":{"type":"string"}},{"description":"Filter by location ID(s). Accepts a single ID or comma-delimited list of IDs.","in":"query","name":"location_ids","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderSchedulesResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"List provider schedules","tags":["Provider Schedules"]}},"/v1/account":{"get":{"callbacks":{},"description":"Get the account that owns the current token.\n\nThis endpoint requires:\n\n- An account token, or\n- A platform token with an account ID set via the `X-SavvyCal-Account` header.\n","operationId":"getCurrentAccount","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountResponse"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericErrorResponse"}}},"description":"GenericError"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"}},"summary":"Get current account","tags":["Accounts"]}},"/v1/providers/{provider_id}":{"delete":{"callbacks":{},"description":"Deactivates an existing provider.","operationId":"deactivateProvider","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Provider ID","in":"path","name":"provider_id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"content":{"text/plain":{"schema":{"description":"Empty response with no content","example":"","title":"EmptyResponse","type":"string"}}},"description":"No Content"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"}},"summary":"Deactivate provider","tags":["Providers"]},"get":{"callbacks":{},"description":"Get a single provider by ID.","operationId":"getProvider","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Provider ID","in":"path","name":"provider_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"}},"summary":"Get provider","tags":["Providers"]},"patch":{"callbacks":{},"description":"Update an existing provider.","operationId":"updateProvider","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Provider ID","in":"path","name":"provider_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProviderRequest"}}},"description":"Provider params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Update provider","tags":["Providers"]}},"/v1/user":{"get":{"callbacks":{},"description":"Get information about the current user in the context of the current account.\n\nThis endpoint requires use of a JSON Web Token (JWT) scoped to a specific user.\nIf no user is specified, this will return an error.\n","operationId":"getCurrentAccountUser","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountUserResponse"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericErrorResponse"}}},"description":"GenericError"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"}},"summary":"Get current account user","tags":["Account Users"]}},"/v1/appointments":{"get":{"callbacks":{},"description":"List all appointments that belong to the account.","operationId":"listAppointments","parameters":[{"description":"Page number","in":"query","name":"page","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"Number of items per page","in":"query","name":"page_size","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Whether to include sensitive fields (such as client name, email, and phone)","in":"query","name":"include_sensitive","required":false,"schema":{"default":false,"type":"boolean"}},{"description":"Filter by time period.","in":"query","name":"period","required":false,"schema":{"enum":["upcoming","past"],"type":"string"}},{"description":"Filter by status.","in":"query","name":"status","required":false,"schema":{"enum":["scheduled","canceled"],"type":"string"}},{"description":"Filter by appointment type.","in":"query","name":"appointment_type","required":false,"schema":{"enum":["virtual","in_person"],"type":"string"}},{"description":"Filter by provider ID(s). Accepts a single ID or comma-delimited list.","in":"query","name":"provider_ids","required":false,"schema":{"type":"string"}},{"description":"Filter by service ID(s). Accepts a single ID or comma-delimited list.","in":"query","name":"service_ids","required":false,"schema":{"type":"string"}},{"description":"Filter by client ID(s). Accepts a single ID or comma-delimited list.","in":"query","name":"client_ids","required":false,"schema":{"type":"string"}},{"description":"Filter by location ID(s). Accepts a single ID or comma-delimited list.","in":"query","name":"location_ids","required":false,"schema":{"type":"string"}},{"description":"Filter for appointments starting on or after this time (ISO 8601 format).","in":"query","name":"start_at_min","required":false,"schema":{"format":"date-time","type":"string"}},{"description":"Filter for appointments starting on or before this time (ISO 8601 format).","in":"query","name":"start_at_max","required":false,"schema":{"format":"date-time","type":"string"}},{"description":"Filter for appointments ending on or after this time (ISO 8601 format).","in":"query","name":"end_at_min","required":false,"schema":{"format":"date-time","type":"string"}},{"description":"Filter for appointments ending on or before this time (ISO 8601 format).","in":"query","name":"end_at_max","required":false,"schema":{"format":"date-time","type":"string"}},{"description":"A field to order by","example":"?order_by[]=start_at_utc","explode":true,"in":"query","name":"order_by","required":false,"schema":{"items":{"example":"start_at_utc","type":"string"},"type":"array"},"style":"form"},{"description":"The order direction for the order_by field","example":"?order_directions[]=asc","explode":true,"in":"query","name":"order_directions","required":false,"schema":{"items":{"enum":["asc","desc"],"example":"asc","type":"string"},"type":"array"},"style":"form"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppointmentsResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"List appointments","tags":["Appointments"]},"post":{"callbacks":{},"description":"Create a new appointment.\n\nThe time slot for the appointment must be available unless you explicitly disable validation (by setting `validate_slot` to `false` in the request body).\nYou can find available time slots using the [List slots for a service](/api/list-service-slots) endpoint.\n","operationId":"createAppointment","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAppointmentRequest"}}},"description":"Create appointment params","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppointmentResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Create appointment","tags":["Appointments"]}},"/v1/users":{"get":{"callbacks":{},"description":"List all users that belong to the specified account.","operationId":"listAccountUsers","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountUsersResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"List account users","tags":["Account Users"]},"post":{"callbacks":{},"description":"Create a new user in the specified account.","operationId":"createAccountUser","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAccountUserRequest"}}},"description":"User details","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountUserResponse"}}},"description":"User created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Create account user","tags":["Account Users"]}},"/v1/platform":{"get":{"callbacks":{},"description":"Get the platform that owns the current token (requires a platform token).\n","operationId":"getCurrentPlatform","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformResponse"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericErrorResponse"}}},"description":"GenericError"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"}},"summary":"Get current platform","tags":["Platforms"]}},"/v1/blocks/{block_id}":{"delete":{"callbacks":{},"description":"Delete an existing block.","operationId":"deleteBlock","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Block ID","in":"path","name":"block_id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"content":{"text/plain":{"schema":{"description":"Empty response with no content","example":"","title":"EmptyResponse","type":"string"}}},"description":"No Content"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"}},"summary":"Delete block","tags":["Blocks"]},"get":{"callbacks":{},"description":"Get a block by ID.","operationId":"getBlock","parameters":[{"description":"Block ID","in":"path","name":"block_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"}},"summary":"Get block","tags":["Blocks"]},"patch":{"callbacks":{},"description":"Update an existing block.","operationId":"updateBlock","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBlockRequest"}}},"description":"Block params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Update block","tags":["Blocks"]}},"/v1/services/{service_id}/slots":{"get":{"callbacks":{},"description":"List all available time slots for a service in a specific time range.","operationId":"listServiceSlots","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Service ID","example":"srv_123456789012","in":"path","name":"service_id","required":true,"schema":{"type":"string"}},{"description":"Start of time range (ISO date format). Defaults to today if not provided.","example":"\"2025-04-01\"","in":"query","name":"from","required":false,"schema":{"format":"date","type":"string"}},{"description":"End of time range (ISO date format). Either `until` or `limit` must be provided.","example":"\"2025-04-07\"","in":"query","name":"until","required":false,"schema":{"format":"date","type":"string"}},{"description":"Maximum number of aggregated slots to return. Either `limit` or `until` must be provided.","example":"5","in":"query","name":"limit","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"Time zone for the slots (IANA format)","example":"\"America/New_York\"","in":"query","name":"time_zone","required":false,"schema":{"default":"Etc/UTC","type":"string"}},{"description":"Filter slots by provider IDs (comma-separated)","example":"prv_123456789012,prv_234567890123","in":"query","name":"provider_ids","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceSlotResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"}}},"description":"Not Found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"List available time slots","tags":["Time Slots"]}},"/v1/appointments/{appointment_id}/reschedule":{"post":{"callbacks":{},"description":"Reschedule an existing appointment.\n\nThe new time slot for the appointment must be available. You can find available time slots using the [List slots for a service](/api/list-service-slots) endpoint.\n","operationId":"rescheduleAppointment","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Appointment ID","in":"path","name":"appointment_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RescheduleAppointmentRequest"}}},"description":"Reschedule appointment params","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppointmentResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Reschedule appointment","tags":["Appointments"]}},"/v1/appointments/{appointment_id}/cancel":{"post":{"callbacks":{},"description":"Cancel an existing appointment.","operationId":"cancelAppointment","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Appointment ID","in":"path","name":"appointment_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelAppointmentRequest"}}},"description":"Cancel appointment params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppointmentResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Cancel appointment","tags":["Appointments"]}},"/v1/blocks":{"get":{"callbacks":{},"description":"List all blocks account-wide or attached to a specific resource type.\n\nBlocks are sorted by `start_date` in ascending order (oldest first).\n","operationId":"listBlocks","parameters":[{"description":"Page number","in":"query","name":"page","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"Number of items per page","in":"query","name":"page_size","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Only return blocks with the specified attachment type.","in":"query","name":"attachment_type","required":false,"schema":{"enum":["provider","service","location","service_provider"],"type":"string"}},{"description":"Filter by provider ID(s). Accepts a single ID or comma-delimited list of IDs.","in":"query","name":"provider_ids","required":false,"schema":{"type":"string"}},{"description":"Filter by service ID(s). Accepts a single ID or comma-delimited list of IDs.","in":"query","name":"service_ids","required":false,"schema":{"type":"string"}},{"description":"Filter by service provider ID(s). Accepts a single ID or comma-delimited list of IDs.","in":"query","name":"service_provider_ids","required":false,"schema":{"type":"string"}},{"description":"Filter by location ID(s). Accepts a single ID or comma-delimited list of IDs.","in":"query","name":"location_ids","required":false,"schema":{"type":"string"}},{"description":"Only return blocks that start on the specified date.","in":"query","name":"start_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Only return blocks that end on the specified date.","in":"query","name":"end_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Only return blocks that start on or after the specified date.","in":"query","name":"start_date_min","required":false,"schema":{"format":"date","type":"string"}},{"description":"Only return blocks that start on or before the specified date.","in":"query","name":"start_date_max","required":false,"schema":{"format":"date","type":"string"}},{"description":"Only return blocks that end on or after the specified date.","in":"query","name":"end_date_min","required":false,"schema":{"format":"date","type":"string"}},{"description":"Only return blocks that end on or before the specified date.","in":"query","name":"end_date_max","required":false,"schema":{"format":"date","type":"string"}},{"description":"If true, only return blocks that are recurring.","in":"query","name":"recurring","required":false,"schema":{"type":"boolean"}},{"description":"If true, only return blocks that are all day.","in":"query","name":"all_day","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlocksResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"List blocks","tags":["Blocks"]},"post":{"callbacks":{},"description":"Create a new block.","operationId":"createBlock","parameters":[{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBlockRequest"}}},"description":"Block params","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Create block","tags":["Blocks"]}},"/v1/connected_accounts":{"get":{"callbacks":{},"description":"List all connected accounts accessible to the current actor.\n\nIf the current actor is a user (for example, authenticated via JWT), then\nthis returns all connected accounts the user has permission to view. Otherwise,\nthis returns all connected accounts belonging to the current account.\n","operationId":"listConnectedAccounts","parameters":[{"description":"Page number","in":"query","name":"page","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"Number of items per page","in":"query","name":"page_size","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"When authenticating with a platform token, specifies the account ID for the request","example":"acct_1234567890","in":"header","name":"X-SavvyCal-Account","required":false,"schema":{"type":"string"}},{"description":"Only return connected accounts that belong to the specified user.","in":"query","name":"user_id","required":false,"schema":{"type":"string"}},{"description":"Only return connected accounts for the specified provider.","in":"query","name":"provider","required":false,"schema":{"enum":["google","microsoft","zoom_admin"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccountsResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"List connected accounts","tags":["Connected Accounts"]}}},"security":[{"authorization":[]}],"servers":[{"url":"https://api.savvycal.app","variables":{}}],"tags":[{"description":"An appointment represents a booking that a client has made with a provider for a specific service.","name":"Appointments"},{"description":"A booking intent tracks the lifecycle of a multi-step booking attempt.","name":"Booking Intents"},{"description":"A dashboard session allows you to create seamless, secure login experiences from external systems or integrations.","name":"Dashboard Sessions"},{"description":"An account represents an organization and serves as the core tenancy boundary for all resources in the system.","name":"Accounts"},{"description":"A provider schedule represents working hours for a provider.","name":"Provider Schedules"},{"description":"Endpoints for public booking interfaces.","name":"Public Booking"},{"description":"Account users represent a user's relationship with an account.","name":"Account Users"},{"description":"A client represents a person who receives services from providers.","name":"Clients"},{"description":"A service represents a specific offering provided by one or more providers.","name":"Services"},{"description":"A cancellation reason represents an option to choose from when cancelling an appointment.","name":"Cancellation Reasons"},{"description":"A connected account represents an external integration, such as Google Calendar or Zoom.","name":"Connected Accounts"},{"description":"A role represents a set of permissions for users in an account.","name":"Roles"},{"description":"A provider represents a person who provides services to clients.","name":"Providers"},{"description":"A platform represents an application that manages multiple accounts.","name":"Platforms"},{"description":"A block represents a range of unavailable time for a provider, service, service provider, or location.","name":"Blocks"},{"description":"A time slot represents an available range of time for a service.","name":"Time Slots"}]}