{"components":{"responses":{},"schemas":{"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"},"BookingLinkDeactivatedEventData":{"description":"This is an object representing data for the booking link deactivated event.","example":{"object":{"client":null,"created_at":"2017-09-12T12:34:55Z","expires_at":"2017-10-01T00:00:00Z","id":"bl_d025a96ac0c6d025a96ac0c6","locked_fields":["provider_id"],"max_uses":5,"metadata":{"campaign":"spring"},"name":"VIP onboarding","object":"booking_link","providers":[{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","email":"john@example.com","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","status":"active","updated_at":"2017-09-13T10:11:12Z","url":"https://example.savvycal.com/c/book/bl_d025a96ac0c6d025a96ac0c6","uses_count":1,"uses_remaining":4},"type":"booking_link.deactivated"},"properties":{"object":{"$ref":"#/components/schemas/BookingLink"},"type":{"description":"The event type.","enum":["booking_link.deactivated"],"type":"string"}},"required":["type","object"],"title":"BookingLinkDeactivatedEventData","type":"object","x-account-event-data":true},"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"},"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"},"UpdateBookingLinkRequest":{"description":"Request schema for updating a booking link","example":{"max_uses":null,"name":"VIP onboarding (closed)"},"properties":{"client_id":{"description":"The ID of a client to pre-select. Pass `null` to clear.","nullable":true,"pattern":"^clnt_\\w{12}$","type":"string"},"expires_at":{"description":"When the link should stop accepting new bookings. Pass `null` to clear.","format":"datetime","nullable":true,"type":"string"},"locked_fields":{"description":"Fields the public booker may not change on begotten booking intents.","items":{"enum":["service_id","provider_id","slot","client_data","submissions"],"type":"string"},"type":"array"},"max_uses":{"description":"How many confirmed bookings the link may beget. Pass `null` for unlimited.","minimum":1,"nullable":true,"type":"integer"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"description":"An optional label for the link.","nullable":true,"type":"string"},"provider_ids":{"description":"Replaces the provider subset. Pass an empty array to restore the full service rotation.","items":{"pattern":"^prov_\\w{12}$","type":"string"},"type":"array"}},"title":"UpdateBookingLinkRequest","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"},"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"},"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"},"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"]},"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"]},"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"]},"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","email":"john@example.com","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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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},"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"},"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","buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"buffered_end_at":{"local":"2025-03-01T12:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736468400,"utc":"2025-03-01T05:00:00Z"},"buffered_start_at":{"local":"2025-03-01T09:45:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736460300,"utc":"2025-03-01T02:45:00Z"},"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","email":"john@example.com","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","email":"john@example.com","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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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},"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","email":"john@example.com","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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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"]},"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"},"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","buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"buffered_end_at":{"local":"2025-03-01T12:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736468400,"utc":"2025-03-01T05:00:00Z"},"buffered_start_at":{"local":"2025-03-01T09:45:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736460300,"utc":"2025-03-01T02:45:00Z"},"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","email":"john@example.com","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","email":"john@example.com","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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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"},"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"},"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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"}},"properties":{"data":{"$ref":"#/components/schemas/Service"}},"required":["data"],"title":"ServiceResponse","type":"object"},"ServiceConferencingResponse":{"description":"Response schema for configuring a service's conferencing across all providers","example":{"data":{"configured":[{"provider_id":"prov_d025a96ac0c6"}],"skipped":[{"provider_id":"prov_a1b2c3d4e5f6","reason":"no_user_mapping"}]}},"properties":{"data":{"$ref":"#/components/schemas/ServiceConferencingResult"}},"required":["data"],"title":"ServiceConferencingResponse","type":"object"},"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"},"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"},"ByExternalUserId":{"example":{"connected_account_id":"cact_d025a96ac0c6","external_user_id":"exusr_d025a96ac0c6"},"properties":{"connected_account_id":{"description":"The ID of the conferencing connected account to host meetings.","pattern":"^cact_\\w{12}$","type":"string"},"external_user_id":{"description":"The ID of the external user (e.g., Zoom user) whose account hosts meetings for this provider.","pattern":"^exusr_\\w{12}$","type":"string"}},"required":["connected_account_id","external_user_id"],"title":"ByExternalUserId","type":"object"},"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"},"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"},"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"},"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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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},"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"},"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"},"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"},"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"},"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"},"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","email":"john@example.com","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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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"},"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"},"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","email":"john@example.com","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},"UserMappingResponse":{"description":"Response schema for a single user mapping","example":{"data":{"external_user":{"email":"dr.smith@example.com","first_name":"Jane","id":"exusr_d025a96ac0c6","last_name":"Smith","object":"external_user","status":"active"},"object":"user_mapping","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","email":"john@example.com","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"},"source":"manual"}},"properties":{"data":{"$ref":"#/components/schemas/UserMapping"}},"required":["data"],"title":"UserMappingResponse","type":"object"},"CreateBookingLinkRequest":{"description":"Request schema for creating a booking link","example":{"locked_fields":["provider_id"],"max_uses":5,"name":"VIP onboarding","provider_ids":["prov_d025a96ac0c6"],"service_id":"srv_d025a96ac0c6"},"properties":{"client_id":{"description":"The ID of a client to pre-select on the link.","nullable":true,"pattern":"^clnt_\\w{12}$","type":"string"},"expires_at":{"description":"When the link should stop accepting new bookings.","format":"datetime","nullable":true,"type":"string"},"locked_fields":{"description":"Fields the public booker may not change on begotten booking intents.","items":{"enum":["service_id","provider_id","slot","client_data","submissions"],"type":"string"},"type":"array"},"max_uses":{"description":"How many confirmed bookings the link may beget. Omit for unlimited.","minimum":1,"nullable":true,"type":"integer"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"description":"An optional label for the link.","nullable":true,"type":"string"},"provider_ids":{"description":"The provider subset the link is restricted to. Omit or pass an empty array to use the full service rotation.","items":{"pattern":"^prov_\\w{12}$","type":"string"},"type":"array"},"service_id":{"description":"The ID of the service to create the link on.","pattern":"^srv_\\w{12}$","type":"string"}},"required":["service_id"],"title":"CreateBookingLinkRequest","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},"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"},"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"},"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","email":"john@example.com","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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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},"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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"properties":{"appointment_type":{"description":"The type of appointment.","enum":["in_person","virtual"],"type":"string"},"booking_policy":{"$ref":"#/components/schemas/BookingPolicy"},"buffer_policy":{"$ref":"#/components/schemas/BufferPolicy"},"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","buffer_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"]},"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","buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"buffered_end_at":{"local":"2025-03-01T12:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736468400,"utc":"2025-03-01T05:00:00Z"},"buffered_start_at":{"local":"2025-03-01T09:45:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736460300,"utc":"2025-03-01T02:45:00Z"},"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","email":"john@example.com","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","email":"john@example.com","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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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},"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},"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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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},"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"},"Opening":{"description":"An opening is a one-off range of available time for a provider, sitting\nalongside their recurring schedules.\n","example":{"created_at":"2025-02-17T17:49:19Z","date":"2025-06-15","end_time":"17:00","id":"opn_d025a96ac0c6","object":"opening","provider_id":"prov_d025a96ac0c6","start_time":"09:00","time_zone":"America/New_York","title":"Extra clinic hours","updated_at":"2025-02-17T17:49:19Z"},"properties":{"created_at":{"description":"When the opening was created.","format":"datetime","type":"string"},"date":{"description":"The date of the opening.","format":"date","type":"string"},"end_time":{"description":"The end time of the opening (24-hour clock, e.g. `17:00`).","type":"string"},"id":{"description":"Unique identifier for the object.","pattern":"^opn_\\w{12}$","type":"string"},"object":{"description":"String representing the object's type.","enum":["opening"],"type":"string"},"provider_id":{"description":"The ID of the provider the opening belongs to.","type":"string"},"start_time":{"description":"The start time of the opening (24-hour clock, e.g. `09:00`).","type":"string"},"time_zone":{"description":"The IANA time zone the opening's times are authored in.","type":"string"},"title":{"description":"An optional display title for the opening.","nullable":true,"type":"string"},"updated_at":{"description":"When the opening was last updated.","format":"datetime","type":"string"}},"required":["object","id","title","date","start_time","end_time","time_zone","provider_id","created_at","updated_at"],"title":"Opening","type":"object","x-tags":["Openings"]},"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","email":"john@example.com","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"},"email":{"description":"The provider's email address.","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","email","time_zone","updated_at"],"title":"Provider","type":"object","x-tags":["Providers"]},"BookingLinksResponse":{"description":"Response schema for a list of booking links","example":{"data":[{"client":null,"created_at":"2017-09-12T12:34:55Z","expires_at":"2017-10-01T00:00:00Z","id":"bl_d025a96ac0c6d025a96ac0c6","locked_fields":["provider_id"],"max_uses":5,"metadata":{"campaign":"spring"},"name":"VIP onboarding","object":"booking_link","providers":[{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","email":"john@example.com","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","status":"active","updated_at":"2017-09-13T10:11:12Z","url":"https://example.savvycal.com/c/book/bl_d025a96ac0c6d025a96ac0c6","uses_count":1,"uses_remaining":4}],"meta":{"current_page":1,"page_size":10,"total_count":50,"total_pages":5}},"properties":{"data":{"items":{"$ref":"#/components/schemas/BookingLink"},"type":"array"},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","meta"],"title":"BookingLinksResponse","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"},"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"]},"SyncExternalUsersResponse":{"description":"Response schema for the external users synced from a connected account","example":{"data":[{"email":"dr.smith@example.com","first_name":"Jane","id":"exusr_d025a96ac0c6","last_name":"Smith","object":"external_user","status":"active"}]},"properties":{"data":{"description":"The external users synced from the connected account","items":{"$ref":"#/components/schemas/ExternalUser"},"type":"array"}},"required":["data"],"title":"SyncExternalUsersResponse","type":"object"},"ServiceProviderConferencing":{"description":"This is an object representing the conferencing configuration for a service provider (e.g., the Zoom user whose account hosts meetings for this provider on this service).","example":{"conferencing_provider":"zoom_admin","connected_account":{"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"},"external_user":{"email":"dr.smith@example.com","first_name":"Jane","id":"exusr_d025a96ac0c6","last_name":"Smith","object":"external_user","status":"active"},"object":"service_provider_conferencing","provider_id":"prov_d025a96ac0c6","service_id":"srv_d025a96ac0c6"},"properties":{"conferencing_provider":{"description":"The conferencing provider used to host meetings.","enum":["zoom_admin"],"type":"string"},"connected_account":{"$ref":"#/components/schemas/ConnectedAccount"},"external_user":{"$ref":"#/components/schemas/ExternalUser"},"object":{"description":"String representing the object's type.","enum":["service_provider_conferencing"],"type":"string"},"provider_id":{"description":"The ID of the provider.","pattern":"^prov_\\w{12}$","type":"string"},"service_id":{"description":"The ID of the service.","pattern":"^srv_\\w{12}$","type":"string"}},"required":["object","service_id","provider_id","conferencing_provider","connected_account","external_user"],"title":"ServiceProviderConferencing","type":"object","x-tags":["Services"]},"UserMappingsResponse":{"description":"Response schema for multiple user mappings","example":{"data":[{"external_user":{"email":"dr.smith@example.com","first_name":"Jane","id":"exusr_d025a96ac0c6","last_name":"Smith","object":"external_user","status":"active"},"object":"user_mapping","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","email":"john@example.com","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"},"source":"manual"}],"meta":{"current_page":1,"page_size":10,"total_count":50,"total_pages":5}},"properties":{"data":{"description":"A list of user mappings","items":{"$ref":"#/components/schemas/UserMapping"},"type":"array"},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","meta"],"title":"UserMappingsResponse","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"},"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"},"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"},"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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","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"},"buffer_policy":{"$ref":"#/components/schemas/BufferPolicy"},"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"},"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","email":"john@example.com","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},"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},"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"},"BookingLinkDeletedEventData":{"description":"This is an object representing data for the booking link deleted event.","example":{"object":{"client":null,"created_at":"2017-09-12T12:34:55Z","expires_at":"2017-10-01T00:00:00Z","id":"bl_d025a96ac0c6d025a96ac0c6","locked_fields":["provider_id"],"max_uses":5,"metadata":{"campaign":"spring"},"name":"VIP onboarding","object":"booking_link","providers":[{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","email":"john@example.com","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","status":"active","updated_at":"2017-09-13T10:11:12Z","url":"https://example.savvycal.com/c/book/bl_d025a96ac0c6d025a96ac0c6","uses_count":1,"uses_remaining":4},"type":"booking_link.deleted"},"properties":{"object":{"$ref":"#/components/schemas/BookingLink"},"type":{"description":"The event type.","enum":["booking_link.deleted"],"type":"string"}},"required":["type","object"],"title":"BookingLinkDeletedEventData","type":"object","x-account-event-data":true},"ByEmail":{"example":{"connected_account_id":"cact_d025a96ac0c6","email":"dr.smith@example.com"},"properties":{"connected_account_id":{"description":"The ID of the conferencing connected account to host meetings.","pattern":"^cact_\\w{12}$","type":"string"},"email":{"description":"The email address of the external user to host meetings, matched case-insensitively against the connected account's external users.","type":"string"}},"required":["connected_account_id","email"],"title":"ByEmail","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"},"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"},"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"]},"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"},"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","buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"buffered_end_at":{"local":"2025-03-01T12:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736468400,"utc":"2025-03-01T05:00:00Z"},"buffered_start_at":{"local":"2025-03-01T09:45:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736460300,"utc":"2025-03-01T02:45:00Z"},"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","email":"john@example.com","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","email":"john@example.com","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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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},"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"},"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","email":"john@example.com","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"},"email":{"description":"The provider's email address.","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","email","time_zone","updated_at","role"],"title":"AppointmentProvider","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"},"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","email":"john@example.com","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"},"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"},"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"]},"SetServiceConferencingRequest":{"description":"Request schema for setting a service's default conferencing. The conferencing provider is inferred from the connected account. Setting the default also configures every provider on the service from their default user mappings on the connected account; providers without a mapping are skipped.","example":{"connected_account_id":"cact_d025a96ac0c6"},"properties":{"connected_account_id":{"description":"The ID of the conferencing connected account to use as the service default.","pattern":"^cact_\\w{12}$","type":"string"}},"required":["connected_account_id"],"title":"SetServiceConferencingRequest","type":"object"},"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","email":"john@example.com","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},"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","email":"john@example.com","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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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},"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},"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"},"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","buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"buffered_end_at":{"local":"2025-03-01T12:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736468400,"utc":"2025-03-01T05:00:00Z"},"buffered_start_at":{"local":"2025-03-01T09:45:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736460300,"utc":"2025-03-01T02:45:00Z"},"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","email":"john@example.com","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","email":"john@example.com","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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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"},"buffer_policy":{"$ref":"#/components/schemas/BufferPolicy"},"buffered_end_at":{"anyOf":[{"$ref":"#/components/schemas/ZonedDateTime"}],"description":"The end of the window shielded from other bookings, including the after-buffer captured at booking time. Equals `end_at` when no buffer applies."},"buffered_start_at":{"anyOf":[{"$ref":"#/components/schemas/ZonedDateTime"}],"description":"The start of the window shielded from other bookings, including the before-buffer captured at booking time. Equals `start_at` when no buffer applies."},"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","buffered_start_at","buffered_end_at","buffer_policy","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"]},"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"},"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"},"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},"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"},"JsonErrorResponse":{"description":"Response schema for validation errors","properties":{"errors":{"items":{"$ref":"#/components/schemas/JsonError"},"type":"array"}},"required":["errors"],"title":"JsonErrorResponse","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},"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"},"ProviderResponse":{"description":"Response schema for a single provider","example":{"data":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","email":"john@example.com","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"},"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"},"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"},"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"},"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","email":"john@example.com","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"},"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"},"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"},"UpdateOpeningRequest":{"description":"Request schema for updating an opening.","example":{"date":"2025-06-15","end_time":"16:00","start_time":"10:00","time_zone":"America/New_York","title":"Extra clinic hours"},"properties":{"date":{"description":"The date of the opening.","format":"date","type":"string"},"end_time":{"description":"The end time of the opening (24-hour clock, e.g. `17:00`). Must be after the start time.","type":"string"},"start_time":{"description":"The start time of the opening (24-hour clock, e.g. `09:00`).","type":"string"},"time_zone":{"description":"The IANA time zone the opening's times are authored in.","type":"string"},"title":{"description":"An optional display title for the opening.","nullable":true,"type":"string"}},"title":"UpdateOpeningRequest","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"},"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"},"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},"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"]},"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"},"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":{"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"},"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},"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"},"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"},"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"},"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"]},"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"]},"BookingLinkActivatedEventData":{"description":"This is an object representing data for the booking link activated event.","example":{"object":{"client":null,"created_at":"2017-09-12T12:34:55Z","expires_at":"2017-10-01T00:00:00Z","id":"bl_d025a96ac0c6d025a96ac0c6","locked_fields":["provider_id"],"max_uses":5,"metadata":{"campaign":"spring"},"name":"VIP onboarding","object":"booking_link","providers":[{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","email":"john@example.com","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","status":"active","updated_at":"2017-09-13T10:11:12Z","url":"https://example.savvycal.com/c/book/bl_d025a96ac0c6d025a96ac0c6","uses_count":1,"uses_remaining":4},"type":"booking_link.activated"},"properties":{"object":{"$ref":"#/components/schemas/BookingLink"},"type":{"description":"The event type.","enum":["booking_link.activated"],"type":"string"}},"required":["type","object"],"title":"BookingLinkActivatedEventData","type":"object","x-account-event-data":true},"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"},"UpdateAccountRequest":{"description":"Request schema for updating an account","example":{"name":"My Account"},"properties":{"name":{"description":"The account name.","type":"string"}},"title":"UpdateAccountRequest","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"]},"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","email":"john@example.com","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"},"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","buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"buffered_end_at":{"local":"2025-03-01T12:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736468400,"utc":"2025-03-01T05:00:00Z"},"buffered_start_at":{"local":"2025-03-01T09:45:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736460300,"utc":"2025-03-01T02:45:00Z"},"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","email":"john@example.com","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","email":"john@example.com","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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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},"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"},"SetServiceProviderConferencingRequest":{"description":"Request schema for setting a service provider's conferencing configuration. The connected account must be a conferencing connection (e.g., Zoom). Exactly one of `external_user_id` or `email` must be provided to identify the hosting external user, which must belong to the connected account.","example":{"connected_account_id":"cact_d025a96ac0c6","external_user_id":"exusr_d025a96ac0c6"},"oneOf":[{"example":{"connected_account_id":"cact_d025a96ac0c6","external_user_id":"exusr_d025a96ac0c6"},"properties":{"connected_account_id":{"description":"The ID of the conferencing connected account to host meetings.","pattern":"^cact_\\w{12}$","type":"string"},"external_user_id":{"description":"The ID of the external user (e.g., Zoom user) whose account hosts meetings for this provider.","pattern":"^exusr_\\w{12}$","type":"string"}},"required":["connected_account_id","external_user_id"],"title":"ByExternalUserId","type":"object"},{"example":{"connected_account_id":"cact_d025a96ac0c6","email":"dr.smith@example.com"},"properties":{"connected_account_id":{"description":"The ID of the conferencing connected account to host meetings.","pattern":"^cact_\\w{12}$","type":"string"},"email":{"description":"The email address of the external user to host meetings, matched case-insensitively against the connected account's external users.","type":"string"}},"required":["connected_account_id","email"],"title":"ByEmail","type":"object"}],"title":"SetServiceProviderConferencingRequest"},"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"},"OpeningUpdatedEventData":{"description":"This is an object representing data for the opening updated event.","example":{"object":{"created_at":"2025-02-17T17:49:19Z","date":"2025-06-15","end_time":"17:00","id":"opn_d025a96ac0c6","object":"opening","provider_id":"prov_d025a96ac0c6","start_time":"09:00","time_zone":"America/New_York","title":"Extra clinic hours","updated_at":"2025-02-17T17:49:19Z"},"type":"opening.updated"},"properties":{"object":{"$ref":"#/components/schemas/Opening"},"type":{"description":"The event type.","enum":["opening.updated"],"type":"string"}},"required":["type","object"],"title":"OpeningUpdatedEventData","type":"object","x-account-event-data":true},"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","buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"buffered_end_at":{"local":"2025-03-01T12:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736468400,"utc":"2025-03-01T05:00:00Z"},"buffered_start_at":{"local":"2025-03-01T09:45:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736460300,"utc":"2025-03-01T02:45:00Z"},"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","email":"john@example.com","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","email":"john@example.com","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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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},"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},"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"},"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"},"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","buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"buffered_end_at":{"local":"2025-03-01T12:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736468400,"utc":"2025-03-01T05:00:00Z"},"buffered_start_at":{"local":"2025-03-01T09:45:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736460300,"utc":"2025-03-01T02:45:00Z"},"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","email":"john@example.com","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","email":"john@example.com","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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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},"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"},"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"]},"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"},"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},"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","buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"buffered_end_at":{"local":"2025-03-01T12:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736468400,"utc":"2025-03-01T05:00:00Z"},"buffered_start_at":{"local":"2025-03-01T09:45:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736460300,"utc":"2025-03-01T02:45:00Z"},"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","email":"john@example.com","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","email":"john@example.com","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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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},"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},"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","email":"john@example.com","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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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"},"ExternalUser":{"description":"This is an object representing a user synced from a connected external account (e.g., a Zoom user).","example":{"email":"dr.smith@example.com","first_name":"Jane","id":"exusr_d025a96ac0c6","last_name":"Smith","object":"external_user","status":"active"},"properties":{"email":{"description":"The email address of the user at the provider.","nullable":true,"type":"string"},"first_name":{"description":"The first name of the user at the provider.","nullable":true,"type":"string"},"id":{"description":"Unique identifier for the object.","pattern":"^exusr_\\w{12}$","type":"string"},"last_name":{"description":"The last name of the user at the provider.","nullable":true,"type":"string"},"object":{"description":"String representing the object's type.","enum":["external_user"],"type":"string"},"status":{"description":"The status of the user at the provider. 'active' means the user is active, 'inactive' means the user is deactivated or suspended, 'pending' means the user has not yet activated their account. Additional values may be added over time.","enum":["active","inactive","pending"],"nullable":true,"type":"string"}},"required":["object","id","email","first_name","last_name","status"],"title":"ExternalUser","type":"object","x-tags":["Connected Accounts"]},"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"},"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"]},"ProvidersResponse":{"description":"Response schema for multiple providers","example":{"data":[{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","email":"john@example.com","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"},"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"]},"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","email":"john@example.com","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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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},"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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","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"},"buffer_policy":{"$ref":"#/components/schemas/BufferPolicy"},"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"},"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"},"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"},"EmptyResponse":{"description":"Empty response with no content","example":"","title":"EmptyResponse","type":"string"},"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"},"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},"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"},"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"},"OpeningResponse":{"description":"Response schema for a single opening","example":{"data":{"created_at":"2025-02-17T17:49:19Z","date":"2025-06-15","end_time":"17:00","id":"opn_d025a96ac0c6","object":"opening","provider_id":"prov_d025a96ac0c6","start_time":"09:00","time_zone":"America/New_York","title":"Extra clinic hours","updated_at":"2025-02-17T17:49:19Z"}},"properties":{"data":{"$ref":"#/components/schemas/Opening"}},"required":["data"],"title":"OpeningResponse","type":"object"},"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"},"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"},"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},"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"},"SetUserMappingRequest":{"description":"Request schema for setting a user mapping. Exactly one of `external_user_id` or `email` must be provided to identify the external user.","example":{"external_user_id":"exusr_d025a96ac0c6"},"oneOf":[{"example":{"external_user_id":"exusr_d025a96ac0c6"},"properties":{"external_user_id":{"description":"The ID of the external user to map to the provider.","pattern":"^exusr_\\w{12}$","type":"string"}},"required":["external_user_id"],"title":"ByExternalUserId","type":"object"},{"example":{"email":"dr.smith@example.com"},"properties":{"email":{"description":"The email address of the external user to map to the provider, matched case-insensitively against the connected account's external users.","type":"string"}},"required":["email"],"title":"ByEmail","type":"object"}],"title":"SetUserMappingRequest"},"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","buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"buffered_end_at":{"local":"2025-03-01T12:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736468400,"utc":"2025-03-01T05:00:00Z"},"buffered_start_at":{"local":"2025-03-01T09:45:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736460300,"utc":"2025-03-01T02:45:00Z"},"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","email":"john@example.com","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","email":"john@example.com","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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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},"ExternalUsersResponse":{"description":"Response schema for multiple external users","example":{"data":[{"email":"dr.smith@example.com","first_name":"Jane","id":"exusr_d025a96ac0c6","last_name":"Smith","object":"external_user","status":"active"}],"meta":{"current_page":1,"page_size":10,"total_count":50,"total_pages":5}},"properties":{"data":{"description":"A list of external users","items":{"$ref":"#/components/schemas/ExternalUser"},"type":"array"},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","meta"],"title":"ExternalUsersResponse","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"},"initial_schedule":{"$ref":"#/components/schemas/InitialProviderSchedule"},"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"},"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"},"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"]},"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","email":"john@example.com","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},"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"},"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"},"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"},"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"},"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"},"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","buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"buffered_end_at":{"local":"2025-03-01T12:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736468400,"utc":"2025-03-01T05:00:00Z"},"buffered_start_at":{"local":"2025-03-01T09:45:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736460300,"utc":"2025-03-01T02:45:00Z"},"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","email":"john@example.com","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","email":"john@example.com","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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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},"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"},"InitialProviderSchedule":{"description":"The provider's initial schedule, created atomically with the provider when a brand-new provider row is created (ignored on reactivation or affiliation of an existing provider). All fields are optional. Omit the object or pass `null` for no schedules; an empty object `{}` still creates a schedule with `effective_from` defaulted to yesterday and no weekly rules.","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 schedule. Defaults to yesterday when omitted.","format":"date","type":"string"},"effective_to":{"description":"The effective end date of the schedule.","format":"date","nullable":true,"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 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. Defaults to none when omitted.","items":{"$ref":"#/components/schemas/WeeklyRule"},"type":"array"}},"title":"InitialProviderSchedule","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"},"OpeningsResponse":{"description":"Response schema for a list of openings","example":{"data":[{"created_at":"2025-02-17T17:49:19Z","date":"2025-06-15","end_time":"17:00","id":"opn_d025a96ac0c6","object":"opening","provider_id":"prov_d025a96ac0c6","start_time":"09:00","time_zone":"America/New_York","title":"Extra clinic hours","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 openings","items":{"$ref":"#/components/schemas/Opening"},"type":"array"},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["data","meta"],"title":"OpeningsResponse","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"},"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","buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"buffered_end_at":{"local":"2025-03-01T12:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736468400,"utc":"2025-03-01T05:00:00Z"},"buffered_start_at":{"local":"2025-03-01T09:45:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736460300,"utc":"2025-03-01T02:45:00Z"},"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","email":"john@example.com","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","email":"john@example.com","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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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},"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"},"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"},"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"},"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"},"BookingLinkCreatedEventData":{"description":"This is an object representing data for the booking link created event.","example":{"object":{"client":null,"created_at":"2017-09-12T12:34:55Z","expires_at":"2017-10-01T00:00:00Z","id":"bl_d025a96ac0c6d025a96ac0c6","locked_fields":["provider_id"],"max_uses":5,"metadata":{"campaign":"spring"},"name":"VIP onboarding","object":"booking_link","providers":[{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","email":"john@example.com","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","status":"active","updated_at":"2017-09-13T10:11:12Z","url":"https://example.savvycal.com/c/book/bl_d025a96ac0c6d025a96ac0c6","uses_count":1,"uses_remaining":4},"type":"booking_link.created"},"properties":{"object":{"$ref":"#/components/schemas/BookingLink"},"type":{"description":"The event type.","enum":["booking_link.created"],"type":"string"}},"required":["type","object"],"title":"BookingLinkCreatedEventData","type":"object","x-account-event-data":true},"OpeningDeletedEventData":{"description":"This is an object representing data for the opening deleted event.","example":{"object":{"created_at":"2025-02-17T17:49:19Z","date":"2025-06-15","end_time":"17:00","id":"opn_d025a96ac0c6","object":"opening","provider_id":"prov_d025a96ac0c6","start_time":"09:00","time_zone":"America/New_York","title":"Extra clinic hours","updated_at":"2025-02-17T17:49:19Z"},"type":"opening.deleted"},"properties":{"object":{"$ref":"#/components/schemas/Opening"},"type":{"description":"The event type.","enum":["opening.deleted"],"type":"string"}},"required":["type","object"],"title":"OpeningDeletedEventData","type":"object","x-account-event-data":true},"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"},"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"},"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"},"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},"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"},"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","email":"john@example.com","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},"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},"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"},"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"},"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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"}],"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"},"BookingLink":{"description":"A reusable, shareable configuration for booking a service.","example":{"client":null,"created_at":"2017-09-12T12:34:55Z","expires_at":"2017-10-01T00:00:00Z","id":"bl_d025a96ac0c6d025a96ac0c6","locked_fields":["provider_id"],"max_uses":5,"metadata":{"campaign":"spring"},"name":"VIP onboarding","object":"booking_link","providers":[{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","email":"john@example.com","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","status":"active","updated_at":"2017-09-13T10:11:12Z","url":"https://example.savvycal.com/c/book/bl_d025a96ac0c6d025a96ac0c6","uses_count":1,"uses_remaining":4},"properties":{"client":{"anyOf":[{"$ref":"#/components/schemas/Client"},{"nullable":true,"type":"object"}],"description":"The pre-selected client for the link, if any."},"created_at":{"format":"datetime","type":"string"},"expires_at":{"description":"When the link stops accepting new bookings. `null` means it never expires.","format":"datetime","nullable":true,"type":"string"},"id":{"pattern":"^bl_\\w{24}$","type":"string"},"locked_fields":{"description":"Fields that the public booker may not change on begotten booking intents.","items":{"enum":["service_id","provider_id","slot","client_data","submissions"],"type":"string"},"type":"array"},"max_uses":{"description":"How many confirmed bookings the link may beget. `null` means unlimited.","minimum":1,"nullable":true,"type":"integer"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"description":"An optional label for the link.","nullable":true,"type":"string"},"object":{"enum":["booking_link"],"type":"string"},"providers":{"description":"The provider subset the link is restricted to. An empty array means the full service rotation applies.","items":{"$ref":"#/components/schemas/Provider"},"type":"array"},"service_id":{"description":"The ID of the service the link belongs to.","pattern":"^srv_\\w{12}$","type":"string"},"status":{"description":"The current state of the link. `paused` when deactivated, `expired` once past `expires_at`, `used_up` once `max_uses` is reached, otherwise `active`.","enum":["active","paused","expired","used_up"],"type":"string"},"updated_at":{"format":"datetime","type":"string"},"url":{"description":"The fully-qualified URL at which the link can be booked. Resolves to the account's active custom domain when configured, otherwise the canonical app host.","format":"uri","type":"string"},"uses_count":{"description":"The number of confirmed bookings begotten through this link.","type":"integer"},"uses_remaining":{"description":"The number of confirmed bookings still available. `null` when unlimited.","nullable":true,"type":"integer"}},"required":["object","id","service_id","status","max_uses","uses_count","uses_remaining","locked_fields","metadata","url","providers","created_at","updated_at"],"title":"BookingLink","type":"object","x-tags":["Booking Links"]},"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},"BookingLinkResponse":{"description":"Response schema for a single booking link","example":{"data":{"client":null,"created_at":"2017-09-12T12:34:55Z","expires_at":"2017-10-01T00:00:00Z","id":"bl_d025a96ac0c6d025a96ac0c6","locked_fields":["provider_id"],"max_uses":5,"metadata":{"campaign":"spring"},"name":"VIP onboarding","object":"booking_link","providers":[{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","email":"john@example.com","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","status":"active","updated_at":"2017-09-13T10:11:12Z","url":"https://example.savvycal.com/c/book/bl_d025a96ac0c6d025a96ac0c6","uses_count":1,"uses_remaining":4}},"properties":{"data":{"$ref":"#/components/schemas/BookingLink"}},"required":["data"],"title":"BookingLinkResponse","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"},"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"},"BookingLinkUpdatedEventData":{"description":"This is an object representing data for the booking link updated event.","example":{"object":{"client":null,"created_at":"2017-09-12T12:34:55Z","expires_at":"2017-10-01T00:00:00Z","id":"bl_d025a96ac0c6d025a96ac0c6","locked_fields":["provider_id"],"max_uses":5,"metadata":{"campaign":"spring"},"name":"VIP onboarding","object":"booking_link","providers":[{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","email":"john@example.com","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","status":"active","updated_at":"2017-09-13T10:11:12Z","url":"https://example.savvycal.com/c/book/bl_d025a96ac0c6d025a96ac0c6","uses_count":1,"uses_remaining":4},"type":"booking_link.updated"},"properties":{"object":{"$ref":"#/components/schemas/BookingLink"},"type":{"description":"The event type.","enum":["booking_link.updated"],"type":"string"}},"required":["type","object"],"title":"BookingLinkUpdatedEventData","type":"object","x-account-event-data":true},"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"},"CreateOpeningRequest":{"description":"Request schema for creating an opening.","example":{"date":"2025-06-15","end_time":"17:00","start_time":"09:00","time_zone":"America/New_York","title":"Extra clinic hours"},"properties":{"date":{"description":"The date of the opening.","format":"date","type":"string"},"end_time":{"description":"The end time of the opening (24-hour clock, e.g. `17:00`). Must be after the start time. To open availability across midnight, create two adjacent openings.","type":"string"},"start_time":{"description":"The start time of the opening (24-hour clock, e.g. `09:00`).","type":"string"},"time_zone":{"description":"The IANA time zone the opening's times are authored in. Defaults to the provider's location time zone when omitted.","type":"string"},"title":{"description":"An optional display title for the opening.","nullable":true,"type":"string"}},"required":["date","start_time","end_time"],"title":"CreateOpeningRequest","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"},"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","email":"john@example.com","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"},"BufferPolicy":{"description":"A policy for shielding time before and/or after appointments from being\nbooked (e.g. prep time before, charting time after). The policy is\ncaptured on the appointment at booking time and continues to shield the\nsurrounding time even if the service configuration changes later.\n","example":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"properties":{"after_duration":{"description":"The buffer duration after the appointment.","nullable":true,"pattern":"^PT(?:(\\d+)H)?(?:(\\d+)M)?$","type":"string"},"before_duration":{"description":"The buffer duration before the appointment.","nullable":true,"pattern":"^PT(?:(\\d+)H)?(?:(\\d+)M)?$","type":"string"},"enabled":{"description":"Whether buffers are enabled for the service.","type":"boolean"}},"required":["enabled"],"title":"BufferPolicy","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"},"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"},"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"},"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"},"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","buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"buffered_end_at":{"local":"2025-03-01T12:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736468400,"utc":"2025-03-01T05:00:00Z"},"buffered_start_at":{"local":"2025-03-01T09:45:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736460300,"utc":"2025-03-01T02:45:00Z"},"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","email":"john@example.com","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","email":"john@example.com","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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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"},"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"},"ServiceConferencingResult":{"description":"The outcome of configuring a service's conferencing across all of its providers, listing which providers were configured and which were skipped.","example":{"configured":[{"provider_id":"prov_d025a96ac0c6"}],"skipped":[{"provider_id":"prov_a1b2c3d4e5f6","reason":"no_user_mapping"}]},"properties":{"configured":{"items":{"description":"A provider whose conferencing was configured from its default user mapping.","properties":{"provider_id":{"pattern":"^prov_\\w{12}$","type":"string"}},"required":["provider_id"],"type":"object"},"type":"array"},"skipped":{"items":{"description":"A provider that was skipped because it has no default user mapping on the connected account.","properties":{"provider_id":{"pattern":"^prov_\\w{12}$","type":"string"},"reason":{"description":"Why the provider was skipped.","enum":["no_user_mapping"],"type":"string"}},"required":["provider_id","reason"],"type":"object"},"type":"array"}},"required":["configured","skipped"],"title":"ServiceConferencingResult","type":"object","x-tags":["Services"]},"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","buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"buffered_end_at":{"local":"2025-03-01T12:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736468400,"utc":"2025-03-01T05:00:00Z"},"buffered_start_at":{"local":"2025-03-01T09:45:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736460300,"utc":"2025-03-01T02:45:00Z"},"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","email":"john@example.com","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","email":"john@example.com","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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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":{"service.created":"#/components/schemas/ServiceCreatedEventData","provider_schedule.deleted":"#/components/schemas/ProviderScheduleDeletedEventData","appointment.meeting.canceled":"#/components/schemas/AppointmentMeetingCanceledEventData","booking_intent.completed":"#/components/schemas/BookingIntentCompletedEventData","account_user.deleted":"#/components/schemas/AccountUserDeletedEventData","booking_intent.updated":"#/components/schemas/BookingIntentUpdatedEventData","appointment.meeting.created":"#/components/schemas/AppointmentMeetingCreatedEventData","appointment.created":"#/components/schemas/AppointmentCreatedEventData","booking_link.deleted":"#/components/schemas/BookingLinkDeletedEventData","booking_intent.abandoned":"#/components/schemas/BookingIntentAbandonedEventData","provider_schedule.updated":"#/components/schemas/ProviderScheduleUpdatedEventData","block.deleted":"#/components/schemas/BlockDeletedEventData","block.updated":"#/components/schemas/BlockUpdatedEventData","connected_account.reconnected":"#/components/schemas/ConnectedAccountReconnectedEventData","appointment.meeting.updated":"#/components/schemas/AppointmentMeetingUpdatedEventData","booking_link.deactivated":"#/components/schemas/BookingLinkDeactivatedEventData","opening.deleted":"#/components/schemas/OpeningDeletedEventData","connected_account.refresh_failed":"#/components/schemas/ConnectedAccountRefreshFailedEventData","block.created":"#/components/schemas/BlockCreatedEventData","connected_account.deleted":"#/components/schemas/ConnectedAccountDeletedEventData","client.created":"#/components/schemas/ClientCreatedEventData","appointment.meeting.create_failed":"#/components/schemas/AppointmentMeetingCreateFailedEventData","connected_account.created":"#/components/schemas/ConnectedAccountCreatedEventData","appointment.confirmed":"#/components/schemas/AppointmentConfirmedEventData","booking_intent.created":"#/components/schemas/BookingIntentCreatedEventData","client.updated":"#/components/schemas/ClientUpdatedEventData","appointment.rescheduled":"#/components/schemas/AppointmentRescheduledEventData","appointment.meeting.replaced":"#/components/schemas/AppointmentMeetingReplacedEventData","appointment.meeting.cancel_failed":"#/components/schemas/AppointmentMeetingCancelFailedEventData","service_provider.deleted":"#/components/schemas/ServiceProviderDeletedEventData","service_provider.created":"#/components/schemas/ServiceProviderCreatedEventData","appointment.meeting.replace_failed":"#/components/schemas/AppointmentMeetingReplaceFailedEventData","booking_link.created":"#/components/schemas/BookingLinkCreatedEventData","booking_link.activated":"#/components/schemas/BookingLinkActivatedEventData","account_user.created":"#/components/schemas/AccountUserCreatedEventData","appointment.meeting.update_failed":"#/components/schemas/AppointmentMeetingUpdateFailedEventData","opening.updated":"#/components/schemas/OpeningUpdatedEventData","service.deleted":"#/components/schemas/ServiceDeletedEventData","service.updated":"#/components/schemas/ServiceUpdatedEventData","provider.updated":"#/components/schemas/ProviderUpdatedEventData","opening.created":"#/components/schemas/OpeningCreatedEventData","provider_schedule.created":"#/components/schemas/ProviderScheduleCreatedEventData","booking_link.updated":"#/components/schemas/BookingLinkUpdatedEventData","appointment.canceled":"#/components/schemas/AppointmentCanceledEventData","provider.deactivated":"#/components/schemas/ProviderDeactivatedEventData","provider.created":"#/components/schemas/ProviderCreatedEventData","account_user.updated":"#/components/schemas/AccountUserUpdatedEventData","provider.reactivated":"#/components/schemas/ProviderReactivatedEventData","client.deleted":"#/components/schemas/ClientDeletedEventData","appointment.deleted":"#/components/schemas/AppointmentDeletedEventData"},"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/BookingLinkActivatedEventData"},{"$ref":"#/components/schemas/BookingLinkCreatedEventData"},{"$ref":"#/components/schemas/BookingLinkDeactivatedEventData"},{"$ref":"#/components/schemas/BookingLinkDeletedEventData"},{"$ref":"#/components/schemas/BookingLinkUpdatedEventData"},{"$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/OpeningCreatedEventData"},{"$ref":"#/components/schemas/OpeningUpdatedEventData"},{"$ref":"#/components/schemas/OpeningDeletedEventData"},{"$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"},"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"},"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"},"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","buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"buffered_end_at":{"local":"2025-03-01T12:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736468400,"utc":"2025-03-01T05:00:00Z"},"buffered_start_at":{"local":"2025-03-01T09:45:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736460300,"utc":"2025-03-01T02:45:00Z"},"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","email":"john@example.com","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","email":"john@example.com","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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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},"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"},"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","buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"buffered_end_at":{"local":"2025-03-01T12:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736468400,"utc":"2025-03-01T05:00:00Z"},"buffered_start_at":{"local":"2025-03-01T09:45:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736460300,"utc":"2025-03-01T02:45:00Z"},"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","email":"john@example.com","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","email":"john@example.com","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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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},"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. Newly created providers have no schedules — create schedules separately via the provider schedules API.","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"},"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","buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"buffered_end_at":{"local":"2025-03-01T12:00:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736468400,"utc":"2025-03-01T05:00:00Z"},"buffered_start_at":{"local":"2025-03-01T09:45:00-05:00","object":"zoned_date_time","time_zone":"America/New_York","unix_ts":1736460300,"utc":"2025-03-01T02:45:00Z"},"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","email":"john@example.com","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","email":"john@example.com","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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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},"OpeningCreatedEventData":{"description":"This is an object representing data for the opening created event.","example":{"object":{"created_at":"2025-02-17T17:49:19Z","date":"2025-06-15","end_time":"17:00","id":"opn_d025a96ac0c6","object":"opening","provider_id":"prov_d025a96ac0c6","start_time":"09:00","time_zone":"America/New_York","title":"Extra clinic hours","updated_at":"2025-02-17T17:49:19Z"},"type":"opening.created"},"properties":{"object":{"$ref":"#/components/schemas/Opening"},"type":{"description":"The event type.","enum":["opening.created"],"type":"string"}},"required":["type","object"],"title":"OpeningCreatedEventData","type":"object","x-account-event-data":true},"ServiceProviderConferencingResponse":{"description":"Response schema for a single service provider conferencing configuration","example":{"data":{"conferencing_provider":"zoom_admin","connected_account":{"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"},"external_user":{"email":"dr.smith@example.com","first_name":"Jane","id":"exusr_d025a96ac0c6","last_name":"Smith","object":"external_user","status":"active"},"object":"service_provider_conferencing","provider_id":"prov_d025a96ac0c6","service_id":"srv_d025a96ac0c6"}},"properties":{"data":{"$ref":"#/components/schemas/ServiceProviderConferencing"}},"required":["data"],"title":"ServiceProviderConferencingResponse","type":"object"},"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"},"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"},"UserMapping":{"description":"This is an object representing a default mapping between a provider and an external user on a connected account (e.g., the Zoom user whose account is used to host meetings for a provider).","example":{"external_user":{"email":"dr.smith@example.com","first_name":"Jane","id":"exusr_d025a96ac0c6","last_name":"Smith","object":"external_user","status":"active"},"object":"user_mapping","provider":{"created_at":"2017-09-12T12:34:55Z","display_name":"John Smith","email":"john@example.com","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"},"source":"manual"},"properties":{"external_user":{"$ref":"#/components/schemas/ExternalUser"},"object":{"description":"String representing the object's type.","enum":["user_mapping"],"type":"string"},"provider":{"$ref":"#/components/schemas/Provider"},"source":{"description":"How the mapping was established. 'auto' means it was matched automatically by email, 'manual' means it was set explicitly. Additional values may be added over time.","enum":["auto","manual"],"type":"string"}},"required":["object","provider","external_user","source"],"title":"UserMapping","type":"object","x-tags":["Connected Accounts"]},"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"},"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","email":"john@example.com","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},"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"},"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":{"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"},"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}},"buffer_policy":{"after_duration":"PT1H","before_duration":"PT15M","enabled":true},"cancellation_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_cancellation":true,"disabled_message":"Cancellation is disabled for this service."},"change_policy_text":"Appointments within 48 hours cannot be canceled or rescheduled online. Please call our office.","created_at":"2025-02-17T17:49:19Z","duration":"PT1H30M","forms":[{"created_at":"2025-02-17T17:49:19Z","form_id":"frm_d025a96ac0c6","form_name":"Intake Form","id":"sf_d025a96ac0c6","object":"service_form","sort_order":1,"updated_at":"2025-02-17T17:49:19Z"}],"id":"srv_d025a96ac0c6","internal_name":null,"metadata":{"external_id":"123"},"name":"Initial Consult","object":"service","provider_notifications":{"additional_recipients":["admin@example.com"],"notify_provider":true,"types":[{"type":"new_appointment"}]},"rescheduling_policy":{"advance_notice":{"enabled":true,"minimum_duration":"PT1H"},"allow_rescheduling":true,"disabled_message":"Rescheduling is disabled for this service."},"slot_rules":[{"recurrence_rule":{"byday":["mo","we","fr"],"freq":"weekly"},"start_times":["09:00","10:00"]}],"updated_at":"2025-02-17T17:49:19Z"},"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},"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"]}},"securitySchemes":{"authorization":{"scheme":"bearer","type":"http"}}},"info":{"title":"SavvyCal Appointments API","version":"1.0"},"openapi":"3.0.0","paths":{"/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/openings/{opening_id}":{"delete":{"callbacks":{},"description":"Delete an existing opening.","operationId":"deleteOpening","parameters":[{"description":"Opening ID","in":"path","name":"opening_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 opening","tags":["Openings"]},"get":{"callbacks":{},"description":"Get an opening by ID.","operationId":"getOpening","parameters":[{"description":"Opening ID","in":"path","name":"opening_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpeningResponse"}}},"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 opening","tags":["Openings"]},"patch":{"callbacks":{},"description":"Update an existing opening.","operationId":"updateOpening","parameters":[{"description":"Opening ID","in":"path","name":"opening_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateOpeningRequest"}}},"description":"Opening params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpeningResponse"}}},"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 opening","tags":["Openings"]}},"/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/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/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/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/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/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}/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/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/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/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/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/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/openings":{"get":{"callbacks":{},"description":"List all openings account-wide or for a specific provider.\n\nOpenings are sorted by `date` in ascending order (oldest first).\n","operationId":"listOpenings","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"}},{"description":"Only return openings on the specified date.","in":"query","name":"date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Only return openings on or after the specified date.","in":"query","name":"date_min","required":false,"schema":{"format":"date","type":"string"}},{"description":"Only return openings on or before the specified date.","in":"query","name":"date_max","required":false,"schema":{"format":"date","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpeningsResponse"}}},"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 openings","tags":["Openings"]}},"/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/connected_accounts/{connected_account_id}/external_users/sync":{"post":{"callbacks":{},"description":"Refresh the external users for a connected account by syncing them from the\nprovider (e.g., pulling the current list of users from a connected Zoom\naccount). New users are added, existing users are updated, and users no\nlonger present at the provider are removed. Returns the full, refreshed list\nof external users.\n\nReturns a 404 when the connected account does not exist, is not accessible\nto the current actor, or is not a conferencing connected account. Returns a\n502 when the provider could not be reached or rejected the request (e.g. the\nconnection needs to be re-authorized).\n","operationId":"syncConnectedAccountExternalUsers","parameters":[{"description":"The connected account's unique identifier","example":"cact_abcdef123456","in":"path","name":"connected_account_id","required":true,"schema":{"pattern":"^cact_\\w{12}$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncExternalUsersResponse"}}},"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"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericErrorResponse"}}},"description":"GenericError"}},"summary":"Sync external users","tags":["Connected Accounts"]}},"/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/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/connected_accounts/{connected_account_id}/user_mappings":{"get":{"callbacks":{},"description":"List the default user mappings between providers and external users for a\nconnected account. Mappings whose provider has been deactivated are not\nincluded.\n\nReturns a 404 when the connected account does not exist, is not accessible\nto the current actor, or is not a conferencing connected account.\n","operationId":"listUserMappings","parameters":[{"description":"The connected account's unique identifier","example":"cact_abcdef123456","in":"path","name":"connected_account_id","required":true,"schema":{"pattern":"^cact_\\w{12}$","type":"string"}},{"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/UserMappingsResponse"}}},"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 user mappings","tags":["Connected Accounts"]}},"/v1/providers/{provider_id}/openings":{"post":{"callbacks":{},"description":"Create a new opening.","operationId":"createOpening","parameters":[{"description":"Provider ID","in":"path","name":"provider_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOpeningRequest"}}},"description":"Opening params","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpeningResponse"}}},"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 opening","tags":["Openings"]}},"/v1/services/{service_id}/conferencing/sync":{"post":{"callbacks":{},"description":"Re-apply the service's default conferencing to all of its providers, in\nalignment with the current default user mappings on the connected account.\nUse this after establishing or updating user mappings on the connection to\npush them onto the service's providers, without re-declaring the default.\n\nProviders without a default user mapping are skipped (reported in the\nresponse, not an error).\n\nReturns a 404 when the service does not exist or is not accessible to the\ncurrent actor, and a 422 when the service has no default conferencing\nconfigured.\n","operationId":"syncServiceConferencing","parameters":[{"description":"The service's unique identifier","example":"srv_abcdef123456","in":"path","name":"service_id","required":true,"schema":{"pattern":"^srv_\\w{12}$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceConferencingResponse"}}},"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/GenericErrorResponse"}}},"description":"GenericError"}},"summary":"Sync service conferencing","tags":["Services"]}},"/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"},"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 provider schedules","tags":["Provider Schedules"]}},"/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/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/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/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/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/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/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/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/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/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/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}":{"delete":{"callbacks":{},"description":"Deactivates an existing provider.","operationId":"deactivateProvider","parameters":[{"description":"The provider's unique identifier","example":"prov_abcdef123456","in":"path","name":"provider_id","required":true,"schema":{"pattern":"^prov_\\w{12}$","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":"The provider's unique identifier","example":"prov_abcdef123456","in":"path","name":"provider_id","required":true,"schema":{"pattern":"^prov_\\w{12}$","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":"The provider's unique identifier","example":"prov_abcdef123456","in":"path","name":"provider_id","required":true,"schema":{"pattern":"^prov_\\w{12}$","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/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/connected_accounts/{connected_account_id}":{"delete":{"callbacks":{},"description":"Deletes (disconnects) an existing connected account.","operationId":"deleteConnectedAccount","parameters":[{"description":"The connected account's unique identifier","example":"cact_abcdef123456","in":"path","name":"connected_account_id","required":true,"schema":{"pattern":"^cact_\\w{12}$","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":"The connected account's unique identifier","example":"cact_abcdef123456","in":"path","name":"connected_account_id","required":true,"schema":{"pattern":"^cact_\\w{12}$","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":"The connected account's unique identifier","example":"cact_abcdef123456","in":"path","name":"connected_account_id","required":true,"schema":{"pattern":"^cact_\\w{12}$","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/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/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/booking_links/{booking_link_id}":{"delete":{"callbacks":{},"description":"Delete a booking link by ID.","operationId":"deleteBookingLink","parameters":[{"description":"Booking Link ID","in":"path","name":"booking_link_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 a booking link","tags":["Booking Links"]},"get":{"callbacks":{},"description":"Retrieve a single booking link by ID.","operationId":"getBookingLink","parameters":[{"description":"Booking Link ID","in":"path","name":"booking_link_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingLinkResponse"}}},"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 a booking link","tags":["Booking Links"]},"patch":{"callbacks":{},"description":"Update a booking link by ID.","operationId":"updateBookingLink","parameters":[{"description":"Booking Link ID","in":"path","name":"booking_link_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBookingLinkRequest"}}},"description":"Booking link params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingLinkResponse"}}},"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 a booking link","tags":["Booking Links"]}},"/v1/services/{service_id}/providers/{provider_id}/conferencing":{"delete":{"callbacks":{},"description":"Remove the conferencing configuration for a service provider. Succeeds even\nwhen no conferencing is currently configured.\n\nReturns a 404 when the service or provider does not exist, the provider is\nnot assigned to the service, or the service provider is not accessible to\nthe current actor.\n","operationId":"clearServiceProviderConferencing","parameters":[{"description":"The service's unique identifier","example":"srv_abcdef123456","in":"path","name":"service_id","required":true,"schema":{"pattern":"^srv_\\w{12}$","type":"string"}},{"description":"The provider's unique identifier","example":"prov_abcdef123456","in":"path","name":"provider_id","required":true,"schema":{"pattern":"^prov_\\w{12}$","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":"Clear service provider conferencing","tags":["Services"]},"get":{"callbacks":{},"description":"Get the conferencing configuration for a service provider.\n\nReturns a 404 when the service or provider does not exist, the provider is\nnot assigned to the service, the service provider is not accessible to the\ncurrent actor, or no conferencing is configured.\n","operationId":"getServiceProviderConferencing","parameters":[{"description":"The service's unique identifier","example":"srv_abcdef123456","in":"path","name":"service_id","required":true,"schema":{"pattern":"^srv_\\w{12}$","type":"string"}},{"description":"The provider's unique identifier","example":"prov_abcdef123456","in":"path","name":"provider_id","required":true,"schema":{"pattern":"^prov_\\w{12}$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceProviderConferencingResponse"}}},"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 provider conferencing","tags":["Services"]},"put":{"callbacks":{},"description":"Set the conferencing configuration for a service provider. The hosting\nexternal user can be identified by ID or by email address (matched\ncase-insensitively against the connected account's external users) — exactly\none of `external_user_id` or `email` must be provided. `email` is a\nconvenience; when it matches no external user, the connected account's\nexternal users are refreshed from the provider and matching is retried once,\nso a freshly-added user can be selected without a manual sync. Matching still\nfails with a 422 when the email matches zero (after a successful refresh) or\nmultiple external users, so integrations that need determinism should resolve\nand use `external_user_id`. When the refresh itself cannot reach the provider\n(e.g. the connection needs to be re-authorized), a 502 is returned rather\nthan a 422.\n\nThe external user must belong to the connected account, which must be a\nconferencing connection on the same account as the service provider.\n\nSetting conferencing replaces any existing configuration for the service\nprovider, so this operation is an idempotent upsert.\n\nReturns a 404 when the service or provider does not exist, the provider is\nnot assigned to the service, or the service provider is not accessible to\nthe current actor.\n","operationId":"setServiceProviderConferencing","parameters":[{"description":"The service's unique identifier","example":"srv_abcdef123456","in":"path","name":"service_id","required":true,"schema":{"pattern":"^srv_\\w{12}$","type":"string"}},{"description":"The provider's unique identifier","example":"prov_abcdef123456","in":"path","name":"provider_id","required":true,"schema":{"pattern":"^prov_\\w{12}$","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetServiceProviderConferencingRequest"}}},"description":"Service provider conferencing params","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceProviderConferencingResponse"}}},"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"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericErrorResponse"}}},"description":"GenericError"}},"summary":"Set service provider conferencing","tags":["Services"]}},"/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/booking_links":{"get":{"callbacks":{},"description":"List all booking links for an account.","operationId":"listBookingLinks","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 service ID(s). Accepts a single ID or comma-delimited list.","in":"query","name":"service_ids","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingLinksResponse"}}},"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 links","tags":["Booking Links"]},"post":{"callbacks":{},"description":"Create a booking link for a service.","operationId":"createBookingLink","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBookingLinkRequest"}}},"description":"Booking link params","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingLinkResponse"}}},"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 a booking link","tags":["Booking Links"]}},"/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/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/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/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/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/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/services/{service_id}/conferencing":{"delete":{"callbacks":{},"description":"Clear a service's default conferencing and remove conferencing from all of\nits providers.\n\nReturns a 404 when the service does not exist or is not accessible to the\ncurrent actor.\n","operationId":"clearServiceConferencing","parameters":[{"description":"The service's unique identifier","example":"srv_abcdef123456","in":"path","name":"service_id","required":true,"schema":{"pattern":"^srv_\\w{12}$","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":"Clear service conferencing","tags":["Services"]},"put":{"callbacks":{},"description":"Set a service's default conferencing and configure every provider on the\nservice from their default user mappings on the connected account. Providers\nwithout a default user mapping are skipped (reported in the response, not an\nerror).\n\nReturns a 404 when the service does not exist or is not accessible to the\ncurrent actor, and a 422 when `connected_account_id` does not reference a\nconferencing connection on the service's account.\n","operationId":"setServiceConferencing","parameters":[{"description":"The service's unique identifier","example":"srv_abcdef123456","in":"path","name":"service_id","required":true,"schema":{"pattern":"^srv_\\w{12}$","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetServiceConferencingRequest"}}},"description":"Service conferencing params","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceConferencingResponse"}}},"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":"Set service conferencing","tags":["Services"]}},"/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":{"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/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/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/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/connected_accounts/{connected_account_id}/external_users":{"get":{"callbacks":{},"description":"List the external users synced from a connected account (e.g., the users\non a connected Zoom account).\n\nReturns a 404 when the connected account does not exist, is not accessible\nto the current actor, or is not a conferencing connected account.\n","operationId":"listConnectedAccountExternalUsers","parameters":[{"description":"The connected account's unique identifier","example":"cact_abcdef123456","in":"path","name":"connected_account_id","required":true,"schema":{"pattern":"^cact_\\w{12}$","type":"string"}},{"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 external users matching this email address (case-insensitive).","in":"query","name":"email","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalUsersResponse"}}},"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 external users","tags":["Connected Accounts"]}},"/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/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/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/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/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"]}},"/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}/providers/{provider_id}":{"delete":{"callbacks":{},"description":"Remove a provider from the rotation for a service.","operationId":"deleteServiceProvider","parameters":[{"description":"The service's unique identifier","example":"srv_abcdef123456","in":"path","name":"service_id","required":true,"schema":{"pattern":"^srv_\\w{12}$","type":"string"}},{"description":"The provider's unique identifier","example":"prov_abcdef123456","in":"path","name":"provider_id","required":true,"schema":{"pattern":"^prov_\\w{12}$","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/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/connected_accounts/{connected_account_id}/user_mappings/{provider_id}":{"delete":{"callbacks":{},"description":"Remove the default user mapping between a provider and an external user on\na connected account. Mappings on deactivated providers can also be removed.\n\nReturns a 404 when the connected account does not exist, is not accessible\nto the current actor, or is not a conferencing connected account; when the\nprovider does not exist; or when no mapping exists for the provider on\nthis connected account.\n","operationId":"deleteUserMapping","parameters":[{"description":"The connected account's unique identifier","example":"cact_abcdef123456","in":"path","name":"connected_account_id","required":true,"schema":{"pattern":"^cact_\\w{12}$","type":"string"}},{"description":"The provider's unique identifier","example":"prov_abcdef123456","in":"path","name":"provider_id","required":true,"schema":{"pattern":"^prov_\\w{12}$","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 user mapping","tags":["Connected Accounts"]},"get":{"callbacks":{},"description":"Get the default user mapping between a provider and an external user on a\nconnected account.\n\nReturns a 404 when the connected account does not exist, is not accessible\nto the current actor, or is not a conferencing connected account; when the\nprovider does not exist or has been deactivated; or when no mapping exists\nfor the provider on this connected account.\n","operationId":"getUserMapping","parameters":[{"description":"The connected account's unique identifier","example":"cact_abcdef123456","in":"path","name":"connected_account_id","required":true,"schema":{"pattern":"^cact_\\w{12}$","type":"string"}},{"description":"The provider's unique identifier","example":"prov_abcdef123456","in":"path","name":"provider_id","required":true,"schema":{"pattern":"^prov_\\w{12}$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMappingResponse"}}},"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 user mapping","tags":["Connected Accounts"]},"put":{"callbacks":{},"description":"Set the default user mapping between a provider and an external user on a\nconnected account. The external user can be identified by ID or by email\naddress (matched case-insensitively against the connected account's\nexternal users) — exactly one of the two must be provided. `email` is a\nconvenience; when it matches no external user, the connected account's\nexternal users are refreshed from the provider and matching is retried once,\nso a freshly-added user can be mapped without a manual sync. Matching still\nfails with a 422 when the email matches zero (after a successful refresh) or\nmultiple external users, so integrations that need determinism should resolve\nand use `external_user_id`. When the refresh itself cannot reach the provider\n(e.g. the connection needs to be re-authorized), a 502 is returned rather\nthan a 422.\n\nSetting a mapping replaces any existing mapping for the provider on this\nconnected account, so this operation is an idempotent upsert.\n\nReturns a 404 when the connected account does not exist, is not accessible\nto the current actor, or is not a conferencing connected account; or when\nthe provider does not exist or has been deactivated.\n","operationId":"setUserMapping","parameters":[{"description":"The connected account's unique identifier","example":"cact_abcdef123456","in":"path","name":"connected_account_id","required":true,"schema":{"pattern":"^cact_\\w{12}$","type":"string"}},{"description":"The provider's unique identifier","example":"prov_abcdef123456","in":"path","name":"provider_id","required":true,"schema":{"pattern":"^prov_\\w{12}$","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetUserMappingRequest"}}},"description":"User mapping params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMappingResponse"}}},"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"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericErrorResponse"}}},"description":"GenericError"}},"summary":"Set user mapping","tags":["Connected Accounts"]}},"/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/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"]}}},"security":[{"authorization":[]}],"servers":[{"url":"https://api.savvycal.app","variables":{}}],"tags":[{"description":"Account users represent a user's relationship with an account.","name":"Account Users"},{"description":"An appointment represents a booking that a client has made with a provider for a specific service.","name":"Appointments"},{"name":"Openings"},{"description":"A booking intent tracks the lifecycle of a multi-step booking attempt.","name":"Booking Intents"},{"description":"Endpoints for public booking interfaces.","name":"Public Booking"},{"description":"A service represents a specific offering provided by one or more providers.","name":"Services"},{"description":"A dashboard session allows you to create seamless, secure login experiences from external systems or integrations.","name":"Dashboard Sessions"},{"description":"A role represents a set of permissions for users in an account.","name":"Roles"},{"description":"A time slot represents an available range of time for a service.","name":"Time Slots"},{"description":"A form represents an intake form with typed fields that can be attached to services.","name":"Forms"},{"description":"A connected account represents an external integration, such as Google Calendar or Zoom.","name":"Connected Accounts"},{"description":"A provider schedule represents working hours for a provider.","name":"Provider Schedules"},{"description":"A block represents a range of unavailable time for a provider, service, service provider, or location.","name":"Blocks"},{"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 cancellation reason represents an option to choose from when cancelling an appointment.","name":"Cancellation Reasons"},{"name":"Booking Links"},{"description":"A client field represents a custom data field attached to clients.","name":"Client Fields"},{"description":"An account represents an organization and serves as the core tenancy boundary for all resources in the system.","name":"Accounts"},{"description":"A client represents a person who receives services from providers.","name":"Clients"}]}