Skip to main content

ghl_models/v3/
users.rs

1//! `users` data models for GoHighLevel API V3 (9 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    /// Company/Agency ID to associate the user with
25    /// Required by the API.
26    #[serde(rename = "companyId")]
27    pub company_id: String,
28    /// Email address of the user (used for login)
29    /// Required by the API.
30    pub email: String,
31    /// Password for the user account. All passwords will be required to meet the following
32    /// criteria: - Minimum 12 characters - At least one uppercase letter (A–Z) - At least one
33    /// lowercase letter (a–z) - At least one number (0–9) - At least one special character
34    /// (e.g., !, @, #, $)
35    /// Required by the API.
36    pub password: String,
37    /// Phone number of the user in E.164 format
38    #[serde(default, skip_serializing_if = "Option::is_none")]
39    pub phone: Option<String>,
40    /// User account type (account for sub-account users, agency for agency-level users)
41    /// Required by the API.
42    #[serde(rename = "type")]
43    pub type_: String,
44    /// User role within the account (admin or user)
45    /// Required by the API.
46    pub role: String,
47    /// List of location IDs to assign to the user
48    /// Required by the API.
49    #[serde(rename = "locationIds", default, skip_serializing_if = "Vec::is_empty")]
50    pub location_ids: Vec<String>,
51    /// User permissions controlling access to various features
52    #[serde(default, skip_serializing_if = "Option::is_none")]
53    pub permissions: Option<PermissionsDto>,
54    /// Scopes allowed for users. Only scopes that have been passed will be enabled. Note:- If
55    /// passed empty all the scopes will be get disabled
56    /// Allowed values: `campaigns.readonly`, `campaigns.write`, `calendars.readonly`,
57    /// `calendars/events.write`, `calendars/groups.write`, `calendars.write`, `contacts.write`,
58    /// `contacts/bulkActions.write`, `workflows.readonly`, `workflows.write`, `triggers.write`,
59    /// `funnels.write`.
60    #[serde(default, skip_serializing_if = "Vec::is_empty")]
61    pub scopes: Vec<String>,
62    /// Assigned Scopes allowed for users. Only scopes that have been passed will be enabled. If
63    /// passed empty all the assigned scopes will be get disabled
64    /// Allowed values: `campaigns.readonly`, `campaigns.write`, `calendars.readonly`,
65    /// `calendars/events.write`, `calendars/groups.write`, `calendars.write`, `contacts.write`,
66    /// `contacts/bulkActions.write`, `workflows.readonly`, `workflows.write`, `triggers.write`,
67    /// `funnels.write`.
68    #[serde(
69        rename = "scopesAssignedToOnly",
70        default,
71        skip_serializing_if = "Vec::is_empty"
72    )]
73    pub scopes_assigned_to_only: Vec<String>,
74    /// URL of the user profile photo
75    #[serde(
76        rename = "profilePhoto",
77        default,
78        skip_serializing_if = "Option::is_none"
79    )]
80    pub profile_photo: Option<String>,
81    /// Per-location inbound Twilio number in E.164 format, keyed by location id (Call and
82    /// Voicemail Inbound Number for direct Twilio, not LC Phone). Replacement semantics: if you
83    /// send twilioPhone in the request body, the stored map is replaced entirely with this
84    /// object (not merged). Any location id omitted from the object is removed from the saved
85    /// map. Omit the twilioPhone property entirely to leave existing numbers unchanged. Send an
86    /// empty object {} to clear all per-location numbers. To clear a single location only, set
87    /// that location id to an empty string "".
88    #[serde(
89        rename = "twilioPhone",
90        default,
91        skip_serializing_if = "Option::is_none"
92    )]
93    pub twilio_phone: Option<serde_json::Value>,
94    /// Platform language preference for the user
95    /// Allowed values: `en_US`, `es`, `fr_CA`, `fr_FR`, `nl`, `de`, `pt_PT`, `pt_BR`, `it`,
96    /// `sv`, `da`, `fi`.
97    #[serde(
98        rename = "platformLanguage",
99        default,
100        skip_serializing_if = "Option::is_none"
101    )]
102    pub platform_language: Option<String>,
103    /// First name of the user
104    /// Required by the API.
105    #[serde(rename = "firstName")]
106    pub first_name: String,
107    /// Last name of the user
108    /// Required by the API.
109    #[serde(rename = "lastName")]
110    pub last_name: String,
111}
112
113/// `DeleteUserSuccessfulResponseV3Dto` from the GoHighLevel OpenAPI spec.
114#[derive(Debug, Clone, Default, Serialize, Deserialize)]
115pub struct DeleteUserSuccessfulResponseV3Dto {
116    /// Indicates whether the user deletion was queued successfully
117    #[serde(default, skip_serializing_if = "Option::is_none")]
118    pub succeeded: Option<bool>,
119    /// Message describing the result of the deletion request
120    #[serde(default, skip_serializing_if = "Option::is_none")]
121    pub message: Option<String>,
122}
123
124/// `FilterByEmailDto` from the GoHighLevel OpenAPI spec.
125#[derive(Debug, Clone, Default, Serialize, Deserialize)]
126pub struct FilterByEmailDto {
127    /// Company ID to filter users
128    /// Required by the API.
129    #[serde(rename = "companyId")]
130    pub company_id: String,
131    /// Comma-separated list of email addresses to filter users
132    /// Required by the API.
133    pub emails: String,
134    /// Filter deleted users
135    #[serde(default, skip_serializing_if = "Option::is_none")]
136    pub deleted: Option<bool>,
137    /// No of results to be skipped before returning the result
138    #[serde(default, skip_serializing_if = "Option::is_none")]
139    pub skip: Option<String>,
140    /// No of results to be limited before returning the result
141    #[serde(default, skip_serializing_if = "Option::is_none")]
142    pub limit: Option<String>,
143    /// Projection fields to return. Use "all" for all fields, or specify comma-separated field
144    /// names. Default returns only id and email
145    #[serde(default, skip_serializing_if = "Option::is_none")]
146    pub projection: Option<String>,
147}
148
149/// `PermissionsDto` from the GoHighLevel OpenAPI spec.
150#[derive(Debug, Clone, Default, Serialize, Deserialize)]
151pub struct PermissionsDto {
152    /// Whether campaigns are enabled for this user
153    #[serde(
154        rename = "campaignsEnabled",
155        default,
156        skip_serializing_if = "Option::is_none"
157    )]
158    pub campaigns_enabled: Option<bool>,
159    /// Whether campaigns are in read-only mode for this user
160    #[serde(
161        rename = "campaignsReadOnly",
162        default,
163        skip_serializing_if = "Option::is_none"
164    )]
165    pub campaigns_read_only: Option<bool>,
166    /// Whether contacts are enabled for this user
167    #[serde(
168        rename = "contactsEnabled",
169        default,
170        skip_serializing_if = "Option::is_none"
171    )]
172    pub contacts_enabled: Option<bool>,
173    /// Whether workflows are enabled for this user
174    #[serde(
175        rename = "workflowsEnabled",
176        default,
177        skip_serializing_if = "Option::is_none"
178    )]
179    pub workflows_enabled: Option<bool>,
180    /// Whether workflows are in read-only mode for this user
181    #[serde(
182        rename = "workflowsReadOnly",
183        default,
184        skip_serializing_if = "Option::is_none"
185    )]
186    pub workflows_read_only: Option<bool>,
187    /// Whether triggers are enabled for this user
188    #[serde(
189        rename = "triggersEnabled",
190        default,
191        skip_serializing_if = "Option::is_none"
192    )]
193    pub triggers_enabled: Option<bool>,
194    /// Whether funnels are enabled for this user
195    #[serde(
196        rename = "funnelsEnabled",
197        default,
198        skip_serializing_if = "Option::is_none"
199    )]
200    pub funnels_enabled: Option<bool>,
201    /// Whether websites are enabled for this user
202    #[serde(
203        rename = "websitesEnabled",
204        default,
205        skip_serializing_if = "Option::is_none"
206    )]
207    pub websites_enabled: Option<bool>,
208    /// Whether opportunities are enabled for this user
209    #[serde(
210        rename = "opportunitiesEnabled",
211        default,
212        skip_serializing_if = "Option::is_none"
213    )]
214    pub opportunities_enabled: Option<bool>,
215    /// Whether dashboard statistics are enabled for this user
216    #[serde(
217        rename = "dashboardStatsEnabled",
218        default,
219        skip_serializing_if = "Option::is_none"
220    )]
221    pub dashboard_stats_enabled: Option<bool>,
222    /// Whether bulk requests are enabled for this user
223    #[serde(
224        rename = "bulkRequestsEnabled",
225        default,
226        skip_serializing_if = "Option::is_none"
227    )]
228    pub bulk_requests_enabled: Option<bool>,
229    /// Whether appointments are enabled for this user
230    #[serde(
231        rename = "appointmentsEnabled",
232        default,
233        skip_serializing_if = "Option::is_none"
234    )]
235    pub appointments_enabled: Option<bool>,
236    /// Whether reviews are enabled for this user
237    #[serde(
238        rename = "reviewsEnabled",
239        default,
240        skip_serializing_if = "Option::is_none"
241    )]
242    pub reviews_enabled: Option<bool>,
243    /// Whether online listings are enabled for this user
244    #[serde(
245        rename = "onlineListingsEnabled",
246        default,
247        skip_serializing_if = "Option::is_none"
248    )]
249    pub online_listings_enabled: Option<bool>,
250    /// Whether phone calls are enabled for this user
251    #[serde(
252        rename = "phoneCallEnabled",
253        default,
254        skip_serializing_if = "Option::is_none"
255    )]
256    pub phone_call_enabled: Option<bool>,
257    /// Whether conversations are enabled for this user
258    #[serde(
259        rename = "conversationsEnabled",
260        default,
261        skip_serializing_if = "Option::is_none"
262    )]
263    pub conversations_enabled: Option<bool>,
264    /// Whether the user can only access data assigned to them
265    #[serde(
266        rename = "assignedDataOnly",
267        default,
268        skip_serializing_if = "Option::is_none"
269    )]
270    pub assigned_data_only: Option<bool>,
271    /// Whether AdWords reporting is enabled for this user
272    #[serde(
273        rename = "adwordsReportingEnabled",
274        default,
275        skip_serializing_if = "Option::is_none"
276    )]
277    pub adwords_reporting_enabled: Option<bool>,
278    /// Whether membership features are enabled for this user
279    #[serde(
280        rename = "membershipEnabled",
281        default,
282        skip_serializing_if = "Option::is_none"
283    )]
284    pub membership_enabled: Option<bool>,
285    /// Whether Facebook Ads reporting is enabled for this user
286    #[serde(
287        rename = "facebookAdsReportingEnabled",
288        default,
289        skip_serializing_if = "Option::is_none"
290    )]
291    pub facebook_ads_reporting_enabled: Option<bool>,
292    /// Whether attributions reporting is enabled for this user
293    #[serde(
294        rename = "attributionsReportingEnabled",
295        default,
296        skip_serializing_if = "Option::is_none"
297    )]
298    pub attributions_reporting_enabled: Option<bool>,
299    /// Whether settings are enabled for this user
300    #[serde(
301        rename = "settingsEnabled",
302        default,
303        skip_serializing_if = "Option::is_none"
304    )]
305    pub settings_enabled: Option<bool>,
306    /// Whether tags are enabled for this user
307    #[serde(
308        rename = "tagsEnabled",
309        default,
310        skip_serializing_if = "Option::is_none"
311    )]
312    pub tags_enabled: Option<bool>,
313    /// Whether lead value features are enabled for this user
314    #[serde(
315        rename = "leadValueEnabled",
316        default,
317        skip_serializing_if = "Option::is_none"
318    )]
319    pub lead_value_enabled: Option<bool>,
320    /// Whether marketing features are enabled for this user
321    #[serde(
322        rename = "marketingEnabled",
323        default,
324        skip_serializing_if = "Option::is_none"
325    )]
326    pub marketing_enabled: Option<bool>,
327    /// Whether agent reporting is enabled for this user
328    #[serde(
329        rename = "agentReportingEnabled",
330        default,
331        skip_serializing_if = "Option::is_none"
332    )]
333    pub agent_reporting_enabled: Option<bool>,
334    /// Whether the bot service is enabled for this user
335    #[serde(
336        rename = "botService",
337        default,
338        skip_serializing_if = "Option::is_none"
339    )]
340    pub bot_service: Option<bool>,
341    /// Whether the social planner is enabled for this user
342    #[serde(
343        rename = "socialPlanner",
344        default,
345        skip_serializing_if = "Option::is_none"
346    )]
347    pub social_planner: Option<bool>,
348    /// Whether blogging is enabled for this user
349    #[serde(
350        rename = "bloggingEnabled",
351        default,
352        skip_serializing_if = "Option::is_none"
353    )]
354    pub blogging_enabled: Option<bool>,
355    /// Whether invoices are enabled for this user
356    #[serde(
357        rename = "invoiceEnabled",
358        default,
359        skip_serializing_if = "Option::is_none"
360    )]
361    pub invoice_enabled: Option<bool>,
362    /// Whether the affiliate manager is enabled for this user
363    #[serde(
364        rename = "affiliateManagerEnabled",
365        default,
366        skip_serializing_if = "Option::is_none"
367    )]
368    pub affiliate_manager_enabled: Option<bool>,
369    /// Whether Content AI is enabled for this user
370    #[serde(
371        rename = "contentAiEnabled",
372        default,
373        skip_serializing_if = "Option::is_none"
374    )]
375    pub content_ai_enabled: Option<bool>,
376    /// Whether refunds are enabled for this user
377    #[serde(
378        rename = "refundsEnabled",
379        default,
380        skip_serializing_if = "Option::is_none"
381    )]
382    pub refunds_enabled: Option<bool>,
383    /// Whether recording payments is enabled for this user
384    #[serde(
385        rename = "recordPaymentEnabled",
386        default,
387        skip_serializing_if = "Option::is_none"
388    )]
389    pub record_payment_enabled: Option<bool>,
390    /// Whether cancelling subscriptions is enabled for this user
391    #[serde(
392        rename = "cancelSubscriptionEnabled",
393        default,
394        skip_serializing_if = "Option::is_none"
395    )]
396    pub cancel_subscription_enabled: Option<bool>,
397    /// Whether payments are enabled for this user
398    #[serde(
399        rename = "paymentsEnabled",
400        default,
401        skip_serializing_if = "Option::is_none"
402    )]
403    pub payments_enabled: Option<bool>,
404    /// Whether communities are enabled for this user
405    #[serde(
406        rename = "communitiesEnabled",
407        default,
408        skip_serializing_if = "Option::is_none"
409    )]
410    pub communities_enabled: Option<bool>,
411    /// Whether exporting payments is enabled for this user
412    #[serde(
413        rename = "exportPaymentsEnabled",
414        default,
415        skip_serializing_if = "Option::is_none"
416    )]
417    pub export_payments_enabled: Option<bool>,
418}
419
420/// `RoleSchema` from the GoHighLevel OpenAPI spec.
421#[derive(Debug, Clone, Default, Serialize, Deserialize)]
422pub struct RoleSchema {
423    /// User account type (account for sub-account users, agency for agency-level users)
424    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
425    pub type_: Option<String>,
426    /// User role within the account (admin or user)
427    #[serde(default, skip_serializing_if = "Option::is_none")]
428    pub role: Option<String>,
429    /// List of location IDs the user has access to
430    #[serde(rename = "locationIds", default, skip_serializing_if = "Vec::is_empty")]
431    pub location_ids: Vec<String>,
432    /// Whether the user is restricted to specific sub-accounts only
433    #[serde(
434        rename = "restrictSubAccount",
435        default,
436        skip_serializing_if = "Option::is_none"
437    )]
438    pub restrict_sub_account: Option<bool>,
439}
440
441/// `SearchUserSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
442#[derive(Debug, Clone, Default, Serialize, Deserialize)]
443pub struct SearchUserSuccessfulResponseDto {
444    /// List of users matching the search criteria
445    #[serde(default, skip_serializing_if = "Vec::is_empty")]
446    pub users: Vec<UserSchema>,
447    /// Total number of users matching the search criteria
448    #[serde(default, skip_serializing_if = "Option::is_none")]
449    pub count: Option<f64>,
450}
451
452/// `UpdateUserDto` from the GoHighLevel OpenAPI spec.
453#[derive(Debug, Clone, Default, Serialize, Deserialize)]
454pub struct UpdateUserDto {
455    /// First name of the user
456    #[serde(rename = "firstName", default, skip_serializing_if = "Option::is_none")]
457    pub first_name: Option<String>,
458    /// Last name of the user
459    #[serde(rename = "lastName", default, skip_serializing_if = "Option::is_none")]
460    pub last_name: Option<String>,
461    /// Email update is no longer supported due to security reasons.
462    #[serde(default, skip_serializing_if = "Option::is_none")]
463    pub email: Option<String>,
464    /// New password for the user account. All passwords will be required to meet the following
465    /// criteria: - Minimum 12 characters - At least one uppercase letter (A–Z) - At least one
466    /// lowercase letter (a–z) - At least one number (0–9) - At least one special character
467    /// (e.g., !, @, #, $)
468    #[serde(default, skip_serializing_if = "Option::is_none")]
469    pub password: Option<String>,
470    /// Phone number of the user in E.164 format
471    #[serde(default, skip_serializing_if = "Option::is_none")]
472    pub phone: Option<String>,
473    /// User account type (account for sub-account users, agency for agency-level users)
474    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
475    pub type_: Option<String>,
476    /// User role within the account (admin or user)
477    #[serde(default, skip_serializing_if = "Option::is_none")]
478    pub role: Option<String>,
479    /// Company/Agency Id. Required for Agency Level access
480    #[serde(rename = "companyId", default, skip_serializing_if = "Option::is_none")]
481    pub company_id: Option<String>,
482    /// List of sub-account location IDs the user should have access to
483    #[serde(rename = "locationIds", default, skip_serializing_if = "Vec::is_empty")]
484    pub location_ids: Vec<String>,
485    /// User permissions controlling access to various features
486    #[serde(default, skip_serializing_if = "Option::is_none")]
487    pub permissions: Option<PermissionsDto>,
488    /// Scopes allowed for users. Only scopes that have been passed will be enabled. If passed
489    /// empty all the scopes will be get disabled
490    /// Allowed values: `campaigns.readonly`, `campaigns.write`, `calendars.readonly`,
491    /// `calendars/events.write`, `calendars/groups.write`, `calendars.write`, `contacts.write`,
492    /// `contacts/bulkActions.write`, `workflows.readonly`, `workflows.write`, `triggers.write`,
493    /// `funnels.write`.
494    #[serde(default, skip_serializing_if = "Vec::is_empty")]
495    pub scopes: Vec<String>,
496    /// Assigned Scopes allowed for users. Only scopes that have been passed will be enabled. If
497    /// passed empty all the assigned scopes will be get disabled
498    /// Allowed values: `campaigns.readonly`, `campaigns.write`, `calendars.readonly`,
499    /// `calendars/events.write`, `calendars/groups.write`, `calendars.write`, `contacts.write`,
500    /// `contacts/bulkActions.write`, `workflows.readonly`, `workflows.write`, `triggers.write`,
501    /// `funnels.write`.
502    #[serde(
503        rename = "scopesAssignedToOnly",
504        default,
505        skip_serializing_if = "Vec::is_empty"
506    )]
507    pub scopes_assigned_to_only: Vec<String>,
508    /// URL of the user profile photo
509    #[serde(
510        rename = "profilePhoto",
511        default,
512        skip_serializing_if = "Option::is_none"
513    )]
514    pub profile_photo: Option<String>,
515    /// Per-location inbound Twilio number in E.164 format, keyed by location id (Call and
516    /// Voicemail Inbound Number for direct Twilio, not LC Phone). Replacement semantics: if you
517    /// send twilioPhone in the request body, the stored map is replaced entirely with this
518    /// object (not merged). Any location id omitted from the object is removed from the saved
519    /// map. Omit the twilioPhone property entirely to leave existing numbers unchanged. Send an
520    /// empty object {} to clear all per-location numbers. To clear a single location only, set
521    /// that location id to an empty string "".
522    #[serde(
523        rename = "twilioPhone",
524        default,
525        skip_serializing_if = "Option::is_none"
526    )]
527    pub twilio_phone: Option<serde_json::Value>,
528    /// Platform language preference for the user
529    /// Allowed values: `en_US`, `es`, `fr_CA`, `fr_FR`, `nl`, `de`, `pt_PT`, `pt_BR`, `it`,
530    /// `sv`, `da`, `fi`.
531    #[serde(
532        rename = "platformLanguage",
533        default,
534        skip_serializing_if = "Option::is_none"
535    )]
536    pub platform_language: Option<String>,
537}
538
539/// `UserSchema` from the GoHighLevel OpenAPI spec.
540#[derive(Debug, Clone, Default, Serialize, Deserialize)]
541pub struct UserSchema {
542    /// Unique identifier of the user
543    #[serde(default, skip_serializing_if = "Option::is_none")]
544    pub id: Option<String>,
545    /// Full name of the user
546    #[serde(default, skip_serializing_if = "Option::is_none")]
547    pub name: Option<String>,
548    /// First name of the user
549    #[serde(rename = "firstName", default, skip_serializing_if = "Option::is_none")]
550    pub first_name: Option<String>,
551    /// Last name of the user
552    #[serde(rename = "lastName", default, skip_serializing_if = "Option::is_none")]
553    pub last_name: Option<String>,
554    /// Email address of the user
555    #[serde(default, skip_serializing_if = "Option::is_none")]
556    pub email: Option<String>,
557    /// Phone number of the user
558    #[serde(default, skip_serializing_if = "Option::is_none")]
559    pub phone: Option<String>,
560    /// Phone extension of the user
561    #[serde(default, skip_serializing_if = "Option::is_none")]
562    pub extension: Option<String>,
563    /// User permissions controlling access to various features
564    #[serde(default, skip_serializing_if = "Option::is_none")]
565    pub permissions: Option<PermissionsDto>,
566    /// List of OAuth scopes granted to this user
567    /// Allowed values: `campaigns.readonly`, `campaigns.write`, `calendars.readonly`,
568    /// `calendars/events.write`, `calendars/groups.write`, `calendars.write`, `contacts.write`,
569    /// `contacts/bulkActions.write`, `workflows.readonly`, `workflows.write`, `triggers.write`,
570    /// `funnels.write`.
571    #[serde(default, skip_serializing_if = "Option::is_none")]
572    pub scopes: Option<String>,
573    /// Role and access configuration for the user
574    #[serde(default, skip_serializing_if = "Option::is_none")]
575    pub roles: Option<RoleSchema>,
576    /// Whether the user has been deleted
577    #[serde(default, skip_serializing_if = "Option::is_none")]
578    pub deleted: Option<bool>,
579    /// LC Phone Inbound Phone Numbers
580    #[serde(rename = "lcPhone", default, skip_serializing_if = "Option::is_none")]
581    pub lc_phone: Option<serde_json::Value>,
582    /// Platform language preference for the user
583    /// Allowed values: `en_US`, `es`, `fr_CA`, `fr_FR`, `nl`, `de`, `pt_PT`, `pt_BR`, `it`,
584    /// `sv`, `da`, `fi`.
585    #[serde(
586        rename = "platformLanguage",
587        default,
588        skip_serializing_if = "Option::is_none"
589    )]
590    pub platform_language: Option<String>,
591}
592
593/// `UserSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
594#[derive(Debug, Clone, Default, Serialize, Deserialize)]
595pub struct UserSuccessfulResponseDto {
596    /// Unique identifier of the user
597    #[serde(default, skip_serializing_if = "Option::is_none")]
598    pub id: Option<String>,
599    /// Full name of the user
600    #[serde(default, skip_serializing_if = "Option::is_none")]
601    pub name: Option<String>,
602    /// First name of the user
603    #[serde(rename = "firstName", default, skip_serializing_if = "Option::is_none")]
604    pub first_name: Option<String>,
605    /// Last name of the user
606    #[serde(rename = "lastName", default, skip_serializing_if = "Option::is_none")]
607    pub last_name: Option<String>,
608    /// Email address of the user
609    #[serde(default, skip_serializing_if = "Option::is_none")]
610    pub email: Option<String>,
611    /// Phone number of the user
612    #[serde(default, skip_serializing_if = "Option::is_none")]
613    pub phone: Option<String>,
614    /// Phone extension of the user
615    #[serde(default, skip_serializing_if = "Option::is_none")]
616    pub extension: Option<String>,
617    /// User permissions controlling access to various features
618    #[serde(default, skip_serializing_if = "Option::is_none")]
619    pub permissions: Option<PermissionsDto>,
620    /// List of OAuth scopes granted to this user
621    /// Allowed values: `campaigns.readonly`, `campaigns.write`, `calendars.readonly`,
622    /// `calendars/events.write`, `calendars/groups.write`, `calendars.write`, `contacts.write`,
623    /// `contacts/bulkActions.write`, `workflows.readonly`, `workflows.write`, `triggers.write`,
624    /// `funnels.write`.
625    #[serde(default, skip_serializing_if = "Option::is_none")]
626    pub scopes: Option<String>,
627    /// Role and access configuration for the user
628    #[serde(default, skip_serializing_if = "Option::is_none")]
629    pub roles: Option<RoleSchema>,
630    /// LC Phone Inbound Phone Numbers
631    #[serde(rename = "lcPhone", default, skip_serializing_if = "Option::is_none")]
632    pub lc_phone: Option<serde_json::Value>,
633    /// Platform language preference for the user
634    /// Allowed values: `en_US`, `es`, `fr_CA`, `fr_FR`, `nl`, `de`, `pt_PT`, `pt_BR`, `it`,
635    /// `sv`, `da`, `fi`.
636    #[serde(
637        rename = "platformLanguage",
638        default,
639        skip_serializing_if = "Option::is_none"
640    )]
641    pub platform_language: Option<String>,
642}