{"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},"time_zone":"America/New_York","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"},"time_zone":{"description":"The IANA time zone the weekly rules are authored in. Defaults to the provider's location time zone when omitted.","type":"string"},"weekly_rules":{"description":"Weekly rules for the schedule.","items":{"$ref":"#/components/schemas/WeeklyRule"},"type":"array"}},"title":"UpdateProviderScheduleRequest","type":"object"},"FormResponse":{"description":"Response schema for a single form","example":{"data":{"created_at":"2025-02-17T17:49:19Z","field_count":1,"fields":[{"description":null,"id":"ff_abc123","key":"full_name","label":"Full Name","must_be_true":false,"options":null,"position":0,"required":true,"sensitive":false,"type":"short_text"}],"id":"frm_d025a96ac0c6","internal_name":"Intake Form","object":"form","updated_at":"2025-02-17T17:49:19Z"}},"properties":{"data":{"$ref":"#/components/schemas/FormDetail"}},"required":["data"],"title":"FormResponse","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","public_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":{"add_to_calendar_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar","cancel_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel","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"},"ics_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics","id":"appt_a1b2c3d4e5f6","object":"public_appointment","reschedule_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule","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://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar"],"add_to_google_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel"],"ics":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics"],"reschedule":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule"]}},"properties":{"add_to_calendar_url":{"description":"Canonical URL for adding the appointment to a calendar. Resolves to the account's active custom domain when configured, otherwise the canonical app host. The host portion may change if the account changes its custom-domain configuration.","format":"uri","type":"string"},"cancel_url":{"description":"Canonical URL for canceling the appointment. Resolves to the account's active custom domain when configured, otherwise the canonical app host. The host portion may change if the account changes its custom-domain configuration.","format":"uri","type":"string"},"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"},"ics_url":{"description":"Canonical URL for downloading an ICS file for the appointment. Resolves to the account's active custom domain when configured, otherwise the canonical app host. The host portion may change if the account changes its custom-domain configuration.","format":"uri","type":"string"},"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"},"reschedule_url":{"description":"Canonical URL for rescheduling the appointment. Resolves to the account's active custom domain when configured, otherwise the canonical app host. The host portion may change if the account changes its custom-domain configuration.","format":"uri","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":{"deprecated":true,"description":"Deprecated nested URL collections for this public appointment. Use the flat *_url fields instead.","properties":{"add_to_calendar":{"items":{"format":"uri","type":"string"},"type":"array"},"add_to_google_calendar":{"items":{"format":"uri","type":"string"},"type":"array"},"cancel":{"items":{"format":"uri","type":"string"},"type":"array"},"ics":{"items":{"format":"uri","type":"string"},"type":"array"},"reschedule":{"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","reschedule_url","cancel_url","add_to_calendar_url","ics_url"],"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","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_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","time_zone":"America/New_York","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":{"add_to_calendar_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar","appointment_type":"in_person","cancel_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel","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","fields":{"age":30},"first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirm_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm","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"},"ics_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics","id":"appt_a1b2c3d4e5f6","join_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join","meeting":{"conferencing_provider":"zoom_admin","error_message":null,"external_meeting_id":"82912345678","host_url":"https://book.acme.com/p/appointments/appt_a1b2c3d4e5f6/host?token=An5thqO6Li9Dy9WXe3IsJQYDEXGjS70GjQIdNntKZgw","id":"amtg_a1b2c3d4e5f6","join_url":"https://zoom.us/j/82912345678","object":"appointment_meeting","password":"abc123","status":"created"},"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","time_zone":"America/New_York","updated_at":"2017-09-13T10:11:12Z"},"providers":[{"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","role":"primary","time_zone":"America/New_York","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"}],"reschedule_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule","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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar"],"add_to_google_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://book.acme.com/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},"FormField":{"description":"A field within a form.","example":{"description":null,"id":"ff_abc123","key":"full_name","label":"Full Name","must_be_true":false,"options":null,"position":0,"required":true,"sensitive":false,"type":"short_text"},"properties":{"description":{"description":"Optional help text displayed below the field.","nullable":true,"type":"string"},"id":{"description":"Unique identifier for the field.","type":"string"},"key":{"description":"Machine-readable key for the field. Must start with a lowercase letter and contain only lowercase letters, numbers, and underscores.","pattern":"^[a-z][a-z0-9_]*$","type":"string"},"label":{"description":"Display label for the field.","type":"string"},"must_be_true":{"description":"For boolean fields, whether the value must be true (e.g., consent checkboxes).","type":"boolean"},"options":{"description":"Options configuration for choice-type fields.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/FieldOptions"},{"nullable":true,"type":"string"}]},"position":{"description":"Display position of the field within the form.","type":"integer"},"required":{"description":"Whether the field is required.","type":"boolean"},"sensitive":{"description":"Whether the field contains sensitive data.","type":"boolean"},"type":{"description":"The field type.","enum":["short_text","long_text","email","phone","boolean","radio","select","checkbox"],"type":"string"}},"required":["key","type","label","position"],"title":"FormField","type":"object"},"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","time_zone":"America/New_York","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"]},"ClientFieldChoice":{"description":"A single choice option within a client field.","example":{"id":"opt_a1b2c3d4e5f6","label":"Option A"},"properties":{"id":{"description":"Unique identifier for the choice.","type":"string"},"label":{"description":"The display label for the choice.","type":"string"}},"required":["label"],"title":"ClientFieldChoice","type":"object"},"UpdateBlockRequest":{"description":"Request schema for updating a block.","example":{"all_day":false,"attachment_type":"provider","attachments":["prov_d025a96ac0c6"],"date":"2025-10-27","end_time":"17:00","exception_dates":["2025-10-27T09:00:00"],"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"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"},"date":{"description":"The 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_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,"booking_policy":{"hold":{"duration":"PT10M","enabled":true}},"client":null,"client_data":{"email":"jane@example.com","fields":{"age":30},"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"},"errors":null,"hold_until":"2026-02-22T10:10:00Z","id":"bi_abc123def456abc123def456","locked_fields":["provider_id","slot"],"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","time_zone":"America/New_York","updated_at":"2017-09-13T10:11:12Z"},"requirements":{"booking":{"complete":true},"info":{"complete":false},"submissions":[{"complete":false,"form_id":"frm_abc123def456"}]},"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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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","submissions":[],"updated_at":"2026-02-22T10:00:00Z","workflow":{"available_steps":["booking","info","form:frm_abc123def456"],"can_change_slot":true,"can_complete":false,"defunct_reason":null,"is_defunct":false,"resume_step":"info"}},"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},"UpdateClientFieldRequest":{"description":"Request schema for updating a client field","example":{"label":"Updated Label"},"properties":{"description":{"description":"An optional description of the field.","nullable":true,"type":"string"},"label":{"description":"The human-readable label for the field.","type":"string"},"options":{"$ref":"#/components/schemas/ClientFieldOptions"},"sensitive":{"description":"Whether the field contains sensitive data.","type":"boolean"}},"title":"UpdateClientFieldRequest","type":"object"},"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"},"AppointmentMeetingCancelFailedEventData":{"description":"Emitted when meeting cancellation with the conferencing provider terminally fails. The `object.meeting.error_message` field carries the failure reason.","example":{"object":{"add_to_calendar_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar","appointment_type":"in_person","cancel_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel","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","fields":{"age":30},"first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirm_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm","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"},"ics_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics","id":"appt_a1b2c3d4e5f6","join_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join","meeting":{"conferencing_provider":"zoom_admin","error_message":null,"external_meeting_id":"82912345678","host_url":"https://book.acme.com/p/appointments/appt_a1b2c3d4e5f6/host?token=An5thqO6Li9Dy9WXe3IsJQYDEXGjS70GjQIdNntKZgw","id":"amtg_a1b2c3d4e5f6","join_url":"https://zoom.us/j/82912345678","object":"appointment_meeting","password":"abc123","status":"created"},"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","time_zone":"America/New_York","updated_at":"2017-09-13T10:11:12Z"},"providers":[{"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","role":"primary","time_zone":"America/New_York","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"}],"reschedule_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule","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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar"],"add_to_google_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule"]}},"type":"appointment.meeting.cancel_failed"},"properties":{"object":{"$ref":"#/components/schemas/Appointment"},"type":{"description":"The event type.","enum":["appointment.meeting.cancel_failed"],"type":"string"}},"required":["type","object"],"title":"AppointmentMeetingCancelFailedEventData","type":"object","x-account-event-data":true},"UpdateFormRequest":{"description":"Request schema for updating a form.","example":{"internal_name":"Updated Intake Form"},"properties":{"fields":{"description":"The fields in the form.","items":{"$ref":"#/components/schemas/FormFieldInput"},"type":"array"},"internal_name":{"description":"The name of the form.","type":"string"}},"title":"UpdateFormRequest","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":{"booking_policy":{"hold":{"duration":"PT10M","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"},"booking_policy":{"description":"Policy overrides for this booking intent. When omitted, falls back to the service's policies.","nullable":true,"properties":{"hold":{"description":"Hold policy overrides.","nullable":true,"properties":{"duration":{"description":"The duration of the hold as an ISO 8601 duration string.","nullable":true,"pattern":"^PT(?:(\\d+)H)?(?:(\\d+)M)?$","type":"string"},"enabled":{"description":"Whether slot holds are enabled.","type":"boolean"}},"type":"object"}},"type":"object"},"client_data":{"anyOf":[{"$ref":"#/components/schemas/ClientDataInput"}],"description":"Progressive client data to collect during the booking flow.","nullable":true},"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"},"locked_fields":{"description":"Fields to lock from public API updates.","items":{"enum":["service_id","provider_id","slot","client_data","submissions"],"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"},"secondary_providers":{"description":"Secondary providers to include in the appointment.","items":{"properties":{"id":{"description":"ID of the secondary provider.","type":"string"}},"required":["id"],"type":"object"},"nullable":true,"type":"array"},"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"},"submissions":{"description":"Form submissions to attach to this booking intent. Each entry contains a form_id and responses map.","items":{"$ref":"#/components/schemas/IntentSubmissionInput"},"nullable":true,"type":"array"},"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,"booking_policy":{"hold":{"duration":"PT10M","enabled":true}},"client":null,"client_data":{"email":"jane@example.com","fields":{"age":30},"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"},"errors":null,"hold_until":"2026-02-22T10:10:00Z","id":"bi_abc123def456abc123def456","locked_fields":["provider_id","slot"],"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","time_zone":"America/New_York","updated_at":"2017-09-13T10:11:12Z"},"requirements":{"booking":{"complete":true},"info":{"complete":false},"submissions":[{"complete":false,"form_id":"frm_abc123def456"}]},"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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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","submissions":[],"updated_at":"2026-02-22T10:00:00Z","workflow":{"available_steps":["booking","info","form:frm_abc123def456"],"can_change_slot":true,"can_complete":false,"defunct_reason":null,"is_defunct":false,"resume_step":"info"}},"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","idle_timeout_minutes":15,"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","time_zone":"America/New_York","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"],"time_zone":"America/New_York"},"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"},"time_zone":{"description":"The provider's preferred IANA time zone, used as the default when authoring schedules. Defaults to the account location's time zone when omitted.","example":"America/New_York","type":"string"}},"required":["display_name","first_name","last_name","email"],"title":"CreateProviderRequest","type":"object"},"FormFieldInput":{"description":"A field within a form.","example":{"description":null,"key":"full_name","label":"Full Name","must_be_true":false,"options":null,"position":0,"required":true,"sensitive":false,"type":"short_text"},"properties":{"description":{"description":"Optional help text displayed below the field.","nullable":true,"type":"string"},"id":{"description":"Unique identifier for the field. Optional on create; include to reference an existing field on update.","type":"string"},"key":{"description":"Machine-readable key for the field. Must start with a lowercase letter and contain only lowercase letters, numbers, and underscores.","pattern":"^[a-z][a-z0-9_]*$","type":"string"},"label":{"description":"Display label for the field.","type":"string"},"must_be_true":{"description":"For boolean fields, whether the value must be true (e.g., consent checkboxes).","type":"boolean"},"options":{"description":"Options configuration for choice-type fields.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/FieldOptionsInput"},{"nullable":true,"type":"string"}]},"position":{"description":"Display position of the field within the form.","type":"integer"},"required":{"description":"Whether the field is required.","type":"boolean"},"sensitive":{"description":"Whether the field contains sensitive data.","type":"boolean"},"type":{"description":"The field type.","enum":["short_text","long_text","email","phone","boolean","radio","select","checkbox"],"type":"string"}},"required":["key","type","label","position"],"title":"FormFieldInput","type":"object"},"BookingIntentRequirements":{"description":"Per-section completeness status for a booking intent. Provides boolean\nsignals for whether each section of the booking flow has enough data\nto proceed, enabling the frontend to make navigation decisions without\nparsing error pointers.\n","example":{"booking":{"complete":true},"info":{"complete":false},"submissions":[{"complete":false,"form_id":"frm_abc123def456"}]},"properties":{"booking":{"description":"Booking step completeness status.","properties":{"complete":{"description":"Whether the booking step is complete (provider and slot fields are present).","type":"boolean"}},"required":["complete"],"type":"object"},"info":{"description":"Info step completeness status.","properties":{"complete":{"description":"Whether the info step is complete (required client fields are present).","type":"boolean"}},"required":["complete"],"type":"object"},"submissions":{"description":"Per-form completeness status, in the same order as the service's forms.","items":{"$ref":"#/components/schemas/SubmissionRequirement"},"type":"array"}},"required":["booking","info","submissions"],"title":"BookingIntentRequirements","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","time_zone":"America/New_York","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"},"AttachServiceFormRequest":{"description":"Request schema for attaching a form to a service.","example":{"form_id":"frm_d025a96ac0c6"},"properties":{"form_id":{"description":"The ID of the form to attach.","pattern":"^frm_\\w{12}$","type":"string"}},"required":["form_id"],"title":"AttachServiceFormRequest","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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"}},"properties":{"data":{"$ref":"#/components/schemas/Service"}},"required":["data"],"title":"ServiceResponse","type":"object"},"SlotListResponse":{"description":"A flat list of slots.","example":{"data":[{"end_at":"2025-03-10T10:00:00Z","end_at_ts":1741600800,"object":"slot","start_at":"2025-03-10T09:00:00Z","start_at_ts":1741597200,"time_zone":"Etc/UTC"}]},"properties":{"data":{"items":{"$ref":"#/components/schemas/Slot"},"type":"array"}},"required":["data"],"title":"SlotListResponse","type":"object"},"FieldChoiceInput":{"description":"A choice option for a select, radio, or checkbox field. The id is optional on input; the server generates one if omitted.","example":{"label":"Option A"},"properties":{"id":{"description":"Unique identifier for the choice. Optional on create; include to reference an existing choice on update.","type":"string"},"label":{"description":"Display label for the choice.","type":"string"}},"required":["label"],"title":"FieldChoiceInput","type":"object"},"BookingIntentUpdatedEventData":{"description":"This is an object representing data for the booking intent updated event.","example":{"object":{"abandoned_at":null,"appointment":null,"booking_policy":{"hold":{"duration":"PT10M","enabled":true}},"client":null,"client_data":{"email":"jane@example.com","fields":{"age":30},"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"},"errors":null,"hold_until":"2026-02-22T10:10:00Z","id":"bi_abc123def456abc123def456","locked_fields":["provider_id","slot"],"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","time_zone":"America/New_York","updated_at":"2017-09-13T10:11:12Z"},"requirements":{"booking":{"complete":true},"info":{"complete":false},"submissions":[{"complete":false,"form_id":"frm_abc123def456"}]},"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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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","submissions":[],"updated_at":"2026-02-22T10:00:00Z","workflow":{"available_steps":["booking","info","form:frm_abc123def456"],"can_change_slot":true,"can_complete":false,"defunct_reason":null,"is_defunct":false,"resume_step":"info"}},"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","public_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"},"ClientFieldOptions":{"description":"Options for choice-type client fields.","example":{"allow_other":false,"choices":[{"id":"opt_a1b2c3d4e5f6","label":"Option A"}]},"properties":{"allow_other":{"description":"Whether to allow a free-text \"other\" option.","type":"boolean"},"choices":{"description":"The list of choices.","items":{"$ref":"#/components/schemas/ClientFieldChoice"},"type":"array"}},"title":"ClientFieldOptions","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":{"anyOf":[{"$ref":"#/components/schemas/ClientDataInput"}],"description":"Progressive client data. Provided fields are merged with existing values.","nullable":true},"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"},"submissions":{"description":"Form submissions to upsert by form_id. Provided entries are merged with existing submissions; omitted form_ids are left unchanged. Send an empty array to clear all.","items":{"$ref":"#/components/schemas/IntentSubmissionInput"},"nullable":true,"type":"array"},"time_zone":{"description":"The local time zone for the slot (IANA format).","nullable":true,"type":"string"}},"title":"CompleteBookingIntentRequest","type":"object"},"Form":{"description":"A form represents an intake form with typed fields.","example":{"created_at":"2025-02-17T17:49:19Z","field_count":3,"fields":null,"id":"frm_d025a96ac0c6","internal_name":"Intake Form","object":"form","updated_at":"2025-02-17T17:49:19Z"},"properties":{"created_at":{"description":"When the form was created.","format":"datetime","type":"string"},"field_count":{"description":"The number of fields in the form.","type":"integer"},"fields":{"description":"The fields in the form when expanded.","items":{"$ref":"#/components/schemas/FormField"},"nullable":true,"type":"array"},"id":{"description":"Unique identifier for the form.","pattern":"^frm_\\w{12}$","type":"string"},"internal_name":{"description":"The name of the form.","type":"string"},"object":{"description":"String representing the object's type.","enum":["form"],"type":"string"},"updated_at":{"description":"When the form was last updated.","format":"datetime","type":"string"}},"required":["object","id","internal_name","field_count","created_at","updated_at"],"title":"Form","type":"object","x-tags":["Forms"]},"BookingIntentsResponse":{"description":"Response schema for multiple booking intents","example":{"data":[{"abandoned_at":null,"appointment":null,"booking_policy":{"hold":{"duration":"PT10M","enabled":true}},"client":null,"client_data":{"email":"jane@example.com","fields":{"age":30},"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"},"errors":null,"hold_until":"2026-02-22T10:10:00Z","id":"bi_abc123def456abc123def456","locked_fields":["provider_id","slot"],"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","time_zone":"America/New_York","updated_at":"2017-09-13T10:11:12Z"},"requirements":{"booking":{"complete":true},"info":{"complete":false},"submissions":[{"complete":false,"form_id":"frm_abc123def456"}]},"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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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","submissions":[],"updated_at":"2026-02-22T10:00:00Z","workflow":{"available_steps":["booking","info","form:frm_abc123def456"],"can_change_slot":true,"can_complete":false,"defunct_reason":null,"is_defunct":false,"resume_step":"info"}}],"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"},"FormsResponse":{"description":"Response schema for a list of forms","example":{"data":[{"created_at":"2025-02-17T17:49:19Z","field_count":3,"fields":null,"id":"frm_d025a96ac0c6","internal_name":"Intake Form","object":"form","updated_at":"2025-02-17T17:49:19Z"}],"meta":{"current_page":1,"page_size":10,"total_count":50,"total_pages":5}},"properties":{"data":{"items":{"$ref":"#/components/schemas/Form"},"type":"array"},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","meta"],"title":"FormsResponse","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},"time_zone":"America/New_York","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,"booking_policy":{"hold":{"duration":"PT10M","enabled":true}},"client":null,"client_data":{"email":"jane@example.com","fields":{"age":30},"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"},"errors":null,"hold_until":"2026-02-22T10:10:00Z","id":"bi_abc123def456abc123def456","locked_fields":["provider_id","slot"],"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","time_zone":"America/New_York","updated_at":"2017-09-13T10:11:12Z"},"requirements":{"booking":{"complete":true},"info":{"complete":false},"submissions":[{"complete":false,"form_id":"frm_abc123def456"}]},"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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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","submissions":[],"updated_at":"2026-02-22T10:00:00Z","workflow":{"available_steps":["booking","info","form:frm_abc123def456"],"can_change_slot":true,"can_complete":false,"defunct_reason":null,"is_defunct":false,"resume_step":"info"}},"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"]},"IntentSubmissionInput":{"description":"A form submission entry containing a form ID and response data.","example":{"form_id":"frm_abc123def456","responses":{"color":["opt_abc"],"name":"Jane Doe"}},"properties":{"form_id":{"description":"The ID of the form to submit responses for.","type":"string"},"responses":{"additionalProperties":true,"default":{},"description":"A map of response data keyed by field key. Values depend on field type.","type":"object"}},"required":["form_id"],"title":"IntentSubmissionInput","type":"object"},"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"},"time_zone":"America/New_York"},"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"},"time_zone":{"description":"The provider's preferred IANA time zone, used as the default when authoring schedules.","example":"America/New_York","type":"string"}},"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","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_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},"BookingIntentBookingPolicy":{"description":"Policy overrides applied to this booking intent.","example":{"hold":{"duration":"PT10M","enabled":true}},"properties":{"hold":{"$ref":"#/components/schemas/HoldPolicy"}},"required":["hold"],"title":"BookingIntentBookingPolicy","type":"object"},"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"},"fields":{"additionalProperties":true,"description":"Custom field values for this client as a map of field key to value. Sensitive field values will be `null` unless `include_sensitive` is `true`.","nullable":true,"type":"object"},"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"]},"SortServiceFormsRequest":{"description":"Request schema for reordering service forms.","example":{"ids":["sf_aaa111222333","sf_bbb444555666"]},"properties":{"ids":{"description":"Ordered list of service form IDs.","items":{"type":"string"},"type":"array"}},"required":["ids"],"title":"SortServiceFormsRequest","type":"object"},"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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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},"ServiceFormsResponse":{"description":"Response schema for a list of service forms","example":{"data":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}]},"properties":{"data":{"items":{"$ref":"#/components/schemas/ServiceForm"},"type":"array"}},"required":["data"],"title":"ServiceFormsResponse","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":{"add_to_calendar_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar","appointment_type":"in_person","cancel_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel","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","fields":{"age":30},"first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirm_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm","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"},"ics_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics","id":"appt_a1b2c3d4e5f6","join_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join","meeting":{"conferencing_provider":"zoom_admin","error_message":null,"external_meeting_id":"82912345678","host_url":"https://book.acme.com/p/appointments/appt_a1b2c3d4e5f6/host?token=An5thqO6Li9Dy9WXe3IsJQYDEXGjS70GjQIdNntKZgw","id":"amtg_a1b2c3d4e5f6","join_url":"https://zoom.us/j/82912345678","object":"appointment_meeting","password":"abc123","status":"created"},"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","time_zone":"America/New_York","updated_at":"2017-09-13T10:11:12Z"},"providers":[{"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","role":"primary","time_zone":"America/New_York","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"}],"reschedule_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule","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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar"],"add_to_google_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://book.acme.com/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},"FormDetail":{"description":"A form with full field details.","example":{"created_at":"2025-02-17T17:49:19Z","field_count":1,"fields":[{"description":null,"id":"ff_abc123","key":"full_name","label":"Full Name","must_be_true":false,"options":null,"position":0,"required":true,"sensitive":false,"type":"short_text"}],"id":"frm_d025a96ac0c6","internal_name":"Intake Form","object":"form","updated_at":"2025-02-17T17:49:19Z"},"properties":{"created_at":{"description":"When the form was created.","format":"datetime","type":"string"},"field_count":{"description":"The number of fields in the form.","type":"integer"},"fields":{"description":"The fields in the form.","items":{"$ref":"#/components/schemas/FormField"},"type":"array"},"id":{"description":"Unique identifier for the form.","pattern":"^frm_\\w{12}$","type":"string"},"internal_name":{"description":"The name of the form.","type":"string"},"object":{"description":"String representing the object's type.","enum":["form"],"type":"string"},"updated_at":{"description":"When the form was last updated.","format":"datetime","type":"string"}},"required":["object","id","internal_name","field_count","fields","created_at","updated_at"],"title":"FormDetail","type":"object"},"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":{"add_to_calendar_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar","appointment_type":"in_person","cancel_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel","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","fields":{"age":30},"first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirm_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm","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"},"ics_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics","id":"appt_a1b2c3d4e5f6","join_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join","meeting":{"conferencing_provider":"zoom_admin","error_message":null,"external_meeting_id":"82912345678","host_url":"https://book.acme.com/p/appointments/appt_a1b2c3d4e5f6/host?token=An5thqO6Li9Dy9WXe3IsJQYDEXGjS70GjQIdNntKZgw","id":"amtg_a1b2c3d4e5f6","join_url":"https://zoom.us/j/82912345678","object":"appointment_meeting","password":"abc123","status":"created"},"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","time_zone":"America/New_York","updated_at":"2017-09-13T10:11:12Z"},"providers":[{"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","role":"primary","time_zone":"America/New_York","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"}],"reschedule_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule","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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar"],"add_to_google_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://book.acme.com/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","appointment.meeting.created":"#/components/schemas/AppointmentMeetingCreatedEventData","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","appointment.meeting.updated":"#/components/schemas/AppointmentMeetingUpdatedEventData","account_user.deleted":"#/components/schemas/AccountUserDeletedEventData","appointment.meeting.replace_failed":"#/components/schemas/AppointmentMeetingReplaceFailedEventData","appointment.meeting.canceled":"#/components/schemas/AppointmentMeetingCanceledEventData","appointment.meeting.cancel_failed":"#/components/schemas/AppointmentMeetingCancelFailedEventData","booking_intent.completed":"#/components/schemas/BookingIntentCompletedEventData","client.created":"#/components/schemas/ClientCreatedEventData","booking_intent.updated":"#/components/schemas/BookingIntentUpdatedEventData","appointment.meeting.update_failed":"#/components/schemas/AppointmentMeetingUpdateFailedEventData","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","appointment.meeting.create_failed":"#/components/schemas/AppointmentMeetingCreateFailedEventData","block.deleted":"#/components/schemas/BlockDeletedEventData","appointment.meeting.replaced":"#/components/schemas/AppointmentMeetingReplacedEventData","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/AppointmentMeetingCreatedEventData"},{"$ref":"#/components/schemas/AppointmentMeetingCreateFailedEventData"},{"$ref":"#/components/schemas/AppointmentMeetingUpdatedEventData"},{"$ref":"#/components/schemas/AppointmentMeetingUpdateFailedEventData"},{"$ref":"#/components/schemas/AppointmentMeetingReplacedEventData"},{"$ref":"#/components/schemas/AppointmentMeetingReplaceFailedEventData"},{"$ref":"#/components/schemas/AppointmentMeetingCanceledEventData"},{"$ref":"#/components/schemas/AppointmentMeetingCancelFailedEventData"},{"$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","time_zone":"America/New_York","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"},"booking_policy":{"description":"Policy overrides for this booking intent. When omitted, falls back to the service's policies if service is changing.","nullable":true,"properties":{"hold":{"description":"Hold policy overrides.","nullable":true,"properties":{"duration":{"description":"The duration of the hold as an ISO 8601 duration string.","nullable":true,"pattern":"^PT(?:(\\d+)H)?(?:(\\d+)M)?$","type":"string"},"enabled":{"description":"Whether slot holds are enabled.","type":"boolean"}},"type":"object"}},"type":"object"},"client_data":{"anyOf":[{"$ref":"#/components/schemas/ClientDataInput"}],"description":"Progressive client data. Provided fields are merged with existing values.","nullable":true},"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"},"locked_fields":{"description":"Fields to lock from public API updates. Replaces existing locked_fields entirely.","items":{"enum":["service_id","provider_id","slot","client_data","submissions"],"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"},"secondary_providers":{"description":"Secondary providers to include in the appointment. Send an empty array to clear.","items":{"properties":{"id":{"description":"ID of the secondary provider.","type":"string"}},"required":["id"],"type":"object"},"nullable":true,"type":"array"},"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"},"submissions":{"description":"Form submissions to upsert by form_id. Provided entries are merged with existing submissions; omitted form_ids are left unchanged. Send an empty array to clear all.","items":{"$ref":"#/components/schemas/IntentSubmissionInput"},"nullable":true,"type":"array"},"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":[{"add_to_calendar_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar","appointment_type":"in_person","cancel_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel","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","fields":{"age":30},"first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirm_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm","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"},"ics_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics","id":"appt_a1b2c3d4e5f6","join_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join","meeting":{"conferencing_provider":"zoom_admin","error_message":null,"external_meeting_id":"82912345678","host_url":"https://book.acme.com/p/appointments/appt_a1b2c3d4e5f6/host?token=An5thqO6Li9Dy9WXe3IsJQYDEXGjS70GjQIdNntKZgw","id":"amtg_a1b2c3d4e5f6","join_url":"https://zoom.us/j/82912345678","object":"appointment_meeting","password":"abc123","status":"created"},"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","time_zone":"America/New_York","updated_at":"2017-09-13T10:11:12Z"},"providers":[{"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","role":"primary","time_zone":"America/New_York","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"}],"reschedule_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule","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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar"],"add_to_google_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://book.acme.com/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"},"fields":{"additionalProperties":true,"description":"A map of custom field key-value pairs to set on this client.","type":"object"},"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","idle_timeout_minutes":15,"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"},"idle_timeout_minutes":{"description":"The number of minutes of inactivity before the session requires re-authentication. When both this and the account's idle timeout are set, the stricter (shorter) value applies.","nullable":true,"type":"integer"},"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","idle_timeout_minutes"],"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"],"date":"2025-10-27","end_time":"17:00","exception_dates":["2025-10-27T09:00:00"],"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"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"},"date":{"description":"The 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_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":["date","attachment_type"],"title":"CreateBlockRequest","type":"object"},"AppointmentResponse":{"description":"Response schema for a single appointment","example":{"data":{"add_to_calendar_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar","appointment_type":"in_person","cancel_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel","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","fields":{"age":30},"first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirm_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm","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"},"ics_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics","id":"appt_a1b2c3d4e5f6","join_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join","meeting":{"conferencing_provider":"zoom_admin","error_message":null,"external_meeting_id":"82912345678","host_url":"https://book.acme.com/p/appointments/appt_a1b2c3d4e5f6/host?token=An5thqO6Li9Dy9WXe3IsJQYDEXGjS70GjQIdNntKZgw","id":"amtg_a1b2c3d4e5f6","join_url":"https://zoom.us/j/82912345678","object":"appointment_meeting","password":"abc123","status":"created"},"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","time_zone":"America/New_York","updated_at":"2017-09-13T10:11:12Z"},"providers":[{"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","role":"primary","time_zone":"America/New_York","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"}],"reschedule_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule","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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar"],"add_to_google_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://book.acme.com/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","time_zone":"America/New_York","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","time_zone":"America/New_York","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","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_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"},"FieldChoice":{"description":"A choice option for a select, radio, or checkbox field.","example":{"id":"opt_abc123","label":"Option A"},"properties":{"id":{"description":"Unique identifier for the choice.","type":"string"},"label":{"description":"Display label for the choice.","type":"string"}},"required":["id","label"],"title":"FieldChoice","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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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"},"forms":{"description":"Forms attached to this service.","items":{"$ref":"#/components/schemas/ServiceForm"},"nullable":true,"type":"array"},"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"]},"FieldOptions":{"description":"Options for choice-type fields (select, radio, checkbox).","example":{"allow_other":false,"choices":[{"id":"opt_abc123","label":"Option A"}]},"properties":{"allow_other":{"description":"Whether to allow a free-text 'other' option.","type":"boolean"},"choices":{"description":"List of available choices.","items":{"$ref":"#/components/schemas/FieldChoice"},"type":"array"}},"required":["allow_other","choices"],"title":"FieldOptions","type":"object"},"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","time_zone":"America/New_York","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},"AppointmentMeetingCreateFailedEventData":{"description":"Emitted when *initial* meeting creation with the conferencing provider terminally fails. The `object.meeting.error_message` field carries the failure reason.","example":{"object":{"add_to_calendar_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar","appointment_type":"in_person","cancel_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel","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","fields":{"age":30},"first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirm_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm","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"},"ics_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics","id":"appt_a1b2c3d4e5f6","join_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join","meeting":{"conferencing_provider":"zoom_admin","error_message":null,"external_meeting_id":"82912345678","host_url":"https://book.acme.com/p/appointments/appt_a1b2c3d4e5f6/host?token=An5thqO6Li9Dy9WXe3IsJQYDEXGjS70GjQIdNntKZgw","id":"amtg_a1b2c3d4e5f6","join_url":"https://zoom.us/j/82912345678","object":"appointment_meeting","password":"abc123","status":"created"},"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","time_zone":"America/New_York","updated_at":"2017-09-13T10:11:12Z"},"providers":[{"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","role":"primary","time_zone":"America/New_York","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"}],"reschedule_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule","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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar"],"add_to_google_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule"]}},"type":"appointment.meeting.create_failed"},"properties":{"object":{"$ref":"#/components/schemas/Appointment"},"type":{"description":"The event type.","enum":["appointment.meeting.create_failed"],"type":"string"}},"required":["type","object"],"title":"AppointmentMeetingCreateFailedEventData","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":{"anyOf":[{"$ref":"#/components/schemas/ClientDataInput"}],"description":"Progressive client data. Provided fields are merged with existing values.","nullable":true},"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"},"submissions":{"description":"Form submissions to upsert by form_id. Provided entries are merged with existing submissions; omitted form_ids are left unchanged. Send an empty array to clear all.","items":{"$ref":"#/components/schemas/IntentSubmissionInput"},"nullable":true,"type":"array"},"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","time_zone":"America/New_York","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},"time_zone":"America/New_York","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"},"AppointmentClientDataInput":{"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","example":{"email":"john.doe@example.com","fields":{"age":30},"first_name":"John","last_name":"Doe","locale":"en-US","phone":"+15551234567","reference_id":"1234567890","time_zone":"America/New_York"},"properties":{"email":{"description":"The client's email address. Required if no existing client is provided.","format":"email","nullable":true,"type":"string"},"fields":{"additionalProperties":true,"description":"A map of custom field values to set on the client, keyed by field slug. Each key must correspond to a Client Field that has been defined in the account; arbitrary key-value pairs are not accepted.","nullable":true,"type":"object"},"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"],"title":"AppointmentClientDataInput","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"},"AppointmentMeetingReplaceFailedEventData":{"description":"Emitted when the *replacement* meeting created during a meeting replace (typically following a reschedule that changed the primary provider) terminally fails at the conferencing provider. Distinct from `appointment.meeting.create_failed` (initial-creation failure): the appointment previously had a working meeting (now superseded), and the replacement attempt failed. The `object.meeting.error_message` field carries the failure reason.","example":{"object":{"add_to_calendar_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar","appointment_type":"in_person","cancel_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel","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","fields":{"age":30},"first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirm_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm","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"},"ics_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics","id":"appt_a1b2c3d4e5f6","join_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join","meeting":{"conferencing_provider":"zoom_admin","error_message":null,"external_meeting_id":"82912345678","host_url":"https://book.acme.com/p/appointments/appt_a1b2c3d4e5f6/host?token=An5thqO6Li9Dy9WXe3IsJQYDEXGjS70GjQIdNntKZgw","id":"amtg_a1b2c3d4e5f6","join_url":"https://zoom.us/j/82912345678","object":"appointment_meeting","password":"abc123","status":"created"},"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","time_zone":"America/New_York","updated_at":"2017-09-13T10:11:12Z"},"providers":[{"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","role":"primary","time_zone":"America/New_York","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"}],"reschedule_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule","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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar"],"add_to_google_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule"]}},"type":"appointment.meeting.replace_failed"},"properties":{"object":{"$ref":"#/components/schemas/Appointment"},"type":{"description":"The event type.","enum":["appointment.meeting.replace_failed"],"type":"string"}},"required":["type","object"],"title":"AppointmentMeetingReplaceFailedEventData","type":"object","x-account-event-data":true},"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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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},"AppointmentMeetingCreatedEventData":{"description":"Emitted asynchronously after a meeting was successfully created with the conferencing provider. The `object.meeting` field carries the populated meeting details.","example":{"object":{"add_to_calendar_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar","appointment_type":"in_person","cancel_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel","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","fields":{"age":30},"first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirm_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm","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"},"ics_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics","id":"appt_a1b2c3d4e5f6","join_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join","meeting":{"conferencing_provider":"zoom_admin","error_message":null,"external_meeting_id":"82912345678","host_url":"https://book.acme.com/p/appointments/appt_a1b2c3d4e5f6/host?token=An5thqO6Li9Dy9WXe3IsJQYDEXGjS70GjQIdNntKZgw","id":"amtg_a1b2c3d4e5f6","join_url":"https://zoom.us/j/82912345678","object":"appointment_meeting","password":"abc123","status":"created"},"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","time_zone":"America/New_York","updated_at":"2017-09-13T10:11:12Z"},"providers":[{"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","role":"primary","time_zone":"America/New_York","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"}],"reschedule_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule","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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar"],"add_to_google_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule"]}},"type":"appointment.meeting.created"},"properties":{"object":{"$ref":"#/components/schemas/Appointment"},"type":{"description":"The event type.","enum":["appointment.meeting.created"],"type":"string"}},"required":["type","object"],"title":"AppointmentMeetingCreatedEventData","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","public_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},"AppointmentMeetingCanceledEventData":{"description":"Emitted asynchronously after a meeting was successfully canceled with the conferencing provider, following an appointment cancellation.","example":{"object":{"add_to_calendar_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar","appointment_type":"in_person","cancel_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel","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","fields":{"age":30},"first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirm_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm","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"},"ics_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics","id":"appt_a1b2c3d4e5f6","join_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join","meeting":{"conferencing_provider":"zoom_admin","error_message":null,"external_meeting_id":"82912345678","host_url":"https://book.acme.com/p/appointments/appt_a1b2c3d4e5f6/host?token=An5thqO6Li9Dy9WXe3IsJQYDEXGjS70GjQIdNntKZgw","id":"amtg_a1b2c3d4e5f6","join_url":"https://zoom.us/j/82912345678","object":"appointment_meeting","password":"abc123","status":"created"},"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","time_zone":"America/New_York","updated_at":"2017-09-13T10:11:12Z"},"providers":[{"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","role":"primary","time_zone":"America/New_York","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"}],"reschedule_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule","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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar"],"add_to_google_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule"]}},"type":"appointment.meeting.canceled"},"properties":{"object":{"$ref":"#/components/schemas/Appointment"},"type":{"description":"The event type.","enum":["appointment.meeting.canceled"],"type":"string"}},"required":["type","object"],"title":"AppointmentMeetingCanceledEventData","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},"time_zone":"America/New_York","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","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_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},"AppointmentMeeting":{"description":"An appointment meeting represents the conferencing details for an appointment.\nMeetings are created asynchronously after an appointment is scheduled, so the\n`status` field reflects where the meeting is in its lifecycle. Meeting details\nsuch as `join_url` are populated only once the status is `created`.\n\nThe `host_url` field is a proxy URL on the account's booking domain (the\ncanonical SavvyCal host, or an active custom domain when one is\nconfigured) that the meeting host follows to start the meeting. **Treat\nthis URL as a credential — anyone with it can start the meeting as the\nhost.** It is valid through the appointment's end time + a 24h grace\nwindow, after which it returns 410 Gone.\n\nSavvyCal refreshes the underlying conferencing-provider URL transparently\nbehind the proxy, so the proxy URL generally remains stable across\n`appointment.meeting.updated` events. It may change if SavvyCal rotates\nthe underlying token (e.g., for security reasons) or when the meeting is\nreplaced — a brand-new meeting with a new `id`, which happens when a\nreschedule routes the appointment to a different host on the account.\nListen for `appointment.meeting.updated` and `appointment.meeting.replaced`\nto keep stored copies fresh.\n\n`host_url` is null when the meeting is not yet `created` or when the\nconferencing provider has no distinct host start URL (e.g., Google Meet\nuses a single shared URL).\n","example":{"conferencing_provider":"zoom_admin","error_message":null,"external_meeting_id":"82912345678","host_url":"https://book.acme.com/p/appointments/appt_a1b2c3d4e5f6/host?token=An5thqO6Li9Dy9WXe3IsJQYDEXGjS70GjQIdNntKZgw","id":"amtg_a1b2c3d4e5f6","join_url":"https://zoom.us/j/82912345678","object":"appointment_meeting","password":"abc123","status":"created"},"properties":{"conferencing_provider":{"description":"The conferencing provider for the meeting.","example":"zoom_admin","nullable":true,"type":"string"},"error_message":{"description":"The most-recent failure reason, if the meeting is in a failed state.","nullable":true,"type":"string"},"external_meeting_id":{"description":"The provider's identifier for the meeting.","example":"82912345678","nullable":true,"type":"string"},"host_url":{"description":"Proxy URL the host follows to start the meeting. Treat as a\ncredential — anyone with this URL can start the meeting as host.\nValid through the appointment's end time + 24h grace window, then\nreturns 410 Gone. Generally stable, but may change across\n`appointment.meeting.updated` events (e.g., if SavvyCal rotates the\ntoken) and always changes when the meeting is replaced\n(`appointment.meeting.replaced`). Null when the meeting is not\n`created` or when the conferencing provider has no distinct host\nstart URL.\n","format":"uri","nullable":true,"type":"string"},"id":{"description":"Unique identifier for the object.","pattern":"^amtg_\\w{12}$","type":"string"},"join_url":{"description":"The URL attendees use to join the meeting.","format":"uri","nullable":true,"type":"string"},"object":{"description":"String representing the object's type.","enum":["appointment_meeting"],"type":"string"},"password":{"description":"The meeting password, if any.","nullable":true,"type":"string"},"status":{"description":"The current state of the meeting. Lifecycle:\n\n- `pending` — meeting creation has not yet been attempted\n- `created` — meeting was successfully created with the conferencing provider\n- `failed` — most-recent attempt failed; see `error_message` for details\n- `skipped` — meeting creation was skipped (no conferencing configured)\n- `update_pending` — meeting update is pending after a reschedule\n- `cancel_pending` — meeting cancellation is pending after appointment cancel\n- `canceled` — meeting was successfully canceled with the conferencing provider\n","enum":["pending","created","failed","skipped","update_pending","cancel_pending","canceled"],"type":"string"}},"required":["object","id","status","conferencing_provider","external_meeting_id","join_url","host_url","password","error_message"],"title":"AppointmentMeeting","type":"object"},"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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"}],"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"},"AppointmentMeetingUpdateFailedEventData":{"description":"Emitted when an update to an existing meeting with the conferencing provider terminally fails — including when the provider reports the meeting was deleted out-of-band. The `object.meeting.error_message` field carries the failure reason.","example":{"object":{"add_to_calendar_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar","appointment_type":"in_person","cancel_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel","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","fields":{"age":30},"first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirm_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm","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"},"ics_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics","id":"appt_a1b2c3d4e5f6","join_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join","meeting":{"conferencing_provider":"zoom_admin","error_message":null,"external_meeting_id":"82912345678","host_url":"https://book.acme.com/p/appointments/appt_a1b2c3d4e5f6/host?token=An5thqO6Li9Dy9WXe3IsJQYDEXGjS70GjQIdNntKZgw","id":"amtg_a1b2c3d4e5f6","join_url":"https://zoom.us/j/82912345678","object":"appointment_meeting","password":"abc123","status":"created"},"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","time_zone":"America/New_York","updated_at":"2017-09-13T10:11:12Z"},"providers":[{"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","role":"primary","time_zone":"America/New_York","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"}],"reschedule_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule","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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar"],"add_to_google_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule"]}},"type":"appointment.meeting.update_failed"},"properties":{"object":{"$ref":"#/components/schemas/Appointment"},"type":{"description":"The event type.","enum":["appointment.meeting.update_failed"],"type":"string"}},"required":["type","object"],"title":"AppointmentMeetingUpdateFailedEventData","type":"object","x-account-event-data":true},"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},"time_zone":"America/New_York","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"},"errors":null,"hold_until":"2026-02-22T10:10:00Z","id":"bi_abc123def456abc123def456","locked_fields":[],"object":"public_booking_intent","requirements":{"booking":{"complete":true},"info":{"complete":false},"submissions":[{"complete":false,"form_id":"frm_abc123def456"}]},"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","workflow":{"available_steps":["booking","info","form:frm_abc123def456"],"can_change_slot":true,"can_complete":false,"defunct_reason":null,"is_defunct":false,"resume_step":"info"}},"properties":{"appointment":{"anyOf":[{"$ref":"#/components/schemas/PublicAppointment"}],"description":"The created appointment. Present when status is completed.","nullable":true},"end_at":{"anyOf":[{"$ref":"#/components/schemas/ZonedDateTime"}],"description":"The end time of the selected slot","nullable":true},"errors":{"description":"Validation errors for data provided so far. Fields not yet submitted are not flagged. Null when not computed.","items":{"$ref":"#/components/schemas/JsonError"},"nullable":true,"type":"array"},"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.","items":{"enum":["service_id","provider_id","slot","client_data","submissions"],"type":"string"},"type":"array"},"object":{"description":"The object type","enum":["public_booking_intent"],"type":"string"},"requirements":{"$ref":"#/components/schemas/BookingIntentRequirements"},"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. Automatically transitions from pending to slot_selected when provider_id, start_at, end_at, and time_zone are all present (on create or update).","enum":["pending","slot_selected","completed","abandoned"],"type":"string"},"workflow":{"$ref":"#/components/schemas/BookingIntentWorkflow"}},"required":["object","id","status"],"title":"PublicBookingIntent","type":"object","x-tags":["Public Booking"]},"ServiceForm":{"description":"A service form represents the attachment of a form to a service.","example":{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"},"properties":{"created_at":{"description":"When the service form was created.","format":"datetime","type":"string"},"form_id":{"description":"The ID of the attached form.","pattern":"^frm_\\w{12}$","type":"string"},"form_name":{"description":"The name of the attached form.","type":"string"},"id":{"description":"Unique identifier for the service form.","pattern":"^sf_\\w{12}$","type":"string"},"object":{"description":"String representing the object's type.","enum":["service_form"],"type":"string"},"sort_order":{"description":"Display order of the form within the service.","type":"integer"},"updated_at":{"description":"When the service form was last updated.","format":"datetime","type":"string"}},"required":["object","id","form_id","form_name","sort_order","created_at","updated_at"],"title":"ServiceForm","type":"object","x-tags":["Services"]},"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":{"add_to_calendar_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar","appointment_type":"in_person","cancel_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel","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","fields":{"age":30},"first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirm_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm","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"},"ics_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics","id":"appt_a1b2c3d4e5f6","join_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join","meeting":{"conferencing_provider":"zoom_admin","error_message":null,"external_meeting_id":"82912345678","host_url":"https://book.acme.com/p/appointments/appt_a1b2c3d4e5f6/host?token=An5thqO6Li9Dy9WXe3IsJQYDEXGjS70GjQIdNntKZgw","id":"amtg_a1b2c3d4e5f6","join_url":"https://zoom.us/j/82912345678","object":"appointment_meeting","password":"abc123","status":"created"},"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","time_zone":"America/New_York","updated_at":"2017-09-13T10:11:12Z"},"providers":[{"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","role":"primary","time_zone":"America/New_York","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"}],"reschedule_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule","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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar"],"add_to_google_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://book.acme.com/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},"FieldOptionsInput":{"description":"Options for choice-type fields (select, radio, checkbox).","example":{"allow_other":false,"choices":[{"label":"Option A"}]},"properties":{"allow_other":{"description":"Whether to allow a free-text 'other' option.","type":"boolean"},"choices":{"description":"List of available choices.","items":{"$ref":"#/components/schemas/FieldChoiceInput"},"type":"array"}},"required":["allow_other","choices"],"title":"FieldOptionsInput","type":"object"},"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":{"anyOf":[{"$ref":"#/components/schemas/ClientDataInput"}],"description":"Progressive client data. Provided fields are merged with existing values.","nullable":true},"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"},"submissions":{"description":"Form submissions to upsert by form_id. Provided entries are merged with existing submissions; omitted form_ids are left unchanged. Send an empty array to clear all.","items":{"$ref":"#/components/schemas/IntentSubmissionInput"},"nullable":true,"type":"array"},"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":{"idle_timeout_minutes":15,"return_url":"https://example.com/home","user_id":"user_d025a96ac0c6"},"properties":{"idle_timeout_minutes":{"description":"The number of minutes of inactivity before the session requires re-authentication. When both this and the account's idle timeout are set, the stricter (shorter) value applies.","enum":[15,30,60,120],"nullable":true,"type":"integer"},"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},"time_zone":"America/New_York","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},"CreateClientFieldRequest":{"description":"Request schema for creating a client field","example":{"key":"company_name","label":"Company Name","type":"short_text"},"properties":{"description":{"description":"An optional description of the field.","nullable":true,"type":"string"},"key":{"description":"The machine-readable key for the field.","type":"string"},"label":{"description":"The human-readable label for the field.","type":"string"},"options":{"$ref":"#/components/schemas/ClientFieldOptions"},"sensitive":{"description":"Whether the field contains sensitive data.","type":"boolean"},"type":{"description":"The field type.","enum":["short_text","long_text","email","phone","boolean","radio","select","checkbox"],"type":"string"}},"required":["key","label","type"],"title":"CreateClientFieldRequest","type":"object"},"SubmissionRequirement":{"description":"Completeness status for a single form submission.","example":{"complete":false,"form_id":"frm_abc123def456"},"properties":{"complete":{"description":"Whether the submission exists and all required fields have been answered.","type":"boolean"},"form_id":{"description":"The form's object ID.","type":"string"}},"required":["form_id","complete"],"title":"SubmissionRequirement","type":"object"},"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"},"errors":null,"hold_until":"2026-02-22T10:10:00Z","id":"bi_abc123def456abc123def456","locked_fields":[],"object":"public_booking_intent","requirements":{"booking":{"complete":true},"info":{"complete":false},"submissions":[{"complete":false,"form_id":"frm_abc123def456"}]},"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","workflow":{"available_steps":["booking","info","form:frm_abc123def456"],"can_change_slot":true,"can_complete":false,"defunct_reason":null,"is_defunct":false,"resume_step":"info"}}},"properties":{"data":{"$ref":"#/components/schemas/PublicBookingIntent"}},"required":["data"],"title":"PublicBookingIntentResponse","type":"object"},"AppointmentProvider":{"description":"A provider associated with an appointment, along with their role.\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","role":"primary","time_zone":"America/New_York","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"},"role":{"description":"The provider's role on the appointment. The primary provider is the anchor whose infrastructure drives conferencing, calendar sync, and notifications.","enum":["primary","secondary"],"type":"string"},"time_zone":{"description":"The provider's preferred IANA time zone, used as the default when authoring schedules.","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","time_zone","updated_at","role"],"title":"AppointmentProvider","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","time_zone":"America/New_York","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"},"time_zone":{"description":"The provider's preferred IANA time zone, used as the default when authoring schedules.","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","time_zone","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},"time_zone":"America/New_York","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"},"time_zone":{"description":"The IANA time zone the weekly rules are authored in. Defaults to the provider's location time zone when omitted.","type":"string"},"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","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_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"},"date":{"description":"The 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_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","date","start_time","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","time_zone":"America/New_York","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"},"JsonError":{"description":"A single validation error in JSON:API format.","example":{"code":"email_format","detail":"must be a valid email address","source":{"pointer":"/email"},"title":"Invalid value"},"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"],"title":"JsonError","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":{"$ref":"#/components/schemas/AppointmentClientDataInput"},"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},"time_zone":"America/New_York","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"},"time_zone":{"description":"The IANA time zone the schedule's weekly rules are authored in.","type":"string"},"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","time_zone","weekly_rules","updated_at"],"title":"ProviderSchedule","type":"object","x-tags":["Provider Schedules"]},"AppointmentMeetingReplacedEventData":{"description":"Emitted when the meeting attached to an appointment is replaced by a brand-new meeting at the conferencing provider — typically because a reschedule changed the primary provider and the new provider's conferencing maps to a different connected user/account. Distinct from `appointment.meeting.updated` (attribute-level change to the *same* provider meeting): consumers caching `external_meeting_id`, `join_url`, `password`, or dial-in numbers should treat this event as an invalidation signal.","example":{"object":{"add_to_calendar_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar","appointment_type":"in_person","cancel_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel","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","fields":{"age":30},"first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirm_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm","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"},"ics_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics","id":"appt_a1b2c3d4e5f6","join_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join","meeting":{"conferencing_provider":"zoom_admin","error_message":null,"external_meeting_id":"82912345678","host_url":"https://book.acme.com/p/appointments/appt_a1b2c3d4e5f6/host?token=An5thqO6Li9Dy9WXe3IsJQYDEXGjS70GjQIdNntKZgw","id":"amtg_a1b2c3d4e5f6","join_url":"https://zoom.us/j/82912345678","object":"appointment_meeting","password":"abc123","status":"created"},"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","time_zone":"America/New_York","updated_at":"2017-09-13T10:11:12Z"},"providers":[{"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","role":"primary","time_zone":"America/New_York","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"}],"reschedule_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule","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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar"],"add_to_google_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule"]}},"type":"appointment.meeting.replaced"},"properties":{"object":{"$ref":"#/components/schemas/Appointment"},"type":{"description":"The event type.","enum":["appointment.meeting.replaced"],"type":"string"}},"required":["type","object"],"title":"AppointmentMeetingReplacedEventData","type":"object","x-account-event-data":true},"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":{"anyOf":[{"$ref":"#/components/schemas/ClientDataInput"}],"description":"Progressive client data to collect during the booking flow.","nullable":true},"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"},"submissions":{"description":"Form submissions to attach to this booking intent. Each entry contains a form_id and responses map.","items":{"$ref":"#/components/schemas/IntentSubmissionInput"},"nullable":true,"type":"array"},"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,"booking_policy":{"hold":{"duration":"PT10M","enabled":true}},"client":null,"client_data":{"email":"jane@example.com","fields":{"age":30},"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"},"errors":null,"hold_until":"2026-02-22T10:10:00Z","id":"bi_abc123def456abc123def456","locked_fields":["provider_id","slot"],"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","time_zone":"America/New_York","updated_at":"2017-09-13T10:11:12Z"},"requirements":{"booking":{"complete":true},"info":{"complete":false},"submissions":[{"complete":false,"form_id":"frm_abc123def456"}]},"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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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","submissions":[],"updated_at":"2026-02-22T10:00:00Z","workflow":{"available_steps":["booking","info","form:frm_abc123def456"],"can_change_slot":true,"can_complete":false,"defunct_reason":null,"is_defunct":false,"resume_step":"info"}}},"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","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":{"add_to_calendar_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar","appointment_type":"in_person","cancel_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel","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","fields":{"age":30},"first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirm_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm","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"},"ics_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics","id":"appt_a1b2c3d4e5f6","join_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join","meeting":{"conferencing_provider":"zoom_admin","error_message":null,"external_meeting_id":"82912345678","host_url":"https://book.acme.com/p/appointments/appt_a1b2c3d4e5f6/host?token=An5thqO6Li9Dy9WXe3IsJQYDEXGjS70GjQIdNntKZgw","id":"amtg_a1b2c3d4e5f6","join_url":"https://zoom.us/j/82912345678","object":"appointment_meeting","password":"abc123","status":"created"},"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","time_zone":"America/New_York","updated_at":"2017-09-13T10:11:12Z"},"providers":[{"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","role":"primary","time_zone":"America/New_York","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"}],"reschedule_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule","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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar"],"add_to_google_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://book.acme.com/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","fields":{"age":30},"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":{"$ref":"#/components/schemas/AppointmentClientDataInput"},"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"},"ClientField":{"description":"This is an object representing a client field.","example":{"created_at":"2024-01-01T00:00:00Z","description":null,"id":"cf_a1b2c3d4e5f6","key":"company_name","label":"Company Name","object":"client_field","options":null,"sensitive":false,"sort_order":1,"type":"short_text","updated_at":"2024-01-01T00:00:00Z"},"properties":{"created_at":{"description":"When the field was created.","format":"date-time","type":"string"},"description":{"description":"An optional description of the field.","nullable":true,"type":"string"},"id":{"description":"Unique identifier for the object.","pattern":"^cf_\\w{12}$","type":"string"},"key":{"description":"The machine-readable key for the field.","type":"string"},"label":{"description":"The human-readable label for the field.","type":"string"},"object":{"description":"String representing the object's type.","enum":["client_field"],"type":"string"},"options":{"anyOf":[{"$ref":"#/components/schemas/ClientFieldOptions"},{"nullable":true,"type":"object"}],"description":"Options for choice-type fields.","nullable":true},"sensitive":{"description":"Whether the field contains sensitive data.","type":"boolean"},"sort_order":{"description":"The sort order of the field.","type":"integer"},"type":{"description":"The field type.","enum":["short_text","long_text","email","phone","boolean","radio","select","checkbox"],"type":"string"},"updated_at":{"description":"When the field was last updated.","format":"date-time","type":"string"}},"required":["object","id","key","label","type","sensitive","sort_order","created_at","updated_at"],"title":"ClientField","type":"object","x-tags":["Client Fields"]},"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"},"ServiceFormResponse":{"description":"Response schema for a single service form","example":{"data":{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}},"properties":{"data":{"$ref":"#/components/schemas/ServiceForm"}},"required":["data"],"title":"ServiceFormResponse","type":"object"},"ClientFieldsResponse":{"description":"Response schema for multiple client fields","example":{"data":[{"created_at":"2024-01-01T00:00:00Z","description":null,"id":"cf_a1b2c3d4e5f6","key":"company_name","label":"Company Name","object":"client_field","options":null,"sensitive":false,"sort_order":1,"type":"short_text","updated_at":"2024-01-01T00:00:00Z"}]},"properties":{"data":{"description":"The client fields details","items":{"$ref":"#/components/schemas/ClientField"},"type":"array"}},"required":["data"],"title":"ClientFieldsResponse","type":"object"},"ClientDataInput":{"description":"Progressive client data for a booking intent. All fields are optional; provided fields are merged with existing values.","example":{"email":"jane@example.com","fields":{"age":30},"first_name":"Jane","last_name":"Doe","locale":"en-US","phone":"+15551234567","reference_id":"ext_123","time_zone":"America/New_York"},"properties":{"email":{"description":"The client's email address.","format":"email","nullable":true,"type":"string"},"fields":{"additionalProperties":true,"description":"A map of custom field values to set on the client, keyed by field slug. Each key must correspond to a Client Field that has been defined in the account; arbitrary key-value pairs are not accepted.","nullable":true,"type":"object"},"first_name":{"description":"The client's first name.","nullable":true,"type":"string"},"last_name":{"description":"The client's last name.","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).","example":"America/New_York","nullable":true,"type":"string"}},"title":"ClientDataInput","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","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_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":{"$ref":"#/components/schemas/JsonError"},"type":"array"}},"required":["errors"],"title":"JsonErrorResponse","type":"object"},"AppointmentMeetingUpdatedEventData":{"description":"Emitted asynchronously after a meeting was successfully updated with the conferencing provider, typically following an appointment reschedule.","example":{"object":{"add_to_calendar_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar","appointment_type":"in_person","cancel_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel","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","fields":{"age":30},"first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirm_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm","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"},"ics_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics","id":"appt_a1b2c3d4e5f6","join_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join","meeting":{"conferencing_provider":"zoom_admin","error_message":null,"external_meeting_id":"82912345678","host_url":"https://book.acme.com/p/appointments/appt_a1b2c3d4e5f6/host?token=An5thqO6Li9Dy9WXe3IsJQYDEXGjS70GjQIdNntKZgw","id":"amtg_a1b2c3d4e5f6","join_url":"https://zoom.us/j/82912345678","object":"appointment_meeting","password":"abc123","status":"created"},"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","time_zone":"America/New_York","updated_at":"2017-09-13T10:11:12Z"},"providers":[{"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","role":"primary","time_zone":"America/New_York","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"}],"reschedule_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule","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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar"],"add_to_google_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule"]}},"type":"appointment.meeting.updated"},"properties":{"object":{"$ref":"#/components/schemas/Appointment"},"type":{"description":"The event type.","enum":["appointment.meeting.updated"],"type":"string"}},"required":["type","object"],"title":"AppointmentMeetingUpdatedEventData","type":"object","x-account-event-data":true},"Appointment":{"description":"An appointment represents a booking that a client has made with a provider for a service.\n","example":{"add_to_calendar_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar","appointment_type":"in_person","cancel_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel","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","fields":{"age":30},"first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirm_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm","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"},"ics_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics","id":"appt_a1b2c3d4e5f6","join_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join","meeting":{"conferencing_provider":"zoom_admin","error_message":null,"external_meeting_id":"82912345678","host_url":"https://book.acme.com/p/appointments/appt_a1b2c3d4e5f6/host?token=An5thqO6Li9Dy9WXe3IsJQYDEXGjS70GjQIdNntKZgw","id":"amtg_a1b2c3d4e5f6","join_url":"https://zoom.us/j/82912345678","object":"appointment_meeting","password":"abc123","status":"created"},"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","time_zone":"America/New_York","updated_at":"2017-09-13T10:11:12Z"},"providers":[{"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","role":"primary","time_zone":"America/New_York","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"}],"reschedule_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule","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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar"],"add_to_google_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule"]}},"properties":{"add_to_calendar_url":{"description":"Canonical URL for the client to add this appointment to their calendar. Resolves to the account's active custom domain when configured, otherwise the canonical app host. The host portion may change if the account changes its custom-domain configuration.","format":"uri","type":"string"},"appointment_type":{"description":"The type of appointment.","enum":["in_person","virtual"],"type":"string"},"cancel_url":{"description":"Canonical URL for the client to cancel this appointment. Resolves to the account's active custom domain when configured, otherwise the canonical app host. The host portion may change if the account changes its custom-domain configuration.","format":"uri","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"},"fields":{"additionalProperties":true,"description":"A map of custom field values set on the client, keyed by field slug. Values for fields marked as sensitive will be `null` unless `include_sensitive` is `true`.","type":"object"},"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","fields"],"type":"object"},"confirm_url":{"description":"Canonical URL for the client to confirm this appointment. Resolves to the account's active custom domain when configured, otherwise the canonical app host. The host portion may change if the account changes its custom-domain configuration.","format":"uri","type":"string"},"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"},"ics_url":{"description":"Canonical URL for the client to download an iCal file for this appointment. Resolves to the account's active custom domain when configured, otherwise the canonical app host. The host portion may change if the account changes its custom-domain configuration.","format":"uri","type":"string"},"id":{"description":"Unique identifier for the object.","pattern":"^appt_\\w{12}$","type":"string"},"join_url":{"description":"Canonical URL for the client to join this appointment. Resolves to the account's active custom domain when configured, otherwise the canonical app host. The host portion may change if the account changes its custom-domain configuration.","format":"uri","type":"string"},"meeting":{"anyOf":[{"$ref":"#/components/schemas/AppointmentMeeting"}],"description":"Conferencing meeting details. Null when no conferencing was configured for this appointment.","nullable":true},"object":{"description":"String representing the object's type.","enum":["appointment"],"type":"string"},"provider":{"$ref":"#/components/schemas/Provider"},"providers":{"description":"All providers on this appointment. The primary provider is always listed first.","items":{"$ref":"#/components/schemas/AppointmentProvider"},"type":"array"},"reschedule_events":{"items":{"$ref":"#/components/schemas/RescheduleEvent"},"type":"array"},"reschedule_url":{"description":"Canonical URL for the client to reschedule this appointment. Resolves to the account's active custom domain when configured, otherwise the canonical app host. The host portion may change if the account changes its custom-domain configuration.","format":"uri","type":"string"},"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":{"deprecated":true,"description":"Deprecated nested URL collections for this appointment. Use the flat *_url fields instead.","properties":{"add_to_calendar":{"items":{"format":"uri","type":"string"},"type":"array"},"add_to_google_calendar":{"items":{"format":"uri","type":"string"},"type":"array"},"cancel":{"items":{"format":"uri","type":"string"},"type":"array"},"confirm":{"items":{"format":"uri","type":"string"},"type":"array"},"ics":{"items":{"format":"uri","type":"string"},"type":"array"},"join":{"items":{"format":"uri","type":"string"},"type":"array"},"reschedule":{"items":{"format":"uri","type":"string"},"type":"array"}},"required":["reschedule","cancel","confirm","join","add_to_calendar","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","providers","service","reschedule_url","cancel_url","confirm_url","join_url","add_to_calendar_url","ics_url","urls","reschedule_events","cancellation_events","confirmation_events","meeting"],"title":"Appointment","type":"object","x-tags":["Appointments"]},"BookingIntentWorkflow":{"description":"Server-computed workflow state for a booking intent. Provides step routing,\ncompletability, and defunct state so the frontend can render the correct\nbooking flow without inferring these from raw fields.\n","example":{"available_steps":["booking","info","form:frm_abc123def456"],"can_change_slot":true,"can_complete":false,"defunct_reason":null,"is_defunct":false,"resume_step":"info"},"properties":{"available_steps":{"description":"Ordered list of steps the user can visit. Computed from service forms and locked_fields.","items":{"type":"string"},"type":"array"},"can_change_slot":{"description":"Whether slot fields (start_at, end_at, time_zone) are unlocked and can be modified.","type":"boolean"},"can_complete":{"description":"Whether the intent has enough valid data to submit right now. When true, calling the complete endpoint will succeed regardless of whether the current status is pending or slot_selected.","type":"boolean"},"defunct_reason":{"description":"Why the intent is defunct. Null when not defunct.","enum":["abandoned","no_available_steps","slot_expired","status_invalid"],"nullable":true,"type":"string"},"is_defunct":{"description":"Whether the intent is in an unrecoverable state and should render a terminal UI.","type":"boolean"},"resume_step":{"description":"The step the UI should show on load or resume. One of: booking, info, form:<form_id>, confirmed, defunct.","type":"string"}},"required":["resume_step","available_steps","can_complete","can_change_slot","is_defunct"],"title":"BookingIntentWorkflow","type":"object"},"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","time_zone":"America/New_York","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},"CreateFormRequest":{"description":"Request schema for creating a form.","example":{"fields":[{"key":"full_name","label":"Full Name","position":0,"required":true,"type":"short_text"}],"internal_name":"Intake Form"},"properties":{"fields":{"description":"The fields in the form.","items":{"$ref":"#/components/schemas/FormFieldInput"},"type":"array"},"internal_name":{"description":"The name of the form.","type":"string"}},"required":["internal_name"],"title":"CreateFormRequest","type":"object"},"PublicAppointmentResponse":{"description":"Response schema for a single appointment created via a public interface.","example":{"data":{"add_to_calendar_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar","cancel_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel","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"},"ics_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics","id":"appt_a1b2c3d4e5f6","object":"public_appointment","reschedule_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule","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://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar"],"add_to_google_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel"],"ics":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics"],"reschedule":["https://book.acme.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","time_zone":"America/New_York","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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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"]},"ClientFieldResponse":{"description":"Response schema for a single client field","example":{"data":{"created_at":"2024-01-01T00:00:00Z","description":null,"id":"cf_a1b2c3d4e5f6","key":"company_name","label":"Company Name","object":"client_field","options":null,"sensitive":false,"sort_order":1,"type":"short_text","updated_at":"2024-01-01T00:00:00Z"}},"properties":{"data":{"description":"The client field details","items":{"$ref":"#/components/schemas/ClientField"},"type":"object"}},"required":["data"],"title":"ClientFieldResponse","type":"object"},"BookingIntent":{"description":"A booking intent that tracks the lifecycle of a booking attempt.","example":{"abandoned_at":null,"appointment":null,"booking_policy":{"hold":{"duration":"PT10M","enabled":true}},"client":null,"client_data":{"email":"jane@example.com","fields":{"age":30},"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"},"errors":null,"hold_until":"2026-02-22T10:10:00Z","id":"bi_abc123def456abc123def456","locked_fields":["provider_id","slot"],"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","time_zone":"America/New_York","updated_at":"2017-09-13T10:11:12Z"},"requirements":{"booking":{"complete":true},"info":{"complete":false},"submissions":[{"complete":false,"form_id":"frm_abc123def456"}]},"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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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","submissions":[],"updated_at":"2026-02-22T10:00:00Z","workflow":{"available_steps":["booking","info","form:frm_abc123def456"],"can_change_slot":true,"can_complete":false,"defunct_reason":null,"is_defunct":false,"resume_step":"info"}},"properties":{"abandoned_at":{"description":"When the intent was abandoned","format":"date-time","nullable":true,"type":"string"},"appointment":{"anyOf":[{"$ref":"#/components/schemas/Appointment"}],"description":"The created appointment. Present when status is completed.","nullable":true},"booking_policy":{"$ref":"#/components/schemas/BookingIntentBookingPolicy"},"client":{"anyOf":[{"$ref":"#/components/schemas/Client"}],"description":"The linked client","nullable":true},"client_data":{"description":"Client data accumulated during the booking flow. Sensitive fields (first_name, last_name, email, phone) are redacted unless include_sensitive is true. Values for `fields` entries flagged as sensitive are also redacted unless include_sensitive is true.","nullable":true,"properties":{"email":{"nullable":true,"type":"string"},"fields":{"additionalProperties":true,"description":"A map of custom field values set on the client, keyed by field slug. Values for fields marked as sensitive will be `null` unless `include_sensitive` is `true`.","type":"object"},"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},"errors":{"description":"Validation errors for data provided so far. Fields not yet submitted are not flagged. Null when not computed.","items":{"$ref":"#/components/schemas/JsonError"},"nullable":true,"type":"array"},"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.","items":{"enum":["service_id","provider_id","slot","client_data","submissions"],"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},"requirements":{"anyOf":[{"$ref":"#/components/schemas/BookingIntentRequirements"}],"description":"Per-section completeness status. Present on single-intent responses, null on list responses.","nullable":true},"secondary_providers":{"description":"Secondary providers assigned to this booking intent. Present on single-intent responses, null on list responses.","items":{"$ref":"#/components/schemas/Provider"},"nullable":true,"type":"array"},"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. Automatically transitions from pending to slot_selected when provider_id, start_at, end_at, and time_zone are all present (on create or update).","enum":["pending","slot_selected","completed","abandoned"],"type":"string"},"submissions":{"description":"Form submissions accumulated during the booking flow. Each entry contains a form_id and responses map.","items":{"$ref":"#/components/schemas/IntentSubmissionInput"},"type":"array"},"updated_at":{"description":"When the intent was last updated","format":"date-time","type":"string"},"workflow":{"anyOf":[{"$ref":"#/components/schemas/BookingIntentWorkflow"}],"description":"Server-computed workflow state. Present on single-intent responses, null on list responses.","nullable":true}},"required":["object","id","status","booking_policy","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"},"form_ids":{"description":"Optional list of form IDs to attach to the service. Each form is attached as required, with sort order matching the array order.","items":{"pattern":"^frm_\\w{12}$","type":"string"},"type":"array"},"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":{"add_to_calendar_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar","appointment_type":"in_person","cancel_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel","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","fields":{"age":30},"first_name":"Jane","last_name":"Smith","locale":"en-US","phone":"+15551234567","reference_id":"ext_12345","time_zone":"America/Chicago"},"confirm_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm","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"},"ics_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics","id":"appt_a1b2c3d4e5f6","join_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join","meeting":{"conferencing_provider":"zoom_admin","error_message":null,"external_meeting_id":"82912345678","host_url":"https://book.acme.com/p/appointments/appt_a1b2c3d4e5f6/host?token=An5thqO6Li9Dy9WXe3IsJQYDEXGjS70GjQIdNntKZgw","id":"amtg_a1b2c3d4e5f6","join_url":"https://zoom.us/j/82912345678","object":"appointment_meeting","password":"abc123","status":"created"},"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","time_zone":"America/New_York","updated_at":"2017-09-13T10:11:12Z"},"providers":[{"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","role":"primary","time_zone":"America/New_York","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"}],"reschedule_url":"https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/reschedule","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","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_calendar"],"add_to_google_calendar":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/add_to_google_calendar"],"cancel":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/cancel"],"confirm":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/confirm"],"ics":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/ics"],"join":["https://book.acme.com/c/appointments/appt_a1b2c3d4e5f6/join"],"reschedule":["https://book.acme.com/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"},"fields":{"additionalProperties":true,"description":"A map of custom field key-value pairs to set on this client.","type":"object"},"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/client_fields":{"get":{"callbacks":{},"description":"List all client fields for an account","operationId":"listClientFields","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientFieldsResponse"}}},"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 client fields","tags":["Client Fields"]},"post":{"callbacks":{},"description":"Create a new client field in the account.","operationId":"createClientField","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateClientFieldRequest"}}},"description":"Client field params","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientFieldResponse"}}},"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 field","tags":["Client Fields"]}},"/v1/appointments/{appointment_id}":{"get":{"callbacks":{},"description":"Get an existing appointment.","operationId":"getAppointment","parameters":[{"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":"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":"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":[],"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/services/{service_id}/forms":{"get":{"callbacks":{},"description":"List all forms attached to a service.","operationId":"listServiceForms","parameters":[{"description":"Service ID","in":"path","name":"service_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceFormsResponse"}}},"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 forms","tags":["Services"]},"post":{"callbacks":{},"description":"Attach an existing form to a service.","operationId":"attachServiceForm","parameters":[{"description":"Service ID","in":"path","name":"service_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachServiceFormRequest"}}},"description":"Service form params","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceFormResponse"}}},"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":"Attach form to service","tags":["Services"]}},"/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":"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":"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":"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":[],"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":"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":"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":"Client ID","in":"path","name":"client_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":true,"type":"boolean"}}],"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":"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":"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":"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":"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":"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/NotFoundResponse"}}},"description":"Not Found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"}},"summary":"Create booking intent","tags":["Public Booking"]}},"/v1/service_forms/{service_form_id}":{"delete":{"callbacks":{},"description":"Detach a form from a service.","operationId":"detachServiceForm","parameters":[{"description":"Service Form ID","in":"path","name":"service_form_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":"Detach form from service","tags":["Services"]}},"/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":"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":"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":"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":[],"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/forms/{form_id}":{"delete":{"callbacks":{},"description":"Delete an existing form.","operationId":"deleteForm","parameters":[{"description":"Form ID","in":"path","name":"form_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 form","tags":["Forms"]},"get":{"callbacks":{},"description":"Get a single form by ID.","operationId":"getForm","parameters":[{"description":"Form ID","in":"path","name":"form_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormResponse"}}},"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 form","tags":["Forms"]},"patch":{"callbacks":{},"description":"Update an existing form.","operationId":"updateForm","parameters":[{"description":"Form ID","in":"path","name":"form_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFormRequest"}}},"description":"Form params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormResponse"}}},"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 form","tags":["Forms"]}},"/v1/service_providers/{service_provider_id}":{"delete":{"callbacks":{},"description":"Remove a provider from the rotation for a service.","operationId":"deleteServiceProvider","parameters":[{"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":"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":"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":"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":"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/forms":{"get":{"callbacks":{},"description":"List all forms for an account.","operationId":"listForms","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":"Filter forms by name.","in":"query","name":"search","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormsResponse"}}},"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 forms","tags":["Forms"]},"post":{"callbacks":{},"description":"Create a new form in the account.","operationId":"createForm","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFormRequest"}}},"description":"Form params","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormResponse"}}},"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 form","tags":["Forms"]}},"/v1/booking_intents/{booking_intent_id}/slots":{"get":{"callbacks":{},"description":"Returns time slots available for this booking intent's configuration. The slot pattern is driven by the intent's primary service provider (or all service providers if no primary is set), filtered by the availability of any configured secondary providers.","operationId":"listBookingIntentSlots","parameters":[{"description":"Booking Intent ID","in":"path","name":"booking_intent_id","required":true,"schema":{"type":"string"}},{"description":"Start of time range (ISO date format). Defaults to today if not provided.","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.","in":"query","name":"until","required":false,"schema":{"format":"date","type":"string"}},{"description":"Maximum number of available slots to return. Either `limit` or `until` must be provided.","in":"query","name":"limit","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"Time zone for the slots (IANA format)","in":"query","name":"time_zone","required":false,"schema":{"default":"Etc/UTC","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlotListResponse"}}},"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 slots for a booking intent","tags":["Time Slots"]}},"/v1/appointments/{appointment_id}/confirm":{"post":{"callbacks":{},"description":"Confirm an existing appointment.","operationId":"confirmAppointment","parameters":[{"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":[],"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/NotFoundResponse"}}},"description":"Not Found"},"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":[],"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":[],"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":"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":"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":"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":[],"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":"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"},{"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/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":[],"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/NotFoundResponse"}}},"description":"Not Found"}},"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/NotFoundResponse"}}},"description":"Not Found"},"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":"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":[],"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/NotFoundResponse"}}},"description":"Not Found"},"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":"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":[],"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":"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/SlotListResponse"}}},"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":"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/services/{service_id}/forms/sort":{"post":{"callbacks":{},"description":"Reorder forms attached to a service.","operationId":"sortServiceForms","parameters":[{"description":"Service ID","in":"path","name":"service_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SortServiceFormsRequest"}}},"description":"Sort params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceFormsResponse"}}},"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":"Sort service forms","tags":["Services"]}},"/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":[],"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":"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":"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":"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/public/booking_intents/{booking_intent_id}/slots":{"get":{"callbacks":{},"description":"Returns time slots available for this booking intent's configuration via a\npublic interface (no authentication required). Only slots from\npublicly-visible schedules are returned.\n","operationId":"listPublicBookingIntentSlots","parameters":[{"description":"Booking Intent ID","in":"path","name":"booking_intent_id","required":true,"schema":{"type":"string"}},{"description":"Start of time range (ISO date format). Defaults to today if not provided.","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.","in":"query","name":"until","required":false,"schema":{"format":"date","type":"string"}},{"description":"Maximum number of available slots to return. Either `limit` or `until` must be provided.","in":"query","name":"limit","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"Time zone for the slots (IANA format)","in":"query","name":"time_zone","required":false,"schema":{"default":"Etc/UTC","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlotListResponse"}}},"description":"Success"},"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 slots for a booking intent","tags":["Public Booking"]}},"/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":"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":[],"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":[],"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":[],"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":"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":[],"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/client_fields/{client_field_id}":{"delete":{"callbacks":{},"description":"Delete an existing client field.","operationId":"deleteClientField","parameters":[{"description":"Client field ID","in":"path","name":"client_field_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 field","tags":["Client Fields"]},"get":{"callbacks":{},"description":"Get a single client field by ID.","operationId":"getClientField","parameters":[{"description":"Client field ID","in":"path","name":"client_field_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientFieldResponse"}}},"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 field","tags":["Client Fields"]},"patch":{"callbacks":{},"description":"Update an existing client field.","operationId":"updateClientField","parameters":[{"description":"Client field ID","in":"path","name":"client_field_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateClientFieldRequest"}}},"description":"Client field params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientFieldResponse"}}},"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 field","tags":["Client Fields"]}},"/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":"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":"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":"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 `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":"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 on the specified date.","in":"query","name":"date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Only return blocks on or after the specified date.","in":"query","name":"date_min","required":false,"schema":{"format":"date","type":"string"}},{"description":"Only return blocks on or before the specified date.","in":"query","name":"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":[],"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":"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":"A client field represents a custom data field attached to clients.","name":"Client Fields"},{"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 service represents a specific offering provided by one or more providers.","name":"Services"},{"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 form represents an intake form with typed fields that can be attached to services.","name":"Forms"},{"description":"A cancellation reason represents an option to choose from when cancelling an appointment.","name":"Cancellation Reasons"},{"description":"A time slot represents an available range of time for a service.","name":"Time Slots"},{"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"}]}