Skip to main content

ghl_models/v2/
calendars.rs

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