Skip to main content

ghl_models/v2/
contacts.rs

1//! `contacts` data models for GoHighLevel API V2 (61 types).
2//!
3//! Generated from HighLevel's official OpenAPI spec for the
4//! **Contacts** module. Every endpoint that uses these types, with its
5//! parameters, required scopes and enum values, is documented in the
6//! [`contacts` API reference](https://github.com/Shahroz/ghl-rs/blob/main/docs/api/contacts.md).
7//!
8//! Enable with `features = ["contacts"]`.
9// @generated by xtask/generate_models.py — do not edit by hand.
10// Source: https://github.com/GoHighLevel/highlevel-api-docs
11// Doc comments are HighLevel's own field descriptions, reflowed verbatim, so
12// they aren't held to rustdoc's markdown conventions.
13#![allow(
14    missing_docs,
15    clippy::doc_lazy_continuation,
16    clippy::doc_overindented_list_items
17)]
18
19use serde::{Deserialize, Serialize};
20
21/// `AddContactToCampaignDto` from the GoHighLevel OpenAPI spec.
22#[derive(Debug, Clone, Default, Serialize, Deserialize)]
23pub struct AddContactToCampaignDto {
24    /// The spec defines no fields for this schema.
25    #[serde(flatten)]
26    pub extra: serde_json::Map<String, serde_json::Value>,
27}
28
29/// `AttributionSource` from the GoHighLevel OpenAPI spec.
30#[derive(Debug, Clone, Default, Serialize, Deserialize)]
31pub struct AttributionSource {
32    /// Required by the API.
33    /// (Optional here so responses that omit it still parse.)
34    #[serde(default, skip_serializing_if = "Option::is_none")]
35    pub url: Option<String>,
36    #[serde(default, skip_serializing_if = "Option::is_none")]
37    pub campaign: Option<String>,
38    #[serde(rename = "utmSource", default, skip_serializing_if = "Option::is_none")]
39    pub utm_source: Option<String>,
40    #[serde(rename = "utmMedium", default, skip_serializing_if = "Option::is_none")]
41    pub utm_medium: Option<String>,
42    #[serde(
43        rename = "utmContent",
44        default,
45        skip_serializing_if = "Option::is_none"
46    )]
47    pub utm_content: Option<String>,
48    #[serde(default, skip_serializing_if = "Option::is_none")]
49    pub referrer: Option<String>,
50    #[serde(
51        rename = "campaignId",
52        default,
53        skip_serializing_if = "Option::is_none"
54    )]
55    pub campaign_id: Option<String>,
56    #[serde(default, skip_serializing_if = "Option::is_none")]
57    pub fbclid: Option<String>,
58    #[serde(default, skip_serializing_if = "Option::is_none")]
59    pub gclid: Option<String>,
60    #[serde(default, skip_serializing_if = "Option::is_none")]
61    pub msclikid: Option<String>,
62    #[serde(default, skip_serializing_if = "Option::is_none")]
63    pub dclid: Option<String>,
64    #[serde(default, skip_serializing_if = "Option::is_none")]
65    pub fbc: Option<String>,
66    #[serde(default, skip_serializing_if = "Option::is_none")]
67    pub fbp: Option<String>,
68    #[serde(rename = "fbEventId", default, skip_serializing_if = "Option::is_none")]
69    pub fb_event_id: Option<String>,
70    #[serde(rename = "userAgent", default, skip_serializing_if = "Option::is_none")]
71    pub user_agent: Option<String>,
72    #[serde(default, skip_serializing_if = "Option::is_none")]
73    pub ip: Option<String>,
74    #[serde(default, skip_serializing_if = "Option::is_none")]
75    pub medium: Option<String>,
76    #[serde(rename = "mediumId", default, skip_serializing_if = "Option::is_none")]
77    pub medium_id: Option<String>,
78}
79
80/// `CheckboxField` from the GoHighLevel OpenAPI spec.
81#[derive(Debug, Clone, Default, Serialize, Deserialize)]
82pub struct CheckboxField {
83    /// Required by the API.
84    pub id: String,
85    #[serde(default, skip_serializing_if = "Option::is_none")]
86    pub key: Option<String>,
87    #[serde(default, skip_serializing_if = "Vec::is_empty")]
88    pub field_value: Vec<String>,
89}
90
91/// `ContactsBulkUpateResponse` from the GoHighLevel OpenAPI spec.
92#[derive(Debug, Clone, Default, Serialize, Deserialize)]
93pub struct ContactsBulkUpateResponse {
94    /// Required by the API.
95    /// (Optional here so responses that omit it still parse.)
96    #[serde(default, skip_serializing_if = "Option::is_none")]
97    pub success: Option<bool>,
98    /// Required by the API.
99    /// (Optional here so responses that omit it still parse.)
100    #[serde(default, skip_serializing_if = "Vec::is_empty")]
101    pub ids: Vec<String>,
102}
103
104/// `ContactsBusinessUpdate` from the GoHighLevel OpenAPI spec.
105#[derive(Debug, Clone, Default, Serialize, Deserialize)]
106pub struct ContactsBusinessUpdate {
107    /// Required by the API.
108    #[serde(rename = "locationId")]
109    pub location_id: String,
110    /// Required by the API.
111    #[serde(default, skip_serializing_if = "Vec::is_empty")]
112    pub ids: Vec<String>,
113    /// Required by the API.
114    #[serde(rename = "businessId")]
115    pub business_id: String,
116}
117
118/// `ContactsByIdSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
119#[derive(Debug, Clone, Default, Serialize, Deserialize)]
120pub struct ContactsByIdSuccessfulResponseDto {
121    #[serde(default, skip_serializing_if = "Option::is_none")]
122    pub contact: Option<GetContectByIdSchema>,
123}
124
125/// `ContactsMetaSchema` from the GoHighLevel OpenAPI spec.
126#[derive(Debug, Clone, Default, Serialize, Deserialize)]
127pub struct ContactsMetaSchema {
128    #[serde(default, skip_serializing_if = "Option::is_none")]
129    pub total: Option<f64>,
130    #[serde(
131        rename = "nextPageUrl",
132        default,
133        skip_serializing_if = "Option::is_none"
134    )]
135    pub next_page_url: Option<String>,
136    #[serde(
137        rename = "startAfterId",
138        default,
139        skip_serializing_if = "Option::is_none"
140    )]
141    pub start_after_id: Option<String>,
142    #[serde(
143        rename = "startAfter",
144        default,
145        skip_serializing_if = "Option::is_none"
146    )]
147    pub start_after: Option<f64>,
148    #[serde(
149        rename = "currentPage",
150        default,
151        skip_serializing_if = "Option::is_none"
152    )]
153    pub current_page: Option<f64>,
154    #[serde(rename = "nextPage", default, skip_serializing_if = "Option::is_none")]
155    pub next_page: Option<f64>,
156    #[serde(rename = "prevPage", default, skip_serializing_if = "Option::is_none")]
157    pub prev_page: Option<f64>,
158}
159
160/// `ContactsSearchSchema` from the GoHighLevel OpenAPI spec.
161#[derive(Debug, Clone, Default, Serialize, Deserialize)]
162pub struct ContactsSearchSchema {
163    #[serde(default, skip_serializing_if = "Option::is_none")]
164    pub id: Option<String>,
165    #[serde(
166        rename = "locationId",
167        default,
168        skip_serializing_if = "Option::is_none"
169    )]
170    pub location_id: Option<String>,
171    #[serde(default, skip_serializing_if = "Option::is_none")]
172    pub email: Option<String>,
173    #[serde(default, skip_serializing_if = "Option::is_none")]
174    pub timezone: Option<String>,
175    #[serde(default, skip_serializing_if = "Option::is_none")]
176    pub country: Option<String>,
177    #[serde(default, skip_serializing_if = "Option::is_none")]
178    pub source: Option<String>,
179    #[serde(rename = "dateAdded", default, skip_serializing_if = "Option::is_none")]
180    pub date_added: Option<String>,
181    #[serde(
182        rename = "customFields",
183        default,
184        skip_serializing_if = "Vec::is_empty"
185    )]
186    pub custom_fields: Vec<CustomFieldSchema>,
187    #[serde(default, skip_serializing_if = "Vec::is_empty")]
188    pub tags: Vec<String>,
189    #[serde(
190        rename = "businessId",
191        default,
192        skip_serializing_if = "Option::is_none"
193    )]
194    pub business_id: Option<String>,
195    #[serde(default, skip_serializing_if = "Vec::is_empty")]
196    pub attributions: Vec<AttributionSource>,
197    #[serde(default, skip_serializing_if = "Vec::is_empty")]
198    pub followers: Vec<String>,
199}
200
201/// `ContactsSearchSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
202#[derive(Debug, Clone, Default, Serialize, Deserialize)]
203pub struct ContactsSearchSuccessfulResponseDto {
204    #[serde(default, skip_serializing_if = "Vec::is_empty")]
205    pub contacts: Vec<ContactsSearchSchema>,
206    #[serde(default, skip_serializing_if = "Option::is_none")]
207    pub count: Option<f64>,
208}
209
210/// `ContactsWorkflowSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
211#[derive(Debug, Clone, Default, Serialize, Deserialize)]
212pub struct ContactsWorkflowSuccessfulResponseDto {
213    #[serde(default, skip_serializing_if = "Option::is_none")]
214    pub succeded: Option<bool>,
215}
216
217/// `CreateAddFollowersSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
218#[derive(Debug, Clone, Default, Serialize, Deserialize)]
219pub struct CreateAddFollowersSuccessfulResponseDto {
220    #[serde(default, skip_serializing_if = "Vec::is_empty")]
221    pub followers: Vec<String>,
222    #[serde(
223        rename = "followersAdded",
224        default,
225        skip_serializing_if = "Vec::is_empty"
226    )]
227    pub followers_added: Vec<String>,
228}
229
230/// `CreateAddTagSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
231#[derive(Debug, Clone, Default, Serialize, Deserialize)]
232pub struct CreateAddTagSuccessfulResponseDto {
233    #[serde(default, skip_serializing_if = "Vec::is_empty")]
234    pub tags: Vec<String>,
235}
236
237/// `CreateContactDto` from the GoHighLevel OpenAPI spec.
238#[derive(Debug, Clone, Default, Serialize, Deserialize)]
239pub struct CreateContactDto {
240    #[serde(rename = "firstName", default, skip_serializing_if = "Option::is_none")]
241    pub first_name: Option<String>,
242    #[serde(rename = "lastName", default, skip_serializing_if = "Option::is_none")]
243    pub last_name: Option<String>,
244    #[serde(default, skip_serializing_if = "Option::is_none")]
245    pub name: Option<String>,
246    #[serde(default, skip_serializing_if = "Option::is_none")]
247    pub email: Option<String>,
248    /// Required by the API.
249    #[serde(rename = "locationId")]
250    pub location_id: String,
251    #[serde(default, skip_serializing_if = "Option::is_none")]
252    pub gender: Option<String>,
253    #[serde(default, skip_serializing_if = "Option::is_none")]
254    pub phone: Option<String>,
255    #[serde(default, skip_serializing_if = "Option::is_none")]
256    pub address1: Option<String>,
257    #[serde(default, skip_serializing_if = "Option::is_none")]
258    pub city: Option<String>,
259    #[serde(default, skip_serializing_if = "Option::is_none")]
260    pub state: Option<String>,
261    #[serde(
262        rename = "postalCode",
263        default,
264        skip_serializing_if = "Option::is_none"
265    )]
266    pub postal_code: Option<String>,
267    #[serde(default, skip_serializing_if = "Option::is_none")]
268    pub website: Option<String>,
269    #[serde(default, skip_serializing_if = "Option::is_none")]
270    pub timezone: Option<String>,
271    #[serde(default, skip_serializing_if = "Option::is_none")]
272    pub dnd: Option<bool>,
273    #[serde(
274        rename = "dndSettings",
275        default,
276        skip_serializing_if = "Option::is_none"
277    )]
278    pub dnd_settings: Option<DndSettingsSchema>,
279    #[serde(
280        rename = "inboundDndSettings",
281        default,
282        skip_serializing_if = "Option::is_none"
283    )]
284    pub inbound_dnd_settings: Option<InboundDndSettingsSchema>,
285    #[serde(default, skip_serializing_if = "Vec::is_empty")]
286    pub tags: Vec<String>,
287    /// Multiple possible shapes in the spec; raw JSON.
288    #[serde(
289        rename = "customFields",
290        default,
291        skip_serializing_if = "Vec::is_empty"
292    )]
293    pub custom_fields: Vec<serde_json::Value>,
294    #[serde(default, skip_serializing_if = "Option::is_none")]
295    pub source: Option<String>,
296    /// The birth date of the contact. Supported formats: YYYY/MM/DD, MM/DD/YYYY, YYYY-MM-DD,
297    /// MM-DD-YYYY, YYYY.MM.DD, MM.DD.YYYY, YYYY_MM_DD, MM_DD_YYYY
298    #[serde(
299        rename = "dateOfBirth",
300        default,
301        skip_serializing_if = "Option::is_none"
302    )]
303    pub date_of_birth: Option<serde_json::Value>,
304    #[serde(default, skip_serializing_if = "Option::is_none")]
305    pub country: Option<String>,
306    #[serde(
307        rename = "companyName",
308        default,
309        skip_serializing_if = "Option::is_none"
310    )]
311    pub company_name: Option<String>,
312    /// User's Id
313    #[serde(
314        rename = "assignedTo",
315        default,
316        skip_serializing_if = "Option::is_none"
317    )]
318    pub assigned_to: Option<String>,
319}
320
321/// `CreateContactSchema` from the GoHighLevel OpenAPI spec.
322#[derive(Debug, Clone, Default, Serialize, Deserialize)]
323pub struct CreateContactSchema {
324    #[serde(default, skip_serializing_if = "Option::is_none")]
325    pub id: Option<String>,
326    #[serde(rename = "dateAdded", default, skip_serializing_if = "Option::is_none")]
327    pub date_added: Option<String>,
328    #[serde(
329        rename = "dateUpdated",
330        default,
331        skip_serializing_if = "Option::is_none"
332    )]
333    pub date_updated: Option<String>,
334    #[serde(default, skip_serializing_if = "Option::is_none")]
335    pub deleted: Option<bool>,
336    #[serde(default, skip_serializing_if = "Vec::is_empty")]
337    pub tags: Vec<String>,
338    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
339    pub type_: Option<String>,
340    #[serde(
341        rename = "customFields",
342        default,
343        skip_serializing_if = "Vec::is_empty"
344    )]
345    pub custom_fields: Vec<CustomFieldSchema>,
346    #[serde(
347        rename = "locationId",
348        default,
349        skip_serializing_if = "Option::is_none"
350    )]
351    pub location_id: Option<String>,
352    #[serde(rename = "firstName", default, skip_serializing_if = "Option::is_none")]
353    pub first_name: Option<String>,
354    #[serde(
355        rename = "firstNameLowerCase",
356        default,
357        skip_serializing_if = "Option::is_none"
358    )]
359    pub first_name_lower_case: Option<String>,
360    #[serde(
361        rename = "fullNameLowerCase",
362        default,
363        skip_serializing_if = "Option::is_none"
364    )]
365    pub full_name_lower_case: Option<String>,
366    #[serde(rename = "lastName", default, skip_serializing_if = "Option::is_none")]
367    pub last_name: Option<String>,
368    #[serde(
369        rename = "lastNameLowerCase",
370        default,
371        skip_serializing_if = "Option::is_none"
372    )]
373    pub last_name_lower_case: Option<String>,
374    #[serde(default, skip_serializing_if = "Option::is_none")]
375    pub email: Option<String>,
376    #[serde(
377        rename = "emailLowerCase",
378        default,
379        skip_serializing_if = "Option::is_none"
380    )]
381    pub email_lower_case: Option<String>,
382    #[serde(
383        rename = "bounceEmail",
384        default,
385        skip_serializing_if = "Option::is_none"
386    )]
387    pub bounce_email: Option<bool>,
388    #[serde(
389        rename = "unsubscribeEmail",
390        default,
391        skip_serializing_if = "Option::is_none"
392    )]
393    pub unsubscribe_email: Option<bool>,
394    #[serde(default, skip_serializing_if = "Option::is_none")]
395    pub dnd: Option<bool>,
396    #[serde(
397        rename = "dndSettings",
398        default,
399        skip_serializing_if = "Option::is_none"
400    )]
401    pub dnd_settings: Option<DndSettingsSchema>,
402    #[serde(default, skip_serializing_if = "Option::is_none")]
403    pub phone: Option<String>,
404    #[serde(default, skip_serializing_if = "Option::is_none")]
405    pub address1: Option<String>,
406    #[serde(default, skip_serializing_if = "Option::is_none")]
407    pub city: Option<String>,
408    #[serde(default, skip_serializing_if = "Option::is_none")]
409    pub state: Option<String>,
410    #[serde(default, skip_serializing_if = "Option::is_none")]
411    pub country: Option<String>,
412    #[serde(
413        rename = "postalCode",
414        default,
415        skip_serializing_if = "Option::is_none"
416    )]
417    pub postal_code: Option<String>,
418    #[serde(default, skip_serializing_if = "Option::is_none")]
419    pub website: Option<String>,
420    #[serde(default, skip_serializing_if = "Option::is_none")]
421    pub source: Option<String>,
422    #[serde(
423        rename = "companyName",
424        default,
425        skip_serializing_if = "Option::is_none"
426    )]
427    pub company_name: Option<String>,
428    #[serde(
429        rename = "dateOfBirth",
430        default,
431        skip_serializing_if = "Option::is_none"
432    )]
433    pub date_of_birth: Option<String>,
434    #[serde(
435        rename = "birthMonth",
436        default,
437        skip_serializing_if = "Option::is_none"
438    )]
439    pub birth_month: Option<f64>,
440    #[serde(rename = "birthDay", default, skip_serializing_if = "Option::is_none")]
441    pub birth_day: Option<f64>,
442    #[serde(
443        rename = "lastSessionActivityAt",
444        default,
445        skip_serializing_if = "Option::is_none"
446    )]
447    pub last_session_activity_at: Option<String>,
448    #[serde(default, skip_serializing_if = "Vec::is_empty")]
449    pub offers: Vec<String>,
450    #[serde(default, skip_serializing_if = "Vec::is_empty")]
451    pub products: Vec<String>,
452    #[serde(
453        rename = "businessId",
454        default,
455        skip_serializing_if = "Option::is_none"
456    )]
457    pub business_id: Option<String>,
458    /// User's Id
459    #[serde(
460        rename = "assignedTo",
461        default,
462        skip_serializing_if = "Option::is_none"
463    )]
464    pub assigned_to: Option<String>,
465}
466
467/// `CreateContactsSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
468#[derive(Debug, Clone, Default, Serialize, Deserialize)]
469pub struct CreateContactsSuccessfulResponseDto {
470    #[serde(default, skip_serializing_if = "Option::is_none")]
471    pub contact: Option<CreateContactSchema>,
472}
473
474/// `CreateDeleteCantactsCampaignsSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
475#[derive(Debug, Clone, Default, Serialize, Deserialize)]
476pub struct CreateDeleteCantactsCampaignsSuccessfulResponseDto {
477    #[serde(default, skip_serializing_if = "Option::is_none")]
478    pub succeded: Option<bool>,
479}
480
481/// `CreateDeleteTagSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
482#[derive(Debug, Clone, Default, Serialize, Deserialize)]
483pub struct CreateDeleteTagSuccessfulResponseDto {
484    #[serde(default, skip_serializing_if = "Vec::is_empty")]
485    pub tags: Vec<String>,
486}
487
488/// `CreateTaskParams` from the GoHighLevel OpenAPI spec.
489#[derive(Debug, Clone, Default, Serialize, Deserialize)]
490pub struct CreateTaskParams {
491    /// Required by the API.
492    pub title: String,
493    #[serde(default, skip_serializing_if = "Option::is_none")]
494    pub body: Option<String>,
495    /// Required by the API.
496    #[serde(rename = "dueDate")]
497    pub due_date: String,
498    /// Required by the API.
499    pub completed: bool,
500    #[serde(
501        rename = "assignedTo",
502        default,
503        skip_serializing_if = "Option::is_none"
504    )]
505    pub assigned_to: Option<String>,
506}
507
508/// `CreateWorkflowDto` from the GoHighLevel OpenAPI spec.
509#[derive(Debug, Clone, Default, Serialize, Deserialize)]
510pub struct CreateWorkflowDto {
511    #[serde(
512        rename = "eventStartTime",
513        default,
514        skip_serializing_if = "Option::is_none"
515    )]
516    pub event_start_time: Option<String>,
517}
518
519/// `CustomFieldSchema` from the GoHighLevel OpenAPI spec.
520#[derive(Debug, Clone, Default, Serialize, Deserialize)]
521pub struct CustomFieldSchema {
522    #[serde(default, skip_serializing_if = "Option::is_none")]
523    pub id: Option<String>,
524    #[serde(default, skip_serializing_if = "Option::is_none")]
525    pub value: Option<String>,
526}
527
528/// `DeleteContactsSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
529#[derive(Debug, Clone, Default, Serialize, Deserialize)]
530pub struct DeleteContactsSuccessfulResponseDto {
531    #[serde(default, skip_serializing_if = "Option::is_none")]
532    pub succeded: Option<bool>,
533}
534
535/// `DeleteFollowersSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
536#[derive(Debug, Clone, Default, Serialize, Deserialize)]
537pub struct DeleteFollowersSuccessfulResponseDto {
538    #[serde(default, skip_serializing_if = "Vec::is_empty")]
539    pub followers: Vec<String>,
540    #[serde(
541        rename = "followersRemoved",
542        default,
543        skip_serializing_if = "Vec::is_empty"
544    )]
545    pub followers_removed: Vec<String>,
546}
547
548/// `DeleteNoteSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
549#[derive(Debug, Clone, Default, Serialize, Deserialize)]
550pub struct DeleteNoteSuccessfulResponseDto {
551    #[serde(default, skip_serializing_if = "Option::is_none")]
552    pub succeded: Option<bool>,
553}
554
555/// `DeleteTaskSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
556#[derive(Debug, Clone, Default, Serialize, Deserialize)]
557pub struct DeleteTaskSuccessfulResponseDto {
558    #[serde(default, skip_serializing_if = "Option::is_none")]
559    pub succeded: Option<bool>,
560}
561
562/// `DndSettingSchema` from the GoHighLevel OpenAPI spec.
563#[derive(Debug, Clone, Default, Serialize, Deserialize)]
564pub struct DndSettingSchema {
565    /// Allowed values: `active`, `inactive`, `permanent`.
566    /// Required by the API.
567    /// (Optional here so responses that omit it still parse.)
568    #[serde(default, skip_serializing_if = "Option::is_none")]
569    pub status: Option<String>,
570    #[serde(default, skip_serializing_if = "Option::is_none")]
571    pub message: Option<String>,
572    #[serde(default, skip_serializing_if = "Option::is_none")]
573    pub code: Option<String>,
574}
575
576/// `DndSettingsSchema` from the GoHighLevel OpenAPI spec.
577#[derive(Debug, Clone, Default, Serialize, Deserialize)]
578pub struct DndSettingsSchema {
579    #[serde(rename = "Call", default, skip_serializing_if = "Option::is_none")]
580    pub call: Option<DndSettingSchema>,
581    #[serde(rename = "Email", default, skip_serializing_if = "Option::is_none")]
582    pub email: Option<DndSettingSchema>,
583    #[serde(rename = "SMS", default, skip_serializing_if = "Option::is_none")]
584    pub sms: Option<DndSettingSchema>,
585    #[serde(rename = "WhatsApp", default, skip_serializing_if = "Option::is_none")]
586    pub whats_app: Option<DndSettingSchema>,
587    #[serde(rename = "GMB", default, skip_serializing_if = "Option::is_none")]
588    pub gmb: Option<DndSettingSchema>,
589    #[serde(rename = "FB", default, skip_serializing_if = "Option::is_none")]
590    pub fb: Option<DndSettingSchema>,
591}
592
593/// `FileField` from the GoHighLevel OpenAPI spec.
594#[derive(Debug, Clone, Default, Serialize, Deserialize)]
595pub struct FileField {
596    /// Required by the API.
597    pub id: String,
598    #[serde(default, skip_serializing_if = "Option::is_none")]
599    pub key: Option<String>,
600    #[serde(default, skip_serializing_if = "Option::is_none")]
601    pub field_value: Option<serde_json::Value>,
602}
603
604/// `FollowersDTO` from the GoHighLevel OpenAPI spec.
605#[derive(Debug, Clone, Default, Serialize, Deserialize)]
606pub struct FollowersDTO {
607    /// Required by the API.
608    #[serde(default, skip_serializing_if = "Vec::is_empty")]
609    pub followers: Vec<String>,
610}
611
612/// `GetContectByIdSchema` from the GoHighLevel OpenAPI spec.
613#[derive(Debug, Clone, Default, Serialize, Deserialize)]
614pub struct GetContectByIdSchema {
615    #[serde(default, skip_serializing_if = "Option::is_none")]
616    pub id: Option<String>,
617    #[serde(default, skip_serializing_if = "Option::is_none")]
618    pub name: Option<String>,
619    #[serde(
620        rename = "locationId",
621        default,
622        skip_serializing_if = "Option::is_none"
623    )]
624    pub location_id: Option<String>,
625    #[serde(rename = "firstName", default, skip_serializing_if = "Option::is_none")]
626    pub first_name: Option<String>,
627    #[serde(rename = "lastName", default, skip_serializing_if = "Option::is_none")]
628    pub last_name: Option<String>,
629    #[serde(default, skip_serializing_if = "Option::is_none")]
630    pub email: Option<String>,
631    #[serde(
632        rename = "emailLowerCase",
633        default,
634        skip_serializing_if = "Option::is_none"
635    )]
636    pub email_lower_case: Option<String>,
637    #[serde(default, skip_serializing_if = "Option::is_none")]
638    pub timezone: Option<String>,
639    #[serde(
640        rename = "companyName",
641        default,
642        skip_serializing_if = "Option::is_none"
643    )]
644    pub company_name: Option<String>,
645    #[serde(default, skip_serializing_if = "Option::is_none")]
646    pub phone: Option<String>,
647    #[serde(default, skip_serializing_if = "Option::is_none")]
648    pub dnd: Option<bool>,
649    #[serde(
650        rename = "dndSettings",
651        default,
652        skip_serializing_if = "Option::is_none"
653    )]
654    pub dnd_settings: Option<DndSettingsSchema>,
655    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
656    pub type_: Option<String>,
657    #[serde(default, skip_serializing_if = "Option::is_none")]
658    pub source: Option<String>,
659    #[serde(
660        rename = "assignedTo",
661        default,
662        skip_serializing_if = "Option::is_none"
663    )]
664    pub assigned_to: Option<String>,
665    #[serde(default, skip_serializing_if = "Option::is_none")]
666    pub address1: Option<String>,
667    #[serde(default, skip_serializing_if = "Option::is_none")]
668    pub city: Option<String>,
669    #[serde(default, skip_serializing_if = "Option::is_none")]
670    pub state: Option<String>,
671    #[serde(default, skip_serializing_if = "Option::is_none")]
672    pub country: Option<String>,
673    #[serde(
674        rename = "postalCode",
675        default,
676        skip_serializing_if = "Option::is_none"
677    )]
678    pub postal_code: Option<String>,
679    #[serde(default, skip_serializing_if = "Option::is_none")]
680    pub website: Option<String>,
681    #[serde(default, skip_serializing_if = "Vec::is_empty")]
682    pub tags: Vec<String>,
683    #[serde(
684        rename = "dateOfBirth",
685        default,
686        skip_serializing_if = "Option::is_none"
687    )]
688    pub date_of_birth: Option<String>,
689    #[serde(rename = "dateAdded", default, skip_serializing_if = "Option::is_none")]
690    pub date_added: Option<String>,
691    #[serde(
692        rename = "dateUpdated",
693        default,
694        skip_serializing_if = "Option::is_none"
695    )]
696    pub date_updated: Option<String>,
697    #[serde(default, skip_serializing_if = "Option::is_none")]
698    pub attachments: Option<String>,
699    #[serde(default, skip_serializing_if = "Option::is_none")]
700    pub ssn: Option<String>,
701    #[serde(default, skip_serializing_if = "Option::is_none")]
702    pub keyword: Option<String>,
703    #[serde(
704        rename = "firstNameLowerCase",
705        default,
706        skip_serializing_if = "Option::is_none"
707    )]
708    pub first_name_lower_case: Option<String>,
709    #[serde(
710        rename = "fullNameLowerCase",
711        default,
712        skip_serializing_if = "Option::is_none"
713    )]
714    pub full_name_lower_case: Option<String>,
715    #[serde(
716        rename = "lastNameLowerCase",
717        default,
718        skip_serializing_if = "Option::is_none"
719    )]
720    pub last_name_lower_case: Option<String>,
721    #[serde(
722        rename = "lastActivity",
723        default,
724        skip_serializing_if = "Option::is_none"
725    )]
726    pub last_activity: Option<String>,
727    #[serde(
728        rename = "customFields",
729        default,
730        skip_serializing_if = "Vec::is_empty"
731    )]
732    pub custom_fields: Vec<CustomFieldSchema>,
733    #[serde(
734        rename = "businessId",
735        default,
736        skip_serializing_if = "Option::is_none"
737    )]
738    pub business_id: Option<String>,
739    #[serde(
740        rename = "attributionSource",
741        default,
742        skip_serializing_if = "Option::is_none"
743    )]
744    pub attribution_source: Option<AttributionSource>,
745    #[serde(
746        rename = "lastAttributionSource",
747        default,
748        skip_serializing_if = "Option::is_none"
749    )]
750    pub last_attribution_source: Option<AttributionSource>,
751    /// visitorId is the Unique ID assigned to each Live chat visitor.
752    #[serde(rename = "visitorId", default, skip_serializing_if = "Option::is_none")]
753    pub visitor_id: Option<String>,
754}
755
756/// `GetCreateUpdateNoteSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
757#[derive(Debug, Clone, Default, Serialize, Deserialize)]
758pub struct GetCreateUpdateNoteSuccessfulResponseDto {
759    #[serde(default, skip_serializing_if = "Option::is_none")]
760    pub note: Option<GetNoteSchema>,
761}
762
763/// `GetEventSchema` from the GoHighLevel OpenAPI spec.
764#[derive(Debug, Clone, Default, Serialize, Deserialize)]
765pub struct GetEventSchema {
766    #[serde(default, skip_serializing_if = "Option::is_none")]
767    pub id: Option<String>,
768    #[serde(
769        rename = "calendarId",
770        default,
771        skip_serializing_if = "Option::is_none"
772    )]
773    pub calendar_id: Option<String>,
774    #[serde(default, skip_serializing_if = "Option::is_none")]
775    pub status: Option<String>,
776    #[serde(default, skip_serializing_if = "Option::is_none")]
777    pub title: Option<String>,
778    #[serde(
779        rename = "assignedUserId",
780        default,
781        skip_serializing_if = "Option::is_none"
782    )]
783    pub assigned_user_id: Option<String>,
784    #[serde(default, skip_serializing_if = "Option::is_none")]
785    pub notes: Option<String>,
786    #[serde(rename = "startTime", default, skip_serializing_if = "Option::is_none")]
787    pub start_time: Option<String>,
788    #[serde(rename = "endTime", default, skip_serializing_if = "Option::is_none")]
789    pub end_time: Option<String>,
790    #[serde(default, skip_serializing_if = "Option::is_none")]
791    pub address: Option<String>,
792    #[serde(
793        rename = "locationId",
794        default,
795        skip_serializing_if = "Option::is_none"
796    )]
797    pub location_id: Option<String>,
798    #[serde(rename = "contactId", default, skip_serializing_if = "Option::is_none")]
799    pub contact_id: Option<String>,
800    #[serde(rename = "groupId", default, skip_serializing_if = "Option::is_none")]
801    pub group_id: Option<String>,
802    #[serde(
803        rename = "appointmentStatus",
804        default,
805        skip_serializing_if = "Option::is_none"
806    )]
807    pub appointment_status: Option<String>,
808    #[serde(default, skip_serializing_if = "Vec::is_empty")]
809    pub users: Vec<String>,
810    #[serde(rename = "dateAdded", default, skip_serializing_if = "Option::is_none")]
811    pub date_added: Option<String>,
812    #[serde(
813        rename = "dateUpdated",
814        default,
815        skip_serializing_if = "Option::is_none"
816    )]
817    pub date_updated: Option<String>,
818    #[serde(
819        rename = "assignedResources",
820        default,
821        skip_serializing_if = "Vec::is_empty"
822    )]
823    pub assigned_resources: Vec<String>,
824}
825
826/// `GetEventsSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
827#[derive(Debug, Clone, Default, Serialize, Deserialize)]
828pub struct GetEventsSuccessfulResponseDto {
829    #[serde(default, skip_serializing_if = "Vec::is_empty")]
830    pub events: Vec<GetEventSchema>,
831}
832
833/// `GetNoteSchema` from the GoHighLevel OpenAPI spec.
834#[derive(Debug, Clone, Default, Serialize, Deserialize)]
835pub struct GetNoteSchema {
836    #[serde(default, skip_serializing_if = "Option::is_none")]
837    pub id: Option<String>,
838    #[serde(default, skip_serializing_if = "Option::is_none")]
839    pub body: Option<String>,
840    #[serde(rename = "userId", default, skip_serializing_if = "Option::is_none")]
841    pub user_id: Option<String>,
842    #[serde(rename = "dateAdded", default, skip_serializing_if = "Option::is_none")]
843    pub date_added: Option<String>,
844    #[serde(rename = "contactId", default, skip_serializing_if = "Option::is_none")]
845    pub contact_id: Option<String>,
846    #[serde(default, skip_serializing_if = "Option::is_none")]
847    pub title: Option<String>,
848    #[serde(default, skip_serializing_if = "Option::is_none")]
849    pub color: Option<String>,
850    #[serde(default, skip_serializing_if = "Option::is_none")]
851    pub pinned: Option<bool>,
852}
853
854/// `GetNotesListSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
855#[derive(Debug, Clone, Default, Serialize, Deserialize)]
856pub struct GetNotesListSuccessfulResponseDto {
857    #[serde(default, skip_serializing_if = "Vec::is_empty")]
858    pub notes: Vec<GetNoteSchema>,
859}
860
861/// `InboundDndSettingSchema` from the GoHighLevel OpenAPI spec.
862#[derive(Debug, Clone, Default, Serialize, Deserialize)]
863pub struct InboundDndSettingSchema {
864    /// Allowed values: `active`, `inactive`.
865    /// Required by the API.
866    pub status: String,
867    #[serde(default, skip_serializing_if = "Option::is_none")]
868    pub message: Option<String>,
869}
870
871/// `InboundDndSettingsSchema` from the GoHighLevel OpenAPI spec.
872#[derive(Debug, Clone, Default, Serialize, Deserialize)]
873pub struct InboundDndSettingsSchema {
874    #[serde(default, skip_serializing_if = "Option::is_none")]
875    pub all: Option<InboundDndSettingSchema>,
876}
877
878/// `LargeTextField` from the GoHighLevel OpenAPI spec.
879#[derive(Debug, Clone, Default, Serialize, Deserialize)]
880pub struct LargeTextField {
881    /// Required by the API.
882    pub id: String,
883    #[serde(default, skip_serializing_if = "Option::is_none")]
884    pub key: Option<String>,
885    #[serde(default, skip_serializing_if = "Option::is_none")]
886    pub field_value: Option<String>,
887}
888
889/// `MonetoryField` from the GoHighLevel OpenAPI spec.
890#[derive(Debug, Clone, Default, Serialize, Deserialize)]
891pub struct MonetoryField {
892    /// Required by the API.
893    pub id: String,
894    #[serde(default, skip_serializing_if = "Option::is_none")]
895    pub key: Option<String>,
896    #[serde(default, skip_serializing_if = "Option::is_none")]
897    pub field_value: Option<serde_json::Value>,
898}
899
900/// `MultiSelectField` from the GoHighLevel OpenAPI spec.
901#[derive(Debug, Clone, Default, Serialize, Deserialize)]
902pub struct MultiSelectField {
903    /// Required by the API.
904    pub id: String,
905    #[serde(default, skip_serializing_if = "Option::is_none")]
906    pub key: Option<String>,
907    #[serde(default, skip_serializing_if = "Vec::is_empty")]
908    pub field_value: Vec<String>,
909}
910
911/// `NotesDTO` from the GoHighLevel OpenAPI spec.
912#[derive(Debug, Clone, Default, Serialize, Deserialize)]
913pub struct NotesDTO {
914    #[serde(rename = "userId", default, skip_serializing_if = "Option::is_none")]
915    pub user_id: Option<String>,
916    /// Required by the API.
917    pub body: String,
918    #[serde(default, skip_serializing_if = "Option::is_none")]
919    pub title: Option<String>,
920    #[serde(default, skip_serializing_if = "Option::is_none")]
921    pub color: Option<String>,
922    #[serde(default, skip_serializing_if = "Option::is_none")]
923    pub pinned: Option<bool>,
924}
925
926/// `NumericField` from the GoHighLevel OpenAPI spec.
927#[derive(Debug, Clone, Default, Serialize, Deserialize)]
928pub struct NumericField {
929    /// Required by the API.
930    pub id: String,
931    #[serde(default, skip_serializing_if = "Option::is_none")]
932    pub key: Option<String>,
933    #[serde(default, skip_serializing_if = "Option::is_none")]
934    pub field_value: Option<serde_json::Value>,
935}
936
937/// `RadioField` from the GoHighLevel OpenAPI spec.
938#[derive(Debug, Clone, Default, Serialize, Deserialize)]
939pub struct RadioField {
940    /// Required by the API.
941    pub id: String,
942    #[serde(default, skip_serializing_if = "Option::is_none")]
943    pub key: Option<String>,
944    #[serde(default, skip_serializing_if = "Option::is_none")]
945    pub field_value: Option<String>,
946}
947
948/// `SearchBodyV2DTO` from the GoHighLevel OpenAPI spec.
949#[derive(Debug, Clone, Default, Serialize, Deserialize)]
950pub struct SearchBodyV2DTO {
951    /// The spec defines no fields for this schema.
952    #[serde(flatten)]
953    pub extra: serde_json::Map<String, serde_json::Value>,
954}
955
956/// `SingleSelectField` from the GoHighLevel OpenAPI spec.
957#[derive(Debug, Clone, Default, Serialize, Deserialize)]
958pub struct SingleSelectField {
959    /// Required by the API.
960    pub id: String,
961    #[serde(default, skip_serializing_if = "Option::is_none")]
962    pub key: Option<String>,
963    #[serde(default, skip_serializing_if = "Option::is_none")]
964    pub field_value: Option<String>,
965}
966
967/// `TagsDTO` from the GoHighLevel OpenAPI spec.
968#[derive(Debug, Clone, Default, Serialize, Deserialize)]
969pub struct TagsDTO {
970    /// Required by the API.
971    #[serde(default, skip_serializing_if = "Vec::is_empty")]
972    pub tags: Vec<String>,
973}
974
975/// `TaskByIsSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
976#[derive(Debug, Clone, Default, Serialize, Deserialize)]
977pub struct TaskByIsSuccessfulResponseDto {
978    #[serde(default, skip_serializing_if = "Option::is_none")]
979    pub task: Option<TaskSchema>,
980}
981
982/// `TaskSchema` from the GoHighLevel OpenAPI spec.
983#[derive(Debug, Clone, Default, Serialize, Deserialize)]
984pub struct TaskSchema {
985    #[serde(default, skip_serializing_if = "Option::is_none")]
986    pub id: Option<String>,
987    #[serde(default, skip_serializing_if = "Option::is_none")]
988    pub title: Option<String>,
989    #[serde(default, skip_serializing_if = "Option::is_none")]
990    pub body: Option<String>,
991    #[serde(
992        rename = "assignedTo",
993        default,
994        skip_serializing_if = "Option::is_none"
995    )]
996    pub assigned_to: Option<String>,
997    #[serde(rename = "dueDate", default, skip_serializing_if = "Option::is_none")]
998    pub due_date: Option<String>,
999    #[serde(default, skip_serializing_if = "Option::is_none")]
1000    pub completed: Option<bool>,
1001    #[serde(rename = "contactId", default, skip_serializing_if = "Option::is_none")]
1002    pub contact_id: Option<String>,
1003}
1004
1005/// `TasksListSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
1006#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1007pub struct TasksListSuccessfulResponseDto {
1008    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1009    pub tasks: Vec<TaskSchema>,
1010}
1011
1012/// `TextField` from the GoHighLevel OpenAPI spec.
1013#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1014pub struct TextField {
1015    /// Required by the API.
1016    pub id: String,
1017    #[serde(default, skip_serializing_if = "Option::is_none")]
1018    pub key: Option<String>,
1019    #[serde(default, skip_serializing_if = "Option::is_none")]
1020    pub field_value: Option<String>,
1021}
1022
1023/// `UpdateContactDto` from the GoHighLevel OpenAPI spec.
1024#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1025pub struct UpdateContactDto {
1026    #[serde(rename = "firstName", default, skip_serializing_if = "Option::is_none")]
1027    pub first_name: Option<String>,
1028    #[serde(rename = "lastName", default, skip_serializing_if = "Option::is_none")]
1029    pub last_name: Option<String>,
1030    #[serde(default, skip_serializing_if = "Option::is_none")]
1031    pub name: Option<String>,
1032    #[serde(default, skip_serializing_if = "Option::is_none")]
1033    pub email: Option<String>,
1034    #[serde(default, skip_serializing_if = "Option::is_none")]
1035    pub phone: Option<String>,
1036    #[serde(default, skip_serializing_if = "Option::is_none")]
1037    pub address1: Option<String>,
1038    #[serde(default, skip_serializing_if = "Option::is_none")]
1039    pub city: Option<String>,
1040    #[serde(default, skip_serializing_if = "Option::is_none")]
1041    pub state: Option<String>,
1042    #[serde(
1043        rename = "postalCode",
1044        default,
1045        skip_serializing_if = "Option::is_none"
1046    )]
1047    pub postal_code: Option<String>,
1048    #[serde(default, skip_serializing_if = "Option::is_none")]
1049    pub website: Option<String>,
1050    #[serde(default, skip_serializing_if = "Option::is_none")]
1051    pub timezone: Option<String>,
1052    #[serde(default, skip_serializing_if = "Option::is_none")]
1053    pub dnd: Option<bool>,
1054    #[serde(
1055        rename = "dndSettings",
1056        default,
1057        skip_serializing_if = "Option::is_none"
1058    )]
1059    pub dnd_settings: Option<DndSettingsSchema>,
1060    #[serde(
1061        rename = "inboundDndSettings",
1062        default,
1063        skip_serializing_if = "Option::is_none"
1064    )]
1065    pub inbound_dnd_settings: Option<InboundDndSettingsSchema>,
1066    /// This field will overwrite all current tags associated with the contact. To update a
1067    /// tags, it is recommended to use the Add Tag or Remove Tag API instead.
1068    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1069    pub tags: Vec<String>,
1070    /// Multiple possible shapes in the spec; raw JSON.
1071    #[serde(
1072        rename = "customFields",
1073        default,
1074        skip_serializing_if = "Vec::is_empty"
1075    )]
1076    pub custom_fields: Vec<serde_json::Value>,
1077    #[serde(default, skip_serializing_if = "Option::is_none")]
1078    pub source: Option<String>,
1079    /// The birth date of the contact. Supported formats: YYYY/MM/DD, MM/DD/YYYY, YYYY-MM-DD,
1080    /// MM-DD-YYYY, YYYY.MM.DD, MM.DD.YYYY, YYYY_MM_DD, MM_DD_YYYY
1081    #[serde(
1082        rename = "dateOfBirth",
1083        default,
1084        skip_serializing_if = "Option::is_none"
1085    )]
1086    pub date_of_birth: Option<serde_json::Value>,
1087    #[serde(default, skip_serializing_if = "Option::is_none")]
1088    pub country: Option<String>,
1089    /// User's Id
1090    #[serde(
1091        rename = "assignedTo",
1092        default,
1093        skip_serializing_if = "Option::is_none"
1094    )]
1095    pub assigned_to: Option<String>,
1096}
1097
1098/// `UpdateContactsSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
1099#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1100pub struct UpdateContactsSuccessfulResponseDto {
1101    #[serde(default, skip_serializing_if = "Option::is_none")]
1102    pub succeded: Option<bool>,
1103    #[serde(default, skip_serializing_if = "Option::is_none")]
1104    pub contact: Option<GetContectByIdSchema>,
1105}
1106
1107/// `UpdateNoteDTO` from the GoHighLevel OpenAPI spec.
1108#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1109pub struct UpdateNoteDTO {
1110    #[serde(rename = "userId", default, skip_serializing_if = "Option::is_none")]
1111    pub user_id: Option<String>,
1112    #[serde(default, skip_serializing_if = "Option::is_none")]
1113    pub body: Option<String>,
1114    #[serde(default, skip_serializing_if = "Option::is_none")]
1115    pub title: Option<String>,
1116    #[serde(default, skip_serializing_if = "Option::is_none")]
1117    pub color: Option<String>,
1118    #[serde(default, skip_serializing_if = "Option::is_none")]
1119    pub pinned: Option<bool>,
1120}
1121
1122/// `UpdateTagsDTO` from the GoHighLevel OpenAPI spec.
1123#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1124pub struct UpdateTagsDTO {
1125    /// list of contact ids to be processed
1126    /// Required by the API.
1127    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1128    pub contacts: Vec<String>,
1129    /// list of tags to be added or removed
1130    /// Required by the API.
1131    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1132    pub tags: Vec<String>,
1133    /// location id from where the bulk request is executed
1134    /// Required by the API.
1135    #[serde(rename = "locationId")]
1136    pub location_id: String,
1137    /// Option to implement remove all tags. if true, all tags will be removed from the
1138    /// contacts. Can only be used with remove type.
1139    #[serde(
1140        rename = "removeAllTags",
1141        default,
1142        skip_serializing_if = "Option::is_none"
1143    )]
1144    pub remove_all_tags: Option<bool>,
1145}
1146
1147/// `UpdateTagsResponseDTO` from the GoHighLevel OpenAPI spec.
1148#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1149pub struct UpdateTagsResponseDTO {
1150    /// Indicates if the operation was successful
1151    /// Required by the API.
1152    /// (Optional here so responses that omit it still parse.)
1153    #[serde(default, skip_serializing_if = "Option::is_none")]
1154    pub succeded: Option<bool>,
1155    /// Number of errors encountered during the operation
1156    /// Required by the API.
1157    /// (Optional here so responses that omit it still parse.)
1158    #[serde(
1159        rename = "errorCount",
1160        default,
1161        skip_serializing_if = "Option::is_none"
1162    )]
1163    pub error_count: Option<f64>,
1164    /// Responses for each contact processed
1165    /// Required by the API.
1166    /// (Optional here so responses that omit it still parse.)
1167    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1168    pub responses: Vec<String>,
1169}
1170
1171/// `UpdateTaskBody` from the GoHighLevel OpenAPI spec.
1172#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1173pub struct UpdateTaskBody {
1174    #[serde(default, skip_serializing_if = "Option::is_none")]
1175    pub title: Option<String>,
1176    #[serde(default, skip_serializing_if = "Option::is_none")]
1177    pub body: Option<String>,
1178    #[serde(rename = "dueDate", default, skip_serializing_if = "Option::is_none")]
1179    pub due_date: Option<String>,
1180    #[serde(default, skip_serializing_if = "Option::is_none")]
1181    pub completed: Option<bool>,
1182    #[serde(
1183        rename = "assignedTo",
1184        default,
1185        skip_serializing_if = "Option::is_none"
1186    )]
1187    pub assigned_to: Option<String>,
1188}
1189
1190/// `UpdateTaskStatusParams` from the GoHighLevel OpenAPI spec.
1191#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1192pub struct UpdateTaskStatusParams {
1193    /// Required by the API.
1194    pub completed: bool,
1195}
1196
1197/// `UpsertContactDto` from the GoHighLevel OpenAPI spec.
1198#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1199pub struct UpsertContactDto {
1200    #[serde(rename = "firstName", default, skip_serializing_if = "Option::is_none")]
1201    pub first_name: Option<String>,
1202    #[serde(rename = "lastName", default, skip_serializing_if = "Option::is_none")]
1203    pub last_name: Option<String>,
1204    #[serde(default, skip_serializing_if = "Option::is_none")]
1205    pub name: Option<String>,
1206    #[serde(default, skip_serializing_if = "Option::is_none")]
1207    pub email: Option<String>,
1208    /// Required by the API.
1209    #[serde(rename = "locationId")]
1210    pub location_id: String,
1211    #[serde(default, skip_serializing_if = "Option::is_none")]
1212    pub gender: Option<String>,
1213    #[serde(default, skip_serializing_if = "Option::is_none")]
1214    pub phone: Option<String>,
1215    #[serde(default, skip_serializing_if = "Option::is_none")]
1216    pub address1: Option<String>,
1217    #[serde(default, skip_serializing_if = "Option::is_none")]
1218    pub city: Option<String>,
1219    #[serde(default, skip_serializing_if = "Option::is_none")]
1220    pub state: Option<String>,
1221    #[serde(
1222        rename = "postalCode",
1223        default,
1224        skip_serializing_if = "Option::is_none"
1225    )]
1226    pub postal_code: Option<String>,
1227    #[serde(default, skip_serializing_if = "Option::is_none")]
1228    pub website: Option<String>,
1229    #[serde(default, skip_serializing_if = "Option::is_none")]
1230    pub timezone: Option<String>,
1231    #[serde(default, skip_serializing_if = "Option::is_none")]
1232    pub dnd: Option<bool>,
1233    #[serde(
1234        rename = "dndSettings",
1235        default,
1236        skip_serializing_if = "Option::is_none"
1237    )]
1238    pub dnd_settings: Option<DndSettingsSchema>,
1239    #[serde(
1240        rename = "inboundDndSettings",
1241        default,
1242        skip_serializing_if = "Option::is_none"
1243    )]
1244    pub inbound_dnd_settings: Option<InboundDndSettingsSchema>,
1245    /// This field will overwrite all current tags associated with the contact. To update a
1246    /// tags, it is recommended to use the Add Tag or Remove Tag API instead.
1247    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1248    pub tags: Vec<String>,
1249    /// Multiple possible shapes in the spec; raw JSON.
1250    #[serde(
1251        rename = "customFields",
1252        default,
1253        skip_serializing_if = "Vec::is_empty"
1254    )]
1255    pub custom_fields: Vec<serde_json::Value>,
1256    #[serde(default, skip_serializing_if = "Option::is_none")]
1257    pub source: Option<String>,
1258    /// The birth date of the contact. Supported formats: YYYY/MM/DD, MM/DD/YYYY, YYYY-MM-DD,
1259    /// MM-DD-YYYY, YYYY.MM.DD, MM.DD.YYYY, YYYY_MM_DD, MM_DD_YYYY
1260    #[serde(
1261        rename = "dateOfBirth",
1262        default,
1263        skip_serializing_if = "Option::is_none"
1264    )]
1265    pub date_of_birth: Option<serde_json::Value>,
1266    #[serde(default, skip_serializing_if = "Option::is_none")]
1267    pub country: Option<String>,
1268    #[serde(
1269        rename = "companyName",
1270        default,
1271        skip_serializing_if = "Option::is_none"
1272    )]
1273    pub company_name: Option<String>,
1274    /// User's Id
1275    #[serde(
1276        rename = "assignedTo",
1277        default,
1278        skip_serializing_if = "Option::is_none"
1279    )]
1280    pub assigned_to: Option<String>,
1281    /// Controls whether to create a new contact or update an existing duplicate. **Scenario
1282    /// 1:** If this value is `true` and the location allows duplicate contacts, a new contact
1283    /// will be created immediately without checking for duplicates. **Scenario 2:** If this
1284    /// value is `true` but the location does not allow duplicate contacts, this field is
1285    /// ignored and the normal upsert behavior applies: the API will search for an existing
1286    /// duplicate contact, update it if found, or create a new contact if not found. **Scenario
1287    /// 3:** If this value is `false` or not provided, the normal upsert behavior applies
1288    /// regardless of the location's duplicate contact setting.
1289    #[serde(
1290        rename = "createNewIfDuplicateAllowed",
1291        default,
1292        skip_serializing_if = "Option::is_none"
1293    )]
1294    pub create_new_if_duplicate_allowed: Option<bool>,
1295}
1296
1297/// `UpsertContactsSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
1298#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1299pub struct UpsertContactsSuccessfulResponseDto {
1300    #[serde(default, skip_serializing_if = "Option::is_none")]
1301    pub new: Option<bool>,
1302    #[serde(default, skip_serializing_if = "Option::is_none")]
1303    pub contact: Option<GetContectByIdSchema>,
1304    #[serde(rename = "traceId", default, skip_serializing_if = "Option::is_none")]
1305    pub trace_id: Option<String>,
1306}
1307
1308/// `customFieldsInputArraySchema` from the GoHighLevel OpenAPI spec.
1309#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1310pub struct CustomFieldsInputArraySchema {
1311    /// Required by the API.
1312    /// (Optional here so responses that omit it still parse.)
1313    #[serde(default, skip_serializing_if = "Option::is_none")]
1314    pub id: Option<String>,
1315    #[serde(default, skip_serializing_if = "Option::is_none")]
1316    pub key: Option<String>,
1317    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1318    pub field_value: Vec<String>,
1319}
1320
1321/// `customFieldsInputObjectSchema` from the GoHighLevel OpenAPI spec.
1322#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1323pub struct CustomFieldsInputObjectSchema {
1324    /// Required by the API.
1325    /// (Optional here so responses that omit it still parse.)
1326    #[serde(default, skip_serializing_if = "Option::is_none")]
1327    pub id: Option<String>,
1328    #[serde(default, skip_serializing_if = "Option::is_none")]
1329    pub key: Option<String>,
1330    #[serde(default, skip_serializing_if = "Option::is_none")]
1331    pub field_value: Option<serde_json::Value>,
1332}
1333
1334/// `customFieldsInputStringSchema` from the GoHighLevel OpenAPI spec.
1335#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1336pub struct CustomFieldsInputStringSchema {
1337    /// Pass either `id` or `key` of custom field
1338    #[serde(default, skip_serializing_if = "Option::is_none")]
1339    pub id: Option<String>,
1340    /// Pass either `id` or `key` of custom field
1341    #[serde(default, skip_serializing_if = "Option::is_none")]
1342    pub key: Option<String>,
1343    #[serde(default, skip_serializing_if = "Option::is_none")]
1344    pub field_value: Option<String>,
1345}