Skip to main content

ghl_models/v3/
users.rs

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