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