Skip to main content

ghl_models/v2/
users.rs

1//! `users` data models for GoHighLevel API V2 (10 types).
2//!
3//! Generated from HighLevel's official OpenAPI spec for the
4//! **Users** module. Every endpoint that uses these types, with its
5//! parameters, required scopes and enum values, is documented in the
6//! [`users` API reference](https://github.com/Shahroz/ghl-rs/blob/main/docs/api/users.md).
7//!
8//! Enable with `features = ["users"]`.
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/// `CreateUserDto` from the GoHighLevel OpenAPI spec.
22#[derive(Debug, Clone, Default, Serialize, Deserialize)]
23pub struct CreateUserDto {
24    /// Required by the API.
25    #[serde(rename = "companyId")]
26    pub company_id: String,
27    /// Required by the API.
28    #[serde(rename = "firstName")]
29    pub first_name: String,
30    /// Required by the API.
31    #[serde(rename = "lastName")]
32    pub last_name: String,
33    /// Required by the API.
34    pub email: String,
35    /// Required by the API.
36    pub password: String,
37    #[serde(default, skip_serializing_if = "Option::is_none")]
38    pub phone: Option<String>,
39    /// Required by the API.
40    #[serde(rename = "type")]
41    pub type_: String,
42    /// Required by the API.
43    pub role: String,
44    /// Required by the API.
45    #[serde(rename = "locationIds", default, skip_serializing_if = "Vec::is_empty")]
46    pub location_ids: Vec<String>,
47    #[serde(default, skip_serializing_if = "Option::is_none")]
48    pub permissions: Option<PermissionsDto>,
49    /// Scopes allowed for users. Only scopes that have been passed will be enabled. Note:- If
50    /// passed empty all the scopes will be get disabled
51    /// Allowed values: `campaigns.readonly`, `campaigns.write`, `calendars.readonly`,
52    /// `calendars/events.write`, `calendars/groups.write`, `calendars.write`, `contacts.write`,
53    /// `contacts/bulkActions.write`, `workflows.readonly`, `workflows.write`, `triggers.write`,
54    /// `funnels.write`.
55    #[serde(default, skip_serializing_if = "Vec::is_empty")]
56    pub scopes: Vec<String>,
57    /// Assigned Scopes allowed for users. Only scopes that have been passed will be enabled. If
58    /// passed empty all the assigned scopes will be get disabled
59    /// Allowed values: `campaigns.readonly`, `campaigns.write`, `calendars.readonly`,
60    /// `calendars/events.write`, `calendars/groups.write`, `calendars.write`, `contacts.write`,
61    /// `contacts/bulkActions.write`, `workflows.readonly`, `workflows.write`, `triggers.write`,
62    /// `funnels.write`.
63    #[serde(
64        rename = "scopesAssignedToOnly",
65        default,
66        skip_serializing_if = "Vec::is_empty"
67    )]
68    pub scopes_assigned_to_only: Vec<String>,
69    #[serde(
70        rename = "profilePhoto",
71        default,
72        skip_serializing_if = "Option::is_none"
73    )]
74    pub profile_photo: Option<String>,
75    /// Per-location inbound Twilio number in E.164 format, keyed by location id (Call and
76    /// Voicemail Inbound Number for direct Twilio, not LC Phone). Replacement semantics: if you
77    /// send twilioPhone in the request body, the stored map is replaced entirely with this
78    /// object (not merged). Any location id omitted from the object is removed from the saved
79    /// map. Omit the twilioPhone property entirely to leave existing numbers unchanged. Send an
80    /// empty object {} to clear all per-location numbers. To clear a single location only, set
81    /// that location id to an empty string "".
82    #[serde(
83        rename = "twilioPhone",
84        default,
85        skip_serializing_if = "Option::is_none"
86    )]
87    pub twilio_phone: Option<serde_json::Value>,
88    /// Platform language preference for the user
89    /// Allowed values: `en_US`, `es`, `fr_CA`, `fr_FR`, `nl`, `de`, `pt_PT`, `pt_BR`, `it`,
90    /// `sv`, `da`, `fi`.
91    #[serde(
92        rename = "platformLanguage",
93        default,
94        skip_serializing_if = "Option::is_none"
95    )]
96    pub platform_language: Option<String>,
97}
98
99/// `DeleteUserSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
100#[derive(Debug, Clone, Default, Serialize, Deserialize)]
101pub struct DeleteUserSuccessfulResponseDto {
102    #[serde(default, skip_serializing_if = "Option::is_none")]
103    pub succeded: Option<bool>,
104    #[serde(default, skip_serializing_if = "Option::is_none")]
105    pub message: Option<String>,
106}
107
108/// `FilterByEmailDto` from the GoHighLevel OpenAPI spec.
109#[derive(Debug, Clone, Default, Serialize, Deserialize)]
110pub struct FilterByEmailDto {
111    /// Company ID to filter users
112    /// Required by the API.
113    #[serde(rename = "companyId")]
114    pub company_id: String,
115    /// Comma-separated list of email addresses to filter users
116    /// Required by the API.
117    pub emails: String,
118    /// Filter deleted users
119    #[serde(default, skip_serializing_if = "Option::is_none")]
120    pub deleted: Option<bool>,
121    /// No of results to be skipped before returning the result
122    #[serde(default, skip_serializing_if = "Option::is_none")]
123    pub skip: Option<String>,
124    /// No of results to be limited before returning the result
125    #[serde(default, skip_serializing_if = "Option::is_none")]
126    pub limit: Option<String>,
127    /// Projection fields to return. Use "all" for all fields, or specify comma-separated field
128    /// names. Default returns only id and email
129    #[serde(default, skip_serializing_if = "Option::is_none")]
130    pub projection: Option<String>,
131}
132
133/// `LocationSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
134#[derive(Debug, Clone, Default, Serialize, Deserialize)]
135pub struct LocationSuccessfulResponseDto {
136    #[serde(default, skip_serializing_if = "Vec::is_empty")]
137    pub users: Vec<UserSchema>,
138}
139
140/// `PermissionsDto` from the GoHighLevel OpenAPI spec.
141#[derive(Debug, Clone, Default, Serialize, Deserialize)]
142pub struct PermissionsDto {
143    #[serde(
144        rename = "campaignsEnabled",
145        default,
146        skip_serializing_if = "Option::is_none"
147    )]
148    pub campaigns_enabled: Option<bool>,
149    #[serde(
150        rename = "campaignsReadOnly",
151        default,
152        skip_serializing_if = "Option::is_none"
153    )]
154    pub campaigns_read_only: Option<bool>,
155    #[serde(
156        rename = "contactsEnabled",
157        default,
158        skip_serializing_if = "Option::is_none"
159    )]
160    pub contacts_enabled: Option<bool>,
161    #[serde(
162        rename = "workflowsEnabled",
163        default,
164        skip_serializing_if = "Option::is_none"
165    )]
166    pub workflows_enabled: Option<bool>,
167    #[serde(
168        rename = "workflowsReadOnly",
169        default,
170        skip_serializing_if = "Option::is_none"
171    )]
172    pub workflows_read_only: Option<bool>,
173    #[serde(
174        rename = "triggersEnabled",
175        default,
176        skip_serializing_if = "Option::is_none"
177    )]
178    pub triggers_enabled: Option<bool>,
179    #[serde(
180        rename = "funnelsEnabled",
181        default,
182        skip_serializing_if = "Option::is_none"
183    )]
184    pub funnels_enabled: Option<bool>,
185    #[serde(
186        rename = "websitesEnabled",
187        default,
188        skip_serializing_if = "Option::is_none"
189    )]
190    pub websites_enabled: Option<bool>,
191    #[serde(
192        rename = "opportunitiesEnabled",
193        default,
194        skip_serializing_if = "Option::is_none"
195    )]
196    pub opportunities_enabled: Option<bool>,
197    #[serde(
198        rename = "dashboardStatsEnabled",
199        default,
200        skip_serializing_if = "Option::is_none"
201    )]
202    pub dashboard_stats_enabled: Option<bool>,
203    #[serde(
204        rename = "bulkRequestsEnabled",
205        default,
206        skip_serializing_if = "Option::is_none"
207    )]
208    pub bulk_requests_enabled: Option<bool>,
209    #[serde(
210        rename = "appointmentsEnabled",
211        default,
212        skip_serializing_if = "Option::is_none"
213    )]
214    pub appointments_enabled: Option<bool>,
215    #[serde(
216        rename = "reviewsEnabled",
217        default,
218        skip_serializing_if = "Option::is_none"
219    )]
220    pub reviews_enabled: Option<bool>,
221    #[serde(
222        rename = "onlineListingsEnabled",
223        default,
224        skip_serializing_if = "Option::is_none"
225    )]
226    pub online_listings_enabled: Option<bool>,
227    #[serde(
228        rename = "phoneCallEnabled",
229        default,
230        skip_serializing_if = "Option::is_none"
231    )]
232    pub phone_call_enabled: Option<bool>,
233    #[serde(
234        rename = "conversationsEnabled",
235        default,
236        skip_serializing_if = "Option::is_none"
237    )]
238    pub conversations_enabled: Option<bool>,
239    #[serde(
240        rename = "assignedDataOnly",
241        default,
242        skip_serializing_if = "Option::is_none"
243    )]
244    pub assigned_data_only: Option<bool>,
245    #[serde(
246        rename = "adwordsReportingEnabled",
247        default,
248        skip_serializing_if = "Option::is_none"
249    )]
250    pub adwords_reporting_enabled: Option<bool>,
251    #[serde(
252        rename = "membershipEnabled",
253        default,
254        skip_serializing_if = "Option::is_none"
255    )]
256    pub membership_enabled: Option<bool>,
257    #[serde(
258        rename = "facebookAdsReportingEnabled",
259        default,
260        skip_serializing_if = "Option::is_none"
261    )]
262    pub facebook_ads_reporting_enabled: Option<bool>,
263    #[serde(
264        rename = "attributionsReportingEnabled",
265        default,
266        skip_serializing_if = "Option::is_none"
267    )]
268    pub attributions_reporting_enabled: Option<bool>,
269    #[serde(
270        rename = "settingsEnabled",
271        default,
272        skip_serializing_if = "Option::is_none"
273    )]
274    pub settings_enabled: Option<bool>,
275    #[serde(
276        rename = "tagsEnabled",
277        default,
278        skip_serializing_if = "Option::is_none"
279    )]
280    pub tags_enabled: Option<bool>,
281    #[serde(
282        rename = "leadValueEnabled",
283        default,
284        skip_serializing_if = "Option::is_none"
285    )]
286    pub lead_value_enabled: Option<bool>,
287    #[serde(
288        rename = "marketingEnabled",
289        default,
290        skip_serializing_if = "Option::is_none"
291    )]
292    pub marketing_enabled: Option<bool>,
293    #[serde(
294        rename = "agentReportingEnabled",
295        default,
296        skip_serializing_if = "Option::is_none"
297    )]
298    pub agent_reporting_enabled: Option<bool>,
299    #[serde(
300        rename = "botService",
301        default,
302        skip_serializing_if = "Option::is_none"
303    )]
304    pub bot_service: Option<bool>,
305    #[serde(
306        rename = "socialPlanner",
307        default,
308        skip_serializing_if = "Option::is_none"
309    )]
310    pub social_planner: Option<bool>,
311    #[serde(
312        rename = "bloggingEnabled",
313        default,
314        skip_serializing_if = "Option::is_none"
315    )]
316    pub blogging_enabled: Option<bool>,
317    #[serde(
318        rename = "invoiceEnabled",
319        default,
320        skip_serializing_if = "Option::is_none"
321    )]
322    pub invoice_enabled: Option<bool>,
323    #[serde(
324        rename = "affiliateManagerEnabled",
325        default,
326        skip_serializing_if = "Option::is_none"
327    )]
328    pub affiliate_manager_enabled: Option<bool>,
329    #[serde(
330        rename = "contentAiEnabled",
331        default,
332        skip_serializing_if = "Option::is_none"
333    )]
334    pub content_ai_enabled: Option<bool>,
335    #[serde(
336        rename = "refundsEnabled",
337        default,
338        skip_serializing_if = "Option::is_none"
339    )]
340    pub refunds_enabled: Option<bool>,
341    #[serde(
342        rename = "recordPaymentEnabled",
343        default,
344        skip_serializing_if = "Option::is_none"
345    )]
346    pub record_payment_enabled: Option<bool>,
347    #[serde(
348        rename = "cancelSubscriptionEnabled",
349        default,
350        skip_serializing_if = "Option::is_none"
351    )]
352    pub cancel_subscription_enabled: Option<bool>,
353    #[serde(
354        rename = "paymentsEnabled",
355        default,
356        skip_serializing_if = "Option::is_none"
357    )]
358    pub payments_enabled: Option<bool>,
359    #[serde(
360        rename = "communitiesEnabled",
361        default,
362        skip_serializing_if = "Option::is_none"
363    )]
364    pub communities_enabled: Option<bool>,
365    #[serde(
366        rename = "exportPaymentsEnabled",
367        default,
368        skip_serializing_if = "Option::is_none"
369    )]
370    pub export_payments_enabled: Option<bool>,
371}
372
373/// `RoleSchema` from the GoHighLevel OpenAPI spec.
374#[derive(Debug, Clone, Default, Serialize, Deserialize)]
375pub struct RoleSchema {
376    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
377    pub type_: Option<String>,
378    #[serde(default, skip_serializing_if = "Option::is_none")]
379    pub role: Option<String>,
380    #[serde(rename = "locationIds", default, skip_serializing_if = "Vec::is_empty")]
381    pub location_ids: Vec<String>,
382    #[serde(
383        rename = "restrictSubAccount",
384        default,
385        skip_serializing_if = "Option::is_none"
386    )]
387    pub restrict_sub_account: Option<bool>,
388}
389
390/// `SearchUserSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
391#[derive(Debug, Clone, Default, Serialize, Deserialize)]
392pub struct SearchUserSuccessfulResponseDto {
393    #[serde(default, skip_serializing_if = "Vec::is_empty")]
394    pub users: Vec<UserSchema>,
395    #[serde(default, skip_serializing_if = "Option::is_none")]
396    pub count: Option<f64>,
397}
398
399/// `UpdateUserDto` from the GoHighLevel OpenAPI spec.
400#[derive(Debug, Clone, Default, Serialize, Deserialize)]
401pub struct UpdateUserDto {
402    #[serde(rename = "firstName", default, skip_serializing_if = "Option::is_none")]
403    pub first_name: Option<String>,
404    #[serde(rename = "lastName", default, skip_serializing_if = "Option::is_none")]
405    pub last_name: Option<String>,
406    /// Email update is no longer supported due to security reasons.
407    #[serde(default, skip_serializing_if = "Option::is_none")]
408    pub email: Option<String>,
409    #[serde(default, skip_serializing_if = "Option::is_none")]
410    pub password: Option<String>,
411    #[serde(default, skip_serializing_if = "Option::is_none")]
412    pub phone: Option<String>,
413    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
414    pub type_: Option<String>,
415    #[serde(default, skip_serializing_if = "Option::is_none")]
416    pub role: Option<String>,
417    /// Company/Agency Id. Required for Agency Level access
418    #[serde(rename = "companyId", default, skip_serializing_if = "Option::is_none")]
419    pub company_id: Option<String>,
420    #[serde(rename = "locationIds", default, skip_serializing_if = "Vec::is_empty")]
421    pub location_ids: Vec<String>,
422    #[serde(default, skip_serializing_if = "Option::is_none")]
423    pub permissions: Option<PermissionsDto>,
424    /// Scopes allowed for users. Only scopes that have been passed will be enabled. If passed
425    /// empty all the scopes will be get disabled
426    /// Allowed values: `campaigns.readonly`, `campaigns.write`, `calendars.readonly`,
427    /// `calendars/events.write`, `calendars/groups.write`, `calendars.write`, `contacts.write`,
428    /// `contacts/bulkActions.write`, `workflows.readonly`, `workflows.write`, `triggers.write`,
429    /// `funnels.write`.
430    #[serde(default, skip_serializing_if = "Vec::is_empty")]
431    pub scopes: Vec<String>,
432    /// Assigned Scopes allowed for users. Only scopes that have been passed will be enabled. If
433    /// passed empty all the assigned scopes will be get disabled
434    /// Allowed values: `campaigns.readonly`, `campaigns.write`, `calendars.readonly`,
435    /// `calendars/events.write`, `calendars/groups.write`, `calendars.write`, `contacts.write`,
436    /// `contacts/bulkActions.write`, `workflows.readonly`, `workflows.write`, `triggers.write`,
437    /// `funnels.write`.
438    #[serde(
439        rename = "scopesAssignedToOnly",
440        default,
441        skip_serializing_if = "Vec::is_empty"
442    )]
443    pub scopes_assigned_to_only: Vec<String>,
444    #[serde(
445        rename = "profilePhoto",
446        default,
447        skip_serializing_if = "Option::is_none"
448    )]
449    pub profile_photo: Option<String>,
450    /// Per-location inbound Twilio number in E.164 format, keyed by location id (Call and
451    /// Voicemail Inbound Number for direct Twilio, not LC Phone). Replacement semantics: if you
452    /// send twilioPhone in the request body, the stored map is replaced entirely with this
453    /// object (not merged). Any location id omitted from the object is removed from the saved
454    /// map. Omit the twilioPhone property entirely to leave existing numbers unchanged. Send an
455    /// empty object {} to clear all per-location numbers. To clear a single location only, set
456    /// that location id to an empty string "".
457    #[serde(
458        rename = "twilioPhone",
459        default,
460        skip_serializing_if = "Option::is_none"
461    )]
462    pub twilio_phone: Option<serde_json::Value>,
463    /// Platform language preference for the user
464    /// Allowed values: `en_US`, `es`, `fr_CA`, `fr_FR`, `nl`, `de`, `pt_PT`, `pt_BR`, `it`,
465    /// `sv`, `da`, `fi`.
466    #[serde(
467        rename = "platformLanguage",
468        default,
469        skip_serializing_if = "Option::is_none"
470    )]
471    pub platform_language: Option<String>,
472}
473
474/// `UserSchema` from the GoHighLevel OpenAPI spec.
475#[derive(Debug, Clone, Default, Serialize, Deserialize)]
476pub struct UserSchema {
477    #[serde(default, skip_serializing_if = "Option::is_none")]
478    pub id: Option<String>,
479    #[serde(default, skip_serializing_if = "Option::is_none")]
480    pub name: Option<String>,
481    #[serde(rename = "firstName", default, skip_serializing_if = "Option::is_none")]
482    pub first_name: Option<String>,
483    #[serde(rename = "lastName", default, skip_serializing_if = "Option::is_none")]
484    pub last_name: Option<String>,
485    #[serde(default, skip_serializing_if = "Option::is_none")]
486    pub email: Option<String>,
487    #[serde(default, skip_serializing_if = "Option::is_none")]
488    pub phone: Option<String>,
489    #[serde(default, skip_serializing_if = "Option::is_none")]
490    pub extension: Option<String>,
491    #[serde(default, skip_serializing_if = "Option::is_none")]
492    pub permissions: Option<PermissionsDto>,
493    /// Allowed values: `campaigns.readonly`, `campaigns.write`, `calendars.readonly`,
494    /// `calendars/events.write`, `calendars/groups.write`, `calendars.write`, `contacts.write`,
495    /// `contacts/bulkActions.write`, `workflows.readonly`, `workflows.write`, `triggers.write`,
496    /// `funnels.write`.
497    #[serde(default, skip_serializing_if = "Option::is_none")]
498    pub scopes: Option<String>,
499    #[serde(default, skip_serializing_if = "Option::is_none")]
500    pub roles: Option<RoleSchema>,
501    #[serde(default, skip_serializing_if = "Option::is_none")]
502    pub deleted: Option<bool>,
503    /// LC Phone Inbound Phone Numbers
504    #[serde(rename = "lcPhone", default, skip_serializing_if = "Option::is_none")]
505    pub lc_phone: Option<serde_json::Value>,
506    /// Platform language preference for the user
507    /// Allowed values: `en_US`, `es`, `fr_CA`, `fr_FR`, `nl`, `de`, `pt_PT`, `pt_BR`, `it`,
508    /// `sv`, `da`, `fi`.
509    #[serde(
510        rename = "platformLanguage",
511        default,
512        skip_serializing_if = "Option::is_none"
513    )]
514    pub platform_language: Option<String>,
515}
516
517/// `UserSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
518#[derive(Debug, Clone, Default, Serialize, Deserialize)]
519pub struct UserSuccessfulResponseDto {
520    #[serde(default, skip_serializing_if = "Option::is_none")]
521    pub id: Option<String>,
522    #[serde(default, skip_serializing_if = "Option::is_none")]
523    pub name: Option<String>,
524    #[serde(rename = "firstName", default, skip_serializing_if = "Option::is_none")]
525    pub first_name: Option<String>,
526    #[serde(rename = "lastName", default, skip_serializing_if = "Option::is_none")]
527    pub last_name: Option<String>,
528    #[serde(default, skip_serializing_if = "Option::is_none")]
529    pub email: Option<String>,
530    #[serde(default, skip_serializing_if = "Option::is_none")]
531    pub phone: Option<String>,
532    #[serde(default, skip_serializing_if = "Option::is_none")]
533    pub extension: Option<String>,
534    #[serde(default, skip_serializing_if = "Option::is_none")]
535    pub permissions: Option<PermissionsDto>,
536    /// Allowed values: `campaigns.readonly`, `campaigns.write`, `calendars.readonly`,
537    /// `calendars/events.write`, `calendars/groups.write`, `calendars.write`, `contacts.write`,
538    /// `contacts/bulkActions.write`, `workflows.readonly`, `workflows.write`, `triggers.write`,
539    /// `funnels.write`.
540    #[serde(default, skip_serializing_if = "Option::is_none")]
541    pub scopes: Option<String>,
542    #[serde(default, skip_serializing_if = "Option::is_none")]
543    pub roles: Option<RoleSchema>,
544    /// LC Phone Inbound Phone Numbers
545    #[serde(rename = "lcPhone", default, skip_serializing_if = "Option::is_none")]
546    pub lc_phone: Option<serde_json::Value>,
547    /// Platform language preference for the user
548    /// Allowed values: `en_US`, `es`, `fr_CA`, `fr_FR`, `nl`, `de`, `pt_PT`, `pt_BR`, `it`,
549    /// `sv`, `da`, `fi`.
550    #[serde(
551        rename = "platformLanguage",
552        default,
553        skip_serializing_if = "Option::is_none"
554    )]
555    pub platform_language: Option<String>,
556}