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