Skip to main content

ghl_models/v2/
calendars.rs

1//! `calendars` data models for GoHighLevel API V2 (62 types).
2//!
3//! Generated from HighLevel's official OpenAPI spec for the
4//! **Calendars** module. Every endpoint that uses these types, with its
5//! parameters, required scopes and enum values, is documented in the
6//! [`calendars` API reference](https://github.com/Shahroz/ghl-rs/blob/main/docs/api/calendars.md).
7//!
8//! Enable with `features = ["calendars"]`.
9// @generated by xtask/generate_models.py — do not edit by hand.
10// Source: https://github.com/GoHighLevel/highlevel-api-docs
11// Doc comments are HighLevel's own field descriptions, reflowed verbatim, so
12// they aren't held to rustdoc's markdown conventions.
13#![allow(
14    missing_docs,
15    clippy::doc_lazy_continuation,
16    clippy::doc_overindented_list_items
17)]
18
19use serde::{Deserialize, Serialize};
20
21/// `AllGroupsSuccessfulResponseDTO` from the GoHighLevel OpenAPI spec.
22#[derive(Debug, Clone, Default, Serialize, Deserialize)]
23pub struct AllGroupsSuccessfulResponseDTO {
24    #[serde(default, skip_serializing_if = "Vec::is_empty")]
25    pub groups: Vec<GroupDTO>,
26}
27
28/// `AppointmentCreateSchema` from the GoHighLevel OpenAPI spec.
29#[derive(Debug, Clone, Default, Serialize, Deserialize)]
30pub struct AppointmentCreateSchema {
31    /// Title
32    #[serde(default, skip_serializing_if = "Option::is_none")]
33    pub title: Option<String>,
34    /// Meeting location type. - If `address` is provided in the request body, the
35    /// `meetingLocationType` defaults to **custom**.
36    /// Allowed values: `custom`, `zoom`, `gmeet`, `phone`, `address`, `ms_teams`, `google`.
37    #[serde(
38        rename = "meetingLocationType",
39        default,
40        skip_serializing_if = "Option::is_none"
41    )]
42    pub meeting_location_type: Option<String>,
43    /// The unique identifier for the meeting location. - This value can be found in
44    /// `calendar.locationConfigurations`or `calendar.teamMembers[].locationConfigurations`
45    #[serde(
46        rename = "meetingLocationId",
47        default,
48        skip_serializing_if = "Option::is_none"
49    )]
50    pub meeting_location_id: Option<String>,
51    /// Flag to override location config - **false** - If only `meetingLocationId` is provided -
52    /// **true** - If only `meetingLocationType` is provided
53    #[serde(
54        rename = "overrideLocationConfig",
55        default,
56        skip_serializing_if = "Option::is_none"
57    )]
58    pub override_location_config: Option<bool>,
59    /// Allowed values: `new`, `confirmed`, `cancelled`, `showed`, `noshow`, `invalid`.
60    #[serde(
61        rename = "appointmentStatus",
62        default,
63        skip_serializing_if = "Option::is_none"
64    )]
65    pub appointment_status: Option<String>,
66    /// Assigned User Id
67    #[serde(
68        rename = "assignedUserId",
69        default,
70        skip_serializing_if = "Option::is_none"
71    )]
72    pub assigned_user_id: Option<String>,
73    /// Appointment Description
74    #[serde(default, skip_serializing_if = "Option::is_none")]
75    pub description: Option<String>,
76    /// Appointment Address
77    #[serde(default, skip_serializing_if = "Option::is_none")]
78    pub address: Option<String>,
79    /// If set to true, the minimum scheduling notice and date range would be ignored
80    #[serde(
81        rename = "ignoreDateRange",
82        default,
83        skip_serializing_if = "Option::is_none"
84    )]
85    pub ignore_date_range: Option<bool>,
86    /// If set to false, the automations will not run
87    #[serde(rename = "toNotify", default, skip_serializing_if = "Option::is_none")]
88    pub to_notify: Option<bool>,
89    /// If true the time slot validation would be avoided for any appointment creation (even the
90    /// ignoreDateRange)
91    #[serde(
92        rename = "ignoreFreeSlotValidation",
93        default,
94        skip_serializing_if = "Option::is_none"
95    )]
96    pub ignore_free_slot_validation: Option<bool>,
97    /// RRULE as per the iCalendar (RFC 5545) specification for recurring events. DTSTART is not
98    /// required, instance ids are calculated on the basis of startTime of the event. The rrule
99    /// only be applied if ignoreFreeSlotValidation is true.
100    #[serde(default, skip_serializing_if = "Option::is_none")]
101    pub rrule: Option<String>,
102    /// Calendar Id
103    /// Required by the API.
104    #[serde(rename = "calendarId")]
105    pub calendar_id: String,
106    /// Location Id
107    /// Required by the API.
108    #[serde(rename = "locationId")]
109    pub location_id: String,
110    /// Contact Id
111    /// Required by the API.
112    #[serde(rename = "contactId")]
113    pub contact_id: String,
114    /// Start Time
115    /// Required by the API.
116    #[serde(rename = "startTime")]
117    pub start_time: String,
118    /// End Time
119    #[serde(rename = "endTime", default, skip_serializing_if = "Option::is_none")]
120    pub end_time: Option<String>,
121}
122
123/// `AppointmentEditSchema` from the GoHighLevel OpenAPI spec.
124#[derive(Debug, Clone, Default, Serialize, Deserialize)]
125pub struct AppointmentEditSchema {
126    /// Title
127    #[serde(default, skip_serializing_if = "Option::is_none")]
128    pub title: Option<String>,
129    /// Meeting location type. - If `address` is provided in the request body, the
130    /// `meetingLocationType` defaults to **custom**.
131    /// Allowed values: `custom`, `zoom`, `gmeet`, `phone`, `address`, `ms_teams`, `google`.
132    #[serde(
133        rename = "meetingLocationType",
134        default,
135        skip_serializing_if = "Option::is_none"
136    )]
137    pub meeting_location_type: Option<String>,
138    /// The unique identifier for the meeting location. - This value can be found in
139    /// `calendar.locationConfigurations`or `calendar.teamMembers[].locationConfigurations`
140    #[serde(
141        rename = "meetingLocationId",
142        default,
143        skip_serializing_if = "Option::is_none"
144    )]
145    pub meeting_location_id: Option<String>,
146    /// Flag to override location config - **false** - If only `meetingLocationId` is provided -
147    /// **true** - If only `meetingLocationType` is provided
148    #[serde(
149        rename = "overrideLocationConfig",
150        default,
151        skip_serializing_if = "Option::is_none"
152    )]
153    pub override_location_config: Option<bool>,
154    /// Allowed values: `new`, `confirmed`, `cancelled`, `showed`, `noshow`, `invalid`.
155    #[serde(
156        rename = "appointmentStatus",
157        default,
158        skip_serializing_if = "Option::is_none"
159    )]
160    pub appointment_status: Option<String>,
161    /// Assigned User Id
162    #[serde(
163        rename = "assignedUserId",
164        default,
165        skip_serializing_if = "Option::is_none"
166    )]
167    pub assigned_user_id: Option<String>,
168    /// Appointment Description
169    #[serde(default, skip_serializing_if = "Option::is_none")]
170    pub description: Option<String>,
171    /// Appointment Address
172    #[serde(default, skip_serializing_if = "Option::is_none")]
173    pub address: Option<String>,
174    /// If set to true, the minimum scheduling notice and date range would be ignored
175    #[serde(
176        rename = "ignoreDateRange",
177        default,
178        skip_serializing_if = "Option::is_none"
179    )]
180    pub ignore_date_range: Option<bool>,
181    /// If set to false, the automations will not run
182    #[serde(rename = "toNotify", default, skip_serializing_if = "Option::is_none")]
183    pub to_notify: Option<bool>,
184    /// If true the time slot validation would be avoided for any appointment creation (even the
185    /// ignoreDateRange)
186    #[serde(
187        rename = "ignoreFreeSlotValidation",
188        default,
189        skip_serializing_if = "Option::is_none"
190    )]
191    pub ignore_free_slot_validation: Option<bool>,
192    /// RRULE as per the iCalendar (RFC 5545) specification for recurring events. DTSTART is not
193    /// required, instance ids are calculated on the basis of startTime of the event. The rrule
194    /// only be applied if ignoreFreeSlotValidation is true.
195    #[serde(default, skip_serializing_if = "Option::is_none")]
196    pub rrule: Option<String>,
197    /// Calendar Id
198    #[serde(
199        rename = "calendarId",
200        default,
201        skip_serializing_if = "Option::is_none"
202    )]
203    pub calendar_id: Option<String>,
204    /// Start Time
205    #[serde(rename = "startTime", default, skip_serializing_if = "Option::is_none")]
206    pub start_time: Option<String>,
207    /// End Time
208    #[serde(rename = "endTime", default, skip_serializing_if = "Option::is_none")]
209    pub end_time: Option<String>,
210}
211
212/// `AppointmentSchemaResponse` from the GoHighLevel OpenAPI spec.
213#[derive(Debug, Clone, Default, Serialize, Deserialize)]
214pub struct AppointmentSchemaResponse {
215    /// Calendar Id
216    /// Required by the API.
217    /// (Optional here so responses that omit it still parse.)
218    #[serde(
219        rename = "calendarId",
220        default,
221        skip_serializing_if = "Option::is_none"
222    )]
223    pub calendar_id: Option<String>,
224    /// Location Id
225    /// Required by the API.
226    /// (Optional here so responses that omit it still parse.)
227    #[serde(
228        rename = "locationId",
229        default,
230        skip_serializing_if = "Option::is_none"
231    )]
232    pub location_id: Option<String>,
233    /// Contact Id
234    /// Required by the API.
235    /// (Optional here so responses that omit it still parse.)
236    #[serde(rename = "contactId", default, skip_serializing_if = "Option::is_none")]
237    pub contact_id: Option<String>,
238    /// Start Time
239    #[serde(rename = "startTime", default, skip_serializing_if = "Option::is_none")]
240    pub start_time: Option<String>,
241    /// End Time
242    #[serde(rename = "endTime", default, skip_serializing_if = "Option::is_none")]
243    pub end_time: Option<String>,
244    /// Title
245    #[serde(default, skip_serializing_if = "Option::is_none")]
246    pub title: Option<String>,
247    /// Meeting Location Type
248    #[serde(
249        rename = "meetingLocationType",
250        default,
251        skip_serializing_if = "Option::is_none"
252    )]
253    pub meeting_location_type: Option<String>,
254    /// Allowed values: `new`, `confirmed`, `cancelled`, `showed`, `noshow`, `invalid`,
255    /// `active`, `completed`.
256    #[serde(
257        rename = "appointmentStatus",
258        default,
259        skip_serializing_if = "Option::is_none"
260    )]
261    pub appointment_status: Option<String>,
262    /// Assigned User Id
263    #[serde(
264        rename = "assignedUserId",
265        default,
266        skip_serializing_if = "Option::is_none"
267    )]
268    pub assigned_user_id: Option<String>,
269    /// Appointment Address
270    #[serde(default, skip_serializing_if = "Option::is_none")]
271    pub address: Option<String>,
272    /// true if the event is recurring otherwise false
273    #[serde(
274        rename = "isRecurring",
275        default,
276        skip_serializing_if = "Option::is_none"
277    )]
278    pub is_recurring: Option<bool>,
279    /// RRULE as per the iCalendar (RFC 5545) specification for recurring events
280    #[serde(default, skip_serializing_if = "Option::is_none")]
281    pub rrule: Option<String>,
282    /// Id
283    /// Required by the API.
284    /// (Optional here so responses that omit it still parse.)
285    #[serde(default, skip_serializing_if = "Option::is_none")]
286    pub id: Option<String>,
287}
288
289/// `Availability` from the GoHighLevel OpenAPI spec.
290#[derive(Debug, Clone, Default, Serialize, Deserialize)]
291pub struct Availability {
292    /// Formulate the date string in the format of ` T00:00:00.000Z`.
293    /// Required by the API.
294    /// (Optional here so responses that omit it still parse.)
295    #[serde(default, skip_serializing_if = "Option::is_none")]
296    pub date: Option<String>,
297    /// Required by the API.
298    /// (Optional here so responses that omit it still parse.)
299    #[serde(default, skip_serializing_if = "Vec::is_empty")]
300    pub hours: Vec<Hour>,
301    #[serde(default, skip_serializing_if = "Option::is_none")]
302    pub deleted: Option<bool>,
303}
304
305/// `BlockSlotCreateRequestDTO` from the GoHighLevel OpenAPI spec.
306#[derive(Debug, Clone, Default, Serialize, Deserialize)]
307pub struct BlockSlotCreateRequestDTO {
308    /// Title
309    #[serde(default, skip_serializing_if = "Option::is_none")]
310    pub title: Option<String>,
311    /// Either calendarId or assignedUserId can be set, not both.
312    /// Required by the API.
313    #[serde(rename = "calendarId")]
314    pub calendar_id: String,
315    /// Either calendarId or assignedUserId can be set, not both.
316    #[serde(
317        rename = "assignedUserId",
318        default,
319        skip_serializing_if = "Option::is_none"
320    )]
321    pub assigned_user_id: Option<String>,
322    /// Location Id
323    /// Required by the API.
324    #[serde(rename = "locationId")]
325    pub location_id: String,
326    /// Start Time
327    #[serde(rename = "startTime", default, skip_serializing_if = "Option::is_none")]
328    pub start_time: Option<String>,
329    /// End Time
330    #[serde(rename = "endTime", default, skip_serializing_if = "Option::is_none")]
331    pub end_time: Option<String>,
332}
333
334/// `BlockSlotEditRequestDTO` from the GoHighLevel OpenAPI spec.
335#[derive(Debug, Clone, Default, Serialize, Deserialize)]
336pub struct BlockSlotEditRequestDTO {
337    /// Title
338    #[serde(default, skip_serializing_if = "Option::is_none")]
339    pub title: Option<String>,
340    /// Either calendarId or assignedUserId can be set, not both.
341    /// Required by the API.
342    #[serde(rename = "calendarId")]
343    pub calendar_id: String,
344    /// Either calendarId or assignedUserId can be set, not both.
345    #[serde(
346        rename = "assignedUserId",
347        default,
348        skip_serializing_if = "Option::is_none"
349    )]
350    pub assigned_user_id: Option<String>,
351    /// Location Id
352    /// Required by the API.
353    #[serde(rename = "locationId")]
354    pub location_id: String,
355    /// Start Time
356    #[serde(rename = "startTime", default, skip_serializing_if = "Option::is_none")]
357    pub start_time: Option<String>,
358    /// End Time
359    #[serde(rename = "endTime", default, skip_serializing_if = "Option::is_none")]
360    pub end_time: Option<String>,
361}
362
363/// `BlockedSlotSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
364#[derive(Debug, Clone, Default, Serialize, Deserialize)]
365pub struct BlockedSlotSuccessfulResponseDto {
366    /// Id
367    /// Required by the API.
368    /// (Optional here so responses that omit it still parse.)
369    #[serde(default, skip_serializing_if = "Option::is_none")]
370    pub id: Option<String>,
371    /// Location Id
372    /// Required by the API.
373    /// (Optional here so responses that omit it still parse.)
374    #[serde(
375        rename = "locationId",
376        default,
377        skip_serializing_if = "Option::is_none"
378    )]
379    pub location_id: Option<String>,
380    /// Title
381    /// Required by the API.
382    /// (Optional here so responses that omit it still parse.)
383    #[serde(default, skip_serializing_if = "Option::is_none")]
384    pub title: Option<String>,
385    /// Start Time
386    /// Required by the API.
387    /// (Optional here so responses that omit it still parse.)
388    #[serde(rename = "startTime", default, skip_serializing_if = "Option::is_none")]
389    pub start_time: Option<serde_json::Value>,
390    /// End Time
391    /// Required by the API.
392    /// (Optional here so responses that omit it still parse.)
393    #[serde(rename = "endTime", default, skip_serializing_if = "Option::is_none")]
394    pub end_time: Option<serde_json::Value>,
395    /// Calendar id
396    #[serde(
397        rename = "calendarId",
398        default,
399        skip_serializing_if = "Option::is_none"
400    )]
401    pub calendar_id: Option<String>,
402    /// Assigned User Id
403    #[serde(
404        rename = "assignedUserId",
405        default,
406        skip_serializing_if = "Option::is_none"
407    )]
408    pub assigned_user_id: Option<String>,
409}
410
411/// `CalendarByIdSuccessfulResponseDTO` from the GoHighLevel OpenAPI spec.
412#[derive(Debug, Clone, Default, Serialize, Deserialize)]
413pub struct CalendarByIdSuccessfulResponseDTO {
414    /// Required by the API.
415    /// (Optional here so responses that omit it still parse.)
416    #[serde(default, skip_serializing_if = "Option::is_none")]
417    pub calendar: Option<CalendarDTO>,
418}
419
420/// `CalendarCreateDTO` from the GoHighLevel OpenAPI spec.
421#[derive(Debug, Clone, Default, Serialize, Deserialize)]
422pub struct CalendarCreateDTO {
423    /// Should the created calendar be active or draft
424    #[serde(rename = "isActive", default, skip_serializing_if = "Option::is_none")]
425    pub is_active: Option<bool>,
426    /// 🚨 Deprecated! Please use 'Calendar Notifications APIs' instead.
427    #[serde(default, skip_serializing_if = "Vec::is_empty")]
428    pub notifications: Vec<CalendarNotification>,
429    /// Required by the API.
430    #[serde(rename = "locationId")]
431    pub location_id: String,
432    /// Group Id
433    #[serde(rename = "groupId", default, skip_serializing_if = "Option::is_none")]
434    pub group_id: Option<String>,
435    /// Team members are required for calendars of type: Round Robin, Collective, Class,
436    /// Service. Personal calendar must have exactly one team member.
437    #[serde(rename = "teamMembers", default, skip_serializing_if = "Vec::is_empty")]
438    pub team_members: Vec<TeamMember>,
439    /// Allowed values: `RoundRobin_OptimizeForAvailability`,
440    /// `RoundRobin_OptimizeForEqualDistribution`.
441    #[serde(rename = "eventType", default, skip_serializing_if = "Option::is_none")]
442    pub event_type: Option<String>,
443    /// Required by the API.
444    pub name: String,
445    #[serde(default, skip_serializing_if = "Option::is_none")]
446    pub description: Option<String>,
447    #[serde(default, skip_serializing_if = "Option::is_none")]
448    pub slug: Option<String>,
449    #[serde(
450        rename = "widgetSlug",
451        default,
452        skip_serializing_if = "Option::is_none"
453    )]
454    pub widget_slug: Option<String>,
455    /// Allowed values: `round_robin`, `event`, `class_booking`, `collective`,
456    /// `service_booking`, `personal`.
457    #[serde(
458        rename = "calendarType",
459        default,
460        skip_serializing_if = "Option::is_none"
461    )]
462    pub calendar_type: Option<String>,
463    /// Calendar widget type. Choose "default" for "neo" and "classic" for "classic" layout.
464    /// Allowed values: `default`, `classic`.
465    #[serde(
466        rename = "widgetType",
467        default,
468        skip_serializing_if = "Option::is_none"
469    )]
470    pub widget_type: Option<String>,
471    #[serde(
472        rename = "eventTitle",
473        default,
474        skip_serializing_if = "Option::is_none"
475    )]
476    pub event_title: Option<String>,
477    #[serde(
478        rename = "eventColor",
479        default,
480        skip_serializing_if = "Option::is_none"
481    )]
482    pub event_color: Option<String>,
483    /// 🚨 Deprecated! Use `locationConfigurations.location` or
484    /// `teamMembers[].locationConfigurations.location` instead.
485    #[serde(
486        rename = "meetingLocation",
487        default,
488        skip_serializing_if = "Option::is_none"
489    )]
490    pub meeting_location: Option<String>,
491    /// Meeting location configuration for event calendar
492    #[serde(
493        rename = "locationConfigurations",
494        default,
495        skip_serializing_if = "Vec::is_empty"
496    )]
497    pub location_configurations: Vec<LocationConfiguration>,
498    /// This controls the duration of the meeting
499    #[serde(
500        rename = "slotDuration",
501        default,
502        skip_serializing_if = "Option::is_none"
503    )]
504    pub slot_duration: Option<f64>,
505    /// Unit for slot duration.
506    /// Allowed values: `mins`, `hours`.
507    #[serde(
508        rename = "slotDurationUnit",
509        default,
510        skip_serializing_if = "Option::is_none"
511    )]
512    pub slot_duration_unit: Option<String>,
513    /// Slot interval reflects the amount of time the between booking slots that will be shown
514    /// in the calendar.
515    #[serde(
516        rename = "slotInterval",
517        default,
518        skip_serializing_if = "Option::is_none"
519    )]
520    pub slot_interval: Option<f64>,
521    /// Unit for slot interval.
522    /// Allowed values: `mins`, `hours`.
523    #[serde(
524        rename = "slotIntervalUnit",
525        default,
526        skip_serializing_if = "Option::is_none"
527    )]
528    pub slot_interval_unit: Option<String>,
529    /// Slot-Buffer is additional time that can be added after an appointment, allowing for
530    /// extra time to wrap up
531    #[serde(
532        rename = "slotBuffer",
533        default,
534        skip_serializing_if = "Option::is_none"
535    )]
536    pub slot_buffer: Option<f64>,
537    /// Unit for slot buffer.
538    /// Allowed values: `mins`, `hours`.
539    #[serde(
540        rename = "slotBufferUnit",
541        default,
542        skip_serializing_if = "Option::is_none"
543    )]
544    pub slot_buffer_unit: Option<String>,
545    /// Pre-Buffer is additional time that can be added before an appointment, allowing for
546    /// extra time to get ready
547    #[serde(rename = "preBuffer", default, skip_serializing_if = "Option::is_none")]
548    pub pre_buffer: Option<f64>,
549    /// Unit for pre-buffer.
550    /// Allowed values: `mins`, `hours`.
551    #[serde(
552        rename = "preBufferUnit",
553        default,
554        skip_serializing_if = "Option::is_none"
555    )]
556    pub pre_buffer_unit: Option<String>,
557    /// Maximum bookings per slot (per user). Maximum seats per slot in case of Class Booking
558    /// Calendar.
559    #[serde(
560        rename = "appoinmentPerSlot",
561        default,
562        skip_serializing_if = "Option::is_none"
563    )]
564    pub appoinment_per_slot: Option<f64>,
565    /// Number of appointments that can be booked for a given day
566    #[serde(
567        rename = "appoinmentPerDay",
568        default,
569        skip_serializing_if = "Option::is_none"
570    )]
571    pub appoinment_per_day: Option<f64>,
572    /// Minimum scheduling notice for events
573    #[serde(
574        rename = "allowBookingAfter",
575        default,
576        skip_serializing_if = "Option::is_none"
577    )]
578    pub allow_booking_after: Option<f64>,
579    /// Unit for minimum scheduling notice
580    /// Allowed values: `hours`, `days`, `weeks`, `months`.
581    #[serde(
582        rename = "allowBookingAfterUnit",
583        default,
584        skip_serializing_if = "Option::is_none"
585    )]
586    pub allow_booking_after_unit: Option<String>,
587    /// Minimum number of days/weeks/months for which to allow booking events
588    #[serde(
589        rename = "allowBookingFor",
590        default,
591        skip_serializing_if = "Option::is_none"
592    )]
593    pub allow_booking_for: Option<f64>,
594    /// Unit for controlling the duration for which booking would be allowed for
595    /// Allowed values: `days`, `weeks`, `months`.
596    #[serde(
597        rename = "allowBookingForUnit",
598        default,
599        skip_serializing_if = "Option::is_none"
600    )]
601    pub allow_booking_for_unit: Option<String>,
602    /// This is only to set the standard availability. For custom availability, use the
603    /// availabilities property
604    #[serde(rename = "openHours", default, skip_serializing_if = "Vec::is_empty")]
605    pub open_hours: Vec<OpenHour>,
606    /// Enable recurring appointments for the calendars. Please note that only one member should
607    /// be added in the calendar to enable this
608    #[serde(
609        rename = "enableRecurring",
610        default,
611        skip_serializing_if = "Option::is_none"
612    )]
613    pub enable_recurring: Option<bool>,
614    #[serde(default, skip_serializing_if = "Option::is_none")]
615    pub recurring: Option<Recurring>,
616    #[serde(rename = "formId", default, skip_serializing_if = "Option::is_none")]
617    pub form_id: Option<String>,
618    #[serde(
619        rename = "stickyContact",
620        default,
621        skip_serializing_if = "Option::is_none"
622    )]
623    pub sticky_contact: Option<bool>,
624    #[serde(
625        rename = "isLivePaymentMode",
626        default,
627        skip_serializing_if = "Option::is_none"
628    )]
629    pub is_live_payment_mode: Option<bool>,
630    #[serde(
631        rename = "autoConfirm",
632        default,
633        skip_serializing_if = "Option::is_none"
634    )]
635    pub auto_confirm: Option<bool>,
636    #[serde(
637        rename = "shouldSendAlertEmailsToAssignedMember",
638        default,
639        skip_serializing_if = "Option::is_none"
640    )]
641    pub should_send_alert_emails_to_assigned_member: Option<bool>,
642    #[serde(
643        rename = "alertEmail",
644        default,
645        skip_serializing_if = "Option::is_none"
646    )]
647    pub alert_email: Option<String>,
648    #[serde(
649        rename = "googleInvitationEmails",
650        default,
651        skip_serializing_if = "Option::is_none"
652    )]
653    pub google_invitation_emails: Option<bool>,
654    #[serde(
655        rename = "allowReschedule",
656        default,
657        skip_serializing_if = "Option::is_none"
658    )]
659    pub allow_reschedule: Option<bool>,
660    #[serde(
661        rename = "allowCancellation",
662        default,
663        skip_serializing_if = "Option::is_none"
664    )]
665    pub allow_cancellation: Option<bool>,
666    #[serde(
667        rename = "shouldAssignContactToTeamMember",
668        default,
669        skip_serializing_if = "Option::is_none"
670    )]
671    pub should_assign_contact_to_team_member: Option<bool>,
672    #[serde(
673        rename = "shouldSkipAssigningContactForExisting",
674        default,
675        skip_serializing_if = "Option::is_none"
676    )]
677    pub should_skip_assigning_contact_for_existing: Option<bool>,
678    #[serde(default, skip_serializing_if = "Option::is_none")]
679    pub notes: Option<String>,
680    #[serde(rename = "pixelId", default, skip_serializing_if = "Option::is_none")]
681    pub pixel_id: Option<String>,
682    /// Allowed values: `RedirectURL`, `ThankYouMessage`.
683    #[serde(
684        rename = "formSubmitType",
685        default,
686        skip_serializing_if = "Option::is_none"
687    )]
688    pub form_submit_type: Option<String>,
689    #[serde(
690        rename = "formSubmitRedirectURL",
691        default,
692        skip_serializing_if = "Option::is_none"
693    )]
694    pub form_submit_redirect_url: Option<String>,
695    #[serde(
696        rename = "formSubmitThanksMessage",
697        default,
698        skip_serializing_if = "Option::is_none"
699    )]
700    pub form_submit_thanks_message: Option<String>,
701    /// Determines which availability type to consider: - **1**: Only custom availabilities will
702    /// be used. - **0**: Only open hours will be used. - **null**: Both custom availabilities
703    /// and open hours will be considered.
704    /// Allowed values: `0`, `1`.
705    #[serde(
706        rename = "availabilityType",
707        default,
708        skip_serializing_if = "Option::is_none"
709    )]
710    pub availability_type: Option<String>,
711    /// This is only to set the custom availability. For standard availability, use the
712    /// openHours property
713    #[serde(default, skip_serializing_if = "Vec::is_empty")]
714    pub availabilities: Vec<Availability>,
715    /// Allowed values: `count_only`, `collect_detail`.
716    #[serde(rename = "guestType", default, skip_serializing_if = "Option::is_none")]
717    pub guest_type: Option<String>,
718    #[serde(
719        rename = "consentLabel",
720        default,
721        skip_serializing_if = "Option::is_none"
722    )]
723    pub consent_label: Option<String>,
724    #[serde(
725        rename = "calendarCoverImage",
726        default,
727        skip_serializing_if = "Option::is_none"
728    )]
729    pub calendar_cover_image: Option<String>,
730    /// Look Busy Configuration
731    #[serde(
732        rename = "lookBusyConfig",
733        default,
734        skip_serializing_if = "Option::is_none"
735    )]
736    pub look_busy_config: Option<LookBusyConfiguration>,
737}
738
739/// `CalendarDTO` from the GoHighLevel OpenAPI spec.
740#[derive(Debug, Clone, Default, Serialize, Deserialize)]
741pub struct CalendarDTO {
742    /// Should the created calendar be active or draft
743    #[serde(rename = "isActive", default, skip_serializing_if = "Option::is_none")]
744    pub is_active: Option<bool>,
745    /// 🚨 Deprecated! Please use 'Calendar Notifications APIs' instead.
746    #[serde(default, skip_serializing_if = "Vec::is_empty")]
747    pub notifications: Vec<CalendarNotification>,
748    /// Required by the API.
749    /// (Optional here so responses that omit it still parse.)
750    #[serde(
751        rename = "locationId",
752        default,
753        skip_serializing_if = "Option::is_none"
754    )]
755    pub location_id: Option<String>,
756    /// Group Id
757    #[serde(rename = "groupId", default, skip_serializing_if = "Option::is_none")]
758    pub group_id: Option<String>,
759    /// Team members are for calendars of type: Round Robin, Collective, Class, Service.
760    /// Personal calendar must have exactly one team member.
761    #[serde(rename = "teamMembers", default, skip_serializing_if = "Vec::is_empty")]
762    pub team_members: Vec<TeamMemberResponse>,
763    /// Allowed values: `RoundRobin_OptimizeForAvailability`,
764    /// `RoundRobin_OptimizeForEqualDistribution`.
765    #[serde(rename = "eventType", default, skip_serializing_if = "Option::is_none")]
766    pub event_type: Option<String>,
767    /// Required by the API.
768    /// (Optional here so responses that omit it still parse.)
769    #[serde(default, skip_serializing_if = "Option::is_none")]
770    pub name: Option<String>,
771    #[serde(default, skip_serializing_if = "Option::is_none")]
772    pub description: Option<String>,
773    #[serde(default, skip_serializing_if = "Option::is_none")]
774    pub slug: Option<String>,
775    #[serde(
776        rename = "widgetSlug",
777        default,
778        skip_serializing_if = "Option::is_none"
779    )]
780    pub widget_slug: Option<String>,
781    /// Allowed values: `round_robin`, `event`, `class_booking`, `collective`,
782    /// `service_booking`, `personal`.
783    #[serde(
784        rename = "calendarType",
785        default,
786        skip_serializing_if = "Option::is_none"
787    )]
788    pub calendar_type: Option<String>,
789    /// Calendar widget type. Choose "default" for "neo" and "classic" for "classic" layout.
790    /// Allowed values: `default`, `classic`.
791    #[serde(
792        rename = "widgetType",
793        default,
794        skip_serializing_if = "Option::is_none"
795    )]
796    pub widget_type: Option<String>,
797    #[serde(
798        rename = "eventTitle",
799        default,
800        skip_serializing_if = "Option::is_none"
801    )]
802    pub event_title: Option<String>,
803    #[serde(
804        rename = "eventColor",
805        default,
806        skip_serializing_if = "Option::is_none"
807    )]
808    pub event_color: Option<String>,
809    /// 🚨 Deprecated! Use `locationConfigurations.location` or
810    /// `teamMembers[].locationConfigurations.location` instead.
811    #[serde(
812        rename = "meetingLocation",
813        default,
814        skip_serializing_if = "Option::is_none"
815    )]
816    pub meeting_location: Option<String>,
817    /// Meeting location configuration for event calendar
818    #[serde(
819        rename = "locationConfigurations",
820        default,
821        skip_serializing_if = "Vec::is_empty"
822    )]
823    pub location_configurations: Vec<LocationConfigurationResponse>,
824    /// This controls the duration of the meeting
825    #[serde(
826        rename = "slotDuration",
827        default,
828        skip_serializing_if = "Option::is_none"
829    )]
830    pub slot_duration: Option<f64>,
831    /// Unit for slot duration.
832    /// Allowed values: `mins`, `hours`.
833    #[serde(
834        rename = "slotDurationUnit",
835        default,
836        skip_serializing_if = "Option::is_none"
837    )]
838    pub slot_duration_unit: Option<String>,
839    /// Slot interval reflects the amount of time the between booking slots that will be shown
840    /// in the calendar.
841    #[serde(
842        rename = "slotInterval",
843        default,
844        skip_serializing_if = "Option::is_none"
845    )]
846    pub slot_interval: Option<f64>,
847    /// Unit for slot interval.
848    /// Allowed values: `mins`, `hours`.
849    #[serde(
850        rename = "slotIntervalUnit",
851        default,
852        skip_serializing_if = "Option::is_none"
853    )]
854    pub slot_interval_unit: Option<String>,
855    /// Slot-Buffer is additional time that can be added after an appointment, allowing for
856    /// extra time to wrap up
857    #[serde(
858        rename = "slotBuffer",
859        default,
860        skip_serializing_if = "Option::is_none"
861    )]
862    pub slot_buffer: Option<f64>,
863    /// Unit for slot buffer.
864    /// Allowed values: `mins`, `hours`.
865    #[serde(
866        rename = "slotBufferUnit",
867        default,
868        skip_serializing_if = "Option::is_none"
869    )]
870    pub slot_buffer_unit: Option<String>,
871    /// Pre-Buffer is additional time that can be added before an appointment, allowing for
872    /// extra time to get ready
873    #[serde(rename = "preBuffer", default, skip_serializing_if = "Option::is_none")]
874    pub pre_buffer: Option<f64>,
875    /// Unit for pre-buffer.
876    /// Allowed values: `mins`, `hours`.
877    #[serde(
878        rename = "preBufferUnit",
879        default,
880        skip_serializing_if = "Option::is_none"
881    )]
882    pub pre_buffer_unit: Option<String>,
883    /// Maximum bookings per slot (per user). Maximum seats per slot in case of Class Booking
884    /// Calendar.
885    #[serde(
886        rename = "appoinmentPerSlot",
887        default,
888        skip_serializing_if = "Option::is_none"
889    )]
890    pub appoinment_per_slot: Option<f64>,
891    /// Number of appointments that can be booked for a given day
892    #[serde(
893        rename = "appoinmentPerDay",
894        default,
895        skip_serializing_if = "Option::is_none"
896    )]
897    pub appoinment_per_day: Option<f64>,
898    /// Minimum scheduling notice for events
899    #[serde(
900        rename = "allowBookingAfter",
901        default,
902        skip_serializing_if = "Option::is_none"
903    )]
904    pub allow_booking_after: Option<f64>,
905    /// Unit for minimum scheduling notice
906    /// Allowed values: `hours`, `days`, `weeks`, `months`.
907    #[serde(
908        rename = "allowBookingAfterUnit",
909        default,
910        skip_serializing_if = "Option::is_none"
911    )]
912    pub allow_booking_after_unit: Option<String>,
913    /// Minimum number of days/weeks/months for which to allow booking events
914    #[serde(
915        rename = "allowBookingFor",
916        default,
917        skip_serializing_if = "Option::is_none"
918    )]
919    pub allow_booking_for: Option<f64>,
920    /// Unit for controlling the duration for which booking would be allowed for
921    /// Allowed values: `days`, `weeks`, `months`.
922    #[serde(
923        rename = "allowBookingForUnit",
924        default,
925        skip_serializing_if = "Option::is_none"
926    )]
927    pub allow_booking_for_unit: Option<String>,
928    /// This is only to set the standard availability. For custom availability, use the
929    /// availabilities property
930    #[serde(rename = "openHours", default, skip_serializing_if = "Vec::is_empty")]
931    pub open_hours: Vec<OpenHour>,
932    /// Enable recurring appointments for the calendars. Please note that only one member should
933    /// be added in the calendar to enable this
934    #[serde(
935        rename = "enableRecurring",
936        default,
937        skip_serializing_if = "Option::is_none"
938    )]
939    pub enable_recurring: Option<bool>,
940    #[serde(default, skip_serializing_if = "Option::is_none")]
941    pub recurring: Option<Recurring>,
942    #[serde(rename = "formId", default, skip_serializing_if = "Option::is_none")]
943    pub form_id: Option<String>,
944    #[serde(
945        rename = "stickyContact",
946        default,
947        skip_serializing_if = "Option::is_none"
948    )]
949    pub sticky_contact: Option<bool>,
950    #[serde(
951        rename = "isLivePaymentMode",
952        default,
953        skip_serializing_if = "Option::is_none"
954    )]
955    pub is_live_payment_mode: Option<bool>,
956    #[serde(
957        rename = "autoConfirm",
958        default,
959        skip_serializing_if = "Option::is_none"
960    )]
961    pub auto_confirm: Option<bool>,
962    #[serde(
963        rename = "shouldSendAlertEmailsToAssignedMember",
964        default,
965        skip_serializing_if = "Option::is_none"
966    )]
967    pub should_send_alert_emails_to_assigned_member: Option<bool>,
968    #[serde(
969        rename = "alertEmail",
970        default,
971        skip_serializing_if = "Option::is_none"
972    )]
973    pub alert_email: Option<String>,
974    #[serde(
975        rename = "googleInvitationEmails",
976        default,
977        skip_serializing_if = "Option::is_none"
978    )]
979    pub google_invitation_emails: Option<bool>,
980    #[serde(
981        rename = "allowReschedule",
982        default,
983        skip_serializing_if = "Option::is_none"
984    )]
985    pub allow_reschedule: Option<bool>,
986    #[serde(
987        rename = "allowCancellation",
988        default,
989        skip_serializing_if = "Option::is_none"
990    )]
991    pub allow_cancellation: Option<bool>,
992    #[serde(
993        rename = "shouldAssignContactToTeamMember",
994        default,
995        skip_serializing_if = "Option::is_none"
996    )]
997    pub should_assign_contact_to_team_member: Option<bool>,
998    #[serde(
999        rename = "shouldSkipAssigningContactForExisting",
1000        default,
1001        skip_serializing_if = "Option::is_none"
1002    )]
1003    pub should_skip_assigning_contact_for_existing: Option<bool>,
1004    #[serde(default, skip_serializing_if = "Option::is_none")]
1005    pub notes: Option<String>,
1006    #[serde(rename = "pixelId", default, skip_serializing_if = "Option::is_none")]
1007    pub pixel_id: Option<String>,
1008    /// Allowed values: `RedirectURL`, `ThankYouMessage`.
1009    #[serde(
1010        rename = "formSubmitType",
1011        default,
1012        skip_serializing_if = "Option::is_none"
1013    )]
1014    pub form_submit_type: Option<String>,
1015    #[serde(
1016        rename = "formSubmitRedirectURL",
1017        default,
1018        skip_serializing_if = "Option::is_none"
1019    )]
1020    pub form_submit_redirect_url: Option<String>,
1021    #[serde(
1022        rename = "formSubmitThanksMessage",
1023        default,
1024        skip_serializing_if = "Option::is_none"
1025    )]
1026    pub form_submit_thanks_message: Option<String>,
1027    /// Determines which availability type to consider: - **1**: Only custom availabilities will
1028    /// be used. - **0**: Only open hours will be used. - **null**: Both custom availabilities
1029    /// and open hours will be considered.
1030    /// Allowed values: `0`, `1`.
1031    #[serde(
1032        rename = "availabilityType",
1033        default,
1034        skip_serializing_if = "Option::is_none"
1035    )]
1036    pub availability_type: Option<String>,
1037    /// This is only to set the custom availability. For standard availability, use the
1038    /// openHours property
1039    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1040    pub availabilities: Vec<Availability>,
1041    /// Allowed values: `count_only`, `collect_detail`.
1042    #[serde(rename = "guestType", default, skip_serializing_if = "Option::is_none")]
1043    pub guest_type: Option<String>,
1044    #[serde(
1045        rename = "consentLabel",
1046        default,
1047        skip_serializing_if = "Option::is_none"
1048    )]
1049    pub consent_label: Option<String>,
1050    #[serde(
1051        rename = "calendarCoverImage",
1052        default,
1053        skip_serializing_if = "Option::is_none"
1054    )]
1055    pub calendar_cover_image: Option<String>,
1056    /// Look Busy Configuration
1057    #[serde(
1058        rename = "lookBusyConfig",
1059        default,
1060        skip_serializing_if = "Option::is_none"
1061    )]
1062    pub look_busy_config: Option<LookBusyConfiguration>,
1063    /// Required by the API.
1064    /// (Optional here so responses that omit it still parse.)
1065    #[serde(default, skip_serializing_if = "Option::is_none")]
1066    pub id: Option<String>,
1067}
1068
1069/// `CalendarDeleteSuccessfulResponseDTO` from the GoHighLevel OpenAPI spec.
1070#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1071pub struct CalendarDeleteSuccessfulResponseDTO {
1072    /// Success
1073    /// Required by the API.
1074    /// (Optional here so responses that omit it still parse.)
1075    #[serde(default, skip_serializing_if = "Option::is_none")]
1076    pub success: Option<bool>,
1077}
1078
1079/// `CalendarEventDTO` from the GoHighLevel OpenAPI spec.
1080#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1081pub struct CalendarEventDTO {
1082    /// Event Id or Instance id for a recurring event
1083    /// Required by the API.
1084    /// (Optional here so responses that omit it still parse.)
1085    #[serde(default, skip_serializing_if = "Option::is_none")]
1086    pub id: Option<String>,
1087    /// Calendar Event address
1088    #[serde(default, skip_serializing_if = "Option::is_none")]
1089    pub address: Option<String>,
1090    /// Calendar Event title
1091    /// Required by the API.
1092    /// (Optional here so responses that omit it still parse.)
1093    #[serde(default, skip_serializing_if = "Option::is_none")]
1094    pub title: Option<String>,
1095    /// Calendar ID
1096    /// Required by the API.
1097    /// (Optional here so responses that omit it still parse.)
1098    #[serde(
1099        rename = "calendarId",
1100        default,
1101        skip_serializing_if = "Option::is_none"
1102    )]
1103    pub calendar_id: Option<String>,
1104    /// Location ID
1105    /// Required by the API.
1106    /// (Optional here so responses that omit it still parse.)
1107    #[serde(
1108        rename = "locationId",
1109        default,
1110        skip_serializing_if = "Option::is_none"
1111    )]
1112    pub location_id: Option<String>,
1113    /// Contact ID
1114    /// Required by the API.
1115    /// (Optional here so responses that omit it still parse.)
1116    #[serde(rename = "contactId", default, skip_serializing_if = "Option::is_none")]
1117    pub contact_id: Option<String>,
1118    /// Group ID
1119    /// Required by the API.
1120    /// (Optional here so responses that omit it still parse.)
1121    #[serde(rename = "groupId", default, skip_serializing_if = "Option::is_none")]
1122    pub group_id: Option<String>,
1123    /// Appointment Status
1124    /// Required by the API.
1125    /// (Optional here so responses that omit it still parse.)
1126    #[serde(
1127        rename = "appointmentStatus",
1128        default,
1129        skip_serializing_if = "Option::is_none"
1130    )]
1131    pub appointment_status: Option<String>,
1132    /// AssignedUser - the primary owner of an appointment
1133    /// Required by the API.
1134    /// (Optional here so responses that omit it still parse.)
1135    #[serde(
1136        rename = "assignedUserId",
1137        default,
1138        skip_serializing_if = "Option::is_none"
1139    )]
1140    pub assigned_user_id: Option<String>,
1141    /// Users - the secondary owners of an appointment.
1142    /// Required by the API.
1143    /// (Optional here so responses that omit it still parse.)
1144    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1145    pub users: Vec<String>,
1146    /// Notes
1147    #[serde(default, skip_serializing_if = "Option::is_none")]
1148    pub notes: Option<String>,
1149    /// Description
1150    #[serde(default, skip_serializing_if = "Option::is_none")]
1151    pub description: Option<String>,
1152    /// true if the event is recurring otherwise false
1153    #[serde(
1154        rename = "isRecurring",
1155        default,
1156        skip_serializing_if = "Option::is_none"
1157    )]
1158    pub is_recurring: Option<bool>,
1159    /// RRULE as per the iCalendar (RFC 5545) specification for recurring events. DTSTART is not
1160    /// required, instance ids are calculated on the basis of startTime of the event.
1161    #[serde(default, skip_serializing_if = "Option::is_none")]
1162    pub rrule: Option<String>,
1163    /// Start Time
1164    /// Required by the API.
1165    /// (Optional here so responses that omit it still parse.)
1166    #[serde(rename = "startTime", default, skip_serializing_if = "Option::is_none")]
1167    pub start_time: Option<serde_json::Value>,
1168    /// End Time
1169    /// Required by the API.
1170    /// (Optional here so responses that omit it still parse.)
1171    #[serde(rename = "endTime", default, skip_serializing_if = "Option::is_none")]
1172    pub end_time: Option<serde_json::Value>,
1173    /// Date Added
1174    /// Required by the API.
1175    /// (Optional here so responses that omit it still parse.)
1176    #[serde(rename = "dateAdded", default, skip_serializing_if = "Option::is_none")]
1177    pub date_added: Option<serde_json::Value>,
1178    /// Date Updated
1179    /// Required by the API.
1180    /// (Optional here so responses that omit it still parse.)
1181    #[serde(
1182        rename = "dateUpdated",
1183        default,
1184        skip_serializing_if = "Option::is_none"
1185    )]
1186    pub date_updated: Option<serde_json::Value>,
1187    /// Ids of associated resources rooms and/or equipments
1188    #[serde(
1189        rename = "assignedResources",
1190        default,
1191        skip_serializing_if = "Vec::is_empty"
1192    )]
1193    pub assigned_resources: Vec<String>,
1194    /// Appointment booked by metadata
1195    #[serde(rename = "createdBy", default, skip_serializing_if = "Option::is_none")]
1196    pub created_by: Option<CreatedOrUpdatedBy>,
1197    /// Master event id for a recurring instance
1198    #[serde(
1199        rename = "masterEventId",
1200        default,
1201        skip_serializing_if = "Option::is_none"
1202    )]
1203    pub master_event_id: Option<String>,
1204}
1205
1206/// `CalendarNotification` from the GoHighLevel OpenAPI spec.
1207#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1208pub struct CalendarNotification {
1209    /// Calendar Notification
1210    /// Allowed values: `email`.
1211    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
1212    pub type_: Option<String>,
1213    /// Required by the API.
1214    /// (Optional here so responses that omit it still parse.)
1215    #[serde(
1216        rename = "shouldSendToContact",
1217        default,
1218        skip_serializing_if = "Option::is_none"
1219    )]
1220    pub should_send_to_contact: Option<bool>,
1221    /// Required by the API.
1222    /// (Optional here so responses that omit it still parse.)
1223    #[serde(
1224        rename = "shouldSendToGuest",
1225        default,
1226        skip_serializing_if = "Option::is_none"
1227    )]
1228    pub should_send_to_guest: Option<bool>,
1229    /// Required by the API.
1230    /// (Optional here so responses that omit it still parse.)
1231    #[serde(
1232        rename = "shouldSendToUser",
1233        default,
1234        skip_serializing_if = "Option::is_none"
1235    )]
1236    pub should_send_to_user: Option<bool>,
1237    /// Required by the API.
1238    /// (Optional here so responses that omit it still parse.)
1239    #[serde(
1240        rename = "shouldSendToSelectedUsers",
1241        default,
1242        skip_serializing_if = "Option::is_none"
1243    )]
1244    pub should_send_to_selected_users: Option<bool>,
1245    /// Comma separated emails
1246    /// Required by the API.
1247    /// (Optional here so responses that omit it still parse.)
1248    #[serde(
1249        rename = "selectedUsers",
1250        default,
1251        skip_serializing_if = "Option::is_none"
1252    )]
1253    pub selected_users: Option<String>,
1254}
1255
1256/// `CalendarNotificationDeleteResponseDTO` from the GoHighLevel OpenAPI spec.
1257#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1258pub struct CalendarNotificationDeleteResponseDTO {
1259    /// Result of delete/update operation
1260    /// Required by the API.
1261    /// (Optional here so responses that omit it still parse.)
1262    #[serde(default, skip_serializing_if = "Option::is_none")]
1263    pub message: Option<String>,
1264}
1265
1266/// `CalendarNotificationResponseDTO` from the GoHighLevel OpenAPI spec.
1267#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1268pub struct CalendarNotificationResponseDTO {
1269    /// Notification ID
1270    #[serde(rename = "_id", default, skip_serializing_if = "Option::is_none")]
1271    pub id: Option<String>,
1272    /// Allowed values: `contact`, `guest`, `assignedUser`, `emails`, `phoneNumbers`,
1273    /// `business`.
1274    #[serde(
1275        rename = "receiverType",
1276        default,
1277        skip_serializing_if = "Option::is_none"
1278    )]
1279    pub receiver_type: Option<String>,
1280    #[serde(
1281        rename = "additionalEmailIds",
1282        default,
1283        skip_serializing_if = "Vec::is_empty"
1284    )]
1285    pub additional_email_ids: Vec<String>,
1286    #[serde(
1287        rename = "additionalPhoneNumbers",
1288        default,
1289        skip_serializing_if = "Vec::is_empty"
1290    )]
1291    pub additional_phone_numbers: Vec<String>,
1292    /// Allowed values: `email`, `inApp`, `sms`, `whatsapp`.
1293    #[serde(default, skip_serializing_if = "Option::is_none")]
1294    pub channel: Option<String>,
1295    /// Allowed values: `booked`, `confirmation`, `cancellation`, `reminder`, `followup`,
1296    /// `reschedule`.
1297    #[serde(
1298        rename = "notificationType",
1299        default,
1300        skip_serializing_if = "Option::is_none"
1301    )]
1302    pub notification_type: Option<String>,
1303    #[serde(rename = "isActive", default, skip_serializing_if = "Option::is_none")]
1304    pub is_active: Option<bool>,
1305    #[serde(
1306        rename = "additionalWhatsappNumbers",
1307        default,
1308        skip_serializing_if = "Vec::is_empty"
1309    )]
1310    pub additional_whatsapp_numbers: Vec<String>,
1311    #[serde(
1312        rename = "templateId",
1313        default,
1314        skip_serializing_if = "Option::is_none"
1315    )]
1316    pub template_id: Option<String>,
1317    #[serde(default, skip_serializing_if = "Option::is_none")]
1318    pub body: Option<String>,
1319    #[serde(default, skip_serializing_if = "Option::is_none")]
1320    pub subject: Option<String>,
1321    #[serde(rename = "afterTime", default, skip_serializing_if = "Vec::is_empty")]
1322    pub after_time: Vec<SchedulesDTO>,
1323    #[serde(rename = "beforeTime", default, skip_serializing_if = "Vec::is_empty")]
1324    pub before_time: Vec<SchedulesDTO>,
1325    #[serde(
1326        rename = "selectedUsers",
1327        default,
1328        skip_serializing_if = "Vec::is_empty"
1329    )]
1330    pub selected_users: Vec<String>,
1331    #[serde(default, skip_serializing_if = "Option::is_none")]
1332    pub deleted: Option<bool>,
1333}
1334
1335/// `CalendarResourceByIdResponseDTO` from the GoHighLevel OpenAPI spec.
1336#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1337pub struct CalendarResourceByIdResponseDTO {
1338    /// Location ID of the resource
1339    /// Required by the API.
1340    /// (Optional here so responses that omit it still parse.)
1341    #[serde(
1342        rename = "locationId",
1343        default,
1344        skip_serializing_if = "Option::is_none"
1345    )]
1346    pub location_id: Option<String>,
1347    /// Name of the resource
1348    /// Required by the API.
1349    /// (Optional here so responses that omit it still parse.)
1350    #[serde(default, skip_serializing_if = "Option::is_none")]
1351    pub name: Option<String>,
1352    /// Allowed values: `equipments`, `rooms`.
1353    /// Required by the API.
1354    /// (Optional here so responses that omit it still parse.)
1355    #[serde(
1356        rename = "resourceType",
1357        default,
1358        skip_serializing_if = "Option::is_none"
1359    )]
1360    pub resource_type: Option<String>,
1361    /// Whether the resource is active
1362    /// Required by the API.
1363    /// (Optional here so responses that omit it still parse.)
1364    #[serde(rename = "isActive", default, skip_serializing_if = "Option::is_none")]
1365    pub is_active: Option<bool>,
1366    /// Description of the resource
1367    #[serde(default, skip_serializing_if = "Option::is_none")]
1368    pub description: Option<String>,
1369    /// Quantity of the resource
1370    #[serde(default, skip_serializing_if = "Option::is_none")]
1371    pub quantity: Option<f64>,
1372    /// Indicates if the resource is out of service
1373    #[serde(
1374        rename = "outOfService",
1375        default,
1376        skip_serializing_if = "Option::is_none"
1377    )]
1378    pub out_of_service: Option<f64>,
1379    /// Capacity of the resource
1380    #[serde(default, skip_serializing_if = "Option::is_none")]
1381    pub capacity: Option<f64>,
1382    /// Calendar IDs
1383    /// Required by the API.
1384    /// (Optional here so responses that omit it still parse.)
1385    #[serde(rename = "calendarIds", default, skip_serializing_if = "Vec::is_empty")]
1386    pub calendar_ids: Vec<String>,
1387}
1388
1389/// `CalendarResourceResponseDTO` from the GoHighLevel OpenAPI spec.
1390#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1391pub struct CalendarResourceResponseDTO {
1392    /// Location ID of the resource
1393    /// Required by the API.
1394    /// (Optional here so responses that omit it still parse.)
1395    #[serde(
1396        rename = "locationId",
1397        default,
1398        skip_serializing_if = "Option::is_none"
1399    )]
1400    pub location_id: Option<String>,
1401    /// Name of the resource
1402    /// Required by the API.
1403    /// (Optional here so responses that omit it still parse.)
1404    #[serde(default, skip_serializing_if = "Option::is_none")]
1405    pub name: Option<String>,
1406    /// Allowed values: `equipments`, `rooms`.
1407    /// Required by the API.
1408    /// (Optional here so responses that omit it still parse.)
1409    #[serde(
1410        rename = "resourceType",
1411        default,
1412        skip_serializing_if = "Option::is_none"
1413    )]
1414    pub resource_type: Option<String>,
1415    /// Whether the resource is active
1416    /// Required by the API.
1417    /// (Optional here so responses that omit it still parse.)
1418    #[serde(rename = "isActive", default, skip_serializing_if = "Option::is_none")]
1419    pub is_active: Option<bool>,
1420    /// Description of the resource
1421    #[serde(default, skip_serializing_if = "Option::is_none")]
1422    pub description: Option<String>,
1423    /// Quantity of the resource
1424    #[serde(default, skip_serializing_if = "Option::is_none")]
1425    pub quantity: Option<f64>,
1426    /// Indicates if the resource is out of service
1427    #[serde(
1428        rename = "outOfService",
1429        default,
1430        skip_serializing_if = "Option::is_none"
1431    )]
1432    pub out_of_service: Option<f64>,
1433    /// Capacity of the resource
1434    #[serde(default, skip_serializing_if = "Option::is_none")]
1435    pub capacity: Option<f64>,
1436}
1437
1438/// `CalendarUpdateDTO` from the GoHighLevel OpenAPI spec.
1439#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1440pub struct CalendarUpdateDTO {
1441    /// 🚨 Deprecated! Please use 'Calendar Notifications APIs' instead.
1442    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1443    pub notifications: Vec<CalendarNotification>,
1444    /// Group Id
1445    #[serde(rename = "groupId", default, skip_serializing_if = "Option::is_none")]
1446    pub group_id: Option<String>,
1447    /// Team members are required for calendars of type: Round Robin, Collective, Class,
1448    /// Service. Personal calendar must have exactly one team member.
1449    #[serde(rename = "teamMembers", default, skip_serializing_if = "Vec::is_empty")]
1450    pub team_members: Vec<TeamMember>,
1451    /// Allowed values: `RoundRobin_OptimizeForAvailability`,
1452    /// `RoundRobin_OptimizeForEqualDistribution`.
1453    #[serde(rename = "eventType", default, skip_serializing_if = "Option::is_none")]
1454    pub event_type: Option<String>,
1455    #[serde(default, skip_serializing_if = "Option::is_none")]
1456    pub name: Option<String>,
1457    #[serde(default, skip_serializing_if = "Option::is_none")]
1458    pub description: Option<String>,
1459    #[serde(default, skip_serializing_if = "Option::is_none")]
1460    pub slug: Option<String>,
1461    #[serde(
1462        rename = "widgetSlug",
1463        default,
1464        skip_serializing_if = "Option::is_none"
1465    )]
1466    pub widget_slug: Option<String>,
1467    /// Calendar widget type. Choose "default" for "neo" and "classic" for "classic" layout.
1468    /// Allowed values: `default`, `classic`.
1469    #[serde(
1470        rename = "widgetType",
1471        default,
1472        skip_serializing_if = "Option::is_none"
1473    )]
1474    pub widget_type: Option<String>,
1475    #[serde(
1476        rename = "eventTitle",
1477        default,
1478        skip_serializing_if = "Option::is_none"
1479    )]
1480    pub event_title: Option<String>,
1481    #[serde(
1482        rename = "eventColor",
1483        default,
1484        skip_serializing_if = "Option::is_none"
1485    )]
1486    pub event_color: Option<String>,
1487    /// Meeting location configuration for event calendar
1488    #[serde(
1489        rename = "locationConfigurations",
1490        default,
1491        skip_serializing_if = "Vec::is_empty"
1492    )]
1493    pub location_configurations: Vec<LocationConfiguration>,
1494    /// 🚨 Deprecated! Use `locationConfigurations.location` or
1495    /// `teamMembers[].locationConfigurations.location` instead.
1496    #[serde(
1497        rename = "meetingLocation",
1498        default,
1499        skip_serializing_if = "Option::is_none"
1500    )]
1501    pub meeting_location: Option<String>,
1502    /// This controls the duration of the meeting
1503    #[serde(
1504        rename = "slotDuration",
1505        default,
1506        skip_serializing_if = "Option::is_none"
1507    )]
1508    pub slot_duration: Option<f64>,
1509    /// Unit for slot duration.
1510    /// Allowed values: `mins`, `hours`.
1511    #[serde(
1512        rename = "slotDurationUnit",
1513        default,
1514        skip_serializing_if = "Option::is_none"
1515    )]
1516    pub slot_duration_unit: Option<String>,
1517    /// Unit for pre-buffer.
1518    /// Allowed values: `mins`, `hours`.
1519    #[serde(
1520        rename = "preBufferUnit",
1521        default,
1522        skip_serializing_if = "Option::is_none"
1523    )]
1524    pub pre_buffer_unit: Option<String>,
1525    /// Slot interval reflects the amount of time the between booking slots that will be shown
1526    /// in the calendar.
1527    #[serde(
1528        rename = "slotInterval",
1529        default,
1530        skip_serializing_if = "Option::is_none"
1531    )]
1532    pub slot_interval: Option<f64>,
1533    /// Unit for slot interval.
1534    /// Allowed values: `mins`, `hours`.
1535    #[serde(
1536        rename = "slotIntervalUnit",
1537        default,
1538        skip_serializing_if = "Option::is_none"
1539    )]
1540    pub slot_interval_unit: Option<String>,
1541    /// Slot-Buffer is additional time that can be added after an appointment, allowing for
1542    /// extra time to wrap up
1543    #[serde(
1544        rename = "slotBuffer",
1545        default,
1546        skip_serializing_if = "Option::is_none"
1547    )]
1548    pub slot_buffer: Option<f64>,
1549    /// Pre-Buffer is additional time that can be added before an appointment, allowing for
1550    /// extra time to get ready
1551    #[serde(rename = "preBuffer", default, skip_serializing_if = "Option::is_none")]
1552    pub pre_buffer: Option<f64>,
1553    #[serde(
1554        rename = "appoinmentPerSlot",
1555        default,
1556        skip_serializing_if = "Option::is_none"
1557    )]
1558    pub appoinment_per_slot: Option<f64>,
1559    /// Number of appointments that can be booked for a given day
1560    #[serde(
1561        rename = "appoinmentPerDay",
1562        default,
1563        skip_serializing_if = "Option::is_none"
1564    )]
1565    pub appoinment_per_day: Option<f64>,
1566    /// Minimum scheduling notice for events
1567    #[serde(
1568        rename = "allowBookingAfter",
1569        default,
1570        skip_serializing_if = "Option::is_none"
1571    )]
1572    pub allow_booking_after: Option<f64>,
1573    /// Unit for minimum scheduling notice
1574    /// Allowed values: `hours`, `days`, `weeks`, `months`.
1575    #[serde(
1576        rename = "allowBookingAfterUnit",
1577        default,
1578        skip_serializing_if = "Option::is_none"
1579    )]
1580    pub allow_booking_after_unit: Option<String>,
1581    /// Minimum number of days/weeks/months for which to allow booking events
1582    #[serde(
1583        rename = "allowBookingFor",
1584        default,
1585        skip_serializing_if = "Option::is_none"
1586    )]
1587    pub allow_booking_for: Option<f64>,
1588    /// Unit for controlling the duration for which booking would be allowed for
1589    /// Allowed values: `days`, `weeks`, `months`.
1590    #[serde(
1591        rename = "allowBookingForUnit",
1592        default,
1593        skip_serializing_if = "Option::is_none"
1594    )]
1595    pub allow_booking_for_unit: Option<String>,
1596    #[serde(rename = "openHours", default, skip_serializing_if = "Vec::is_empty")]
1597    pub open_hours: Vec<OpenHour>,
1598    /// Enable recurring appointments for the calendars. Please note that only one member should
1599    /// be added in the calendar to enable this
1600    #[serde(
1601        rename = "enableRecurring",
1602        default,
1603        skip_serializing_if = "Option::is_none"
1604    )]
1605    pub enable_recurring: Option<bool>,
1606    #[serde(default, skip_serializing_if = "Option::is_none")]
1607    pub recurring: Option<Recurring>,
1608    #[serde(rename = "formId", default, skip_serializing_if = "Option::is_none")]
1609    pub form_id: Option<String>,
1610    #[serde(
1611        rename = "stickyContact",
1612        default,
1613        skip_serializing_if = "Option::is_none"
1614    )]
1615    pub sticky_contact: Option<bool>,
1616    #[serde(
1617        rename = "isLivePaymentMode",
1618        default,
1619        skip_serializing_if = "Option::is_none"
1620    )]
1621    pub is_live_payment_mode: Option<bool>,
1622    #[serde(
1623        rename = "autoConfirm",
1624        default,
1625        skip_serializing_if = "Option::is_none"
1626    )]
1627    pub auto_confirm: Option<bool>,
1628    #[serde(
1629        rename = "shouldSendAlertEmailsToAssignedMember",
1630        default,
1631        skip_serializing_if = "Option::is_none"
1632    )]
1633    pub should_send_alert_emails_to_assigned_member: Option<bool>,
1634    #[serde(
1635        rename = "alertEmail",
1636        default,
1637        skip_serializing_if = "Option::is_none"
1638    )]
1639    pub alert_email: Option<String>,
1640    #[serde(
1641        rename = "googleInvitationEmails",
1642        default,
1643        skip_serializing_if = "Option::is_none"
1644    )]
1645    pub google_invitation_emails: Option<bool>,
1646    #[serde(
1647        rename = "allowReschedule",
1648        default,
1649        skip_serializing_if = "Option::is_none"
1650    )]
1651    pub allow_reschedule: Option<bool>,
1652    #[serde(
1653        rename = "allowCancellation",
1654        default,
1655        skip_serializing_if = "Option::is_none"
1656    )]
1657    pub allow_cancellation: Option<bool>,
1658    #[serde(
1659        rename = "shouldAssignContactToTeamMember",
1660        default,
1661        skip_serializing_if = "Option::is_none"
1662    )]
1663    pub should_assign_contact_to_team_member: Option<bool>,
1664    #[serde(
1665        rename = "shouldSkipAssigningContactForExisting",
1666        default,
1667        skip_serializing_if = "Option::is_none"
1668    )]
1669    pub should_skip_assigning_contact_for_existing: Option<bool>,
1670    #[serde(default, skip_serializing_if = "Option::is_none")]
1671    pub notes: Option<String>,
1672    #[serde(rename = "pixelId", default, skip_serializing_if = "Option::is_none")]
1673    pub pixel_id: Option<String>,
1674    /// Allowed values: `RedirectURL`, `ThankYouMessage`.
1675    #[serde(
1676        rename = "formSubmitType",
1677        default,
1678        skip_serializing_if = "Option::is_none"
1679    )]
1680    pub form_submit_type: Option<String>,
1681    #[serde(
1682        rename = "formSubmitRedirectURL",
1683        default,
1684        skip_serializing_if = "Option::is_none"
1685    )]
1686    pub form_submit_redirect_url: Option<String>,
1687    #[serde(
1688        rename = "formSubmitThanksMessage",
1689        default,
1690        skip_serializing_if = "Option::is_none"
1691    )]
1692    pub form_submit_thanks_message: Option<String>,
1693    /// Determines which availability type to consider: - **1**: Only custom availabilities will
1694    /// be used. - **0**: Only open hours will be used. - **null**: Both the custom
1695    /// availabilities and open hours will be considered.
1696    /// Allowed values: `0`, `1`.
1697    #[serde(
1698        rename = "availabilityType",
1699        default,
1700        skip_serializing_if = "Option::is_none"
1701    )]
1702    pub availability_type: Option<String>,
1703    /// This is only to set the custom availability. For standard availability, use the
1704    /// openHours property
1705    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1706    pub availabilities: Vec<UpdateAvailability>,
1707    /// Allowed values: `count_only`, `collect_detail`.
1708    #[serde(rename = "guestType", default, skip_serializing_if = "Option::is_none")]
1709    pub guest_type: Option<String>,
1710    #[serde(
1711        rename = "consentLabel",
1712        default,
1713        skip_serializing_if = "Option::is_none"
1714    )]
1715    pub consent_label: Option<String>,
1716    #[serde(
1717        rename = "calendarCoverImage",
1718        default,
1719        skip_serializing_if = "Option::is_none"
1720    )]
1721    pub calendar_cover_image: Option<String>,
1722    /// Look Busy Configuration
1723    #[serde(
1724        rename = "lookBusyConfig",
1725        default,
1726        skip_serializing_if = "Option::is_none"
1727    )]
1728    pub look_busy_config: Option<LookBusyConfiguration>,
1729    #[serde(rename = "isActive", default, skip_serializing_if = "Option::is_none")]
1730    pub is_active: Option<bool>,
1731}
1732
1733/// `CalendarsGetSuccessfulResponseDTO` from the GoHighLevel OpenAPI spec.
1734#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1735pub struct CalendarsGetSuccessfulResponseDTO {
1736    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1737    pub calendars: Vec<CalendarDTO>,
1738}
1739
1740/// `CreateCalendarNotificationDTO` from the GoHighLevel OpenAPI spec.
1741#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1742pub struct CreateCalendarNotificationDTO {
1743    /// notification recipient type
1744    /// Allowed values: `contact`, `guest`, `assignedUser`, `emails`, `phoneNumbers`,
1745    /// `business`.
1746    /// Required by the API.
1747    #[serde(rename = "receiverType")]
1748    pub receiver_type: String,
1749    /// Notification channel
1750    /// Allowed values: `email`, `inApp`, `sms`, `whatsapp`.
1751    /// Required by the API.
1752    pub channel: String,
1753    /// Notification type
1754    /// Allowed values: `booked`, `confirmation`, `cancellation`, `reminder`, `followup`,
1755    /// `reschedule`.
1756    /// Required by the API.
1757    #[serde(rename = "notificationType")]
1758    pub notification_type: String,
1759    /// Is the notification active
1760    #[serde(rename = "isActive", default, skip_serializing_if = "Option::is_none")]
1761    pub is_active: Option<bool>,
1762    /// Template ID for email notification. Not necessary for in-App notification
1763    #[serde(
1764        rename = "templateId",
1765        default,
1766        skip_serializing_if = "Option::is_none"
1767    )]
1768    pub template_id: Option<String>,
1769    /// Body for email notification. Not necessary for in-App notification
1770    #[serde(default, skip_serializing_if = "Option::is_none")]
1771    pub body: Option<String>,
1772    /// Subject for email notification. Not necessary for in-App notification
1773    #[serde(default, skip_serializing_if = "Option::is_none")]
1774    pub subject: Option<String>,
1775    /// Specifies the time after which the follow-up notification should be sent. This is not
1776    /// required for other notification types.
1777    #[serde(rename = "afterTime", default, skip_serializing_if = "Vec::is_empty")]
1778    pub after_time: Vec<SchedulesDTO>,
1779    /// Specifies the time before which the reminder notification should be sent. This is not
1780    /// required for other notification types.
1781    #[serde(rename = "beforeTime", default, skip_serializing_if = "Vec::is_empty")]
1782    pub before_time: Vec<SchedulesDTO>,
1783    /// Additional email addresses to receive notifications.
1784    #[serde(
1785        rename = "additionalEmailIds",
1786        default,
1787        skip_serializing_if = "Vec::is_empty"
1788    )]
1789    pub additional_email_ids: Vec<String>,
1790    /// Additional phone numbers to receive notifications.
1791    #[serde(
1792        rename = "additionalPhoneNumbers",
1793        default,
1794        skip_serializing_if = "Vec::is_empty"
1795    )]
1796    pub additional_phone_numbers: Vec<String>,
1797    /// Selected users for in-App and business email notifications. Supports user IDs and
1798    /// special keyword "sub_account_admin"
1799    #[serde(
1800        rename = "selectedUsers",
1801        default,
1802        skip_serializing_if = "Vec::is_empty"
1803    )]
1804    pub selected_users: Vec<String>,
1805    /// from address for email notification
1806    #[serde(
1807        rename = "fromAddress",
1808        default,
1809        skip_serializing_if = "Option::is_none"
1810    )]
1811    pub from_address: Option<String>,
1812    /// from name for email/sms notification
1813    #[serde(rename = "fromName", default, skip_serializing_if = "Option::is_none")]
1814    pub from_name: Option<String>,
1815    /// from number for sms notification
1816    #[serde(
1817        rename = "fromNumber",
1818        default,
1819        skip_serializing_if = "Option::is_none"
1820    )]
1821    pub from_number: Option<String>,
1822}
1823
1824/// `CreateCalendarResourceDTO` from the GoHighLevel OpenAPI spec.
1825#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1826pub struct CreateCalendarResourceDTO {
1827    /// Required by the API.
1828    #[serde(rename = "locationId")]
1829    pub location_id: String,
1830    /// Required by the API.
1831    pub name: String,
1832    /// Required by the API.
1833    pub description: String,
1834    /// Quantity of the equipment.
1835    /// Required by the API.
1836    pub quantity: f64,
1837    /// Quantity of the out of service equipment.
1838    /// Required by the API.
1839    #[serde(rename = "outOfService")]
1840    pub out_of_service: f64,
1841    /// Capacity of the room.
1842    /// Required by the API.
1843    pub capacity: f64,
1844    /// Service calendar IDs to be mapped with the resource. One equipment can only be mapped
1845    /// with one service calendar. One room can be mapped with multiple service calendars.
1846    /// Required by the API.
1847    #[serde(rename = "calendarIds", default, skip_serializing_if = "Vec::is_empty")]
1848    pub calendar_ids: Vec<String>,
1849}
1850
1851/// `CreateScheduleDTO` from the GoHighLevel OpenAPI spec.
1852#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1853pub struct CreateScheduleDTO {
1854    /// Schedule rules defining when the schedule is active
1855    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1856    pub rules: Vec<ScheduleRuleDTO>,
1857    /// Timezone for the schedule (IANA timezone identifier)
1858    /// Required by the API.
1859    pub timezone: String,
1860    /// Location ID where this schedule applies
1861    /// Required by the API.
1862    #[serde(rename = "locationId")]
1863    pub location_id: String,
1864    /// Human-readable name for the schedule
1865    /// Required by the API.
1866    pub name: String,
1867    /// User ID associated with the schedule
1868    /// Required by the API.
1869    #[serde(rename = "userId")]
1870    pub user_id: String,
1871    /// Calendar IDs associated with the schedule
1872    #[serde(rename = "calendarIds", default, skip_serializing_if = "Vec::is_empty")]
1873    pub calendar_ids: Vec<String>,
1874}
1875
1876/// `CreatedOrUpdatedBy` from the GoHighLevel OpenAPI spec.
1877#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1878pub struct CreatedOrUpdatedBy {
1879    /// The ID of the user who created or updated the appointment
1880    #[serde(rename = "userId", default, skip_serializing_if = "Option::is_none")]
1881    pub user_id: Option<String>,
1882    /// The source of the appointment
1883    /// Required by the API.
1884    /// (Optional here so responses that omit it still parse.)
1885    #[serde(default, skip_serializing_if = "Option::is_none")]
1886    pub source: Option<String>,
1887}
1888
1889/// `DeleteAppointmentSchema` from the GoHighLevel OpenAPI spec.
1890#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1891pub struct DeleteAppointmentSchema {
1892    /// The spec defines no fields for this schema.
1893    #[serde(flatten)]
1894    pub extra: serde_json::Map<String, serde_json::Value>,
1895}
1896
1897/// `DeleteEventSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
1898#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1899pub struct DeleteEventSuccessfulResponseDto {
1900    #[serde(default, skip_serializing_if = "Option::is_none")]
1901    pub succeeded: Option<bool>,
1902}
1903
1904/// `DeleteNoteSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
1905#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1906pub struct DeleteNoteSuccessfulResponseDto {
1907    #[serde(default, skip_serializing_if = "Option::is_none")]
1908    pub success: Option<bool>,
1909}
1910
1911/// `GetAllSchedulesResponseDTO` from the GoHighLevel OpenAPI spec.
1912#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1913pub struct GetAllSchedulesResponseDTO {
1914    /// Array of schedules
1915    /// Required by the API.
1916    /// (Optional here so responses that omit it still parse.)
1917    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1918    pub schedules: Vec<ScheduleObjectResponseDTO>,
1919}
1920
1921/// `GetCalendarEventSuccessfulResponseDTO` from the GoHighLevel OpenAPI spec.
1922#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1923pub struct GetCalendarEventSuccessfulResponseDTO {
1924    #[serde(default, skip_serializing_if = "Option::is_none")]
1925    pub event: Option<CalendarEventDTO>,
1926}
1927
1928/// `GetCalendarEventsSuccessfulResponseDTO` from the GoHighLevel OpenAPI spec.
1929#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1930pub struct GetCalendarEventsSuccessfulResponseDTO {
1931    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1932    pub events: Vec<CalendarEventDTO>,
1933}
1934
1935/// `GetCreateUpdateNoteSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
1936#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1937pub struct GetCreateUpdateNoteSuccessfulResponseDto {
1938    #[serde(default, skip_serializing_if = "Option::is_none")]
1939    pub note: Option<GetNoteSchema>,
1940}
1941
1942/// `GetNoteSchema` from the GoHighLevel OpenAPI spec.
1943#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1944pub struct GetNoteSchema {
1945    #[serde(default, skip_serializing_if = "Option::is_none")]
1946    pub id: Option<String>,
1947    #[serde(default, skip_serializing_if = "Option::is_none")]
1948    pub body: Option<String>,
1949    #[serde(rename = "userId", default, skip_serializing_if = "Option::is_none")]
1950    pub user_id: Option<String>,
1951    #[serde(rename = "dateAdded", default, skip_serializing_if = "Option::is_none")]
1952    pub date_added: Option<String>,
1953    #[serde(rename = "contactId", default, skip_serializing_if = "Option::is_none")]
1954    pub contact_id: Option<String>,
1955    #[serde(rename = "createdBy", default, skip_serializing_if = "Option::is_none")]
1956    pub created_by: Option<NoteCreatedBySchema>,
1957}
1958
1959/// `GetNotesListSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
1960#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1961pub struct GetNotesListSuccessfulResponseDto {
1962    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1963    pub notes: Vec<GetNoteSchema>,
1964    #[serde(rename = "hasMore", default, skip_serializing_if = "Option::is_none")]
1965    pub has_more: Option<bool>,
1966}
1967
1968/// `GroupCreateDTO` from the GoHighLevel OpenAPI spec.
1969#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1970pub struct GroupCreateDTO {
1971    /// Required by the API.
1972    #[serde(rename = "locationId")]
1973    pub location_id: String,
1974    /// Required by the API.
1975    pub name: String,
1976    /// Required by the API.
1977    pub description: String,
1978    /// Required by the API.
1979    pub slug: String,
1980    #[serde(rename = "isActive", default, skip_serializing_if = "Option::is_none")]
1981    pub is_active: Option<bool>,
1982}
1983
1984/// `GroupCreateSuccessfulResponseDTO` from the GoHighLevel OpenAPI spec.
1985#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1986pub struct GroupCreateSuccessfulResponseDTO {
1987    #[serde(default, skip_serializing_if = "Option::is_none")]
1988    pub group: Option<GroupDTO>,
1989}
1990
1991/// `GroupDTO` from the GoHighLevel OpenAPI spec.
1992#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1993pub struct GroupDTO {
1994    /// Required by the API.
1995    /// (Optional here so responses that omit it still parse.)
1996    #[serde(
1997        rename = "locationId",
1998        default,
1999        skip_serializing_if = "Option::is_none"
2000    )]
2001    pub location_id: Option<String>,
2002    /// Required by the API.
2003    /// (Optional here so responses that omit it still parse.)
2004    #[serde(default, skip_serializing_if = "Option::is_none")]
2005    pub name: Option<String>,
2006    /// Required by the API.
2007    /// (Optional here so responses that omit it still parse.)
2008    #[serde(default, skip_serializing_if = "Option::is_none")]
2009    pub description: Option<String>,
2010    /// Required by the API.
2011    /// (Optional here so responses that omit it still parse.)
2012    #[serde(default, skip_serializing_if = "Option::is_none")]
2013    pub slug: Option<String>,
2014    #[serde(rename = "isActive", default, skip_serializing_if = "Option::is_none")]
2015    pub is_active: Option<bool>,
2016    #[serde(default, skip_serializing_if = "Option::is_none")]
2017    pub id: Option<String>,
2018}
2019
2020/// `GroupStatusUpdateParams` from the GoHighLevel OpenAPI spec.
2021#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2022pub struct GroupStatusUpdateParams {
2023    /// Is Active?
2024    /// Required by the API.
2025    #[serde(rename = "isActive")]
2026    pub is_active: bool,
2027}
2028
2029/// `GroupSuccessfulResponseDTO` from the GoHighLevel OpenAPI spec.
2030#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2031pub struct GroupSuccessfulResponseDTO {
2032    /// Success
2033    #[serde(default, skip_serializing_if = "Option::is_none")]
2034    pub success: Option<bool>,
2035}
2036
2037/// `GroupUpdateDTO` from the GoHighLevel OpenAPI spec.
2038#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2039pub struct GroupUpdateDTO {
2040    /// Required by the API.
2041    pub name: String,
2042    /// Required by the API.
2043    pub description: String,
2044    /// Required by the API.
2045    pub slug: String,
2046}
2047
2048/// `Hour` from the GoHighLevel OpenAPI spec.
2049#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2050pub struct Hour {
2051    /// Required by the API.
2052    /// (Optional here so responses that omit it still parse.)
2053    #[serde(rename = "openHour", default, skip_serializing_if = "Option::is_none")]
2054    pub open_hour: Option<f64>,
2055    /// Required by the API.
2056    /// (Optional here so responses that omit it still parse.)
2057    #[serde(
2058        rename = "openMinute",
2059        default,
2060        skip_serializing_if = "Option::is_none"
2061    )]
2062    pub open_minute: Option<f64>,
2063    /// Required by the API.
2064    /// (Optional here so responses that omit it still parse.)
2065    #[serde(rename = "closeHour", default, skip_serializing_if = "Option::is_none")]
2066    pub close_hour: Option<f64>,
2067    /// Required by the API.
2068    /// (Optional here so responses that omit it still parse.)
2069    #[serde(
2070        rename = "closeMinute",
2071        default,
2072        skip_serializing_if = "Option::is_none"
2073    )]
2074    pub close_minute: Option<f64>,
2075}
2076
2077/// `LocationConfiguration` from the GoHighLevel OpenAPI spec.
2078#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2079pub struct LocationConfiguration {
2080    /// Type of meeting location. zoom_conference/google_conference/ms_teams_conference is not
2081    /// supported in event calendar type
2082    /// Allowed values: `custom`, `zoom_conference`, `google_conference`, `inbound_call`,
2083    /// `outbound_call`, `physical`, `booker`, `ms_teams_conference`.
2084    /// Required by the API.
2085    pub kind: String,
2086    /// Address for meeting location. Not applicable on "zoom_conference", "google_conference"
2087    /// and "ms_teams_conference" kind
2088    #[serde(default, skip_serializing_if = "Option::is_none")]
2089    pub location: Option<String>,
2090}
2091
2092/// `LocationConfigurationResponse` from the GoHighLevel OpenAPI spec.
2093#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2094pub struct LocationConfigurationResponse {
2095    /// Type of meeting location. zoom_conference/google_conference/ms_teams_conference is not
2096    /// supported in event calendar type
2097    /// Allowed values: `custom`, `zoom_conference`, `google_conference`, `inbound_call`,
2098    /// `outbound_call`, `physical`, `booker`, `ms_teams_conference`.
2099    /// Required by the API.
2100    /// (Optional here so responses that omit it still parse.)
2101    #[serde(default, skip_serializing_if = "Option::is_none")]
2102    pub kind: Option<String>,
2103    /// Address for meeting location. Not applicable on "zoom_conference", "google_conference"
2104    /// and "ms_teams_conference" kind
2105    #[serde(default, skip_serializing_if = "Option::is_none")]
2106    pub location: Option<String>,
2107    /// Unique ID used to select a specific meeting location
2108    #[serde(rename = "meetingId", default, skip_serializing_if = "Option::is_none")]
2109    pub meeting_id: Option<String>,
2110}
2111
2112/// `LookBusyConfiguration` from the GoHighLevel OpenAPI spec.
2113#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2114pub struct LookBusyConfiguration {
2115    /// Apply Look Busy
2116    /// Required by the API.
2117    /// (Optional here so responses that omit it still parse.)
2118    #[serde(default, skip_serializing_if = "Option::is_none")]
2119    pub enabled: Option<bool>,
2120    /// Percentage of slots that will be hidden
2121    /// Required by the API.
2122    /// (Optional here so responses that omit it still parse.)
2123    #[serde(
2124        rename = "LookBusyPercentage",
2125        default,
2126        skip_serializing_if = "Option::is_none"
2127    )]
2128    pub look_busy_percentage: Option<f64>,
2129}
2130
2131/// `NoteCreatedBySchema` from the GoHighLevel OpenAPI spec.
2132#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2133pub struct NoteCreatedBySchema {
2134    #[serde(default, skip_serializing_if = "Option::is_none")]
2135    pub id: Option<String>,
2136    #[serde(default, skip_serializing_if = "Option::is_none")]
2137    pub name: Option<String>,
2138}
2139
2140/// `NotesDTO` from the GoHighLevel OpenAPI spec.
2141#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2142pub struct NotesDTO {
2143    #[serde(rename = "userId", default, skip_serializing_if = "Option::is_none")]
2144    pub user_id: Option<String>,
2145    /// Note body
2146    /// Required by the API.
2147    pub body: String,
2148}
2149
2150/// `OpenHour` from the GoHighLevel OpenAPI spec.
2151#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2152pub struct OpenHour {
2153    /// Required by the API.
2154    /// (Optional here so responses that omit it still parse.)
2155    #[serde(
2156        rename = "daysOfTheWeek",
2157        default,
2158        skip_serializing_if = "Vec::is_empty"
2159    )]
2160    pub days_of_the_week: Vec<f64>,
2161    /// Required by the API.
2162    /// (Optional here so responses that omit it still parse.)
2163    #[serde(default, skip_serializing_if = "Vec::is_empty")]
2164    pub hours: Vec<Hour>,
2165}
2166
2167/// `Recurring` from the GoHighLevel OpenAPI spec.
2168#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2169pub struct Recurring {
2170    /// Allowed values: `DAILY`, `WEEKLY`, `MONTHLY`.
2171    #[serde(default, skip_serializing_if = "Option::is_none")]
2172    pub freq: Option<String>,
2173    /// Number of recurrences
2174    #[serde(default, skip_serializing_if = "Option::is_none")]
2175    pub count: Option<f64>,
2176    /// This setting contols what to do incase a recurring slot is unavailable
2177    /// Allowed values: `skip`, `continue`, `book_next`.
2178    #[serde(
2179        rename = "bookingOption",
2180        default,
2181        skip_serializing_if = "Option::is_none"
2182    )]
2183    pub booking_option: Option<String>,
2184    /// This setting contols what to do incase a recurring slot is unavailable
2185    /// Allowed values: `confirmed`, `new`.
2186    #[serde(
2187        rename = "bookingOverlapDefaultStatus",
2188        default,
2189        skip_serializing_if = "Option::is_none"
2190    )]
2191    pub booking_overlap_default_status: Option<String>,
2192}
2193
2194/// `ResourceDeleteResponseDTO` from the GoHighLevel OpenAPI spec.
2195#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2196pub struct ResourceDeleteResponseDTO {
2197    /// Success
2198    #[serde(default, skip_serializing_if = "Option::is_none")]
2199    pub success: Option<bool>,
2200}
2201
2202/// `ScheduleIntervalDTO` from the GoHighLevel OpenAPI spec.
2203#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2204pub struct ScheduleIntervalDTO {
2205    /// Start time in HH:MM format (24-hour format)
2206    /// Required by the API.
2207    /// (Optional here so responses that omit it still parse.)
2208    #[serde(rename = "from", default, skip_serializing_if = "Option::is_none")]
2209    pub from_: Option<String>,
2210    /// End time in HH:MM format (24-hour format)
2211    /// Required by the API.
2212    /// (Optional here so responses that omit it still parse.)
2213    #[serde(default, skip_serializing_if = "Option::is_none")]
2214    pub to: Option<String>,
2215}
2216
2217/// `ScheduleObjectResponseDTO` from the GoHighLevel OpenAPI spec.
2218#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2219pub struct ScheduleObjectResponseDTO {
2220    /// Unique identifier for the schedule
2221    /// Required by the API.
2222    /// (Optional here so responses that omit it still parse.)
2223    #[serde(default, skip_serializing_if = "Option::is_none")]
2224    pub id: Option<String>,
2225    /// Human-readable name for the schedule
2226    /// Required by the API.
2227    /// (Optional here so responses that omit it still parse.)
2228    #[serde(default, skip_serializing_if = "Option::is_none")]
2229    pub name: Option<String>,
2230    /// Location ID where this schedule applies
2231    /// Required by the API.
2232    /// (Optional here so responses that omit it still parse.)
2233    #[serde(
2234        rename = "locationId",
2235        default,
2236        skip_serializing_if = "Option::is_none"
2237    )]
2238    pub location_id: Option<String>,
2239    /// Schedule rules defining when the schedule is active
2240    /// Required by the API.
2241    /// (Optional here so responses that omit it still parse.)
2242    #[serde(default, skip_serializing_if = "Vec::is_empty")]
2243    pub rules: Vec<ScheduleRuleDTO>,
2244    /// Timezone for the schedule (IANA timezone identifier)
2245    /// Required by the API.
2246    /// (Optional here so responses that omit it still parse.)
2247    #[serde(default, skip_serializing_if = "Option::is_none")]
2248    pub timezone: Option<String>,
2249    /// ISO date string when the schedule was created
2250    /// Required by the API.
2251    /// (Optional here so responses that omit it still parse.)
2252    #[serde(rename = "dateAdded", default, skip_serializing_if = "Option::is_none")]
2253    pub date_added: Option<String>,
2254    /// ISO date string when the schedule was last updated
2255    /// Required by the API.
2256    /// (Optional here so responses that omit it still parse.)
2257    #[serde(
2258        rename = "dateUpdated",
2259        default,
2260        skip_serializing_if = "Option::is_none"
2261    )]
2262    pub date_updated: Option<String>,
2263    /// User ID associated with the schedule
2264    /// Required by the API.
2265    /// (Optional here so responses that omit it still parse.)
2266    #[serde(rename = "userId", default, skip_serializing_if = "Option::is_none")]
2267    pub user_id: Option<String>,
2268    /// Calendar IDs associated with the schedule
2269    #[serde(rename = "calendarIds", default, skip_serializing_if = "Vec::is_empty")]
2270    pub calendar_ids: Vec<String>,
2271    /// Whether the schedule has been deleted
2272    /// Required by the API.
2273    /// (Optional here so responses that omit it still parse.)
2274    #[serde(default, skip_serializing_if = "Option::is_none")]
2275    pub deleted: Option<bool>,
2276}
2277
2278/// `ScheduleResponseDTO` from the GoHighLevel OpenAPI spec.
2279#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2280pub struct ScheduleResponseDTO {
2281    /// Schedule
2282    /// Required by the API.
2283    /// (Optional here so responses that omit it still parse.)
2284    #[serde(default, skip_serializing_if = "Option::is_none")]
2285    pub schedule: Option<ScheduleObjectResponseDTO>,
2286}
2287
2288/// `ScheduleRuleDTO` from the GoHighLevel OpenAPI spec.
2289#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2290pub struct ScheduleRuleDTO {
2291    /// Type of schedule rule - weekday (recurring) or date (specific date)
2292    /// Allowed values: `wday`, `date`.
2293    /// Required by the API.
2294    /// (Optional here so responses that omit it still parse.)
2295    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
2296    pub type_: Option<String>,
2297    /// Time intervals for the rule (e.g., 9 AM to 5 PM)
2298    /// Required by the API.
2299    /// (Optional here so responses that omit it still parse.)
2300    #[serde(default, skip_serializing_if = "Vec::is_empty")]
2301    pub intervals: Vec<ScheduleIntervalDTO>,
2302    /// Specific date in YYYY-MM-DD format (only for date-type rules)
2303    #[serde(default, skip_serializing_if = "Option::is_none")]
2304    pub date: Option<String>,
2305    /// Day of week (only for weekday-type rules)
2306    /// Allowed values: `sunday`, `monday`, `tuesday`, `wednesday`, `thursday`, `friday`,
2307    /// `saturday`.
2308    #[serde(default, skip_serializing_if = "Option::is_none")]
2309    pub day: Option<String>,
2310}
2311
2312/// `SchedulesDTO` from the GoHighLevel OpenAPI spec.
2313#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2314pub struct SchedulesDTO {
2315    #[serde(
2316        rename = "timeOffset",
2317        default,
2318        skip_serializing_if = "Option::is_none"
2319    )]
2320    pub time_offset: Option<f64>,
2321    #[serde(default, skip_serializing_if = "Option::is_none")]
2322    pub unit: Option<String>,
2323}
2324
2325/// `SlotsSchema` from the GoHighLevel OpenAPI spec.
2326#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2327pub struct SlotsSchema {
2328    /// Required by the API.
2329    /// (Optional here so responses that omit it still parse.)
2330    #[serde(default, skip_serializing_if = "Vec::is_empty")]
2331    pub slots: Vec<String>,
2332}
2333
2334/// `TeamMember` from the GoHighLevel OpenAPI spec.
2335#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2336pub struct TeamMember {
2337    /// Required by the API.
2338    #[serde(rename = "userId")]
2339    pub user_id: String,
2340    /// Allowed values: `0`, `0.5`, `1`.
2341    #[serde(default, skip_serializing_if = "Option::is_none")]
2342    pub priority: Option<String>,
2343    /// 🚨 Deprecated! Use `locationConfigurations.kind` instead.
2344    /// Allowed values: `custom`, `zoom`, `gmeet`, `phone`, `address`, `teams`, `booker`.
2345    #[serde(
2346        rename = "meetingLocationType",
2347        default,
2348        skip_serializing_if = "Option::is_none"
2349    )]
2350    pub meeting_location_type: Option<String>,
2351    /// 🚨 Deprecated! Use `locationConfigurations.location` instead.
2352    #[serde(
2353        rename = "meetingLocation",
2354        default,
2355        skip_serializing_if = "Option::is_none"
2356    )]
2357    pub meeting_location: Option<String>,
2358    /// Marks a user as primary. This property is required in case of collective booking
2359    /// calendars. Only one user can be primary.
2360    #[serde(rename = "isPrimary", default, skip_serializing_if = "Option::is_none")]
2361    pub is_primary: Option<bool>,
2362    /// Meeting location configuration for event calendar. - *Multiple locations are allowed
2363    /// only when one team member is selected.* - *For **Class booking** and **Collective**
2364    /// calendars, only one location configuration is allowed for each team member.*
2365    #[serde(
2366        rename = "locationConfigurations",
2367        default,
2368        skip_serializing_if = "Vec::is_empty"
2369    )]
2370    pub location_configurations: Vec<LocationConfiguration>,
2371}
2372
2373/// `TeamMemberResponse` from the GoHighLevel OpenAPI spec.
2374#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2375pub struct TeamMemberResponse {
2376    /// Required by the API.
2377    /// (Optional here so responses that omit it still parse.)
2378    #[serde(rename = "userId", default, skip_serializing_if = "Option::is_none")]
2379    pub user_id: Option<String>,
2380    /// Allowed values: `0`, `0.5`, `1`.
2381    #[serde(default, skip_serializing_if = "Option::is_none")]
2382    pub priority: Option<String>,
2383    /// 🚨 Deprecated! Use `locationConfigurations.kind` instead.
2384    /// Allowed values: `custom`, `zoom`, `gmeet`, `phone`, `address`, `teams`, `booker`.
2385    #[serde(
2386        rename = "meetingLocationType",
2387        default,
2388        skip_serializing_if = "Option::is_none"
2389    )]
2390    pub meeting_location_type: Option<String>,
2391    /// 🚨 Deprecated! Use `locationConfigurations.location` instead.
2392    #[serde(
2393        rename = "meetingLocation",
2394        default,
2395        skip_serializing_if = "Option::is_none"
2396    )]
2397    pub meeting_location: Option<String>,
2398    /// Marks a user as primary. This property is required in case of collective booking
2399    /// calendars. Only one user can be primary.
2400    #[serde(rename = "isPrimary", default, skip_serializing_if = "Option::is_none")]
2401    pub is_primary: Option<bool>,
2402    /// Meeting location configurations
2403    #[serde(
2404        rename = "locationConfigurations",
2405        default,
2406        skip_serializing_if = "Vec::is_empty"
2407    )]
2408    pub location_configurations: Vec<LocationConfigurationResponse>,
2409}
2410
2411/// `UpdateAvailability` from the GoHighLevel OpenAPI spec.
2412#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2413pub struct UpdateAvailability {
2414    /// Formulate the date string in the format of ` T00:00:00.000Z`.
2415    /// Required by the API.
2416    pub date: String,
2417    /// Required by the API.
2418    #[serde(default, skip_serializing_if = "Vec::is_empty")]
2419    pub hours: Vec<Hour>,
2420    #[serde(default, skip_serializing_if = "Option::is_none")]
2421    pub deleted: Option<bool>,
2422    /// The ID of the custom availability object. It is required while updating or deleting the
2423    /// existing custom date availability
2424    #[serde(default, skip_serializing_if = "Option::is_none")]
2425    pub id: Option<String>,
2426}
2427
2428/// `UpdateCalendarNotificationsDTO` from the GoHighLevel OpenAPI spec.
2429#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2430pub struct UpdateCalendarNotificationsDTO {
2431    /// Notification recipient type
2432    /// Allowed values: `contact`, `guest`, `assignedUser`, `emails`, `phoneNumbers`,
2433    /// `business`.
2434    #[serde(
2435        rename = "receiverType",
2436        default,
2437        skip_serializing_if = "Option::is_none"
2438    )]
2439    pub receiver_type: Option<String>,
2440    /// Additional email addresses to receive notifications.
2441    #[serde(
2442        rename = "additionalEmailIds",
2443        default,
2444        skip_serializing_if = "Vec::is_empty"
2445    )]
2446    pub additional_email_ids: Vec<String>,
2447    /// Additional phone numbers to receive notifications.
2448    #[serde(
2449        rename = "additionalPhoneNumbers",
2450        default,
2451        skip_serializing_if = "Vec::is_empty"
2452    )]
2453    pub additional_phone_numbers: Vec<String>,
2454    /// Selected users for in-App and business email notifications. Supports user IDs and
2455    /// special keyword "sub_account_admin"
2456    #[serde(
2457        rename = "selectedUsers",
2458        default,
2459        skip_serializing_if = "Vec::is_empty"
2460    )]
2461    pub selected_users: Vec<String>,
2462    /// Notification channel
2463    /// Allowed values: `email`, `inApp`, `sms`, `whatsapp`.
2464    #[serde(default, skip_serializing_if = "Option::is_none")]
2465    pub channel: Option<String>,
2466    /// Notification type
2467    /// Allowed values: `booked`, `confirmation`, `cancellation`, `reminder`, `followup`,
2468    /// `reschedule`.
2469    #[serde(
2470        rename = "notificationType",
2471        default,
2472        skip_serializing_if = "Option::is_none"
2473    )]
2474    pub notification_type: Option<String>,
2475    /// Is the notification active
2476    #[serde(rename = "isActive", default, skip_serializing_if = "Option::is_none")]
2477    pub is_active: Option<bool>,
2478    /// Marks the notification as deleted (soft delete)
2479    #[serde(default, skip_serializing_if = "Option::is_none")]
2480    pub deleted: Option<bool>,
2481    /// Template ID for email notification
2482    #[serde(
2483        rename = "templateId",
2484        default,
2485        skip_serializing_if = "Option::is_none"
2486    )]
2487    pub template_id: Option<String>,
2488    /// Body for email notification. Not necessary for in-App notification
2489    #[serde(default, skip_serializing_if = "Option::is_none")]
2490    pub body: Option<String>,
2491    /// Subject for email notification. Not necessary for in-App notification
2492    #[serde(default, skip_serializing_if = "Option::is_none")]
2493    pub subject: Option<String>,
2494    /// Specifies the time after which the follow-up notification should be sent. This is not
2495    /// required for other notification types.
2496    #[serde(rename = "afterTime", default, skip_serializing_if = "Vec::is_empty")]
2497    pub after_time: Vec<SchedulesDTO>,
2498    /// Specifies the time before which the reminder notification should be sent. This is not
2499    /// required for other notification types.
2500    #[serde(rename = "beforeTime", default, skip_serializing_if = "Vec::is_empty")]
2501    pub before_time: Vec<SchedulesDTO>,
2502    /// From address for email notification
2503    #[serde(
2504        rename = "fromAddress",
2505        default,
2506        skip_serializing_if = "Option::is_none"
2507    )]
2508    pub from_address: Option<String>,
2509    /// from number for sms notification
2510    #[serde(
2511        rename = "fromNumber",
2512        default,
2513        skip_serializing_if = "Option::is_none"
2514    )]
2515    pub from_number: Option<String>,
2516    /// From name for email/sms notification
2517    #[serde(rename = "fromName", default, skip_serializing_if = "Option::is_none")]
2518    pub from_name: Option<String>,
2519}
2520
2521/// `UpdateCalendarResourceDTO` from the GoHighLevel OpenAPI spec.
2522#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2523pub struct UpdateCalendarResourceDTO {
2524    #[serde(
2525        rename = "locationId",
2526        default,
2527        skip_serializing_if = "Option::is_none"
2528    )]
2529    pub location_id: Option<String>,
2530    #[serde(default, skip_serializing_if = "Option::is_none")]
2531    pub name: Option<String>,
2532    #[serde(default, skip_serializing_if = "Option::is_none")]
2533    pub description: Option<String>,
2534    /// Quantity of the equipment.
2535    #[serde(default, skip_serializing_if = "Option::is_none")]
2536    pub quantity: Option<f64>,
2537    /// Quantity of the out of service equipment.
2538    #[serde(
2539        rename = "outOfService",
2540        default,
2541        skip_serializing_if = "Option::is_none"
2542    )]
2543    pub out_of_service: Option<f64>,
2544    /// Capacity of the room.
2545    #[serde(default, skip_serializing_if = "Option::is_none")]
2546    pub capacity: Option<f64>,
2547    /// Service calendar IDs to be mapped with the resource. One equipment can only be mapped
2548    /// with one service calendar. One room can be mapped with multiple service calendars.
2549    #[serde(rename = "calendarIds", default, skip_serializing_if = "Vec::is_empty")]
2550    pub calendar_ids: Vec<String>,
2551    #[serde(rename = "isActive", default, skip_serializing_if = "Option::is_none")]
2552    pub is_active: Option<bool>,
2553}
2554
2555/// `UpdateScheduleDTO` from the GoHighLevel OpenAPI spec.
2556#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2557pub struct UpdateScheduleDTO {
2558    /// Human-readable name for the schedule
2559    #[serde(default, skip_serializing_if = "Option::is_none")]
2560    pub name: Option<String>,
2561    /// Updated schedule rules defining when the schedule is active
2562    #[serde(default, skip_serializing_if = "Vec::is_empty")]
2563    pub rules: Vec<ScheduleRuleDTO>,
2564    /// Updated timezone for the schedule (IANA timezone identifier)
2565    #[serde(default, skip_serializing_if = "Option::is_none")]
2566    pub timezone: Option<String>,
2567}
2568
2569/// `ValidateGroupSlugPostBody` from the GoHighLevel OpenAPI spec.
2570#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2571pub struct ValidateGroupSlugPostBody {
2572    /// Location Id
2573    /// Required by the API.
2574    #[serde(rename = "locationId")]
2575    pub location_id: String,
2576    /// Slug
2577    /// Required by the API.
2578    pub slug: String,
2579}
2580
2581/// `ValidateGroupSlugSuccessResponseDTO` from the GoHighLevel OpenAPI spec.
2582#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2583pub struct ValidateGroupSlugSuccessResponseDTO {
2584    /// Required by the API.
2585    /// (Optional here so responses that omit it still parse.)
2586    #[serde(default, skip_serializing_if = "Option::is_none")]
2587    pub available: Option<bool>,
2588}