Skip to main content

ghl_models/v3/
social_planner.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/// `AccountsListResponseDTO` from the GoHighLevel OpenAPI spec.
14#[derive(Debug, Clone, Default, Serialize, Deserialize)]
15pub struct AccountsListResponseDTO {
16    /// Success or Failure
17    /// Required by the API.
18    pub success: bool,
19    /// Status Code
20    /// Required by the API.
21    #[serde(rename = "statusCode")]
22    pub status_code: f64,
23    /// Message
24    /// Required by the API.
25    pub message: String,
26    /// Requested Results
27    #[serde(default, skip_serializing_if = "Option::is_none")]
28    pub results: Option<AccountsListResponseSchema>,
29}
30
31/// `AccountsListResponseSchema` from the GoHighLevel OpenAPI spec.
32#[derive(Debug, Clone, Default, Serialize, Deserialize)]
33pub struct AccountsListResponseSchema {
34    /// Array of connected social media accounts
35    #[serde(default, skip_serializing_if = "Vec::is_empty")]
36    pub accounts: Vec<GetAccountSchema>,
37    /// Array of account groups
38    #[serde(default, skip_serializing_if = "Vec::is_empty")]
39    pub groups: Vec<GetGroupSchema>,
40}
41
42/// `AttachFBAccountDTO` from the GoHighLevel OpenAPI spec.
43#[derive(Debug, Clone, Default, Serialize, Deserialize)]
44pub struct AttachFBAccountDTO {
45    /// Type of Facebook account (must be page)
46    /// Allowed values: `page`.
47    /// Required by the API.
48    #[serde(rename = "type")]
49    pub type_: String,
50    /// Original Facebook platform identifier
51    /// Required by the API.
52    #[serde(rename = "originId")]
53    pub origin_id: String,
54    /// Name of the Facebook page or account
55    /// Required by the API.
56    pub name: String,
57    /// Avatar or profile picture URL
58    /// Required by the API.
59    pub avatar: String,
60}
61
62/// `AttachGMBLocationAccountDTO` from the GoHighLevel OpenAPI spec.
63#[derive(Debug, Clone, Default, Serialize, Deserialize)]
64pub struct AttachGMBLocationAccountDTO {
65    /// Account name identifier
66    /// Required by the API.
67    pub name: String,
68    /// Display name of the account
69    /// Required by the API.
70    #[serde(rename = "accountName")]
71    pub account_name: String,
72    /// Type of the account
73    /// Required by the API.
74    #[serde(rename = "type")]
75    pub type_: String,
76    /// State of account verification
77    /// Required by the API.
78    #[serde(rename = "verificationState")]
79    pub verification_state: String,
80    /// Vetting state of the account
81    /// Required by the API.
82    #[serde(rename = "vettedState")]
83    pub vetted_state: String,
84}
85
86/// `AttachGMBLocationDTO` from the GoHighLevel OpenAPI spec.
87#[derive(Debug, Clone, Default, Serialize, Deserialize)]
88pub struct AttachGMBLocationDTO {
89    /// Required by the API.
90    pub location: AttachGMBLocationLocationDTO,
91    /// Required by the API.
92    pub account: AttachGMBLocationAccountDTO,
93}
94
95/// `AttachGMBLocationLocationDTO` from the GoHighLevel OpenAPI spec.
96#[derive(Debug, Clone, Default, Serialize, Deserialize)]
97pub struct AttachGMBLocationLocationDTO {
98    /// Location name
99    /// Required by the API.
100    pub name: String,
101    /// Store code
102    #[serde(rename = "storeCode", default, skip_serializing_if = "Option::is_none")]
103    pub store_code: Option<String>,
104    /// Location title
105    /// Required by the API.
106    pub title: String,
107    /// Storefront address details
108    #[serde(
109        rename = "storefrontAddress",
110        default,
111        skip_serializing_if = "Option::is_none"
112    )]
113    pub storefront_address: Option<serde_json::Value>,
114    /// Additional metadata
115    #[serde(default, skip_serializing_if = "Option::is_none")]
116    pub metadata: Option<serde_json::Value>,
117    /// Whether this is a max location
118    #[serde(
119        rename = "maxLocation",
120        default,
121        skip_serializing_if = "Option::is_none"
122    )]
123    pub max_location: Option<bool>,
124    /// Whether the location is verified
125    #[serde(
126        rename = "isVerified",
127        default,
128        skip_serializing_if = "Option::is_none"
129    )]
130    pub is_verified: Option<bool>,
131    /// Whether the location is connected
132    #[serde(
133        rename = "isConnected",
134        default,
135        skip_serializing_if = "Option::is_none"
136    )]
137    pub is_connected: Option<bool>,
138}
139
140/// `AttachIGAccountDTO` from the GoHighLevel OpenAPI spec.
141#[derive(Debug, Clone, Default, Serialize, Deserialize)]
142pub struct AttachIGAccountDTO {
143    /// Original platform-specific account identifier
144    #[serde(rename = "originId", default, skip_serializing_if = "Option::is_none")]
145    pub origin_id: Option<String>,
146    /// Display name of the account
147    #[serde(default, skip_serializing_if = "Option::is_none")]
148    pub name: Option<String>,
149    /// Avatar or profile picture URL
150    #[serde(default, skip_serializing_if = "Option::is_none")]
151    pub avatar: Option<String>,
152    /// Facebook page ID associated with the Instagram account
153    /// Required by the API.
154    #[serde(rename = "pageId")]
155    pub page_id: String,
156}
157
158/// `AttachLinkedinAccountDTO` from the GoHighLevel OpenAPI spec.
159#[derive(Debug, Clone, Default, Serialize, Deserialize)]
160pub struct AttachLinkedinAccountDTO {
161    /// Type of LinkedIn account (must be one of: page, profile)
162    /// Allowed values: `page`, `group`, `profile`, `location`, `business`.
163    /// Required by the API.
164    #[serde(rename = "type")]
165    pub type_: String,
166    /// Original LinkedIn platform identifier
167    /// Required by the API.
168    #[serde(rename = "originId")]
169    pub origin_id: String,
170    /// Name of the LinkedIn page or profile
171    /// Required by the API.
172    pub name: String,
173    /// Avatar or profile picture URL
174    /// Required by the API.
175    pub avatar: String,
176    /// LinkedIn URN (Uniform Resource Name) identifier
177    /// Required by the API.
178    pub urn: String,
179}
180
181/// `AttachPinterestAccountDTO` from the GoHighLevel OpenAPI spec.
182#[derive(Debug, Clone, Default, Serialize, Deserialize)]
183pub struct AttachPinterestAccountDTO {
184    /// Origin ID
185    /// Required by the API.
186    #[serde(rename = "originId")]
187    pub origin_id: String,
188    /// Name
189    #[serde(default, skip_serializing_if = "Option::is_none")]
190    pub name: Option<String>,
191    /// Avatar URL
192    #[serde(default, skip_serializing_if = "Option::is_none")]
193    pub avatar: Option<String>,
194    /// Verification status
195    #[serde(default, skip_serializing_if = "Option::is_none")]
196    pub verified: Option<bool>,
197    /// Username
198    #[serde(default, skip_serializing_if = "Option::is_none")]
199    pub username: Option<String>,
200    /// Website URL
201    #[serde(
202        rename = "websiteUrl",
203        default,
204        skip_serializing_if = "Option::is_none"
205    )]
206    pub website_url: Option<String>,
207    /// Company ID
208    #[serde(rename = "companyId", default, skip_serializing_if = "Option::is_none")]
209    pub company_id: Option<String>,
210    /// Account type must be one of the following values: profile
211    /// Allowed values: `profile`.
212    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
213    pub type_: Option<String>,
214    /// Origin account type
215    #[serde(
216        rename = "originAccountType",
217        default,
218        skip_serializing_if = "Option::is_none"
219    )]
220    pub origin_account_type: Option<String>,
221}
222
223/// `AttachThreadsAccountDTO` from the GoHighLevel OpenAPI spec.
224#[derive(Debug, Clone, Default, Serialize, Deserialize)]
225pub struct AttachThreadsAccountDTO {
226    /// Account type
227    /// Allowed values: `profile`.
228    /// Required by the API.
229    #[serde(rename = "type")]
230    pub type_: String,
231    /// Origin ID
232    /// Required by the API.
233    #[serde(rename = "originId")]
234    pub origin_id: String,
235    /// Account name
236    /// Required by the API.
237    pub name: String,
238    /// Avatar URL
239    /// Required by the API.
240    pub avatar: String,
241}
242
243/// `AttachTiktokAccountDTO` from the GoHighLevel OpenAPI spec.
244#[derive(Debug, Clone, Default, Serialize, Deserialize)]
245pub struct AttachTiktokAccountDTO {
246    /// Type of TikTok account
247    /// Allowed values: `page`, `group`, `profile`, `location`, `business`.
248    /// Required by the API.
249    #[serde(rename = "type")]
250    pub type_: String,
251    /// Original platform-specific account identifier
252    /// Required by the API.
253    #[serde(rename = "originId")]
254    pub origin_id: String,
255    /// Display name of the account
256    /// Required by the API.
257    pub name: String,
258    /// Avatar or profile picture URL
259    /// Required by the API.
260    pub avatar: String,
261    /// Indicates if the TikTok account is verified
262    #[serde(default, skip_serializing_if = "Option::is_none")]
263    pub verified: Option<bool>,
264    /// Username or handle of the TikTok account
265    #[serde(default, skip_serializing_if = "Option::is_none")]
266    pub username: Option<String>,
267}
268
269/// `AttachTwitterAccountDTO` from the GoHighLevel OpenAPI spec.
270#[derive(Debug, Clone, Default, Serialize, Deserialize)]
271pub struct AttachTwitterAccountDTO {
272    /// Original Twitter platform identifier
273    #[serde(rename = "originId", default, skip_serializing_if = "Option::is_none")]
274    pub origin_id: Option<String>,
275    /// Name of the Twitter account
276    #[serde(default, skip_serializing_if = "Option::is_none")]
277    pub name: Option<String>,
278    /// Username or handle of the Twitter account
279    #[serde(default, skip_serializing_if = "Option::is_none")]
280    pub username: Option<String>,
281    /// Avatar or profile picture URL
282    #[serde(default, skip_serializing_if = "Option::is_none")]
283    pub avatar: Option<String>,
284    /// Indicates if the Twitter account is protected (private)
285    #[serde(default, skip_serializing_if = "Option::is_none")]
286    pub protected: Option<bool>,
287    /// Indicates if the Twitter account is verified
288    #[serde(default, skip_serializing_if = "Option::is_none")]
289    pub verified: Option<bool>,
290    /// Company ID
291    #[serde(rename = "companyId", default, skip_serializing_if = "Option::is_none")]
292    pub company_id: Option<String>,
293}
294
295/// `AttachYoutubeAccountResponseDTO` from the GoHighLevel OpenAPI spec.
296#[derive(Debug, Clone, Default, Serialize, Deserialize)]
297pub struct AttachYoutubeAccountResponseDTO {
298    /// Account type
299    /// Allowed values: `profile`.
300    /// Required by the API.
301    #[serde(rename = "type")]
302    pub type_: String,
303    /// Origin ID
304    /// Required by the API.
305    #[serde(rename = "originId")]
306    pub origin_id: String,
307    /// Name
308    /// Required by the API.
309    pub name: String,
310    /// Avatar URL
311    /// Required by the API.
312    pub avatar: String,
313    /// Verification status
314    #[serde(default, skip_serializing_if = "Option::is_none")]
315    pub verified: Option<bool>,
316    /// Username
317    #[serde(default, skip_serializing_if = "Option::is_none")]
318    pub username: Option<String>,
319}
320
321/// `AttachmentDTO` from the GoHighLevel OpenAPI spec.
322#[derive(Debug, Clone, Default, Serialize, Deserialize)]
323pub struct AttachmentDTO {
324    /// URL of the attachment
325    /// Required by the API.
326    pub url: String,
327    /// Type of the attachment
328    /// Allowed values: `image`.
329    /// Required by the API.
330    #[serde(rename = "type")]
331    pub type_: String,
332}
333
334/// `AvailableCategoryDTO` from the GoHighLevel OpenAPI spec.
335#[derive(Debug, Clone, Default, Serialize, Deserialize)]
336pub struct AvailableCategoryDTO {
337    /// Indicates if deleted
338    #[serde(default, skip_serializing_if = "Option::is_none")]
339    pub deleted: Option<bool>,
340    /// Category ID
341    #[serde(rename = "_id", default, skip_serializing_if = "Option::is_none")]
342    pub id: Option<String>,
343    /// Category name
344    #[serde(default, skip_serializing_if = "Option::is_none")]
345    pub name: Option<String>,
346    /// Location ID
347    #[serde(
348        rename = "locationId",
349        default,
350        skip_serializing_if = "Option::is_none"
351    )]
352    pub location_id: Option<String>,
353    /// Primary color (hex)
354    #[serde(
355        rename = "primaryColor",
356        default,
357        skip_serializing_if = "Option::is_none"
358    )]
359    pub primary_color: Option<String>,
360    /// Secondary color (hex)
361    #[serde(
362        rename = "secondaryColor",
363        default,
364        skip_serializing_if = "Option::is_none"
365    )]
366    pub secondary_color: Option<String>,
367    /// Creator user ID
368    #[serde(rename = "createdBy", default, skip_serializing_if = "Option::is_none")]
369    pub created_by: Option<String>,
370    /// Creation timestamp
371    #[serde(rename = "createdAt", default, skip_serializing_if = "Option::is_none")]
372    pub created_at: Option<String>,
373    /// Last update timestamp
374    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
375    pub updated_at: Option<String>,
376    /// Published posts count
377    #[serde(
378        rename = "publishedPostsCount",
379        default,
380        skip_serializing_if = "Option::is_none"
381    )]
382    pub published_posts_count: Option<f64>,
383    /// Status: available (no queue), in_queue (active/paused), or draft
384    /// Allowed values: `available`, `in_queue`, `draft`.
385    #[serde(default, skip_serializing_if = "Option::is_none")]
386    pub status: Option<String>,
387    /// Queue details (present when in_queue or draft)
388    #[serde(
389        rename = "queueDetails",
390        default,
391        skip_serializing_if = "Option::is_none"
392    )]
393    pub queue_details: Option<AvailableCategoryQueueDetailsDTO>,
394}
395
396/// `AvailableCategoryQueueDetailsDTO` from the GoHighLevel OpenAPI spec.
397#[derive(Debug, Clone, Default, Serialize, Deserialize)]
398pub struct AvailableCategoryQueueDetailsDTO {
399    /// Queue ID
400    #[serde(rename = "queueId", default, skip_serializing_if = "Option::is_none")]
401    pub queue_id: Option<String>,
402    /// Prioritize new content over older content
403    #[serde(
404        rename = "prioritizeNewContent",
405        default,
406        skip_serializing_if = "Option::is_none"
407    )]
408    pub prioritize_new_content: Option<bool>,
409    /// Enable posting future content
410    #[serde(
411        rename = "enableFuturePosts",
412        default,
413        skip_serializing_if = "Option::is_none"
414    )]
415    pub enable_future_posts: Option<bool>,
416}
417
418/// `BaseOAuthAccountSchema` from the GoHighLevel OpenAPI spec.
419#[derive(Debug, Clone, Default, Serialize, Deserialize)]
420pub struct BaseOAuthAccountSchema {
421    /// Account Name
422    /// Required by the API.
423    pub name: String,
424    /// Origin ID
425    /// Required by the API.
426    #[serde(rename = "originId")]
427    pub origin_id: String,
428    /// Account Avatar URL
429    #[serde(default, skip_serializing_if = "Option::is_none")]
430    pub avatar: Option<String>,
431}
432
433/// `BlueskyPostSchema` from the GoHighLevel OpenAPI spec.
434#[derive(Debug, Clone, Default, Serialize, Deserialize)]
435pub struct BlueskyPostSchema {
436    /// Shortened links for the post (auto-generated).
437    #[serde(
438        rename = "shortenedLinks",
439        default,
440        skip_serializing_if = "Vec::is_empty"
441    )]
442    pub shortened_links: Vec<String>,
443    /// Bluesky AT Protocol URI of a post to reply to. **Format:**
444    /// `at://did:plc:{user-id}/app.bsky.feed.post/{post-id}` **Use Case:** Create a reply
445    /// thread to an existing Bluesky post.
446    #[serde(rename = "replyTo", default, skip_serializing_if = "Option::is_none")]
447    pub reply_to: Option<String>,
448    /// Bluesky AT Protocol URI of a post to quote. **Format:**
449    /// `at://did:plc:{user-id}/app.bsky.feed.post/{post-id}` **Use Case:** Quote-post another
450    /// user's post with your commentary.
451    #[serde(rename = "quotePost", default, skip_serializing_if = "Option::is_none")]
452    pub quote_post: Option<String>,
453    /// ISO 639-1 language code for the post content. **Examples:** `en` (English), `es`
454    /// (Spanish), `fr` (French), `de` (German)
455    #[serde(default, skip_serializing_if = "Option::is_none")]
456    pub language: Option<String>,
457    /// External URL to embed as a link card in the post.
458    #[serde(
459        rename = "externalLink",
460        default,
461        skip_serializing_if = "Option::is_none"
462    )]
463    pub external_link: Option<String>,
464    /// Title for the external link card. Displayed prominently in the embed.
465    #[serde(
466        rename = "externalLinkTitle",
467        default,
468        skip_serializing_if = "Option::is_none"
469    )]
470    pub external_link_title: Option<String>,
471    /// Description for the external link card. Brief summary displayed below the title.
472    #[serde(
473        rename = "externalLinkDescription",
474        default,
475        skip_serializing_if = "Option::is_none"
476    )]
477    pub external_link_description: Option<String>,
478}
479
480/// `BulkDeletePostSuccessfulResponseSchema` from the GoHighLevel OpenAPI spec.
481#[derive(Debug, Clone, Default, Serialize, Deserialize)]
482pub struct BulkDeletePostSuccessfulResponseSchema {
483    /// Number of posts successfully deleted
484    #[serde(
485        rename = "deletedCount",
486        default,
487        skip_serializing_if = "Option::is_none"
488    )]
489    pub deleted_count: Option<f64>,
490}
491
492/// `BulkDeleteResponseDto` from the GoHighLevel OpenAPI spec.
493#[derive(Debug, Clone, Default, Serialize, Deserialize)]
494pub struct BulkDeleteResponseDto {
495    /// Success or Failure
496    /// Required by the API.
497    pub success: bool,
498    /// Status Code
499    /// Required by the API.
500    #[serde(rename = "statusCode")]
501    pub status_code: f64,
502    /// Message
503    /// Required by the API.
504    pub message: String,
505    /// Message and deleted count
506    /// Required by the API.
507    pub results: serde_json::Value,
508}
509
510/// `CSVDefaultDTO` from the GoHighLevel OpenAPI spec.
511#[derive(Debug, Clone, Default, Serialize, Deserialize)]
512pub struct CSVDefaultDTO {
513    /// User ID
514    /// Required by the API.
515    #[serde(rename = "userId")]
516    pub user_id: String,
517}
518
519/// `CSVErrorResponseDTO` from the GoHighLevel OpenAPI spec.
520#[derive(Debug, Clone, Default, Serialize, Deserialize)]
521pub struct CSVErrorResponseDTO {
522    /// Error code for CSV processing errors
523    /// Allowed values: `CSV_EMPTY_FILE`, `CSV_INVALID_FORMAT`, `CSV_HEADERS_NOT_MATCHING`,
524    /// `CSV_MISSING_HEADERS`, `CSV_MISSING_REQUIRED_ROWS`, `CSV_UNSUPPORTED_EXTENSION`,
525    /// `CSV_NO_VALID_POST`, `CSV_PROCESSING_ERROR`.
526    /// Required by the API.
527    pub code: String,
528    /// Error message describing the CSV validation error
529    /// Required by the API.
530    pub message: String,
531    /// File type detected
532    /// Allowed values: `CSV`, `XLSX`.
533    #[serde(rename = "fileType", default, skip_serializing_if = "Option::is_none")]
534    pub file_type: Option<String>,
535    /// CSV file type
536    /// Allowed values: `basic`, `advance`.
537    #[serde(
538        rename = "csvFileType",
539        default,
540        skip_serializing_if = "Option::is_none"
541    )]
542    pub csv_file_type: Option<String>,
543    /// Comma-separated list of missing headers from the file
544    #[serde(
545        rename = "missingHeaders",
546        default,
547        skip_serializing_if = "Option::is_none"
548    )]
549    pub missing_headers: Option<String>,
550}
551
552/// `CSVFileRequiredBadRequestDTO` from the GoHighLevel OpenAPI spec.
553#[derive(Debug, Clone, Default, Serialize, Deserialize)]
554pub struct CSVFileRequiredBadRequestDTO {
555    /// HTTP Status
556    /// Required by the API.
557    pub status: f64,
558    /// Options
559    #[serde(default, skip_serializing_if = "Option::is_none")]
560    pub options: Option<serde_json::Value>,
561    /// Error message
562    /// Required by the API.
563    pub message: String,
564    /// Exception name
565    /// Required by the API.
566    pub name: String,
567    /// Error type
568    /// Required by the API.
569    pub error: String,
570    /// HTTP Status Code
571    /// Required by the API.
572    #[serde(rename = "statusCode")]
573    pub status_code: f64,
574    /// Trace ID for debugging
575    #[serde(rename = "traceId", default, skip_serializing_if = "Option::is_none")]
576    pub trace_id: Option<String>,
577}
578
579/// `CSVImportSchema` from the GoHighLevel OpenAPI spec.
580#[derive(Debug, Clone, Default, Serialize, Deserialize)]
581pub struct CSVImportSchema {
582    /// CSV Id
583    #[serde(default, skip_serializing_if = "Option::is_none")]
584    pub id: Option<String>,
585    /// Location Id
586    #[serde(
587        rename = "locationId",
588        default,
589        skip_serializing_if = "Option::is_none"
590    )]
591    pub location_id: Option<String>,
592    /// File Name
593    #[serde(rename = "fileName", default, skip_serializing_if = "Option::is_none")]
594    pub file_name: Option<String>,
595    /// Account Ids
596    #[serde(rename = "accountIds", default, skip_serializing_if = "Vec::is_empty")]
597    pub account_ids: Vec<String>,
598    /// File path
599    #[serde(default, skip_serializing_if = "Option::is_none")]
600    pub file: Option<String>,
601    /// CSV import status
602    /// Allowed values: `pending`, `in_progress`, `completed`, `failed`, `in_review`,
603    /// `importing`, `deleted`.
604    #[serde(default, skip_serializing_if = "Option::is_none")]
605    pub status: Option<String>,
606    /// Posts count
607    #[serde(default, skip_serializing_if = "Option::is_none")]
608    pub count: Option<f64>,
609    /// Created By Id
610    #[serde(rename = "createdBy", default, skip_serializing_if = "Option::is_none")]
611    pub created_by: Option<String>,
612    /// Trace Id
613    #[serde(rename = "traceId", default, skip_serializing_if = "Option::is_none")]
614    pub trace_id: Option<String>,
615    /// Origin Id
616    #[serde(rename = "originId", default, skip_serializing_if = "Option::is_none")]
617    pub origin_id: Option<String>,
618    /// Approver Id
619    #[serde(default, skip_serializing_if = "Option::is_none")]
620    pub approver: Option<String>,
621    /// Date Created
622    /// Format: date-time (ISO-8601 string).
623    #[serde(rename = "createdAt", default, skip_serializing_if = "Option::is_none")]
624    pub created_at: Option<String>,
625    /// CSV file type
626    /// Allowed values: `basic`, `advance`.
627    #[serde(
628        rename = "csvFileType",
629        default,
630        skip_serializing_if = "Option::is_none"
631    )]
632    pub csv_file_type: Option<String>,
633    /// Media optimization flag
634    #[serde(
635        rename = "mediaOptimization",
636        default,
637        skip_serializing_if = "Option::is_none"
638    )]
639    pub media_optimization: Option<bool>,
640    /// Apply watermark flag
641    #[serde(
642        rename = "applyWatermark",
643        default,
644        skip_serializing_if = "Option::is_none"
645    )]
646    pub apply_watermark: Option<bool>,
647    /// Channel
648    #[serde(default, skip_serializing_if = "Option::is_none")]
649    pub channel: Option<String>,
650    /// Date Updated
651    /// Format: date-time (ISO-8601 string).
652    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
653    pub updated_at: Option<String>,
654}
655
656/// `CSVMediaResponseSchema` from the GoHighLevel OpenAPI spec.
657#[derive(Debug, Clone, Default, Serialize, Deserialize)]
658pub struct CSVMediaResponseSchema {
659    /// Media Url
660    #[serde(default, skip_serializing_if = "Option::is_none")]
661    pub url: Option<String>,
662    /// Media Type
663    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
664    pub type_: Option<String>,
665    /// Media Size
666    #[serde(default, skip_serializing_if = "Option::is_none")]
667    pub size: Option<f64>,
668    /// Media Width
669    #[serde(default, skip_serializing_if = "Option::is_none")]
670    pub width: Option<f64>,
671    /// Media Height
672    #[serde(default, skip_serializing_if = "Option::is_none")]
673    pub height: Option<f64>,
674    /// Media Aspect Ratio
675    #[serde(
676        rename = "aspectRatio",
677        default,
678        skip_serializing_if = "Option::is_none"
679    )]
680    pub aspect_ratio: Option<f64>,
681    /// Media Aspect Ratio
682    #[serde(default, skip_serializing_if = "Option::is_none")]
683    pub duration: Option<f64>,
684    /// Media format
685    #[serde(default, skip_serializing_if = "Option::is_none")]
686    pub format: Option<String>,
687    /// Video Codec
688    #[serde(
689        rename = "videoCodecName",
690        default,
691        skip_serializing_if = "Option::is_none"
692    )]
693    pub video_codec_name: Option<String>,
694    /// Video Frame Rate
695    #[serde(rename = "frameRate", default, skip_serializing_if = "Option::is_none")]
696    pub frame_rate: Option<f64>,
697    /// Audio Codec
698    #[serde(
699        rename = "audioCodecName",
700        default,
701        skip_serializing_if = "Option::is_none"
702    )]
703    pub audio_codec_name: Option<String>,
704    /// Audio Channel
705    #[serde(
706        rename = "audioChannels",
707        default,
708        skip_serializing_if = "Option::is_none"
709    )]
710    pub audio_channels: Option<f64>,
711    /// Display Aspect Ratio
712    #[serde(
713        rename = "displayAspectRatio",
714        default,
715        skip_serializing_if = "Option::is_none"
716    )]
717    pub display_aspect_ratio: Option<String>,
718    /// List of frames
719    #[serde(default, skip_serializing_if = "Vec::is_empty")]
720    pub frames: Vec<String>,
721    /// Selected Poster
722    #[serde(
723        rename = "selectedPoster",
724        default,
725        skip_serializing_if = "Option::is_none"
726    )]
727    pub selected_poster: Option<f64>,
728    /// Error
729    #[serde(default, skip_serializing_if = "Option::is_none")]
730    pub error: Option<String>,
731    /// Instagram media error. It can be one of the following errors: imageSize, imageType,
732    /// videoType, videoDuration, videoSize, videoAspectRatio, videoWidthHeight, audioCodec,
733    /// audioCodecChannels, videoCodec, videoFrameRate
734    #[serde(
735        rename = "instagramError",
736        default,
737        skip_serializing_if = "Option::is_none"
738    )]
739    pub instagram_error: Option<String>,
740    /// GMB media error. It can be one of the following errors: imageSize, imageDimension,
741    /// imageType
742    #[serde(rename = "gmbError", default, skip_serializing_if = "Option::is_none")]
743    pub gmb_error: Option<String>,
744    /// Facebook media error. It can be one of the following errors: imageSize, imageType,
745    /// videoDuration, videoSize
746    #[serde(
747        rename = "facebookError",
748        default,
749        skip_serializing_if = "Option::is_none"
750    )]
751    pub facebook_error: Option<String>,
752    /// LinkedIn media error. It can be one of the following errors: imageSize, imageType,
753    /// videoType, videoDuration, videoSize
754    #[serde(
755        rename = "linkedinError",
756        default,
757        skip_serializing_if = "Option::is_none"
758    )]
759    pub linkedin_error: Option<String>,
760    /// Twitter media error. It can be one of the following errors: imageSize, videoType,
761    /// videoDuration, videoSize
762    #[serde(
763        rename = "twitterError",
764        default,
765        skip_serializing_if = "Option::is_none"
766    )]
767    pub twitter_error: Option<String>,
768    /// Tiktok media error. It can be one of the following errors: videoType, videoDuration,
769    /// videoSize, videoWidthHeight, videoCodec, videoFrameRate
770    #[serde(
771        rename = "tiktokError",
772        default,
773        skip_serializing_if = "Option::is_none"
774    )]
775    pub tiktok_error: Option<String>,
776    /// Tikok Business media error. It can be one of the following errors: videoType,
777    /// videoDuration, videoSize, videoWidthHeight, videoCodec, videoFrameRate
778    #[serde(
779        rename = "tiktokBusinessError",
780        default,
781        skip_serializing_if = "Option::is_none"
782    )]
783    pub tiktok_business_error: Option<String>,
784    /// Media error. It can be one of the following values: imageSize, imageWidth
785    #[serde(
786        rename = "invalidError",
787        default,
788        skip_serializing_if = "Option::is_none"
789    )]
790    pub invalid_error: Option<String>,
791}
792
793/// `CSVPostSchema` from the GoHighLevel OpenAPI spec.
794#[derive(Debug, Clone, Default, Serialize, Deserialize)]
795pub struct CSVPostSchema {
796    /// Account Ids
797    #[serde(rename = "accountIds", default, skip_serializing_if = "Vec::is_empty")]
798    pub account_ids: Vec<String>,
799    /// OG Tag
800    #[serde(default, skip_serializing_if = "Option::is_none")]
801    pub link: Option<IOgTagsSchema>,
802    /// Post Media List
803    #[serde(default, skip_serializing_if = "Vec::is_empty")]
804    pub medias: Vec<CSVMediaResponseSchema>,
805    /// Schedule date for the post in ISO format
806    #[serde(
807        rename = "scheduleDate",
808        default,
809        skip_serializing_if = "Option::is_none"
810    )]
811    pub schedule_date: Option<String>,
812    /// Post content/summary
813    #[serde(default, skip_serializing_if = "Option::is_none")]
814    pub summary: Option<String>,
815    /// Follow-up comment to be posted immediately after the main post is published. **Supported
816    /// Platforms:** Facebook, Instagram, LinkedIn, YouTube **NOT Supported:** TikTok, Google My
817    /// Business (GMB), Pinterest **Use Case:** Great for adding hashtags, additional context,
818    /// or engagement prompts without cluttering the main post. - Follow-up comment is
819    /// automatically trimmed to platform limits **Reference:** [Platform Limitations
820    /// Guide](https://help.leadconnectorhq.com/support/solutions/articles/48001240003-social-planner-image-video-content-and-api-limitations)
821    #[serde(
822        rename = "followUpComment",
823        default,
824        skip_serializing_if = "Option::is_none"
825    )]
826    pub follow_up_comment: Option<String>,
827    /// Post type - post, story, or reel
828    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
829    pub type_: Option<String>,
830    /// Tiktok Post Details
831    #[serde(
832        rename = "tiktokPostDetails",
833        default,
834        skip_serializing_if = "Option::is_none"
835    )]
836    pub tiktok_post_details: Option<TiktokPostSchema>,
837    /// GMB Post Details
838    #[serde(
839        rename = "gmbPostDetails",
840        default,
841        skip_serializing_if = "Option::is_none"
842    )]
843    pub gmb_post_details: Option<GMBPostSchema>,
844    /// Error Description
845    #[serde(
846        rename = "errorMessage",
847        default,
848        skip_serializing_if = "Option::is_none"
849    )]
850    pub error_message: Option<String>,
851    /// CSV file type
852    /// Allowed values: `basic`, `advance`.
853    #[serde(
854        rename = "csvFileType",
855        default,
856        skip_serializing_if = "Option::is_none"
857    )]
858    pub csv_file_type: Option<String>,
859    /// Media optimization flag
860    #[serde(
861        rename = "mediaOptimization",
862        default,
863        skip_serializing_if = "Option::is_none"
864    )]
865    pub media_optimization: Option<bool>,
866    /// Apply watermark flag
867    #[serde(
868        rename = "applyWatermark",
869        default,
870        skip_serializing_if = "Option::is_none"
871    )]
872    pub apply_watermark: Option<bool>,
873    /// Post status
874    /// Allowed values: `pending`, `accepted`, `rejected`, `deleted`.
875    #[serde(default, skip_serializing_if = "Option::is_none")]
876    pub status: Option<String>,
877    /// Date Updated
878    /// Format: date-time (ISO-8601 string).
879    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
880    pub updated_at: Option<String>,
881}
882
883/// `CSVResponseSchema` from the GoHighLevel OpenAPI spec.
884#[derive(Debug, Clone, Default, Serialize, Deserialize)]
885pub struct CSVResponseSchema {
886    /// CSV Data
887    #[serde(default, skip_serializing_if = "Option::is_none")]
888    pub csv: Option<CsvResponse>,
889}
890
891/// `CalendarListDTO` from the GoHighLevel OpenAPI spec.
892#[derive(Debug, Clone, Default, Serialize, Deserialize)]
893pub struct CalendarListDTO {
894    /// Location ID
895    /// Required by the API.
896    #[serde(rename = "locationId")]
897    pub location_id: String,
898    /// Start Date in ISO format
899    /// Required by the API.
900    #[serde(rename = "startDate")]
901    pub start_date: String,
902    /// End Date in ISO format
903    /// Required by the API.
904    #[serde(rename = "endDate")]
905    pub end_date: String,
906    /// Category Id
907    #[serde(rename = "categoryIds", default, skip_serializing_if = "Vec::is_empty")]
908    pub category_ids: Vec<String>,
909    /// Filter by Account IDs. If not provided or empty, returns all posts.
910    #[serde(rename = "accountIds", default, skip_serializing_if = "Vec::is_empty")]
911    pub account_ids: Vec<String>,
912}
913
914/// `CategoryInfoDTO` from the GoHighLevel OpenAPI spec.
915#[derive(Debug, Clone, Default, Serialize, Deserialize)]
916pub struct CategoryInfoDTO {
917    /// Category ID
918    #[serde(rename = "_id", default, skip_serializing_if = "Option::is_none")]
919    pub id: Option<String>,
920    /// Name of the category
921    #[serde(default, skip_serializing_if = "Option::is_none")]
922    pub name: Option<String>,
923    /// Primary color of the category
924    #[serde(
925        rename = "primaryColor",
926        default,
927        skip_serializing_if = "Option::is_none"
928    )]
929    pub primary_color: Option<String>,
930    /// Secondary color of the category
931    #[serde(
932        rename = "secondaryColor",
933        default,
934        skip_serializing_if = "Option::is_none"
935    )]
936    pub secondary_color: Option<String>,
937    /// Indicates if the category is deleted
938    #[serde(default, skip_serializing_if = "Option::is_none")]
939    pub deleted: Option<bool>,
940    /// Location ID
941    #[serde(
942        rename = "locationId",
943        default,
944        skip_serializing_if = "Option::is_none"
945    )]
946    pub location_id: Option<String>,
947    /// ID of the user who created the category
948    #[serde(rename = "createdBy", default, skip_serializing_if = "Option::is_none")]
949    pub created_by: Option<String>,
950    /// Creation timestamp
951    #[serde(rename = "createdAt", default, skip_serializing_if = "Option::is_none")]
952    pub created_at: Option<String>,
953    /// Last update timestamp
954    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
955    pub updated_at: Option<String>,
956}
957
958/// `CategoryQueueDTO` from the GoHighLevel OpenAPI spec.
959#[derive(Debug, Clone, Default, Serialize, Deserialize)]
960pub struct CategoryQueueDTO {
961    /// Queue ID
962    #[serde(rename = "_id", default, skip_serializing_if = "Option::is_none")]
963    pub id: Option<String>,
964    /// Location ID
965    #[serde(
966        rename = "locationId",
967        default,
968        skip_serializing_if = "Option::is_none"
969    )]
970    pub location_id: Option<String>,
971    /// Category ID
972    #[serde(
973        rename = "categoryId",
974        default,
975        skip_serializing_if = "Option::is_none"
976    )]
977    pub category_id: Option<String>,
978    /// Time slots for scheduling posts
979    #[serde(rename = "timeSlots", default, skip_serializing_if = "Vec::is_empty")]
980    pub time_slots: Vec<TimeSlotDTO>,
981    /// Enable posting future content
982    #[serde(
983        rename = "enableFuturePosts",
984        default,
985        skip_serializing_if = "Option::is_none"
986    )]
987    pub enable_future_posts: Option<bool>,
988    /// Prioritize new content over older content
989    #[serde(
990        rename = "prioritizeNewContent",
991        default,
992        skip_serializing_if = "Option::is_none"
993    )]
994    pub prioritize_new_content: Option<bool>,
995    /// Current order number in the queue
996    #[serde(
997        rename = "currentOrder",
998        default,
999        skip_serializing_if = "Option::is_none"
1000    )]
1001    pub current_order: Option<f64>,
1002    /// Status of the queue. Possible values: active, paused, draft.
1003    /// Allowed values: `active`, `paused`, `draft`.
1004    #[serde(default, skip_serializing_if = "Option::is_none")]
1005    pub status: Option<String>,
1006    /// Start date of the queue
1007    /// Format: date-time (ISO-8601 string).
1008    #[serde(rename = "startDate", default, skip_serializing_if = "Option::is_none")]
1009    pub start_date: Option<String>,
1010    /// Dates/times to skip posting
1011    /// Format: date-time (ISO-8601 string).
1012    #[serde(
1013        rename = "skipDateTime",
1014        default,
1015        skip_serializing_if = "Vec::is_empty"
1016    )]
1017    pub skip_date_time: Vec<String>,
1018    /// ID of the currently scheduled post
1019    #[serde(
1020        rename = "currentPostId",
1021        default,
1022        skip_serializing_if = "Option::is_none"
1023    )]
1024    pub current_post_id: Option<String>,
1025    /// Total number of posts in the queue
1026    #[serde(
1027        rename = "totalPosts",
1028        default,
1029        skip_serializing_if = "Option::is_none"
1030    )]
1031    pub total_posts: Option<f64>,
1032    /// Timestamp of the last scheduled post
1033    /// Format: date-time (ISO-8601 string).
1034    #[serde(
1035        rename = "lastScheduledTime",
1036        default,
1037        skip_serializing_if = "Option::is_none"
1038    )]
1039    pub last_scheduled_time: Option<String>,
1040    /// ID of the user who created the queue
1041    #[serde(rename = "createdBy", default, skip_serializing_if = "Option::is_none")]
1042    pub created_by: Option<String>,
1043    /// Creation timestamp
1044    /// Format: date-time (ISO-8601 string).
1045    #[serde(rename = "createdAt", default, skip_serializing_if = "Option::is_none")]
1046    pub created_at: Option<String>,
1047    /// Last update timestamp
1048    /// Format: date-time (ISO-8601 string).
1049    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
1050    pub updated_at: Option<String>,
1051}
1052
1053/// `CategoryQueueWithCategoryDTO` from the GoHighLevel OpenAPI spec.
1054#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1055pub struct CategoryQueueWithCategoryDTO {
1056    /// Queue ID
1057    #[serde(rename = "_id", default, skip_serializing_if = "Option::is_none")]
1058    pub id: Option<String>,
1059    /// Location ID
1060    #[serde(
1061        rename = "locationId",
1062        default,
1063        skip_serializing_if = "Option::is_none"
1064    )]
1065    pub location_id: Option<String>,
1066    /// Category ID
1067    #[serde(
1068        rename = "categoryId",
1069        default,
1070        skip_serializing_if = "Option::is_none"
1071    )]
1072    pub category_id: Option<String>,
1073    /// Time slots for scheduling posts
1074    #[serde(rename = "timeSlots", default, skip_serializing_if = "Vec::is_empty")]
1075    pub time_slots: Vec<TimeSlotDTO>,
1076    /// Enable posting future content
1077    #[serde(
1078        rename = "enableFuturePosts",
1079        default,
1080        skip_serializing_if = "Option::is_none"
1081    )]
1082    pub enable_future_posts: Option<bool>,
1083    /// Prioritize new content over older content
1084    #[serde(
1085        rename = "prioritizeNewContent",
1086        default,
1087        skip_serializing_if = "Option::is_none"
1088    )]
1089    pub prioritize_new_content: Option<bool>,
1090    /// Current order number in the queue
1091    #[serde(
1092        rename = "currentOrder",
1093        default,
1094        skip_serializing_if = "Option::is_none"
1095    )]
1096    pub current_order: Option<f64>,
1097    /// Status of the queue. Possible values: active, paused, draft.
1098    /// Allowed values: `active`, `paused`, `draft`.
1099    #[serde(default, skip_serializing_if = "Option::is_none")]
1100    pub status: Option<String>,
1101    /// Start date of the queue
1102    /// Format: date-time (ISO-8601 string).
1103    #[serde(rename = "startDate", default, skip_serializing_if = "Option::is_none")]
1104    pub start_date: Option<String>,
1105    /// Dates/times to skip posting
1106    /// Format: date-time (ISO-8601 string).
1107    #[serde(
1108        rename = "skipDateTime",
1109        default,
1110        skip_serializing_if = "Vec::is_empty"
1111    )]
1112    pub skip_date_time: Vec<String>,
1113    /// ID of the currently scheduled post
1114    #[serde(
1115        rename = "currentPostId",
1116        default,
1117        skip_serializing_if = "Option::is_none"
1118    )]
1119    pub current_post_id: Option<String>,
1120    /// Total number of posts in the queue
1121    #[serde(
1122        rename = "totalPosts",
1123        default,
1124        skip_serializing_if = "Option::is_none"
1125    )]
1126    pub total_posts: Option<f64>,
1127    /// Timestamp of the last scheduled post
1128    /// Format: date-time (ISO-8601 string).
1129    #[serde(
1130        rename = "lastScheduledTime",
1131        default,
1132        skip_serializing_if = "Option::is_none"
1133    )]
1134    pub last_scheduled_time: Option<String>,
1135    /// ID of the user who created the queue
1136    #[serde(rename = "createdBy", default, skip_serializing_if = "Option::is_none")]
1137    pub created_by: Option<String>,
1138    /// Creation timestamp
1139    /// Format: date-time (ISO-8601 string).
1140    #[serde(rename = "createdAt", default, skip_serializing_if = "Option::is_none")]
1141    pub created_at: Option<String>,
1142    /// Last update timestamp
1143    /// Format: date-time (ISO-8601 string).
1144    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
1145    pub updated_at: Option<String>,
1146    /// The category associated with the queue.
1147    #[serde(default, skip_serializing_if = "Option::is_none")]
1148    pub category: Option<CategoryInfoDTO>,
1149}
1150
1151/// `CategorySchema` from the GoHighLevel OpenAPI spec.
1152#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1153pub struct CategorySchema {
1154    /// Category Name
1155    #[serde(default, skip_serializing_if = "Option::is_none")]
1156    pub name: Option<String>,
1157    /// Color For Category
1158    #[serde(
1159        rename = "primaryColor",
1160        default,
1161        skip_serializing_if = "Option::is_none"
1162    )]
1163    pub primary_color: Option<String>,
1164    /// Secondary Color
1165    #[serde(
1166        rename = "secondaryColor",
1167        default,
1168        skip_serializing_if = "Option::is_none"
1169    )]
1170    pub secondary_color: Option<String>,
1171    /// Location ID
1172    #[serde(
1173        rename = "locationId",
1174        default,
1175        skip_serializing_if = "Option::is_none"
1176    )]
1177    pub location_id: Option<String>,
1178    /// ID
1179    #[serde(rename = "_id", default, skip_serializing_if = "Option::is_none")]
1180    pub id: Option<String>,
1181    /// Created By User
1182    #[serde(rename = "createdBy", default, skip_serializing_if = "Option::is_none")]
1183    pub created_by: Option<String>,
1184    /// Deleted Value
1185    /// Required by the API.
1186    pub deleted: bool,
1187    /// Format: date-time (ISO-8601 string).
1188    #[serde(rename = "createdAt", default, skip_serializing_if = "Option::is_none")]
1189    pub created_at: Option<String>,
1190    /// Format: date-time (ISO-8601 string).
1191    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
1192    pub updated_at: Option<String>,
1193}
1194
1195/// `CloneQueueItemDTO` from the GoHighLevel OpenAPI spec.
1196#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1197pub struct CloneQueueItemDTO {
1198    /// Location ID
1199    /// Required by the API.
1200    #[serde(rename = "locationId")]
1201    pub location_id: String,
1202    /// Edit session ID
1203    /// Required by the API.
1204    #[serde(rename = "sessionId")]
1205    pub session_id: String,
1206    /// Order for the cloned item (typically between source and next item)
1207    /// Required by the API.
1208    pub order: f64,
1209}
1210
1211/// `CloneQueueItemResponseDTO` from the GoHighLevel OpenAPI spec.
1212#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1213pub struct CloneQueueItemResponseDTO {
1214    /// A message indicating the result of the operation.
1215    #[serde(default, skip_serializing_if = "Option::is_none")]
1216    pub message: Option<String>,
1217    /// The cloned queue item
1218    #[serde(rename = "queueItem", default, skip_serializing_if = "Option::is_none")]
1219    pub queue_item: Option<CreatedQueueItemWithVariationsDTO>,
1220}
1221
1222/// `CommentAttachmentDTO` from the GoHighLevel OpenAPI spec.
1223#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1224pub struct CommentAttachmentDTO {
1225    /// Attachment MIME type or platform-specific type
1226    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
1227    pub type_: Option<String>,
1228    /// Attachment URL
1229    #[serde(default, skip_serializing_if = "Option::is_none")]
1230    pub url: Option<String>,
1231    /// Thumbnail URL
1232    #[serde(default, skip_serializing_if = "Option::is_none")]
1233    pub thumbnail: Option<String>,
1234    /// Video URL (when attachment is a video)
1235    #[serde(rename = "videoUrl", default, skip_serializing_if = "Option::is_none")]
1236    pub video_url: Option<String>,
1237}
1238
1239/// `CommentAuthorDTO` from the GoHighLevel OpenAPI spec.
1240#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1241pub struct CommentAuthorDTO {
1242    /// Platform author ID
1243    #[serde(default, skip_serializing_if = "Option::is_none")]
1244    pub id: Option<String>,
1245    /// Author display name
1246    #[serde(default, skip_serializing_if = "Option::is_none")]
1247    pub name: Option<String>,
1248    /// Author profile picture URL
1249    #[serde(
1250        rename = "profilePic",
1251        default,
1252        skip_serializing_if = "Option::is_none"
1253    )]
1254    pub profile_pic: Option<String>,
1255}
1256
1257/// `CommentItemDTO` from the GoHighLevel OpenAPI spec.
1258#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1259pub struct CommentItemDTO {
1260    /// Highlevel comment ID
1261    /// Required by the API.
1262    #[serde(rename = "_id")]
1263    pub id: String,
1264    /// Platform the comment was posted on
1265    /// Required by the API.
1266    pub platform: String,
1267    /// Native platform comment ID
1268    #[serde(
1269        rename = "platformCommentId",
1270        default,
1271        skip_serializing_if = "Option::is_none"
1272    )]
1273    pub platform_comment_id: Option<String>,
1274    /// Native platform parent ID (the post or comment this is a reply to)
1275    #[serde(
1276        rename = "platformParentId",
1277        default,
1278        skip_serializing_if = "Option::is_none"
1279    )]
1280    pub platform_parent_id: Option<String>,
1281    /// Native platform post ID
1282    #[serde(
1283        rename = "platformPostId",
1284        default,
1285        skip_serializing_if = "Option::is_none"
1286    )]
1287    pub platform_post_id: Option<String>,
1288    /// Highlevel post ID
1289    /// Required by the API.
1290    #[serde(rename = "postId")]
1291    pub post_id: String,
1292    /// Connected account / page ID on the native platform
1293    /// Required by the API.
1294    #[serde(rename = "originId")]
1295    pub origin_id: String,
1296    /// True if this comment is a top-level comment on the post; false if it is a reply to
1297    /// another comment
1298    #[serde(
1299        rename = "isParentThread",
1300        default,
1301        skip_serializing_if = "Option::is_none"
1302    )]
1303    pub is_parent_thread: Option<bool>,
1304    /// True if this record represents the root post (not a comment)
1305    /// Required by the API.
1306    #[serde(rename = "isPost")]
1307    pub is_post: bool,
1308    /// Comment content. May be empty or missing for attachment-only comments.
1309    #[serde(default, skip_serializing_if = "Option::is_none")]
1310    pub content: Option<String>,
1311    /// Attachments on the comment
1312    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1313    pub attachments: Vec<CommentAttachmentDTO>,
1314    /// Author of the comment. May be partial or missing for some sync paths.
1315    #[serde(default, skip_serializing_if = "Option::is_none")]
1316    pub author: Option<CommentAuthorDTO>,
1317    /// Comment depth (0 = post, 1 = comment, 2 = reply)
1318    #[serde(default, skip_serializing_if = "Option::is_none")]
1319    pub level: Option<f64>,
1320    /// Number of likes on the comment
1321    /// Required by the API.
1322    #[serde(rename = "likeCount")]
1323    pub like_count: f64,
1324    /// Number of reactions on the comment
1325    /// Required by the API.
1326    #[serde(rename = "reactionCount")]
1327    pub reaction_count: f64,
1328    /// Number of replies to the comment
1329    /// Required by the API.
1330    #[serde(rename = "replyCount")]
1331    pub reply_count: f64,
1332    /// Number of shares of the comment
1333    /// Required by the API.
1334    #[serde(rename = "shareCount")]
1335    pub share_count: f64,
1336    /// Number of reposts of the comment (platform-specific)
1337    /// Required by the API.
1338    #[serde(rename = "repostCount")]
1339    pub repost_count: f64,
1340    /// Number of quote posts (platform-specific)
1341    /// Required by the API.
1342    #[serde(rename = "quoteCount")]
1343    pub quote_count: f64,
1344    /// Direct link to view the comment on the native platform
1345    #[serde(
1346        rename = "previewLink",
1347        default,
1348        skip_serializing_if = "Option::is_none"
1349    )]
1350    pub preview_link: Option<String>,
1351    /// Whether the comment has been read
1352    /// Required by the API.
1353    #[serde(rename = "isRead")]
1354    pub is_read: bool,
1355    /// Whether the comment was deleted
1356    /// Required by the API.
1357    #[serde(rename = "isDeleted")]
1358    pub is_deleted: bool,
1359    /// Whether the comment was edited
1360    /// Required by the API.
1361    #[serde(rename = "isEdited")]
1362    pub is_edited: bool,
1363    /// Time the comment was published on the native platform. May be missing for legacy or
1364    /// webhook-synced records.
1365    /// Format: date-time (ISO-8601 string).
1366    #[serde(
1367        rename = "publishedAt",
1368        default,
1369        skip_serializing_if = "Option::is_none"
1370    )]
1371    pub published_at: Option<String>,
1372    /// Time the comment record was created in Highlevel
1373    /// Format: date-time (ISO-8601 string).
1374    #[serde(rename = "createdAt", default, skip_serializing_if = "Option::is_none")]
1375    pub created_at: Option<String>,
1376    /// Time the comment record was last updated in Highlevel
1377    /// Format: date-time (ISO-8601 string).
1378    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
1379    pub updated_at: Option<String>,
1380}
1381
1382/// `CommentsCreateBodyDTO` from the GoHighLevel OpenAPI spec.
1383#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1384pub struct CommentsCreateBodyDTO {
1385    /// For top-level comments (`isParentThread: true`): pass the post ID returned by the posts
1386    /// API. For replies (`isParentThread: false`): pass the parent comment ID returned by the
1387    /// list-comments API. In both cases this must be a valid 24-character Highlevel ID — not
1388    /// the native platform ID.
1389    /// Required by the API.
1390    #[serde(rename = "parentId")]
1391    pub parent_id: String,
1392    /// Set `true` to create a top-level comment on a post (parentId = post ID). Set `false` to
1393    /// create a reply to an existing comment (parentId = comment ID).
1394    /// Required by the API.
1395    #[serde(rename = "isParentThread")]
1396    pub is_parent_thread: bool,
1397    /// Content of the comment. Per-platform max length: Facebook 8000, Instagram 2200, Linkedin
1398    /// 3000, Community 8000, Tiktok 150, Bluesky 300, Youtube 10000, Threads 500.
1399    /// Required by the API.
1400    pub content: String,
1401    /// Attachments for the comment (max 1 image). **Supported on:** Facebook only. **Not
1402    /// supported on:** Instagram, LinkedIn, TikTok, Bluesky, Community — the field is accepted
1403    /// by the API but the attachment will not appear on the comment. (Community processes the
1404    /// field server-side, but external URLs are not rendered due to its bucket restriction.)
1405    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1406    pub attachments: Vec<AttachmentDTO>,
1407    /// Mentions for the comment. **Supported on:** Facebook, LinkedIn, Community. **Ignored
1408    /// on:** Instagram, TikTok, Bluesky — the field is accepted but mentions are not rendered
1409    /// on these platforms.
1410    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1411    pub mentions: Vec<MentionsDTO>,
1412    /// When `true`, all members of the Community group receive a push/in-app notification about
1413    /// this comment — equivalent to an `@everyone` broadcast. **Supported on:** Community only.
1414    /// Ignored on all other platforms (the field is accepted but no notification is sent).
1415    /// **Independent of the `mentions` array** — you do not need to add an `@everyone` entry to
1416    /// `mentions` for this to take effect. Conversely, putting the literal text `@everyone` in
1417    /// `content` does **not** by itself trigger notifications; only this flag does. Defaults to
1418    /// `false` (no broadcast notification). Use `true` only when the comment is genuinely
1419    /// intended for every member of the group — overuse may cause members to mute the group.
1420    #[serde(
1421        rename = "notifyAllGroupMembers",
1422        default,
1423        skip_serializing_if = "Option::is_none"
1424    )]
1425    pub notify_all_group_members: Option<bool>,
1426}
1427
1428/// `CommentsCreateResponseDTO` from the GoHighLevel OpenAPI spec.
1429#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1430pub struct CommentsCreateResponseDTO {
1431    /// Success or Failure
1432    /// Required by the API.
1433    pub success: bool,
1434    /// Status Code
1435    /// Required by the API.
1436    #[serde(rename = "statusCode")]
1437    pub status_code: f64,
1438    /// Message
1439    /// Required by the API.
1440    pub message: String,
1441    /// The created comment
1442    /// Required by the API.
1443    pub results: CommentItemDTO,
1444}
1445
1446/// `CommentsGetListBodyDTO` from the GoHighLevel OpenAPI spec.
1447#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1448pub struct CommentsGetListBodyDTO {
1449    /// Start of the published-date window (ISO 8601). If provided, `toDate` is also required,
1450    /// and `fromDate` must be ≤ `toDate`. Omit both to disable date filtering.
1451    #[serde(rename = "fromDate", default, skip_serializing_if = "Option::is_none")]
1452    pub from_date: Option<String>,
1453    /// End of the published-date window (ISO 8601). If provided, `fromDate` is also required.
1454    #[serde(rename = "toDate", default, skip_serializing_if = "Option::is_none")]
1455    pub to_date: Option<String>,
1456    /// Origin IDs of connected accounts to filter by
1457    /// Required by the API.
1458    #[serde(rename = "originIds", default, skip_serializing_if = "Vec::is_empty")]
1459    pub origin_ids: Vec<String>,
1460    /// Sort by top comments or latest comments
1461    /// Allowed values: `top`, `latest`.
1462    #[serde(rename = "sortBy", default, skip_serializing_if = "Option::is_none")]
1463    pub sort_by: Option<String>,
1464    /// Search
1465    #[serde(default, skip_serializing_if = "Option::is_none")]
1466    pub search: Option<String>,
1467    /// Pagination offset — number of comments to skip (zero-based). Must be ≥ 0.
1468    #[serde(default, skip_serializing_if = "Option::is_none")]
1469    pub skip: Option<f64>,
1470    /// Pagination page size — number of comments to return. Must be between 1 and 100.
1471    #[serde(default, skip_serializing_if = "Option::is_none")]
1472    pub limit: Option<f64>,
1473    /// Parent ID — pass the Highlevel post ID (for replies under a specific post) or the
1474    /// Highlevel comment ID (for replies under a specific comment). Omit to list all top-level
1475    /// comments for the location filtered by `originIds`. Must be a valid 24-character
1476    /// Highlevel ID, not the native platform ID.
1477    #[serde(rename = "parentId", default, skip_serializing_if = "Option::is_none")]
1478    pub parent_id: Option<String>,
1479}
1480
1481/// `CommentsGetListResponseDTO` from the GoHighLevel OpenAPI spec.
1482#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1483pub struct CommentsGetListResponseDTO {
1484    /// Success or Failure
1485    /// Required by the API.
1486    pub success: bool,
1487    /// Status Code
1488    /// Required by the API.
1489    #[serde(rename = "statusCode")]
1490    pub status_code: f64,
1491    /// Message
1492    /// Required by the API.
1493    pub message: String,
1494    /// Comments and pagination metadata
1495    /// Required by the API.
1496    pub results: CommentsGetListResultsDTO,
1497}
1498
1499/// `CommentsGetListResultsDTO` from the GoHighLevel OpenAPI spec.
1500#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1501pub struct CommentsGetListResultsDTO {
1502    /// List of comments
1503    /// Required by the API.
1504    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1505    pub comments: Vec<CommentItemDTO>,
1506    /// Pagination metadata
1507    /// Required by the API.
1508    pub meta: CommentsListMetaDTO,
1509}
1510
1511/// `CommentsLikeResponseDTO` from the GoHighLevel OpenAPI spec.
1512#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1513pub struct CommentsLikeResponseDTO {
1514    /// Success or Failure
1515    /// Required by the API.
1516    pub success: bool,
1517    /// Status Code
1518    /// Required by the API.
1519    #[serde(rename = "statusCode")]
1520    pub status_code: f64,
1521    /// Message
1522    /// Required by the API.
1523    pub message: String,
1524}
1525
1526/// `CommentsListMetaDTO` from the GoHighLevel OpenAPI spec.
1527#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1528pub struct CommentsListMetaDTO {
1529    /// Total comments matching the query
1530    /// Required by the API.
1531    pub total: f64,
1532    /// Total unread comments matching the query
1533    #[serde(
1534        rename = "totalUnread",
1535        default,
1536        skip_serializing_if = "Option::is_none"
1537    )]
1538    pub total_unread: Option<f64>,
1539    /// Pagination skip
1540    /// Required by the API.
1541    pub skip: f64,
1542    /// Pagination limit
1543    /// Required by the API.
1544    pub limit: f64,
1545    /// True if more pages exist beyond this batch
1546    /// Required by the API.
1547    #[serde(rename = "hasMore")]
1548    pub has_more: bool,
1549}
1550
1551/// `CreateCategoryQueueDTO` from the GoHighLevel OpenAPI spec.
1552#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1553pub struct CreateCategoryQueueDTO {
1554    /// Location ID
1555    /// Required by the API.
1556    #[serde(rename = "locationId")]
1557    pub location_id: String,
1558    /// Category ID
1559    /// Required by the API.
1560    #[serde(rename = "categoryId")]
1561    pub category_id: String,
1562    /// Required by the API.
1563    #[serde(rename = "timeSlots", default, skip_serializing_if = "Vec::is_empty")]
1564    pub time_slots: Vec<TimeSlotDTO>,
1565    /// Enable Future Posts. Defaults to false.
1566    #[serde(
1567        rename = "enableFuturePosts",
1568        default,
1569        skip_serializing_if = "Option::is_none"
1570    )]
1571    pub enable_future_posts: Option<bool>,
1572    /// Prioritize New Content. Defaults to false.
1573    #[serde(
1574        rename = "prioritizeNewContent",
1575        default,
1576        skip_serializing_if = "Option::is_none"
1577    )]
1578    pub prioritize_new_content: Option<bool>,
1579    /// User id
1580    /// Required by the API.
1581    #[serde(rename = "userId")]
1582    pub user_id: String,
1583}
1584
1585/// `CreateCategoryQueueResponseDTO` from the GoHighLevel OpenAPI spec.
1586#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1587pub struct CreateCategoryQueueResponseDTO {
1588    /// A message indicating the result of the operation.
1589    #[serde(default, skip_serializing_if = "Option::is_none")]
1590    pub message: Option<String>,
1591    /// The newly created queue.
1592    #[serde(default, skip_serializing_if = "Option::is_none")]
1593    pub queue: Option<CreatedCategoryQueueDTO>,
1594}
1595
1596/// `CreatePostDTO` from the GoHighLevel OpenAPI spec.
1597#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1598pub struct CreatePostDTO {
1599    /// Account IDs for the post. Each account ID identifies a connected social media account.
1600    /// **Get IDs from:** [Get Accounts API](./get-account) — use the `id` field from each
1601    /// account. **Validations:** - Required for non-draft posts - Must be a non-empty array -
1602    /// All account IDs must be valid connected accounts for the location
1603    /// Required by the API.
1604    #[serde(rename = "accountIds", default, skip_serializing_if = "Vec::is_empty")]
1605    pub account_ids: Vec<String>,
1606    /// Post content/caption text. Character limits vary by platform. **Custom Values &
1607    /// Hashtags:** - You can include custom values/variables in the content (e.g.,
1608    /// `{{contact.name}}`) - Hashtags: Use `#hashtag` format. Instagram allows max 30 hashtags.
1609    /// - Mentions: Use platform-specific mention format (see `mentions` field for structured
1610    /// mentions) **Validations:** - Instagram/Facebook Story: Caption NOT supported for direct
1611    /// publishing - Facebook, LinkedIn, GMB: Content OR media is required (at least one) -
1612    /// Content is automatically trimmed to platform limits **Reference:** [Platform Limitations
1613    /// Guide](https://help.leadconnectorhq.com/support/solutions/articles/48001240003-social-planner-image-video-content-and-api-limitations)
1614    #[serde(default, skip_serializing_if = "Option::is_none")]
1615    pub summary: Option<String>,
1616    /// Post Media Data The limitations of media as per the platforms is provided through the
1617    /// reference link in API description
1618    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1619    pub media: Vec<PostMediaSchema>,
1620    /// Post status indicating the current state of the post. **Available Status Values:** -
1621    /// `draft` - Post saved as draft, not yet ready for publishing - `scheduled` - Post
1622    /// scheduled for future publishing (requires `scheduleDate`) - `in_review` - Post pending
1623    /// approval (requires `scheduleDate` and `postApprovalDetails`) - `published` - Post has
1624    /// been published - `in_progress` - Post is currently being processed - `pending` - Post is
1625    /// awaiting platform processing for Instagram media container creation - `failed` - Post
1626    /// publishing failed - `notification_sent` - Story notification sent (for manual story
1627    /// posting) - `deleted` - Post has been deleted **Validations:** - `scheduled` or
1628    /// `in_review` status requires `scheduleDate` to be set - Draft posts skip most validations
1629    /// (accountIds, media requirements)
1630    /// Allowed values: `draft`, `scheduled`, `in_review`, `published`, `in_progress`,
1631    /// `pending`, `failed`, `notification_sent`, `deleted`.
1632    #[serde(default, skip_serializing_if = "Option::is_none")]
1633    pub status: Option<String>,
1634    /// Schedule Date
1635    #[serde(
1636        rename = "scheduleDate",
1637        default,
1638        skip_serializing_if = "Option::is_none"
1639    )]
1640    pub schedule_date: Option<String>,
1641    /// Selected Best Time slot for scheduling
1642    #[serde(
1643        rename = "selectedBestTime",
1644        default,
1645        skip_serializing_if = "Option::is_none"
1646    )]
1647    pub selected_best_time: Option<String>,
1648    /// User ID of the creator who is creating/managing the post. Must be a valid MongoDB
1649    /// ObjectId. **Get User IDs from:** [Get User API](../users/get-user) — use the `id` field
1650    /// from the user object. **Validation:** Must be a valid MongoDB ObjectId.
1651    #[serde(rename = "createdBy", default, skip_serializing_if = "Option::is_none")]
1652    pub created_by: Option<String>,
1653    /// Follow-up comment to be posted immediately after the main post is published. **Supported
1654    /// Platforms:** Facebook, Instagram, LinkedIn, YouTube **NOT Supported:** TikTok, Google My
1655    /// Business (GMB), Pinterest **Use Case:** Great for adding hashtags, additional context,
1656    /// or engagement prompts without cluttering the main post. - Follow-up comment is
1657    /// automatically trimmed to platform limits **Reference:** [Platform Limitations
1658    /// Guide](https://help.leadconnectorhq.com/support/solutions/articles/48001240003-social-planner-image-video-content-and-api-limitations)
1659    #[serde(
1660        rename = "followUpComment",
1661        default,
1662        skip_serializing_if = "Option::is_none"
1663    )]
1664    pub follow_up_comment: Option<String>,
1665    /// Og Tags Meta Data
1666    #[serde(
1667        rename = "ogTagsDetails",
1668        default,
1669        skip_serializing_if = "Option::is_none"
1670    )]
1671    pub og_tags_details: Option<OgTagsSchema>,
1672    /// Type of post to create. Determines the format and platform requirements. **Available
1673    /// Types:** - `post` - Standard feed post (all platforms) - `story` - Temporary 24-hour
1674    /// story (Instagram, Facebook) - `reel` - Short-form video content (Instagram, Facebook,
1675    /// TikTok, YouTube) **Customize Per Platform:** You can specify different content/types per
1676    /// platform using `facebookPostDetails.type`, `instagramPostDetails.type`, etc.
1677    /// **Validations:** - Reels require exactly 1 video - Stories: Caption not supported for
1678    /// Instagram/Facebook - Facebook Groups do not support Reels
1679    /// Allowed values: `post`, `story`, `reel`.
1680    /// Required by the API.
1681    #[serde(rename = "type")]
1682    pub type_: String,
1683    /// Post Approval Details
1684    #[serde(
1685        rename = "postApprovalDetails",
1686        default,
1687        skip_serializing_if = "Option::is_none"
1688    )]
1689    pub post_approval_details: Option<PostApprovalSchema>,
1690    /// Flag indicating if the schedule datetime was manually updated. Used for tracking
1691    /// rescheduled posts.
1692    #[serde(
1693        rename = "scheduleTimeUpdated",
1694        default,
1695        skip_serializing_if = "Option::is_none"
1696    )]
1697    pub schedule_time_updated: Option<bool>,
1698    /// Array of Tag IDs to associate with the post for organization and filtering. **Get Tag
1699    /// IDs from:** [Get Tags API](./social-planner/get-tags-location-id) — use the `_id` field
1700    /// from each tag. **Validation:** All IDs must be valid MongoDB ObjectIds.
1701    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1702    pub tags: Vec<String>,
1703    /// Category ID to organize the post. Categories help group related posts. **Get Category
1704    /// IDs from:** [Get Categories API](./social-planner/get-categories-location-id) — use the
1705    /// `_id` field. **Validation:** Must be a valid MongoDB ObjectId.
1706    #[serde(
1707        rename = "categoryId",
1708        default,
1709        skip_serializing_if = "Option::is_none"
1710    )]
1711    pub category_id: Option<String>,
1712    /// Apply watermark to media in this post. **Note:** Watermarks are applied to images only.
1713    /// Videos are not watermarked.
1714    #[serde(
1715        rename = "applyWatermark",
1716        default,
1717        skip_serializing_if = "Option::is_none"
1718    )]
1719    pub apply_watermark: Option<bool>,
1720    /// Tiktok Post Details
1721    #[serde(
1722        rename = "tiktokPostDetails",
1723        default,
1724        skip_serializing_if = "Option::is_none"
1725    )]
1726    pub tiktok_post_details: Option<TiktokPostSchema>,
1727    /// GMB Post Details
1728    #[serde(
1729        rename = "gmbPostDetails",
1730        default,
1731        skip_serializing_if = "Option::is_none"
1732    )]
1733    pub gmb_post_details: Option<GMBPostSchema>,
1734    /// User ID of the user creating/managing the post. Required for OAuth channel posts
1735    /// (non-draft).
1736    /// Required by the API.
1737    #[serde(rename = "userId")]
1738    pub user_id: String,
1739    /// LinkedIn-specific post configuration. **Key Fields:** - `postAsPdf`: Set to `true` to
1740    /// post images as a PDF carousel document - `pdfTitle`: Title for the PDF document (max 100
1741    /// characters) **Limits:** - Max 9 images/videos for regular posts - Max 300 pages for PDF
1742    /// carousel - Max PDF size: 100 MB **Reference:** [Platform Limitations
1743    /// Guide](https://help.leadconnectorhq.com/support/solutions/articles/48001240003-social-planner-image-video-content-and-api-limitations)
1744    #[serde(
1745        rename = "linkedinPostDetails",
1746        default,
1747        skip_serializing_if = "Option::is_none"
1748    )]
1749    pub linkedin_post_details: Option<LinkedinPostSchema>,
1750    /// Pinterest-specific post configuration. Required when posting to Pinterest accounts.
1751    /// **Required Fields:** - `boardIds`: Object mapping account OAuth IDs to Pinterest board
1752    /// IDs **Optional Fields:** - `title`: Pin title (max 100 characters) - `link`: Destination
1753    /// URL for the pin (max 2048 characters) **Get Board IDs:** Use the Pinterest boards API or
1754    /// retrieve from connected account details. **Limits:** - Max 1 image/video per pin -
1755    /// Caption max 800 characters **Reference:** [Platform Limitations
1756    /// Guide](https://help.leadconnectorhq.com/support/solutions/articles/48001240003-social-planner-image-video-content-and-api-limitations)
1757    #[serde(
1758        rename = "pinterestPostDetails",
1759        default,
1760        skip_serializing_if = "Option::is_none"
1761    )]
1762    pub pinterest_post_details: Option<PinterestPostSchema>,
1763    /// Facebook-specific post configuration. **Key Fields:** - `type`: Post type (`post`,
1764    /// `story`, `reel`) **Restrictions:** - Facebook Groups do NOT support Reels - Reels
1765    /// require exactly 1 video - Stories do not support captions **Reference:** [Platform
1766    /// Limitations
1767    /// Guide](https://help.leadconnectorhq.com/support/solutions/articles/48001240003-social-planner-image-video-content-and-api-limitations)
1768    #[serde(
1769        rename = "facebookPostDetails",
1770        default,
1771        skip_serializing_if = "Option::is_none"
1772    )]
1773    pub facebook_post_details: Option<FacebookPostSchema>,
1774    /// Instagram-specific post configuration. **Key Fields:** - `type`: Post type (`post`,
1775    /// `story`, `reel`) - `collaborators`: Map of account IDs to Instagram usernames for
1776    /// collaboration invites (max 3 per account) - `showOnFeed`: Show reel on profile feed (for
1777    /// reels) **Collaborators Structure:** ```json { "accountId": ["username1", "username2"] }
1778    /// ``` Where `accountId` is from [Get Accounts API](./get-account) and usernames are
1779    /// Instagram handles without @. **Restrictions:** - Media is REQUIRED for all Instagram
1780    /// posts - Max 30 hashtags allowed in caption - Stories do not support captions -
1781    /// Collaborators: Posts/Reels only (NOT Stories) - Reels require exactly 1 video
1782    /// **Reference:** [Platform Limitations
1783    /// Guide](https://help.leadconnectorhq.com/support/solutions/articles/48001240003-social-planner-image-video-content-and-api-limitations)
1784    #[serde(
1785        rename = "instagramPostDetails",
1786        default,
1787        skip_serializing_if = "Option::is_none"
1788    )]
1789    pub instagram_post_details: Option<InstagramPostSchema>,
1790    /// YouTube-specific post configuration. **Key Fields:** - `title`: Video title (max 100
1791    /// characters) - `type`: Video type (`video` for regular videos, `short` for YouTube
1792    /// Shorts) - `privacyLevel`: Video visibility (`private`, `public`, `unlisted`) **Limits:**
1793    /// - Max 1 video per post - Caption (description) max 5,000 characters **Requirements:** -
1794    /// Video is REQUIRED for YouTube posts - `type` field is required
1795    #[serde(
1796        rename = "youtubePostDetails",
1797        default,
1798        skip_serializing_if = "Option::is_none"
1799    )]
1800    pub youtube_post_details: Option<YoutubePostSchema>,
1801}
1802
1803/// `CreatePostSuccessfulResponseDTO` from the GoHighLevel OpenAPI spec.
1804#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1805pub struct CreatePostSuccessfulResponseDTO {
1806    /// Success or Failure
1807    /// Required by the API.
1808    pub success: bool,
1809    /// Status Code
1810    /// Required by the API.
1811    #[serde(rename = "statusCode")]
1812    pub status_code: f64,
1813    /// Message
1814    /// Required by the API.
1815    pub message: String,
1816    /// Requested Results
1817    #[serde(default, skip_serializing_if = "Option::is_none")]
1818    pub results: Option<CreatePostSuccessfulResponseSchema>,
1819}
1820
1821/// `CreatePostSuccessfulResponseSchema` from the GoHighLevel OpenAPI spec.
1822#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1823pub struct CreatePostSuccessfulResponseSchema {
1824    /// Post Data
1825    #[serde(default, skip_serializing_if = "Option::is_none")]
1826    pub post: Option<GetPostFormattedSchema>,
1827}
1828
1829/// `CreateQueueItemDTO` from the GoHighLevel OpenAPI spec.
1830#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1831pub struct CreateQueueItemDTO {
1832    /// Location ID
1833    /// Required by the API.
1834    #[serde(rename = "locationId")]
1835    pub location_id: String,
1836    /// Edit session ID
1837    #[serde(rename = "sessionId", default, skip_serializing_if = "Option::is_none")]
1838    pub session_id: Option<String>,
1839    /// New post details
1840    #[serde(
1841        rename = "modifiedPostPayload",
1842        default,
1843        skip_serializing_if = "Option::is_none"
1844    )]
1845    pub modified_post_payload: Option<QueueModifiedPostDTO>,
1846    /// Order for the new item in the queue (cyclic-aware). Accepts: - A number: explicit order
1847    /// value calculated by FE as midpoint between adjacent items - "top": place at cyclic top
1848    /// (first to be scheduled next) - "bottom": place at cyclic bottom (last to be scheduled)
1849    /// For positions between items, FE calculates: Math.floor((prevItem.order + nextItem.order)
1850    /// / 2) Defaults to end if not provided. Note: This field is ignored when directToQueue is
1851    /// true - the order will be automatically calculated based on the queue's
1852    /// prioritizeNewContent setting.
1853    /// Multiple possible shapes in the spec; raw JSON.
1854    #[serde(default, skip_serializing_if = "Option::is_none")]
1855    pub order: Option<serde_json::Value>,
1856    /// Variations
1857    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1858    pub variations: Vec<VariationInputDTO>,
1859    /// Primary media URL (image) for the post. Falls back to modifiedPostPayload.primaryImage
1860    /// if not set.
1861    #[serde(
1862        rename = "primaryImage",
1863        default,
1864        skip_serializing_if = "Option::is_none"
1865    )]
1866    pub primary_image: Option<String>,
1867    /// When true, creates the queue item directly without requiring an edit session, even for
1868    /// active/paused queues. The order field is ignored and the item position is determined by
1869    /// the queue's prioritizeNewContent setting: if true, the item is added to the top of the
1870    /// queue; if false, it is added to the bottom.
1871    #[serde(
1872        rename = "directToQueue",
1873        default,
1874        skip_serializing_if = "Option::is_none"
1875    )]
1876    pub direct_to_queue: Option<bool>,
1877}
1878
1879/// `CreateQueueItemResponseDTO` from the GoHighLevel OpenAPI spec.
1880#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1881pub struct CreateQueueItemResponseDTO {
1882    /// A message indicating the result of the operation.
1883    #[serde(default, skip_serializing_if = "Option::is_none")]
1884    pub message: Option<String>,
1885    /// The newly created queue item
1886    #[serde(rename = "queueItem", default, skip_serializing_if = "Option::is_none")]
1887    pub queue_item: Option<CreatedQueueItemWithVariationsDTO>,
1888}
1889
1890/// `CreatedCategoryQueueDTO` from the GoHighLevel OpenAPI spec.
1891#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1892pub struct CreatedCategoryQueueDTO {
1893    /// Queue ID
1894    #[serde(rename = "_id", default, skip_serializing_if = "Option::is_none")]
1895    pub id: Option<String>,
1896    /// Location ID
1897    #[serde(
1898        rename = "locationId",
1899        default,
1900        skip_serializing_if = "Option::is_none"
1901    )]
1902    pub location_id: Option<String>,
1903    /// Category ID
1904    #[serde(
1905        rename = "categoryId",
1906        default,
1907        skip_serializing_if = "Option::is_none"
1908    )]
1909    pub category_id: Option<String>,
1910    /// Time slots for scheduling posts
1911    #[serde(rename = "timeSlots", default, skip_serializing_if = "Vec::is_empty")]
1912    pub time_slots: Vec<CreatedTimeSlotDTO>,
1913    /// Enable posting future content
1914    #[serde(
1915        rename = "enableFuturePosts",
1916        default,
1917        skip_serializing_if = "Option::is_none"
1918    )]
1919    pub enable_future_posts: Option<bool>,
1920    /// Prioritize new content over older content
1921    #[serde(
1922        rename = "prioritizeNewContent",
1923        default,
1924        skip_serializing_if = "Option::is_none"
1925    )]
1926    pub prioritize_new_content: Option<bool>,
1927    /// Status of the queue. Always "draft" for a new queue.
1928    /// Allowed values: `active`, `paused`, `draft`.
1929    #[serde(default, skip_serializing_if = "Option::is_none")]
1930    pub status: Option<String>,
1931    /// Start date of the queue
1932    /// Format: date-time (ISO-8601 string).
1933    #[serde(rename = "startDate", default, skip_serializing_if = "Option::is_none")]
1934    pub start_date: Option<String>,
1935    /// Dates/times to skip posting. Always empty for a new queue.
1936    /// Format: date-time (ISO-8601 string).
1937    #[serde(
1938        rename = "skipDateTime",
1939        default,
1940        skip_serializing_if = "Vec::is_empty"
1941    )]
1942    pub skip_date_time: Vec<String>,
1943    /// Total number of posts in the queue. Always 0 for a new queue.
1944    #[serde(
1945        rename = "totalPosts",
1946        default,
1947        skip_serializing_if = "Option::is_none"
1948    )]
1949    pub total_posts: Option<f64>,
1950    /// Timestamp of the last scheduled post. Always null for a new queue.
1951    /// Format: date-time (ISO-8601 string).
1952    #[serde(
1953        rename = "lastScheduledTime",
1954        default,
1955        skip_serializing_if = "Option::is_none"
1956    )]
1957    pub last_scheduled_time: Option<String>,
1958    /// ID of the user who created the queue
1959    #[serde(rename = "createdBy", default, skip_serializing_if = "Option::is_none")]
1960    pub created_by: Option<String>,
1961    /// Creation timestamp
1962    /// Format: date-time (ISO-8601 string).
1963    #[serde(rename = "createdAt", default, skip_serializing_if = "Option::is_none")]
1964    pub created_at: Option<String>,
1965    /// Last update timestamp
1966    /// Format: date-time (ISO-8601 string).
1967    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
1968    pub updated_at: Option<String>,
1969}
1970
1971/// `CreatedQueueItemWithVariationsDTO` from the GoHighLevel OpenAPI spec.
1972#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1973pub struct CreatedQueueItemWithVariationsDTO {
1974    /// The unique identifier of the queue item.
1975    #[serde(rename = "_id", default, skip_serializing_if = "Option::is_none")]
1976    pub id: Option<String>,
1977    /// The order of the item in the queue.
1978    #[serde(default, skip_serializing_if = "Option::is_none")]
1979    pub order: Option<f64>,
1980    /// A list of content variations for the post.
1981    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1982    pub variations: Vec<VariationDTO>,
1983    /// The primary image URL for the post.
1984    #[serde(
1985        rename = "primaryImage",
1986        default,
1987        skip_serializing_if = "Option::is_none"
1988    )]
1989    pub primary_image: Option<String>,
1990    /// Timestamp of the last scheduled post. Always null for a new queue.
1991    /// Format: date-time (ISO-8601 string).
1992    #[serde(
1993        rename = "lastScheduledTime",
1994        default,
1995        skip_serializing_if = "Option::is_none"
1996    )]
1997    pub last_scheduled_time: Option<String>,
1998    /// The ID of the queue this post belongs to
1999    #[serde(rename = "queueId", default, skip_serializing_if = "Option::is_none")]
2000    pub queue_id: Option<String>,
2001    /// The ID of the original post, if any.
2002    #[serde(rename = "postId", default, skip_serializing_if = "Option::is_none")]
2003    pub post_id: Option<String>,
2004    /// The formatted post data modified from original post.
2005    #[serde(
2006        rename = "modifiedPostPayload",
2007        default,
2008        skip_serializing_if = "Option::is_none"
2009    )]
2010    pub modified_post_payload: Option<GetModifiedPayloadFormattedSchema>,
2011    /// The ID of the parent post before splitting to individual social posts.
2012    #[serde(
2013        rename = "parentPostId",
2014        default,
2015        skip_serializing_if = "Option::is_none"
2016    )]
2017    pub parent_post_id: Option<String>,
2018    /// List of errors associated with the queue item. Possible values: INVALID_USER_ID,
2019    /// PIXABAY_MEDIA.
2020    #[serde(default, skip_serializing_if = "Vec::is_empty")]
2021    pub errors: Vec<String>,
2022    /// The index of the current variation being used for this post
2023    #[serde(
2024        rename = "currentVariation",
2025        default,
2026        skip_serializing_if = "Option::is_none"
2027    )]
2028    pub current_variation: Option<f64>,
2029    /// Creation timestamp
2030    #[serde(rename = "createdAt", default, skip_serializing_if = "Option::is_none")]
2031    pub created_at: Option<String>,
2032    /// Last update timestamp
2033    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
2034    pub updated_at: Option<String>,
2035    /// Indicates if the item is deleted
2036    #[serde(default, skip_serializing_if = "Option::is_none")]
2037    pub deleted: Option<bool>,
2038    /// Location ID
2039    #[serde(
2040        rename = "locationId",
2041        default,
2042        skip_serializing_if = "Option::is_none"
2043    )]
2044    pub location_id: Option<String>,
2045}
2046
2047/// `CreatedTimeSlotDTO` from the GoHighLevel OpenAPI spec.
2048#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2049pub struct CreatedTimeSlotDTO {
2050    /// Time slot ID
2051    #[serde(rename = "_id", default, skip_serializing_if = "Option::is_none")]
2052    pub id: Option<String>,
2053    /// Day of the week (0=Sunday, 1=Monday, ...)
2054    #[serde(rename = "dayOfWeek", default, skip_serializing_if = "Option::is_none")]
2055    pub day_of_week: Option<f64>,
2056    /// Time of the day (HH:mm format)
2057    #[serde(default, skip_serializing_if = "Option::is_none")]
2058    pub time: Option<String>,
2059}
2060
2061/// `CsvPostStatusResponseDTO` from the GoHighLevel OpenAPI spec.
2062#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2063pub struct CsvPostStatusResponseDTO {
2064    /// Success or Failure
2065    /// Required by the API.
2066    pub success: bool,
2067    /// Status Code
2068    /// Required by the API.
2069    #[serde(rename = "statusCode")]
2070    pub status_code: f64,
2071    /// Message
2072    /// Required by the API.
2073    pub message: String,
2074}
2075
2076/// `CsvResponse` from the GoHighLevel OpenAPI spec.
2077#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2078pub struct CsvResponse {
2079    /// Location Id
2080    #[serde(
2081        rename = "locationId",
2082        default,
2083        skip_serializing_if = "Option::is_none"
2084    )]
2085    pub location_id: Option<String>,
2086    /// Name of the CSV file
2087    #[serde(rename = "fileName", default, skip_serializing_if = "Option::is_none")]
2088    pub file_name: Option<String>,
2089    /// Account Ids
2090    #[serde(rename = "accountIds", default, skip_serializing_if = "Vec::is_empty")]
2091    pub account_ids: Vec<String>,
2092    /// File path of the CSV
2093    #[serde(default, skip_serializing_if = "Option::is_none")]
2094    pub file: Option<String>,
2095    /// CSV import status
2096    /// Allowed values: `pending`, `in_progress`, `completed`, `failed`, `in_review`,
2097    /// `importing`, `deleted`.
2098    #[serde(default, skip_serializing_if = "Option::is_none")]
2099    pub status: Option<String>,
2100    /// Number of posts in the CSV
2101    #[serde(default, skip_serializing_if = "Option::is_none")]
2102    pub count: Option<f64>,
2103    /// User Id who created the CSV import
2104    #[serde(rename = "createdBy", default, skip_serializing_if = "Option::is_none")]
2105    pub created_by: Option<String>,
2106    /// Trace Id for debugging
2107    #[serde(rename = "traceId", default, skip_serializing_if = "Option::is_none")]
2108    pub trace_id: Option<String>,
2109    /// Origin Id for tracking source
2110    #[serde(rename = "originId", default, skip_serializing_if = "Option::is_none")]
2111    pub origin_id: Option<String>,
2112    /// Approver User Id
2113    #[serde(default, skip_serializing_if = "Option::is_none")]
2114    pub approver: Option<String>,
2115    /// CSV file type
2116    /// Allowed values: `basic`, `advance`.
2117    #[serde(
2118        rename = "csvFileType",
2119        default,
2120        skip_serializing_if = "Option::is_none"
2121    )]
2122    pub csv_file_type: Option<String>,
2123    /// Media optimization flag
2124    #[serde(
2125        rename = "mediaOptimization",
2126        default,
2127        skip_serializing_if = "Option::is_none"
2128    )]
2129    pub media_optimization: Option<bool>,
2130    /// Apply watermark flag
2131    #[serde(
2132        rename = "applyWatermark",
2133        default,
2134        skip_serializing_if = "Option::is_none"
2135    )]
2136    pub apply_watermark: Option<bool>,
2137    /// Date Updated
2138    /// Format: date-time (ISO-8601 string).
2139    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
2140    pub updated_at: Option<String>,
2141}
2142
2143/// `DateSchema` from the GoHighLevel OpenAPI spec.
2144#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2145pub struct DateSchema {
2146    /// Year component of the date
2147    /// Required by the API.
2148    pub year: f64,
2149    /// Month component of the date (1-12)
2150    /// Required by the API.
2151    pub month: f64,
2152    /// Day component of the date (1-31)
2153    /// Required by the API.
2154    pub day: f64,
2155}
2156
2157/// `DeleteAccountResponseSchema` from the GoHighLevel OpenAPI spec.
2158#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2159pub struct DeleteAccountResponseSchema {
2160    /// Location Id
2161    #[serde(
2162        rename = "locationId",
2163        default,
2164        skip_serializing_if = "Option::is_none"
2165    )]
2166    pub location_id: Option<String>,
2167    /// Id
2168    #[serde(default, skip_serializing_if = "Option::is_none")]
2169    pub id: Option<String>,
2170}
2171
2172/// `DeleteActivePostResponseDTO` from the GoHighLevel OpenAPI spec.
2173#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2174pub struct DeleteActivePostResponseDTO {
2175    /// A message indicating the result of the operation.
2176    #[serde(default, skip_serializing_if = "Option::is_none")]
2177    pub message: Option<String>,
2178}
2179
2180/// `DeleteCsvResponseDTO` from the GoHighLevel OpenAPI spec.
2181#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2182pub struct DeleteCsvResponseDTO {
2183    /// Success or Failure
2184    /// Required by the API.
2185    pub success: bool,
2186    /// Status Code
2187    /// Required by the API.
2188    #[serde(rename = "statusCode")]
2189    pub status_code: f64,
2190    /// Message
2191    /// Required by the API.
2192    pub message: String,
2193    /// Requested Results
2194    #[serde(default, skip_serializing_if = "Option::is_none")]
2195    pub results: Option<CSVResponseSchema>,
2196}
2197
2198/// `DeleteLikeResponseDTO` from the GoHighLevel OpenAPI spec.
2199#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2200pub struct DeleteLikeResponseDTO {
2201    /// Success or Failure
2202    /// Required by the API.
2203    pub success: bool,
2204    /// Status Code
2205    /// Required by the API.
2206    #[serde(rename = "statusCode")]
2207    pub status_code: f64,
2208    /// Message
2209    /// Required by the API.
2210    pub message: String,
2211}
2212
2213/// `DeletePostCsvSchema` from the GoHighLevel OpenAPI spec.
2214#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2215pub struct DeletePostCsvSchema {
2216    /// CSV Id
2217    #[serde(rename = "_id", default, skip_serializing_if = "Option::is_none")]
2218    pub id: Option<String>,
2219    /// CSV file type
2220    /// Allowed values: `basic`, `advance`.
2221    #[serde(
2222        rename = "csvFileType",
2223        default,
2224        skip_serializing_if = "Option::is_none"
2225    )]
2226    pub csv_file_type: Option<String>,
2227    /// Media optimization flag
2228    #[serde(
2229        rename = "mediaOptimization",
2230        default,
2231        skip_serializing_if = "Option::is_none"
2232    )]
2233    pub media_optimization: Option<bool>,
2234    /// Apply watermark flag
2235    #[serde(
2236        rename = "applyWatermark",
2237        default,
2238        skip_serializing_if = "Option::is_none"
2239    )]
2240    pub apply_watermark: Option<bool>,
2241    /// CSV import status
2242    /// Allowed values: `pending`, `in_progress`, `completed`, `failed`, `in_review`,
2243    /// `importing`, `deleted`.
2244    #[serde(default, skip_serializing_if = "Option::is_none")]
2245    pub status: Option<String>,
2246    /// Date Updated
2247    /// Format: date-time (ISO-8601 string).
2248    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
2249    pub updated_at: Option<String>,
2250}
2251
2252/// `DeletePostResponseDTO` from the GoHighLevel OpenAPI spec.
2253#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2254pub struct DeletePostResponseDTO {
2255    /// Success or Failure
2256    /// Required by the API.
2257    pub success: bool,
2258    /// Status Code
2259    /// Required by the API.
2260    #[serde(rename = "statusCode")]
2261    pub status_code: f64,
2262    /// Message
2263    /// Required by the API.
2264    pub message: String,
2265    /// Requested Results
2266    #[serde(default, skip_serializing_if = "Option::is_none")]
2267    pub results: Option<DeletePostResponseSchema>,
2268}
2269
2270/// `DeletePostResponseSchema` from the GoHighLevel OpenAPI spec.
2271#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2272pub struct DeletePostResponseSchema {
2273    /// Post Id
2274    /// Required by the API.
2275    #[serde(rename = "postId")]
2276    pub post_id: String,
2277    /// CSV Data
2278    #[serde(default, skip_serializing_if = "Option::is_none")]
2279    pub csv: Option<DeletePostCsvSchema>,
2280}
2281
2282/// `DeletePostSuccessfulResponseDTO` from the GoHighLevel OpenAPI spec.
2283#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2284pub struct DeletePostSuccessfulResponseDTO {
2285    /// Success or Failure
2286    /// Required by the API.
2287    pub success: bool,
2288    /// Status Code
2289    /// Required by the API.
2290    #[serde(rename = "statusCode")]
2291    pub status_code: f64,
2292    /// Message
2293    /// Required by the API.
2294    pub message: String,
2295    /// Requested Results
2296    #[serde(default, skip_serializing_if = "Option::is_none")]
2297    pub results: Option<DeletePostSuccessfulResponseSchema>,
2298}
2299
2300/// `DeletePostSuccessfulResponseSchema` from the GoHighLevel OpenAPI spec.
2301#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2302pub struct DeletePostSuccessfulResponseSchema {
2303    /// Platform-specific post identifier
2304    #[serde(rename = "postId", default, skip_serializing_if = "Option::is_none")]
2305    pub post_id: Option<String>,
2306}
2307
2308/// `DeletePostsDto` from the GoHighLevel OpenAPI spec.
2309#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2310pub struct DeletePostsDto {
2311    /// Requested Results
2312    #[serde(rename = "postIds", default, skip_serializing_if = "Vec::is_empty")]
2313    pub post_ids: Vec<String>,
2314}
2315
2316/// `DiscardEditSessionDTO` from the GoHighLevel OpenAPI spec.
2317#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2318pub struct DiscardEditSessionDTO {
2319    /// Location ID
2320    /// Required by the API.
2321    #[serde(rename = "locationId")]
2322    pub location_id: String,
2323    /// Edit session ID
2324    /// Required by the API.
2325    #[serde(rename = "sessionId")]
2326    pub session_id: String,
2327    /// If true, keeps the queue in DRAFT state after saving instead of automatically activating
2328    /// it. Only applicable when the queue is currently in DRAFT status.
2329    #[serde(
2330        rename = "keepInDraft",
2331        default,
2332        skip_serializing_if = "Option::is_none"
2333    )]
2334    pub keep_in_draft: Option<bool>,
2335}
2336
2337/// `DiscardEditSessionResponseDTO` from the GoHighLevel OpenAPI spec.
2338#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2339pub struct DiscardEditSessionResponseDTO {
2340    /// A message indicating the result of the operation.
2341    #[serde(default, skip_serializing_if = "Option::is_none")]
2342    pub message: Option<String>,
2343}
2344
2345/// `EditSessionCalendarDTO` from the GoHighLevel OpenAPI spec.
2346#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2347pub struct EditSessionCalendarDTO {
2348    /// Location ID
2349    /// Required by the API.
2350    #[serde(rename = "locationId")]
2351    pub location_id: String,
2352    /// Edit session ID
2353    /// Required by the API.
2354    #[serde(rename = "sessionId")]
2355    pub session_id: String,
2356    /// Start Date in ISO format
2357    /// Required by the API.
2358    #[serde(rename = "startDate")]
2359    pub start_date: String,
2360    /// End Date in ISO format
2361    /// Required by the API.
2362    #[serde(rename = "endDate")]
2363    pub end_date: String,
2364    /// Filter by Account IDs. If not provided or empty, returns all posts.
2365    #[serde(rename = "accountIds", default, skip_serializing_if = "Vec::is_empty")]
2366    pub account_ids: Vec<String>,
2367}
2368
2369/// `EditSessionCalendarResponseDTO` from the GoHighLevel OpenAPI spec.
2370#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2371pub struct EditSessionCalendarResponseDTO {
2372    #[serde(default, skip_serializing_if = "Option::is_none")]
2373    pub message: Option<String>,
2374    #[serde(
2375        rename = "scheduledPosts",
2376        default,
2377        skip_serializing_if = "Vec::is_empty"
2378    )]
2379    pub scheduled_posts: Vec<EditSessionScheduledPostDTO>,
2380    /// Total number of scheduled posts returned
2381    #[serde(default, skip_serializing_if = "Option::is_none")]
2382    pub total: Option<f64>,
2383    /// The timezone used for scheduling, e.g., "Asia/Calcutta"
2384    #[serde(default, skip_serializing_if = "Option::is_none")]
2385    pub timezone: Option<String>,
2386}
2387
2388/// `EditSessionScheduledPostDTO` from the GoHighLevel OpenAPI spec.
2389#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2390pub struct EditSessionScheduledPostDTO {
2391    /// The date and time the post is scheduled to be published
2392    /// Format: date-time (ISO-8601 string).
2393    #[serde(
2394        rename = "scheduledDateTime",
2395        default,
2396        skip_serializing_if = "Option::is_none"
2397    )]
2398    pub scheduled_date_time: Option<String>,
2399    /// The formatted post data.
2400    #[serde(default, skip_serializing_if = "Option::is_none")]
2401    pub post: Option<GetPostFormattedSchema>,
2402    /// The unique identifier of the queue item.
2403    #[serde(
2404        rename = "queueItemId",
2405        default,
2406        skip_serializing_if = "Option::is_none"
2407    )]
2408    pub queue_item_id: Option<String>,
2409    /// The ID of the queue this post belongs to
2410    #[serde(rename = "queueId", default, skip_serializing_if = "Option::is_none")]
2411    pub queue_id: Option<String>,
2412    /// The order of the item in the queue.
2413    #[serde(default, skip_serializing_if = "Option::is_none")]
2414    pub order: Option<f64>,
2415    /// A list of content variations for the post.
2416    #[serde(default, skip_serializing_if = "Vec::is_empty")]
2417    pub variations: Vec<VariationDTO>,
2418    /// The primary image URL for the post.
2419    #[serde(
2420        rename = "primaryImage",
2421        default,
2422        skip_serializing_if = "Option::is_none"
2423    )]
2424    pub primary_image: Option<String>,
2425    /// List of errors associated with the queue item. Possible values: INVALID_USER_ID,
2426    /// PIXABAY_MEDIA.
2427    #[serde(default, skip_serializing_if = "Vec::is_empty")]
2428    pub errors: Vec<String>,
2429    /// The category associated with this post
2430    #[serde(default, skip_serializing_if = "Option::is_none")]
2431    pub category: Option<CategoryInfoDTO>,
2432    /// The index of the current variation being used for this post
2433    #[serde(
2434        rename = "currentVariation",
2435        default,
2436        skip_serializing_if = "Option::is_none"
2437    )]
2438    pub current_variation: Option<f64>,
2439    /// The timezone in which the post is scheduled
2440    #[serde(default, skip_serializing_if = "Option::is_none")]
2441    pub timezone: Option<String>,
2442    /// Indicates this is a draft item from an edit session
2443    #[serde(rename = "isDraft", default, skip_serializing_if = "Option::is_none")]
2444    pub is_draft: Option<bool>,
2445    /// Original queue item ID if this draft was created from an existing item
2446    #[serde(
2447        rename = "originalItemId",
2448        default,
2449        skip_serializing_if = "Option::is_none"
2450    )]
2451    pub original_item_id: Option<String>,
2452}
2453
2454/// `EndDateSchema` from the GoHighLevel OpenAPI spec.
2455#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2456pub struct EndDateSchema {
2457    /// End Date
2458    #[serde(rename = "endDate", default, skip_serializing_if = "Option::is_none")]
2459    pub end_date: Option<DateSchema>,
2460    /// End Time
2461    #[serde(rename = "endTime", default, skip_serializing_if = "Option::is_none")]
2462    pub end_time: Option<TimeSchema>,
2463}
2464
2465/// `FacebookPageSchema` from the GoHighLevel OpenAPI spec.
2466#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2467pub struct FacebookPageSchema {
2468    /// Facebook page identifier
2469    #[serde(default, skip_serializing_if = "Option::is_none")]
2470    pub id: Option<String>,
2471    /// Name of the Facebook page
2472    #[serde(default, skip_serializing_if = "Option::is_none")]
2473    pub name: Option<String>,
2474    /// Avatar or profile picture URL of the page
2475    #[serde(default, skip_serializing_if = "Option::is_none")]
2476    pub avatar: Option<String>,
2477    /// Indicates if the user owns this page
2478    #[serde(rename = "isOwned", default, skip_serializing_if = "Option::is_none")]
2479    pub is_owned: Option<bool>,
2480    /// Indicates if the page is currently connected
2481    #[serde(
2482        rename = "isConnected",
2483        default,
2484        skip_serializing_if = "Option::is_none"
2485    )]
2486    pub is_connected: Option<bool>,
2487}
2488
2489/// `FacebookPostSchema` from the GoHighLevel OpenAPI spec.
2490#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2491pub struct FacebookPostSchema {
2492    /// Facebook post format type. **Available Types:** - `post` - Standard feed post (images,
2493    /// videos, text) - `story` - 24-hour temporary story - `reel` - Short-form vertical video
2494    /// **Restrictions:** - Reels: Require exactly 1 video, not supported on Groups - Stories:
2495    /// Captions not supported
2496    /// Allowed values: `post`, `story`, `reel`.
2497    /// Required by the API.
2498    #[serde(rename = "type")]
2499    pub type_: String,
2500    /// Facebook background preset ID for text-only feed posts. **Facebook `post` only** — not
2501    /// `story` or `reel`. Ignored when media is attached; `metaLink` is omitted on publish.
2502    /// **Validations** — request returns `400` if violated: - Must be a valid preset ID from
2503    /// the [Facebook text background preset
2504    /// reference](https://help.leadconnectorhq.com/support/solutions/articles/155000008005-facebook-text-background-posts-preset-reference).
2505    /// Empty strings, whitespace-only values, and `null` are rejected. - When set, `summary`
2506    /// must be 130 characters or fewer.
2507    #[serde(
2508        rename = "textFormatPresetId",
2509        default,
2510        skip_serializing_if = "Option::is_none"
2511    )]
2512    pub text_format_preset_id: Option<String>,
2513}
2514
2515/// `FetchAvailableCategoriesResponseDTO` from the GoHighLevel OpenAPI spec.
2516#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2517pub struct FetchAvailableCategoriesResponseDTO {
2518    #[serde(default, skip_serializing_if = "Option::is_none")]
2519    pub message: Option<String>,
2520    /// List of categories with queue status
2521    #[serde(default, skip_serializing_if = "Vec::is_empty")]
2522    pub categories: Vec<AvailableCategoryDTO>,
2523    #[serde(default, skip_serializing_if = "Option::is_none")]
2524    pub meta: Option<MetaDTO>,
2525}
2526
2527/// `FetchCalendarListResponseDTO` from the GoHighLevel OpenAPI spec.
2528#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2529pub struct FetchCalendarListResponseDTO {
2530    #[serde(default, skip_serializing_if = "Option::is_none")]
2531    pub message: Option<String>,
2532    #[serde(
2533        rename = "scheduledPosts",
2534        default,
2535        skip_serializing_if = "Vec::is_empty"
2536    )]
2537    pub scheduled_posts: Vec<ScheduledPostDTO>,
2538    /// Total number of scheduled posts returned
2539    #[serde(default, skip_serializing_if = "Option::is_none")]
2540    pub total: Option<f64>,
2541    /// The timezone used for scheduling, e.g., "Asia/Calcutta"
2542    #[serde(default, skip_serializing_if = "Option::is_none")]
2543    pub timezone: Option<String>,
2544}
2545
2546/// `FetchCategoryQueuesDTO` from the GoHighLevel OpenAPI spec.
2547#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2548pub struct FetchCategoryQueuesDTO {
2549    /// Location ID
2550    /// Required by the API.
2551    #[serde(rename = "locationId")]
2552    pub location_id: String,
2553    /// Number of items to skip
2554    #[serde(default, skip_serializing_if = "Option::is_none")]
2555    pub skip: Option<f64>,
2556    /// Maximum number of items to return
2557    #[serde(default, skip_serializing_if = "Option::is_none")]
2558    pub limit: Option<f64>,
2559}
2560
2561/// `FetchCategoryQueuesResponseDTO` from the GoHighLevel OpenAPI spec.
2562#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2563pub struct FetchCategoryQueuesResponseDTO {
2564    #[serde(default, skip_serializing_if = "Option::is_none")]
2565    pub message: Option<String>,
2566    #[serde(default, skip_serializing_if = "Vec::is_empty")]
2567    pub queues: Vec<CategoryQueueWithCategoryDTO>,
2568    #[serde(default, skip_serializing_if = "Option::is_none")]
2569    pub meta: Option<MetaDTO>,
2570}
2571
2572/// `FetchQueueByIdResponseDTO` from the GoHighLevel OpenAPI spec.
2573#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2574pub struct FetchQueueByIdResponseDTO {
2575    /// A message indicating the result of the operation.
2576    #[serde(default, skip_serializing_if = "Option::is_none")]
2577    pub message: Option<String>,
2578    /// The fetched queue along with its category metadata.
2579    #[serde(default, skip_serializing_if = "Option::is_none")]
2580    pub queue: Option<CategoryQueueWithCategoryDTO>,
2581}
2582
2583/// `FetchQueueItemsDTO` from the GoHighLevel OpenAPI spec.
2584#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2585pub struct FetchQueueItemsDTO {
2586    /// Location ID
2587    /// Required by the API.
2588    #[serde(rename = "locationId")]
2589    pub location_id: String,
2590    /// Edit session ID
2591    #[serde(rename = "sessionId", default, skip_serializing_if = "Option::is_none")]
2592    pub session_id: Option<String>,
2593    /// Number of items to skip
2594    #[serde(default, skip_serializing_if = "Option::is_none")]
2595    pub skip: Option<f64>,
2596    /// Maximum number of items to return
2597    #[serde(default, skip_serializing_if = "Option::is_none")]
2598    pub limit: Option<f64>,
2599    /// To return only queue items with errors
2600    #[serde(
2601        rename = "errorFilter",
2602        default,
2603        skip_serializing_if = "Option::is_none"
2604    )]
2605    pub error_filter: Option<bool>,
2606    /// Item ID to center the response around. When provided, the response will position this
2607    /// item in the center with items above and below based on limit. The skip parameter is
2608    /// ignored when itemId is provided.
2609    #[serde(rename = "itemId", default, skip_serializing_if = "Option::is_none")]
2610    pub item_id: Option<String>,
2611}
2612
2613/// `FetchQueueItemsMetaDTO` from the GoHighLevel OpenAPI spec.
2614#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2615pub struct FetchQueueItemsMetaDTO {
2616    /// Total count of items
2617    #[serde(default, skip_serializing_if = "Option::is_none")]
2618    pub count: Option<String>,
2619    /// Number of items skipped (offset from start)
2620    #[serde(default, skip_serializing_if = "Option::is_none")]
2621    pub skip: Option<f64>,
2622    /// Maximum number of items returned
2623    #[serde(default, skip_serializing_if = "Option::is_none")]
2624    pub limit: Option<f64>,
2625}
2626
2627/// `FetchQueueItemsResponseDTO` from the GoHighLevel OpenAPI spec.
2628#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2629pub struct FetchQueueItemsResponseDTO {
2630    #[serde(default, skip_serializing_if = "Option::is_none")]
2631    pub message: Option<String>,
2632    #[serde(default, skip_serializing_if = "Vec::is_empty")]
2633    pub items: Vec<QueueItemDTO>,
2634    #[serde(default, skip_serializing_if = "Option::is_none")]
2635    pub meta: Option<FetchQueueItemsMetaDTO>,
2636}
2637
2638/// `FetchSlotsDTO` from the GoHighLevel OpenAPI spec.
2639#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2640pub struct FetchSlotsDTO {
2641    /// The location ID
2642    /// Required by the API.
2643    #[serde(rename = "locationId")]
2644    pub location_id: String,
2645    /// Session ID for edit mode. If not provided, calculates slots for live items.
2646    #[serde(rename = "sessionId", default, skip_serializing_if = "Option::is_none")]
2647    pub session_id: Option<String>,
2648    /// Number of items to skip
2649    #[serde(default, skip_serializing_if = "Option::is_none")]
2650    pub skip: Option<f64>,
2651    /// Number of items to return
2652    #[serde(default, skip_serializing_if = "Option::is_none")]
2653    pub limit: Option<f64>,
2654}
2655
2656/// `FetchSlotsResponseDTO` from the GoHighLevel OpenAPI spec.
2657#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2658pub struct FetchSlotsResponseDTO {
2659    #[serde(default, skip_serializing_if = "Option::is_none")]
2660    pub message: Option<String>,
2661    /// Slot information for items in the requested range
2662    #[serde(default, skip_serializing_if = "Vec::is_empty")]
2663    pub slots: Vec<UpdatedSlotInfoDTO>,
2664    /// Total number of items in the queue
2665    #[serde(default, skip_serializing_if = "Option::is_none")]
2666    pub total: Option<f64>,
2667    /// Number of items skipped
2668    #[serde(default, skip_serializing_if = "Option::is_none")]
2669    pub skip: Option<f64>,
2670    /// Number of items returned
2671    #[serde(default, skip_serializing_if = "Option::is_none")]
2672    pub limit: Option<f64>,
2673    /// Timezone used for slot calculations
2674    #[serde(default, skip_serializing_if = "Option::is_none")]
2675    pub timezone: Option<String>,
2676}
2677
2678/// `FormatedApprovalDetails` from the GoHighLevel OpenAPI spec.
2679#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2680pub struct FormatedApprovalDetails {
2681    /// User ID of the designated approver. **Note:** The approver will receive a notification
2682    /// when a post is submitted for review.
2683    #[serde(default, skip_serializing_if = "Option::is_none")]
2684    pub approver: Option<String>,
2685    /// Note from the post creator to the approver explaining the post or requesting specific
2686    /// feedback.
2687    #[serde(
2688        rename = "requesterNote",
2689        default,
2690        skip_serializing_if = "Option::is_none"
2691    )]
2692    pub requester_note: Option<String>,
2693    /// Note from the approver to the post creator with feedback or approval comments.
2694    #[serde(
2695        rename = "approverNote",
2696        default,
2697        skip_serializing_if = "Option::is_none"
2698    )]
2699    pub approver_note: Option<String>,
2700    /// Current approval status of the post. **Available Values:** - `pending` - Awaiting
2701    /// approver review - `approved` - Approved and ready for publishing - `rejected` - Rejected
2702    /// by approver (needs revision) - `not_required` - No approval workflow needed
2703    /// Allowed values: `pending`, `approved`, `rejected`, `not_required`.
2704    #[serde(
2705        rename = "approvalStatus",
2706        default,
2707        skip_serializing_if = "Option::is_none"
2708    )]
2709    pub approval_status: Option<String>,
2710    /// Approver User Details
2711    #[serde(
2712        rename = "approverUser",
2713        default,
2714        skip_serializing_if = "Option::is_none"
2715    )]
2716    pub approver_user: Option<PostUserSchema>,
2717}
2718
2719/// `GMBPostSchema` from the GoHighLevel OpenAPI spec.
2720#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2721pub struct GMBPostSchema {
2722    /// Google My Business post type. **Available Types:** - `STANDARD` - Regular update post
2723    /// (What's New) - `EVENT` - Event announcement with dates and title - `OFFER` - Promotional
2724    /// offer with coupon and redemption details **Required fields by type:** - STANDARD: None
2725    /// additional - EVENT: `title`, `startDate`, `endDate` - OFFER: `offerTitle`, `startDate`,
2726    /// `endDate`, `termsConditions`, `couponCode`, `redeemOnlineUrl`
2727    /// Allowed values: `STANDARD`, `EVENT`, `OFFER`.
2728    /// Required by the API.
2729    #[serde(rename = "gmbEventType")]
2730    pub gmb_event_type: String,
2731    /// Event title. Required when `gmbEventType` is `EVENT`. **Max length:** 58 characters
2732    #[serde(default, skip_serializing_if = "Option::is_none")]
2733    pub title: Option<String>,
2734    /// Offer title. Required when `gmbEventType` is `OFFER`.
2735    #[serde(
2736        rename = "offerTitle",
2737        default,
2738        skip_serializing_if = "Option::is_none"
2739    )]
2740    pub offer_title: Option<String>,
2741    /// Start date and time for EVENT or OFFER posts. **Required:** When `gmbEventType` is
2742    /// `EVENT` or `OFFER`. **Structure:** - `startDate`: { year, month, day } - `startTime`: {
2743    /// hours, minutes, seconds }
2744    #[serde(rename = "startDate", default, skip_serializing_if = "Option::is_none")]
2745    pub start_date: Option<StartDateSchema>,
2746    /// End date and time for EVENT or OFFER posts. **Required:** When `gmbEventType` is `EVENT`
2747    /// or `OFFER`. **Validation:** Must be after `startDate`. **Structure:** - `endDate`: {
2748    /// year, month, day } - `endTime`: { hours, minutes, seconds }
2749    #[serde(rename = "endDate", default, skip_serializing_if = "Option::is_none")]
2750    pub end_date: Option<EndDateSchema>,
2751    /// URL to terms and conditions page. Required for OFFER posts.
2752    #[serde(
2753        rename = "termsConditions",
2754        default,
2755        skip_serializing_if = "Option::is_none"
2756    )]
2757    pub terms_conditions: Option<String>,
2758    /// Call-to-action URL. Required when `actionType` is set (except `none` and `call`).
2759    /// **Required for:** STANDARD and EVENT posts with actionType other than `none` or `call`.
2760    #[serde(default, skip_serializing_if = "Option::is_none")]
2761    pub url: Option<String>,
2762    /// Promotional coupon code. Required for OFFER posts.
2763    #[serde(
2764        rename = "couponCode",
2765        default,
2766        skip_serializing_if = "Option::is_none"
2767    )]
2768    pub coupon_code: Option<String>,
2769    /// URL where customers can redeem the offer online. Required for OFFER posts.
2770    #[serde(
2771        rename = "redeemOnlineUrl",
2772        default,
2773        skip_serializing_if = "Option::is_none"
2774    )]
2775    pub redeem_online_url: Option<String>,
2776    /// Call-to-action button type for the post. **Available Actions:** - `none` - No action
2777    /// button - `order` - Order online - `book` - Book appointment - `shop` - Shop now -
2778    /// `learn_more` - Learn more - `call` - Call now (no URL required) - `sign_up` - Sign up
2779    /// **Note:** All actions except `none` and `call` require a `url`.
2780    /// Allowed values: `none`, `order`, `book`, `shop`, `learn_more`, `call`, `sign_up`.
2781    #[serde(
2782        rename = "actionType",
2783        default,
2784        skip_serializing_if = "Option::is_none"
2785    )]
2786    pub action_type: Option<String>,
2787}
2788
2789/// `GeneralSuccessResponseDTO` from the GoHighLevel OpenAPI spec.
2790#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2791pub struct GeneralSuccessResponseDTO {
2792    /// A message indicating the result of the operation.
2793    #[serde(default, skip_serializing_if = "Option::is_none")]
2794    pub message: Option<String>,
2795    /// Updated slot information for items affected by the operation
2796    #[serde(
2797        rename = "updatedSlots",
2798        default,
2799        skip_serializing_if = "Vec::is_empty"
2800    )]
2801    pub updated_slots: Vec<UpdatedSlotInfoDTO>,
2802    /// Number of unique posts that had their slots changed
2803    #[serde(
2804        rename = "totalPostsChanged",
2805        default,
2806        skip_serializing_if = "Option::is_none"
2807    )]
2808    pub total_posts_changed: Option<f64>,
2809}
2810
2811/// `GetAccountSchema` from the GoHighLevel OpenAPI spec.
2812#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2813pub struct GetAccountSchema {
2814    /// Unique identifier for the connected account
2815    #[serde(default, skip_serializing_if = "Option::is_none")]
2816    pub id: Option<String>,
2817    /// OAuth provider account identifier
2818    #[serde(rename = "oauthId", default, skip_serializing_if = "Option::is_none")]
2819    pub oauth_id: Option<String>,
2820    /// Profile identifier from the social media platform
2821    #[serde(rename = "profileId", default, skip_serializing_if = "Option::is_none")]
2822    pub profile_id: Option<String>,
2823    /// Display name of the account
2824    #[serde(default, skip_serializing_if = "Option::is_none")]
2825    pub name: Option<String>,
2826    /// platform must be one of the following values: google, facebook, instagram, linkedin,
2827    /// tiktok
2828    #[serde(default, skip_serializing_if = "Option::is_none")]
2829    pub platform: Option<String>,
2830    /// Type of account (e.g., location, page, profile)
2831    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
2832    pub type_: Option<String>,
2833    /// Token expiration date and time
2834    #[serde(default, skip_serializing_if = "Option::is_none")]
2835    pub expire: Option<String>,
2836    /// Indicates if the account token has expired
2837    #[serde(rename = "isExpired", default, skip_serializing_if = "Option::is_none")]
2838    pub is_expired: Option<bool>,
2839    /// Additional metadata for the account
2840    #[serde(default, skip_serializing_if = "Option::is_none")]
2841    pub meta: Option<serde_json::Value>,
2842}
2843
2844/// `GetByIdResponseDTO` from the GoHighLevel OpenAPI spec.
2845#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2846pub struct GetByIdResponseDTO {
2847    /// Success or Failure
2848    /// Required by the API.
2849    pub success: bool,
2850    /// Status Code
2851    /// Required by the API.
2852    #[serde(rename = "statusCode")]
2853    pub status_code: f64,
2854    /// Message
2855    /// Required by the API.
2856    pub message: String,
2857    /// Requested Results
2858    #[serde(default, skip_serializing_if = "Option::is_none")]
2859    pub results: Option<GetCategorySchema>,
2860}
2861
2862/// `GetByIdResponseSchema` from the GoHighLevel OpenAPI spec.
2863#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2864pub struct GetByIdResponseSchema {
2865    /// Category Name
2866    #[serde(default, skip_serializing_if = "Option::is_none")]
2867    pub name: Option<String>,
2868    /// Color For Category
2869    #[serde(
2870        rename = "primaryColor",
2871        default,
2872        skip_serializing_if = "Option::is_none"
2873    )]
2874    pub primary_color: Option<String>,
2875    /// Secondary Color
2876    #[serde(
2877        rename = "secondaryColor",
2878        default,
2879        skip_serializing_if = "Option::is_none"
2880    )]
2881    pub secondary_color: Option<String>,
2882    /// Location ID
2883    #[serde(
2884        rename = "locationId",
2885        default,
2886        skip_serializing_if = "Option::is_none"
2887    )]
2888    pub location_id: Option<String>,
2889    /// ID
2890    #[serde(rename = "_id", default, skip_serializing_if = "Option::is_none")]
2891    pub id: Option<String>,
2892    /// Created By User
2893    #[serde(rename = "createdBy", default, skip_serializing_if = "Option::is_none")]
2894    pub created_by: Option<String>,
2895    /// Deleted Value
2896    /// Required by the API.
2897    pub deleted: bool,
2898    /// Message
2899    #[serde(default, skip_serializing_if = "Option::is_none")]
2900    pub message: Option<String>,
2901    /// Format: date-time (ISO-8601 string).
2902    #[serde(rename = "createdAt", default, skip_serializing_if = "Option::is_none")]
2903    pub created_at: Option<String>,
2904    /// Format: date-time (ISO-8601 string).
2905    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
2906    pub updated_at: Option<String>,
2907}
2908
2909/// `GetByLocationIdResponseDTO` from the GoHighLevel OpenAPI spec.
2910#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2911pub struct GetByLocationIdResponseDTO {
2912    /// Success or Failure
2913    /// Required by the API.
2914    pub success: bool,
2915    /// Status Code
2916    /// Required by the API.
2917    #[serde(rename = "statusCode")]
2918    pub status_code: f64,
2919    /// Message
2920    /// Required by the API.
2921    pub message: String,
2922    /// Requested Results
2923    #[serde(default, skip_serializing_if = "Option::is_none")]
2924    pub results: Option<GetByLocationIdResponseSchema>,
2925}
2926
2927/// `GetByLocationIdResponseSchema` from the GoHighLevel OpenAPI spec.
2928#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2929pub struct GetByLocationIdResponseSchema {
2930    /// Count
2931    /// Required by the API.
2932    pub count: f64,
2933    /// Meta Data
2934    /// Required by the API.
2935    #[serde(default, skip_serializing_if = "Vec::is_empty")]
2936    pub categories: Vec<CategorySchema>,
2937}
2938
2939/// `GetCategorySchema` from the GoHighLevel OpenAPI spec.
2940#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2941pub struct GetCategorySchema {
2942    /// Category Schema
2943    #[serde(default, skip_serializing_if = "Option::is_none")]
2944    pub category: Option<GetByIdResponseSchema>,
2945}
2946
2947/// `GetCsvPostResponseDTO` from the GoHighLevel OpenAPI spec.
2948#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2949pub struct GetCsvPostResponseDTO {
2950    /// Success or Failure
2951    /// Required by the API.
2952    pub success: bool,
2953    /// Status Code
2954    /// Required by the API.
2955    #[serde(rename = "statusCode")]
2956    pub status_code: f64,
2957    /// Message
2958    /// Required by the API.
2959    pub message: String,
2960    /// Requested Results
2961    #[serde(default, skip_serializing_if = "Option::is_none")]
2962    pub results: Option<GetCsvPostResponseSchema>,
2963}
2964
2965/// `GetCsvPostResponseSchema` from the GoHighLevel OpenAPI spec.
2966#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2967pub struct GetCsvPostResponseSchema {
2968    /// CSV Data
2969    #[serde(default, skip_serializing_if = "Option::is_none")]
2970    pub csv: Option<CSVImportSchema>,
2971    /// Total count of posts in CSV
2972    #[serde(default, skip_serializing_if = "Option::is_none")]
2973    pub count: Option<f64>,
2974    /// CSV Posts
2975    #[serde(default, skip_serializing_if = "Vec::is_empty")]
2976    pub posts: Vec<CSVPostSchema>,
2977}
2978
2979/// `GetFacebookAccountsResponseDTO` from the GoHighLevel OpenAPI spec.
2980#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2981pub struct GetFacebookAccountsResponseDTO {
2982    /// Success or Failure
2983    /// Required by the API.
2984    pub success: bool,
2985    /// Status Code
2986    /// Required by the API.
2987    #[serde(rename = "statusCode")]
2988    pub status_code: f64,
2989    /// Message
2990    /// Required by the API.
2991    pub message: String,
2992    /// Requested Results
2993    #[serde(default, skip_serializing_if = "Option::is_none")]
2994    pub results: Option<GetFacebookAccountsSchema>,
2995}
2996
2997/// `GetFacebookAccountsSchema` from the GoHighLevel OpenAPI spec.
2998#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2999pub struct GetFacebookAccountsSchema {
3000    /// Facebook Pages Details
3001    #[serde(default, skip_serializing_if = "Vec::is_empty")]
3002    pub pages: Vec<FacebookPageSchema>,
3003}
3004
3005/// `GetGoogleLocationAccountSchema` from the GoHighLevel OpenAPI spec.
3006#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3007pub struct GetGoogleLocationAccountSchema {
3008    /// Locations
3009    #[serde(default, skip_serializing_if = "Option::is_none")]
3010    pub locations: Option<GetGoogleLocationSchema>,
3011}
3012
3013/// `GetGoogleLocationResponseDTO` from the GoHighLevel OpenAPI spec.
3014#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3015pub struct GetGoogleLocationResponseDTO {
3016    /// Success or Failure
3017    /// Required by the API.
3018    pub success: bool,
3019    /// Status Code
3020    /// Required by the API.
3021    #[serde(rename = "statusCode")]
3022    pub status_code: f64,
3023    /// Message
3024    /// Required by the API.
3025    pub message: String,
3026    /// Requested Results
3027    #[serde(default, skip_serializing_if = "Option::is_none")]
3028    pub results: Option<GetGoogleLocationAccountSchema>,
3029}
3030
3031/// `GetGoogleLocationSchema` from the GoHighLevel OpenAPI spec.
3032#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3033pub struct GetGoogleLocationSchema {
3034    /// Google Location Details
3035    #[serde(default, skip_serializing_if = "Option::is_none")]
3036    pub location: Option<GoogleLocationSchema>,
3037    /// Google Account Details
3038    #[serde(default, skip_serializing_if = "Option::is_none")]
3039    pub account: Option<GoogleAccountsSchema>,
3040}
3041
3042/// `GetGroupSchema` from the GoHighLevel OpenAPI spec.
3043#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3044pub struct GetGroupSchema {
3045    /// Group Id
3046    /// Required by the API.
3047    pub id: String,
3048    /// name of group
3049    /// Required by the API.
3050    pub name: String,
3051    /// Array of account IDs belonging to this group
3052    /// Required by the API.
3053    #[serde(rename = "accountIds", default, skip_serializing_if = "Vec::is_empty")]
3054    pub account_ids: Vec<String>,
3055}
3056
3057/// `GetInstagramAccountsResponseDTO` from the GoHighLevel OpenAPI spec.
3058#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3059pub struct GetInstagramAccountsResponseDTO {
3060    /// Success or Failure
3061    /// Required by the API.
3062    pub success: bool,
3063    /// Status Code
3064    /// Required by the API.
3065    #[serde(rename = "statusCode")]
3066    pub status_code: f64,
3067    /// Message
3068    /// Required by the API.
3069    pub message: String,
3070    /// Requested Results
3071    #[serde(default, skip_serializing_if = "Option::is_none")]
3072    pub results: Option<GetInstagramAccountsSchema>,
3073}
3074
3075/// `GetInstagramAccountsSchema` from the GoHighLevel OpenAPI spec.
3076#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3077pub struct GetInstagramAccountsSchema {
3078    /// Instagram Account Details
3079    #[serde(default, skip_serializing_if = "Vec::is_empty")]
3080    pub accounts: Vec<InstagramAccountSchema>,
3081}
3082
3083/// `GetLinkedInAccountSchema` from the GoHighLevel OpenAPI spec.
3084#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3085pub struct GetLinkedInAccountSchema {
3086    /// LinkedIn Pages
3087    #[serde(default, skip_serializing_if = "Vec::is_empty")]
3088    pub pages: Vec<LinkedInPageSchema>,
3089    /// LinkedIn Profile Details
3090    #[serde(default, skip_serializing_if = "Vec::is_empty")]
3091    pub profile: Vec<LinkedInProfileSchema>,
3092}
3093
3094/// `GetLinkedInAccountsResponseDTO` from the GoHighLevel OpenAPI spec.
3095#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3096pub struct GetLinkedInAccountsResponseDTO {
3097    /// Success or Failure
3098    /// Required by the API.
3099    pub success: bool,
3100    /// Status Code
3101    /// Required by the API.
3102    #[serde(rename = "statusCode")]
3103    pub status_code: f64,
3104    /// Message
3105    /// Required by the API.
3106    pub message: String,
3107    /// Requested Results
3108    #[serde(default, skip_serializing_if = "Option::is_none")]
3109    pub results: Option<GetLinkedInAccountSchema>,
3110}
3111
3112/// `GetModifiedPayloadFormattedSchema` from the GoHighLevel OpenAPI spec.
3113#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3114pub struct GetModifiedPayloadFormattedSchema {
3115    /// MongoDB document ID of the post
3116    #[serde(rename = "_id", default, skip_serializing_if = "Option::is_none")]
3117    pub id: Option<String>,
3118    /// source must be one of the following values: composer, recurring, csv
3119    /// Allowed values: `composer`, `csv`, `recurring`, `review`, `rss`, `template-library`,
3120    /// `category-queue`, `native`.
3121    #[serde(default, skip_serializing_if = "Option::is_none")]
3122    pub source: Option<String>,
3123    /// Location Id
3124    /// Required by the API.
3125    #[serde(rename = "locationId")]
3126    pub location_id: String,
3127    /// Display date for the post
3128    /// Format: date-time (ISO-8601 string).
3129    #[serde(
3130        rename = "displayDate",
3131        default,
3132        skip_serializing_if = "Option::is_none"
3133    )]
3134    pub display_date: Option<String>,
3135    /// Date when the post was created
3136    /// Format: date-time (ISO-8601 string).
3137    #[serde(rename = "createdAt", default, skip_serializing_if = "Option::is_none")]
3138    pub created_at: Option<String>,
3139    /// Date when the post was last updated
3140    /// Format: date-time (ISO-8601 string).
3141    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
3142    pub updated_at: Option<String>,
3143    /// Account Id
3144    #[serde(rename = "accountId", default, skip_serializing_if = "Option::is_none")]
3145    pub account_id: Option<String>,
3146    /// Error
3147    /// Required by the API.
3148    pub error: String,
3149    /// Platform-specific post identifier
3150    #[serde(rename = "postId", default, skip_serializing_if = "Option::is_none")]
3151    pub post_id: Option<String>,
3152    /// Date when the post was published
3153    #[serde(
3154        rename = "publishedAt",
3155        default,
3156        skip_serializing_if = "Option::is_none"
3157    )]
3158    pub published_at: Option<String>,
3159    /// Post-level cover image (thumbnail) URL. For posts that contain a video, this is the
3160    /// resolved cover image used for the first video in `media[]`. It is set automatically from
3161    /// the `thumbnail` provided on the first video media item at create/edit time, or
3162    /// auto-generated from the video when one is not supplied. Per-item thumbnails inside
3163    /// `media[]` are not retained on the response — the primary cover image lives on this
3164    /// field.
3165    #[serde(default, skip_serializing_if = "Option::is_none")]
3166    pub thumbnail: Option<String>,
3167    /// Account Ids
3168    #[serde(rename = "accountIds", default, skip_serializing_if = "Vec::is_empty")]
3169    pub account_ids: Vec<String>,
3170    /// Content text of the post
3171    #[serde(default, skip_serializing_if = "Option::is_none")]
3172    pub summary: Option<String>,
3173    /// Post Media Data The limitations of media as per the platforms is provided through the
3174    /// reference link in API description
3175    #[serde(default, skip_serializing_if = "Vec::is_empty")]
3176    pub media: Vec<PostMediaSchema>,
3177    /// Status must be one of the following values: in_progress, draft, failed, published,
3178    /// scheduled, in_review, notification_sent, deleted
3179    #[serde(default, skip_serializing_if = "Option::is_none")]
3180    pub status: Option<serde_json::Value>,
3181    /// User ID who created the post
3182    #[serde(rename = "createdBy", default, skip_serializing_if = "Option::is_none")]
3183    pub created_by: Option<String>,
3184    /// Post Type must be one of the following values: - post, story, reel
3185    /// Required by the API.
3186    #[serde(rename = "type")]
3187    pub type_: serde_json::Value,
3188    /// Tag Ids
3189    #[serde(default, skip_serializing_if = "Vec::is_empty")]
3190    pub tags: Vec<String>,
3191    /// Og Tags Meta Data
3192    #[serde(
3193        rename = "ogTagsDetails",
3194        default,
3195        skip_serializing_if = "Option::is_none"
3196    )]
3197    pub og_tags_details: Option<OgTagsSchema>,
3198    /// Post Approval Details
3199    #[serde(
3200        rename = "postApprovalDetails",
3201        default,
3202        skip_serializing_if = "Option::is_none"
3203    )]
3204    pub post_approval_details: Option<FormatedApprovalDetails>,
3205    /// Tiktok Post Details
3206    #[serde(
3207        rename = "tiktokPostDetails",
3208        default,
3209        skip_serializing_if = "Option::is_none"
3210    )]
3211    pub tiktok_post_details: Option<TiktokPostSchema>,
3212    /// GMB Post Details
3213    #[serde(
3214        rename = "gmbPostDetails",
3215        default,
3216        skip_serializing_if = "Option::is_none"
3217    )]
3218    pub gmb_post_details: Option<GMBPostSchema>,
3219    /// User
3220    #[serde(default, skip_serializing_if = "Option::is_none")]
3221    pub user: Option<PostUserSchema>,
3222    /// Linkedin Post Details
3223    #[serde(
3224        rename = "linkedinPostDetails",
3225        default,
3226        skip_serializing_if = "Option::is_none"
3227    )]
3228    pub linkedin_post_details: Option<LinkedinPostSchema>,
3229    /// Pinterest Post Details
3230    #[serde(
3231        rename = "pinterestPostDetails",
3232        default,
3233        skip_serializing_if = "Option::is_none"
3234    )]
3235    pub pinterest_post_details: Option<PinterestPostSchema>,
3236    /// Facebook Post Details
3237    #[serde(
3238        rename = "facebookPostDetails",
3239        default,
3240        skip_serializing_if = "Option::is_none"
3241    )]
3242    pub facebook_post_details: Option<FacebookPostSchema>,
3243    /// Instagram Post Details
3244    #[serde(
3245        rename = "instagramPostDetails",
3246        default,
3247        skip_serializing_if = "Option::is_none"
3248    )]
3249    pub instagram_post_details: Option<InstagramPostSchema>,
3250    /// Youtube Post Details
3251    #[serde(
3252        rename = "youtubePostDetails",
3253        default,
3254        skip_serializing_if = "Option::is_none"
3255    )]
3256    pub youtube_post_details: Option<YoutubePostSchema>,
3257    /// Pass this parameter to optimize the image media
3258    #[serde(
3259        rename = "mediaOptimization",
3260        default,
3261        skip_serializing_if = "Option::is_none"
3262    )]
3263    pub media_optimization: Option<bool>,
3264}
3265
3266/// `GetPinterestAccountSchema` from the GoHighLevel OpenAPI spec.
3267#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3268pub struct GetPinterestAccountSchema {
3269    /// Pinterest Profile
3270    #[serde(default, skip_serializing_if = "Vec::is_empty")]
3271    pub profile: Vec<PinterestProfileSchema>,
3272}
3273
3274/// `GetPinterestAccountsResponseDTO` from the GoHighLevel OpenAPI spec.
3275#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3276pub struct GetPinterestAccountsResponseDTO {
3277    /// Success or Failure
3278    /// Required by the API.
3279    pub success: bool,
3280    /// Status Code
3281    /// Required by the API.
3282    #[serde(rename = "statusCode")]
3283    pub status_code: f64,
3284    /// Message
3285    /// Required by the API.
3286    pub message: String,
3287    /// Requested Results
3288    #[serde(default, skip_serializing_if = "Option::is_none")]
3289    pub results: Option<GetPinterestAccountSchema>,
3290}
3291
3292/// `GetPostFormattedSchema` from the GoHighLevel OpenAPI spec.
3293#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3294pub struct GetPostFormattedSchema {
3295    /// MongoDB document ID of the post
3296    #[serde(rename = "_id", default, skip_serializing_if = "Option::is_none")]
3297    pub id: Option<String>,
3298    /// source must be one of the following values: composer, recurring, csv
3299    /// Allowed values: `composer`, `csv`, `recurring`, `review`, `rss`.
3300    #[serde(default, skip_serializing_if = "Option::is_none")]
3301    pub source: Option<String>,
3302    /// Location Id
3303    /// Required by the API.
3304    #[serde(rename = "locationId")]
3305    pub location_id: String,
3306    /// platform must be one of the following values: google, facebook, instagram, linkedin,
3307    /// twitter, tiktok
3308    #[serde(default, skip_serializing_if = "Option::is_none")]
3309    pub platform: Option<String>,
3310    /// Post-level cover image (thumbnail) URL. For posts that contain a video, this is the
3311    /// resolved cover image used for the first video in `media[]`. It is set automatically from
3312    /// the `thumbnail` provided on the first video media item at create/edit time, or
3313    /// auto-generated from the video when one is not supplied. Per-item thumbnails inside
3314    /// `media[]` are not retained on the response — the primary cover image lives on this
3315    /// field.
3316    #[serde(default, skip_serializing_if = "Option::is_none")]
3317    pub thumbnail: Option<String>,
3318    /// Display date for the post
3319    /// Format: date-time (ISO-8601 string).
3320    #[serde(
3321        rename = "displayDate",
3322        default,
3323        skip_serializing_if = "Option::is_none"
3324    )]
3325    pub display_date: Option<String>,
3326    /// Date when the post was created
3327    /// Format: date-time (ISO-8601 string).
3328    #[serde(rename = "createdAt", default, skip_serializing_if = "Option::is_none")]
3329    pub created_at: Option<String>,
3330    /// Date when the post was last updated
3331    /// Format: date-time (ISO-8601 string).
3332    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
3333    pub updated_at: Option<String>,
3334    /// Account Id
3335    #[serde(rename = "accountId", default, skip_serializing_if = "Option::is_none")]
3336    pub account_id: Option<String>,
3337    /// Error
3338    /// Required by the API.
3339    pub error: String,
3340    /// Platform-specific post identifier
3341    #[serde(rename = "postId", default, skip_serializing_if = "Option::is_none")]
3342    pub post_id: Option<String>,
3343    /// Date when the post was published
3344    #[serde(
3345        rename = "publishedAt",
3346        default,
3347        skip_serializing_if = "Option::is_none"
3348    )]
3349    pub published_at: Option<String>,
3350    /// Account Ids
3351    #[serde(rename = "accountIds", default, skip_serializing_if = "Vec::is_empty")]
3352    pub account_ids: Vec<String>,
3353    /// Content text of the post
3354    #[serde(default, skip_serializing_if = "Option::is_none")]
3355    pub summary: Option<String>,
3356    /// Post Media Data The limitations of media as per the platforms is provided through the
3357    /// reference link in API description
3358    #[serde(default, skip_serializing_if = "Vec::is_empty")]
3359    pub media: Vec<PostMediaSchema>,
3360    /// Status must be one of the following values: in_progress, draft, failed, published,
3361    /// scheduled, in_review, notification_sent, deleted
3362    #[serde(default, skip_serializing_if = "Option::is_none")]
3363    pub status: Option<serde_json::Value>,
3364    /// User ID who created the post
3365    #[serde(rename = "createdBy", default, skip_serializing_if = "Option::is_none")]
3366    pub created_by: Option<String>,
3367    /// Post Type must be one of the following values: - post, story, reel
3368    /// Required by the API.
3369    #[serde(rename = "type")]
3370    pub type_: serde_json::Value,
3371    /// Tag Ids
3372    #[serde(default, skip_serializing_if = "Vec::is_empty")]
3373    pub tags: Vec<String>,
3374    /// Og Tags Meta Data
3375    #[serde(
3376        rename = "ogTagsDetails",
3377        default,
3378        skip_serializing_if = "Option::is_none"
3379    )]
3380    pub og_tags_details: Option<OgTagsSchema>,
3381    /// Post Approval Details
3382    #[serde(
3383        rename = "postApprovalDetails",
3384        default,
3385        skip_serializing_if = "Option::is_none"
3386    )]
3387    pub post_approval_details: Option<FormatedApprovalDetails>,
3388    /// Tiktok Post Details
3389    #[serde(
3390        rename = "tiktokPostDetails",
3391        default,
3392        skip_serializing_if = "Option::is_none"
3393    )]
3394    pub tiktok_post_details: Option<TiktokPostSchema>,
3395    /// GMB Post Details
3396    #[serde(
3397        rename = "gmbPostDetails",
3398        default,
3399        skip_serializing_if = "Option::is_none"
3400    )]
3401    pub gmb_post_details: Option<GMBPostSchema>,
3402    /// Bluesky Post Details
3403    #[serde(
3404        rename = "blueskyPostDetails",
3405        default,
3406        skip_serializing_if = "Option::is_none"
3407    )]
3408    pub bluesky_post_details: Option<BlueskyPostSchema>,
3409    /// User
3410    #[serde(default, skip_serializing_if = "Option::is_none")]
3411    pub user: Option<PostUserSchema>,
3412    /// Linkedin Post Details
3413    #[serde(
3414        rename = "linkedinPostDetails",
3415        default,
3416        skip_serializing_if = "Option::is_none"
3417    )]
3418    pub linkedin_post_details: Option<LinkedinPostSchema>,
3419    /// Pinterest Post Details
3420    #[serde(
3421        rename = "pinterestPostDetails",
3422        default,
3423        skip_serializing_if = "Option::is_none"
3424    )]
3425    pub pinterest_post_details: Option<PinterestPostSchema>,
3426    /// Facebook Post Details
3427    #[serde(
3428        rename = "facebookPostDetails",
3429        default,
3430        skip_serializing_if = "Option::is_none"
3431    )]
3432    pub facebook_post_details: Option<FacebookPostSchema>,
3433    /// Instagram Post Details
3434    #[serde(
3435        rename = "instagramPostDetails",
3436        default,
3437        skip_serializing_if = "Option::is_none"
3438    )]
3439    pub instagram_post_details: Option<InstagramPostSchema>,
3440    /// Youtube Post Details
3441    #[serde(
3442        rename = "youtubePostDetails",
3443        default,
3444        skip_serializing_if = "Option::is_none"
3445    )]
3446    pub youtube_post_details: Option<YoutubePostSchema>,
3447    /// Pass this parameter to optimize the image media
3448    #[serde(
3449        rename = "mediaOptimization",
3450        default,
3451        skip_serializing_if = "Option::is_none"
3452    )]
3453    pub media_optimization: Option<bool>,
3454    /// Aggregated engagement metrics for the published post. Populated asynchronously by the
3455    /// insights sync workers for supported platforms (Facebook, Instagram, LinkedIn, YouTube).
3456    /// Absent on posts that have not been synced yet or on platforms where insights are not
3457    /// supported.
3458    #[serde(default, skip_serializing_if = "Option::is_none")]
3459    pub insights: Option<PostInsightsSchema>,
3460}
3461
3462/// `GetPostSuccessfulResponseDTO` from the GoHighLevel OpenAPI spec.
3463#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3464pub struct GetPostSuccessfulResponseDTO {
3465    /// Success or Failure
3466    /// Required by the API.
3467    pub success: bool,
3468    /// Status Code
3469    /// Required by the API.
3470    #[serde(rename = "statusCode")]
3471    pub status_code: f64,
3472    /// Message
3473    /// Required by the API.
3474    pub message: String,
3475    /// Requested Results
3476    #[serde(default, skip_serializing_if = "Option::is_none")]
3477    pub results: Option<GetPostSuccessfulResponseSchema>,
3478}
3479
3480/// `GetPostSuccessfulResponseSchema` from the GoHighLevel OpenAPI spec.
3481#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3482pub struct GetPostSuccessfulResponseSchema {
3483    /// Post Data
3484    #[serde(default, skip_serializing_if = "Option::is_none")]
3485    pub post: Option<GetPostFormattedSchema>,
3486}
3487
3488/// `GetTagsByIdResponseDTO` from the GoHighLevel OpenAPI spec.
3489#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3490pub struct GetTagsByIdResponseDTO {
3491    /// Success or Failure
3492    /// Required by the API.
3493    pub success: bool,
3494    /// Status Code
3495    /// Required by the API.
3496    #[serde(rename = "statusCode")]
3497    pub status_code: f64,
3498    /// Message
3499    /// Required by the API.
3500    pub message: String,
3501    /// Requested Results
3502    #[serde(default, skip_serializing_if = "Option::is_none")]
3503    pub results: Option<GetTagsByIdResponseSchema>,
3504}
3505
3506/// `GetTagsByIdResponseSchema` from the GoHighLevel OpenAPI spec.
3507#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3508pub struct GetTagsByIdResponseSchema {
3509    /// Social Media Tag Data
3510    /// Required by the API.
3511    #[serde(default, skip_serializing_if = "Vec::is_empty")]
3512    pub tags: Vec<SocialMediaTagSchema>,
3513    /// Count
3514    #[serde(default, skip_serializing_if = "Option::is_none")]
3515    pub count: Option<f64>,
3516}
3517
3518/// `GetTagsByLocationIdResponseDTO` from the GoHighLevel OpenAPI spec.
3519#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3520pub struct GetTagsByLocationIdResponseDTO {
3521    /// Success or Failure
3522    /// Required by the API.
3523    pub success: bool,
3524    /// Status Code
3525    /// Required by the API.
3526    #[serde(rename = "statusCode")]
3527    pub status_code: f64,
3528    /// Message
3529    /// Required by the API.
3530    pub message: String,
3531    /// Requested Results
3532    #[serde(default, skip_serializing_if = "Option::is_none")]
3533    pub results: Option<GetTagsByLocationIdResponseSchema>,
3534}
3535
3536/// `GetTagsByLocationIdResponseSchema` from the GoHighLevel OpenAPI spec.
3537#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3538pub struct GetTagsByLocationIdResponseSchema {
3539    /// Tags Data
3540    #[serde(default, skip_serializing_if = "Vec::is_empty")]
3541    pub tags: Vec<SocialMediaTagSchema>,
3542    /// Count
3543    #[serde(default, skip_serializing_if = "Option::is_none")]
3544    pub count: Option<f64>,
3545}
3546
3547/// `GetTiktokAccountResponseDTO` from the GoHighLevel OpenAPI spec.
3548#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3549pub struct GetTiktokAccountResponseDTO {
3550    /// Success or Failure
3551    /// Required by the API.
3552    pub success: bool,
3553    /// Status Code
3554    /// Required by the API.
3555    #[serde(rename = "statusCode")]
3556    pub status_code: f64,
3557    /// Message
3558    /// Required by the API.
3559    pub message: String,
3560    /// Requested Results
3561    #[serde(default, skip_serializing_if = "Option::is_none")]
3562    pub results: Option<GetTiktokAccountSchema>,
3563}
3564
3565/// `GetTiktokAccountSchema` from the GoHighLevel OpenAPI spec.
3566#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3567pub struct GetTiktokAccountSchema {
3568    /// Tiktok Business Account
3569    #[serde(default, skip_serializing_if = "Vec::is_empty")]
3570    pub profile: Vec<TiktokProfileSchema>,
3571}
3572
3573/// `GetTiktokBusinessAccountResponseDTO` from the GoHighLevel OpenAPI spec.
3574#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3575pub struct GetTiktokBusinessAccountResponseDTO {
3576    /// Success or Failure
3577    /// Required by the API.
3578    pub success: bool,
3579    /// Status Code
3580    /// Required by the API.
3581    #[serde(rename = "statusCode")]
3582    pub status_code: f64,
3583    /// Message
3584    /// Required by the API.
3585    pub message: String,
3586    /// Requested Results
3587    #[serde(default, skip_serializing_if = "Option::is_none")]
3588    pub results: Option<GetTiktokBusinessAccountSchema>,
3589}
3590
3591/// `GetTiktokBusinessAccountSchema` from the GoHighLevel OpenAPI spec.
3592#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3593pub struct GetTiktokBusinessAccountSchema {
3594    /// Tiktok Profile
3595    #[serde(default, skip_serializing_if = "Vec::is_empty")]
3596    pub profile: Vec<TiktokProfileSchema>,
3597}
3598
3599/// `GetTwitterAccountsResponseDTO` from the GoHighLevel OpenAPI spec.
3600#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3601pub struct GetTwitterAccountsResponseDTO {
3602    /// Success or Failure
3603    /// Required by the API.
3604    pub success: bool,
3605    /// Status Code
3606    /// Required by the API.
3607    #[serde(rename = "statusCode")]
3608    pub status_code: f64,
3609    /// Message
3610    /// Required by the API.
3611    pub message: String,
3612    /// Requested Results
3613    #[serde(default, skip_serializing_if = "Option::is_none")]
3614    pub results: Option<GetTwitterAccountsSchema>,
3615}
3616
3617/// `GetTwitterAccountsSchema` from the GoHighLevel OpenAPI spec.
3618#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3619pub struct GetTwitterAccountsSchema {
3620    /// Twitter Profile Details
3621    #[serde(default, skip_serializing_if = "Vec::is_empty")]
3622    pub profile: Vec<TwitterProfileSchema>,
3623}
3624
3625/// `GetUploadStatusResponseDTO` from the GoHighLevel OpenAPI spec.
3626#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3627pub struct GetUploadStatusResponseDTO {
3628    /// Success or Failure
3629    /// Required by the API.
3630    pub success: bool,
3631    /// Status Code
3632    /// Required by the API.
3633    #[serde(rename = "statusCode")]
3634    pub status_code: f64,
3635    /// Message
3636    /// Required by the API.
3637    pub message: String,
3638    /// Requested Results
3639    #[serde(default, skip_serializing_if = "Option::is_none")]
3640    pub results: Option<GetUploadStatusResponseSchema>,
3641}
3642
3643/// `GetUploadStatusResponseSchema` from the GoHighLevel OpenAPI spec.
3644#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3645pub struct GetUploadStatusResponseSchema {
3646    /// CSV Data
3647    /// Required by the API.
3648    #[serde(default, skip_serializing_if = "Vec::is_empty")]
3649    pub csvs: Vec<CSVImportSchema>,
3650    /// Total count of CSV records
3651    /// Required by the API.
3652    pub count: f64,
3653}
3654
3655/// `GetYouTubeAccountsResponseDTO` from the GoHighLevel OpenAPI spec.
3656#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3657pub struct GetYouTubeAccountsResponseDTO {
3658    /// Success or Failure
3659    /// Required by the API.
3660    pub success: bool,
3661    /// Status Code
3662    /// Required by the API.
3663    #[serde(rename = "statusCode")]
3664    pub status_code: f64,
3665    /// Message
3666    /// Required by the API.
3667    pub message: String,
3668    /// Requested Results
3669    #[serde(default, skip_serializing_if = "Option::is_none")]
3670    pub results: Option<GetYoutubeAccountSchema>,
3671}
3672
3673/// `GetYoutubeAccountSchema` from the GoHighLevel OpenAPI spec.
3674#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3675pub struct GetYoutubeAccountSchema {
3676    /// Youtube Profile
3677    #[serde(default, skip_serializing_if = "Vec::is_empty")]
3678    pub profile: Vec<YoutubeProfileSchema>,
3679}
3680
3681/// `GoogleAccountsSchema` from the GoHighLevel OpenAPI spec.
3682#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3683pub struct GoogleAccountsSchema {
3684    /// Google Business account identifier
3685    #[serde(default, skip_serializing_if = "Option::is_none")]
3686    pub name: Option<String>,
3687    /// Display name of the Google Business account
3688    #[serde(
3689        rename = "accountName",
3690        default,
3691        skip_serializing_if = "Option::is_none"
3692    )]
3693    pub account_name: Option<String>,
3694    /// Type of Google Business account
3695    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
3696    pub type_: Option<String>,
3697    /// Verification state of the account
3698    #[serde(
3699        rename = "verificationState",
3700        default,
3701        skip_serializing_if = "Option::is_none"
3702    )]
3703    pub verification_state: Option<String>,
3704    /// Vetted state of the account by Google
3705    #[serde(
3706        rename = "vettedState",
3707        default,
3708        skip_serializing_if = "Option::is_none"
3709    )]
3710    pub vetted_state: Option<String>,
3711}
3712
3713/// `GoogleLocationSchema` from the GoHighLevel OpenAPI spec.
3714#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3715pub struct GoogleLocationSchema {
3716    /// Google Business account identifier
3717    #[serde(default, skip_serializing_if = "Option::is_none")]
3718    pub name: Option<String>,
3719    /// Store code or location identifier
3720    #[serde(rename = "storeCode", default, skip_serializing_if = "Option::is_none")]
3721    pub store_code: Option<String>,
3722    /// Business location title or name
3723    #[serde(default, skip_serializing_if = "Option::is_none")]
3724    pub title: Option<String>,
3725    /// Meta data not related to User
3726    #[serde(default, skip_serializing_if = "Option::is_none")]
3727    pub metadata: Option<serde_json::Value>,
3728    /// Store front address
3729    #[serde(
3730        rename = "storefrontAddress",
3731        default,
3732        skip_serializing_if = "Option::is_none"
3733    )]
3734    pub storefront_address: Option<serde_json::Value>,
3735    /// All locations and chain related to this one
3736    #[serde(
3737        rename = "relationshipData",
3738        default,
3739        skip_serializing_if = "Option::is_none"
3740    )]
3741    pub relationship_data: Option<serde_json::Value>,
3742    /// Indicates if location limit has been reached
3743    #[serde(
3744        rename = "maxLocation",
3745        default,
3746        skip_serializing_if = "Option::is_none"
3747    )]
3748    pub max_location: Option<bool>,
3749    /// Indicates if the location is verified by Google
3750    #[serde(
3751        rename = "isVerified",
3752        default,
3753        skip_serializing_if = "Option::is_none"
3754    )]
3755    pub is_verified: Option<bool>,
3756    /// Indicates if the location is currently connected
3757    #[serde(
3758        rename = "isConnected",
3759        default,
3760        skip_serializing_if = "Option::is_none"
3761    )]
3762    pub is_connected: Option<bool>,
3763}
3764
3765/// `IOgTagsSchema` from the GoHighLevel OpenAPI spec.
3766#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3767pub struct IOgTagsSchema {
3768    /// Tag url
3769    #[serde(default, skip_serializing_if = "Option::is_none")]
3770    pub url: Option<String>,
3771    /// Tag description
3772    #[serde(
3773        rename = "ogDescription",
3774        default,
3775        skip_serializing_if = "Option::is_none"
3776    )]
3777    pub og_description: Option<String>,
3778    /// OG Image data
3779    #[serde(rename = "ogImage", default, skip_serializing_if = "Option::is_none")]
3780    pub og_image: Option<OgImageSchema>,
3781    /// Tag Title
3782    #[serde(rename = "ogTitle", default, skip_serializing_if = "Option::is_none")]
3783    pub og_title: Option<String>,
3784    /// Tag Url
3785    #[serde(rename = "ogUrl", default, skip_serializing_if = "Option::is_none")]
3786    pub og_url: Option<String>,
3787    /// Site Name
3788    #[serde(
3789        rename = "ogSiteName",
3790        default,
3791        skip_serializing_if = "Option::is_none"
3792    )]
3793    pub og_site_name: Option<String>,
3794    /// Og Tag Error
3795    #[serde(default, skip_serializing_if = "Option::is_none")]
3796    pub error: Option<String>,
3797}
3798
3799/// `InstagramAccountSchema` from the GoHighLevel OpenAPI spec.
3800#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3801pub struct InstagramAccountSchema {
3802    /// Instagram account identifier
3803    #[serde(default, skip_serializing_if = "Option::is_none")]
3804    pub id: Option<String>,
3805    /// Display name of the Instagram account
3806    #[serde(default, skip_serializing_if = "Option::is_none")]
3807    pub name: Option<String>,
3808    /// Avatar or profile picture URL
3809    #[serde(default, skip_serializing_if = "Option::is_none")]
3810    pub avatar: Option<String>,
3811    /// Facebook page ID associated with the Instagram account
3812    #[serde(rename = "pageId", default, skip_serializing_if = "Option::is_none")]
3813    pub page_id: Option<String>,
3814    /// Indicates if the account is currently connected
3815    #[serde(
3816        rename = "isConnected",
3817        default,
3818        skip_serializing_if = "Option::is_none"
3819    )]
3820    pub is_connected: Option<bool>,
3821}
3822
3823/// `InstagramPostSchema` from the GoHighLevel OpenAPI spec.
3824#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3825pub struct InstagramPostSchema {
3826    /// Instagram post format type. **Available Types:** - `post` - Standard feed post (images,
3827    /// videos, carousels) - `story` - 24-hour temporary story - `reel` - Short-form vertical
3828    /// video (up to 90 seconds) **Restrictions:** - Media is REQUIRED for all Instagram posts -
3829    /// Reels: Require exactly 1 video - Stories: Captions not supported, JPEG only for images
3830    /// Allowed values: `post`, `story`, `reel`.
3831    /// Required by the API.
3832    #[serde(rename = "type")]
3833    pub type_: String,
3834    /// Object mapping account IDs to arrays of associated usernames for collaboration. Only
3835    /// allowed for type "post" and "reels"
3836    #[serde(default, skip_serializing_if = "Option::is_none")]
3837    pub collaborators: Option<serde_json::Value>,
3838    /// Show Reel on profile grid/feed. **✅ Applies to:** Reels only - `true` - Reel appears on
3839    /// your profile grid - `false` - Reel only appears in Reels tab
3840    #[serde(
3841        rename = "showOnFeed",
3842        default,
3843        skip_serializing_if = "Option::is_none"
3844    )]
3845    pub show_on_feed: Option<bool>,
3846    /// Send Instagram Story via Push Notification instead of direct posting. Only applicable
3847    /// for Story type.
3848    #[serde(
3849        rename = "publishViaPushNotification",
3850        default,
3851        skip_serializing_if = "Option::is_none"
3852    )]
3853    pub publish_via_push_notification: Option<bool>,
3854    /// Note to the publisher for manual posting guidance. Only used when
3855    /// publishViaPushNotification is true.
3856    #[serde(
3857        rename = "publisherNote",
3858        default,
3859        skip_serializing_if = "Option::is_none"
3860    )]
3861    pub publisher_note: Option<String>,
3862}
3863
3864/// `LinkedInPageSchema` from the GoHighLevel OpenAPI spec.
3865#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3866pub struct LinkedInPageSchema {
3867    /// Page ID
3868    #[serde(default, skip_serializing_if = "Option::is_none")]
3869    pub id: Option<String>,
3870    /// LinkedIn Page Name
3871    #[serde(default, skip_serializing_if = "Option::is_none")]
3872    pub name: Option<String>,
3873    /// Profile Avatar url
3874    #[serde(default, skip_serializing_if = "Option::is_none")]
3875    pub avatar: Option<String>,
3876    /// URN
3877    #[serde(default, skip_serializing_if = "Option::is_none")]
3878    pub urn: Option<String>,
3879    /// is connected to app
3880    #[serde(
3881        rename = "isConnected",
3882        default,
3883        skip_serializing_if = "Option::is_none"
3884    )]
3885    pub is_connected: Option<bool>,
3886}
3887
3888/// `LinkedInProfileSchema` from the GoHighLevel OpenAPI spec.
3889#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3890pub struct LinkedInProfileSchema {
3891    /// Id
3892    #[serde(default, skip_serializing_if = "Option::is_none")]
3893    pub id: Option<String>,
3894    /// Name of profile
3895    #[serde(default, skip_serializing_if = "Option::is_none")]
3896    pub name: Option<String>,
3897    /// Profile avatar
3898    #[serde(default, skip_serializing_if = "Option::is_none")]
3899    pub avatar: Option<String>,
3900    /// URN
3901    #[serde(default, skip_serializing_if = "Option::is_none")]
3902    pub urn: Option<String>,
3903    /// is connected to app
3904    #[serde(
3905        rename = "isConnected",
3906        default,
3907        skip_serializing_if = "Option::is_none"
3908    )]
3909    pub is_connected: Option<bool>,
3910}
3911
3912/// `LinkedinPollDto` from the GoHighLevel OpenAPI spec.
3913#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3914pub struct LinkedinPollDto {
3915    /// Question for the poll. Max length: 140 characters.
3916    /// Required by the API.
3917    pub question: String,
3918    /// Poll options. Minimum 2, maximum 4. Each option text max 30 characters. Option texts
3919    /// must be unique.
3920    /// Required by the API.
3921    #[serde(default, skip_serializing_if = "Vec::is_empty")]
3922    pub options: Vec<LinkedinPollOptionDto>,
3923    /// Poll settings (duration).
3924    /// Required by the API.
3925    pub settings: LinkedinPollSettingsDto,
3926}
3927
3928/// `LinkedinPollOptionDto` from the GoHighLevel OpenAPI spec.
3929#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3930pub struct LinkedinPollOptionDto {
3931    /// Text describing the option. Max length: 30 characters.
3932    /// Required by the API.
3933    pub text: String,
3934}
3935
3936/// `LinkedinPollSettingsDto` from the GoHighLevel OpenAPI spec.
3937#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3938pub struct LinkedinPollSettingsDto {
3939    /// Duration the poll stays open for votes.
3940    /// Allowed values: `ONE_DAY`, `THREE_DAYS`, `SEVEN_DAYS`, `FOURTEEN_DAYS`.
3941    /// Required by the API.
3942    pub duration: String,
3943}
3944
3945/// `LinkedinPostSchema` from the GoHighLevel OpenAPI spec.
3946#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3947pub struct LinkedinPostSchema {
3948    /// Title for the PDF document carousel. Displayed as the document name on LinkedIn. **Max
3949    /// length:** 100 characters **Tip:** Use a descriptive title that explains the document
3950    /// content.
3951    /// Required by the API.
3952    #[serde(rename = "pdfTitle")]
3953    pub pdf_title: String,
3954    /// Post images as a PDF document carousel. **Limits:** - Max 300 pages/images - Max PDF
3955    /// size: 100 MB
3956    /// Required by the API.
3957    #[serde(rename = "postAsPdf")]
3958    pub post_as_pdf: bool,
3959    /// Publish a LinkedIn poll post. **Required fields when `poll` is supplied:** - `question`
3960    /// (max 140 characters) - `options`: 2 to 4 entries, each `text` ≤ 30 characters; option
3961    /// texts must be unique - `settings.duration`: one of `ONE_DAY`, `THREE_DAYS`,
3962    /// `SEVEN_DAYS`, `FOURTEEN_DAYS` **LinkedIn restrictions:** - Polls cannot be edited after
3963    /// publishing. - A poll post cannot include `media` or a meta-link preview.
3964    #[serde(default, skip_serializing_if = "Option::is_none")]
3965    pub poll: Option<LinkedinPollDto>,
3966}
3967
3968/// `LocationAndAccountDeleteResponseDTO` from the GoHighLevel OpenAPI spec.
3969#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3970pub struct LocationAndAccountDeleteResponseDTO {
3971    /// Success or Failure
3972    /// Required by the API.
3973    pub success: bool,
3974    /// Status Code
3975    /// Required by the API.
3976    #[serde(rename = "statusCode")]
3977    pub status_code: f64,
3978    /// Message
3979    /// Required by the API.
3980    pub message: String,
3981    /// Requested Results
3982    #[serde(default, skip_serializing_if = "Option::is_none")]
3983    pub results: Option<DeleteAccountResponseSchema>,
3984}
3985
3986/// `MentionsDTO` from the GoHighLevel OpenAPI spec.
3987#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3988pub struct MentionsDTO {
3989    /// Mention name
3990    /// Required by the API.
3991    pub name: String,
3992    /// Mention ID
3993    /// Required by the API.
3994    pub id: String,
3995    /// Mention offset
3996    /// Required by the API.
3997    pub offset: f64,
3998    /// Mention length
3999    /// Required by the API.
4000    pub length: f64,
4001    /// Mention slug for community profile link
4002    #[serde(default, skip_serializing_if = "Option::is_none")]
4003    pub slug: Option<String>,
4004}
4005
4006/// `MetaDTO` from the GoHighLevel OpenAPI spec.
4007#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4008pub struct MetaDTO {
4009    /// Total count of items
4010    #[serde(default, skip_serializing_if = "Option::is_none")]
4011    pub count: Option<String>,
4012}
4013
4014/// `OgImageSchema` from the GoHighLevel OpenAPI spec.
4015#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4016pub struct OgImageSchema {
4017    /// Image url
4018    #[serde(default, skip_serializing_if = "Option::is_none")]
4019    pub url: Option<String>,
4020    /// Image width
4021    #[serde(default, skip_serializing_if = "Option::is_none")]
4022    pub width: Option<f64>,
4023    /// Image height
4024    #[serde(default, skip_serializing_if = "Option::is_none")]
4025    pub height: Option<f64>,
4026    /// Image Type
4027    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
4028    pub type_: Option<String>,
4029}
4030
4031/// `OgTagsDTO` from the GoHighLevel OpenAPI spec.
4032#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4033pub struct OgTagsDTO {
4034    /// The canonical URL of the content.
4035    #[serde(rename = "metaLink", default, skip_serializing_if = "Option::is_none")]
4036    pub meta_link: Option<serde_json::Value>,
4037    /// URL of the content's primary image.
4038    #[serde(rename = "metaImage", default, skip_serializing_if = "Option::is_none")]
4039    pub meta_image: Option<serde_json::Value>,
4040    /// The title of the content.
4041    #[serde(rename = "ogTitle", default, skip_serializing_if = "Option::is_none")]
4042    pub og_title: Option<serde_json::Value>,
4043}
4044
4045/// `OgTagsInputDTO` from the GoHighLevel OpenAPI spec.
4046#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4047pub struct OgTagsInputDTO {
4048    /// The canonical URL of the content for link preview.
4049    #[serde(rename = "metaLink", default, skip_serializing_if = "Option::is_none")]
4050    pub meta_link: Option<serde_json::Value>,
4051    /// URL of the image to display in link preview.
4052    #[serde(rename = "metaImage", default, skip_serializing_if = "Option::is_none")]
4053    pub meta_image: Option<serde_json::Value>,
4054    /// Title to display in link preview.
4055    #[serde(rename = "ogTitle", default, skip_serializing_if = "Option::is_none")]
4056    pub og_title: Option<serde_json::Value>,
4057}
4058
4059/// `OgTagsSchema` from the GoHighLevel OpenAPI spec.
4060#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4061pub struct OgTagsSchema {
4062    /// Preview image URL for the shared link. **Best Practices:** - Use high-quality images
4063    /// (1200x630px recommended) - Ensure the image is publicly accessible **Auto-fetch:** Use
4064    /// the Get Metatags API to fetch OG data from a URL.
4065    #[serde(rename = "metaImage", default, skip_serializing_if = "Option::is_none")]
4066    pub meta_image: Option<String>,
4067    /// URL of the webpage being shared. This is the destination when users click the link
4068    /// preview.
4069    #[serde(rename = "metaLink", default, skip_serializing_if = "Option::is_none")]
4070    pub meta_link: Option<String>,
4071    /// Custom title for the link preview. Overrides the page's og:title meta tag. **Tip:** Keep
4072    /// titles concise (50-60 characters) for best display across platforms.
4073    #[serde(rename = "ogTitle", default, skip_serializing_if = "Option::is_none")]
4074    pub og_title: Option<String>,
4075    /// Custom description for the link preview. Overrides the page's og:description meta tag.
4076    /// **Tip:** Keep descriptions under 155 characters for optimal display.
4077    #[serde(
4078        rename = "ogDescription",
4079        default,
4080        skip_serializing_if = "Option::is_none"
4081    )]
4082    pub og_description: Option<String>,
4083}
4084
4085/// Per-account Pinterest board selection. Each entry binds one connected Pinterest account
4086/// to a list of board IDs the pin should publish to. Each selected board produces an
4087/// independent child post tracked separately for success/failure.
4088#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4089pub struct PinterestBoardSelection {
4090    /// Connected Pinterest account ID. Must match one of the accounts referenced in the post's
4091    /// `userIds`.
4092    /// Required by the API.
4093    #[serde(rename = "accountId")]
4094    pub account_id: String,
4095    /// Pinterest board IDs to publish to on this account. Each board produces an independent
4096    /// child post. Capped at 25 boards per account.
4097    /// Required by the API.
4098    #[serde(default, skip_serializing_if = "Vec::is_empty")]
4099    pub boards: Vec<String>,
4100}
4101
4102/// `PinterestOAuthAccountSchema` from the GoHighLevel OpenAPI spec.
4103#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4104pub struct PinterestOAuthAccountSchema {
4105    /// The spec defines no fields for this schema.
4106    #[serde(flatten)]
4107    pub extra: serde_json::Map<String, serde_json::Value>,
4108}
4109
4110/// `PinterestPostSchema` from the GoHighLevel OpenAPI spec.
4111#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4112pub struct PinterestPostSchema {
4113    /// Pin title displayed on Pinterest. **Max length:** 100 characters **Best Practices:** -
4114    /// Include relevant keywords - Be descriptive and engaging
4115    #[serde(default, skip_serializing_if = "Option::is_none")]
4116    pub title: Option<String>,
4117    /// Destination URL for the pin. Users clicking the pin will be directed to this URL. **Max
4118    /// length:** 2048 characters **Best Practices:** - Use direct links to relevant content -
4119    /// Track with UTM parameters for analytics
4120    #[serde(default, skip_serializing_if = "Option::is_none")]
4121    pub link: Option<String>,
4122    /// **DEPRECATED — use `pinterestBoards` instead.** Will be removed on July 31, 2026. Legacy
4123    /// mapping of Pinterest account OAuth IDs to a single board ID: `{ accountOAuthId:
4124    /// "boardId" }` For multi-board posting, use `pinterestBoards`.
4125    #[serde(rename = "boardIds", default, skip_serializing_if = "Option::is_none")]
4126    pub board_ids: Option<serde_json::Value>,
4127    /// Per-account Pinterest board selection. Each entry binds one connected Pinterest account
4128    /// to a list of boards on that account. Each board produces an independent child post
4129    /// tracked separately for success/failure. Capped at 25 boards per account. When supplied,
4130    /// this field takes precedence over the deprecated `boardIds` field.
4131    #[serde(
4132        rename = "pinterestBoards",
4133        default,
4134        skip_serializing_if = "Vec::is_empty"
4135    )]
4136    pub pinterest_boards: Vec<PinterestBoardSelection>,
4137    /// Shortened links for the post (auto-generated).
4138    #[serde(
4139        rename = "shortenedLinks",
4140        default,
4141        skip_serializing_if = "Vec::is_empty"
4142    )]
4143    pub shortened_links: Vec<String>,
4144}
4145
4146/// `PinterestProfileSchema` from the GoHighLevel OpenAPI spec.
4147#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4148pub struct PinterestProfileSchema {
4149    /// Id
4150    #[serde(default, skip_serializing_if = "Option::is_none")]
4151    pub id: Option<String>,
4152    /// Name of account
4153    #[serde(default, skip_serializing_if = "Option::is_none")]
4154    pub name: Option<String>,
4155    /// Username of account
4156    #[serde(default, skip_serializing_if = "Option::is_none")]
4157    pub username: Option<String>,
4158    /// Avatar of profile account
4159    #[serde(default, skip_serializing_if = "Option::is_none")]
4160    pub avatar: Option<String>,
4161    /// Is connected
4162    #[serde(
4163        rename = "isConnected",
4164        default,
4165        skip_serializing_if = "Option::is_none"
4166    )]
4167    pub is_connected: Option<bool>,
4168    /// Pinterest Account Type
4169    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
4170    pub type_: Option<String>,
4171    /// Pinterest Account website Url
4172    #[serde(
4173        rename = "websiteUrl",
4174        default,
4175        skip_serializing_if = "Option::is_none"
4176    )]
4177    pub website_url: Option<String>,
4178}
4179
4180/// `PostApprovalSchema` from the GoHighLevel OpenAPI spec.
4181#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4182pub struct PostApprovalSchema {
4183    /// User ID of the designated approver. **Note:** The approver will receive a notification
4184    /// when a post is submitted for review.
4185    #[serde(default, skip_serializing_if = "Option::is_none")]
4186    pub approver: Option<String>,
4187    /// Note from the post creator to the approver explaining the post or requesting specific
4188    /// feedback.
4189    #[serde(
4190        rename = "requesterNote",
4191        default,
4192        skip_serializing_if = "Option::is_none"
4193    )]
4194    pub requester_note: Option<String>,
4195    /// Note from the approver to the post creator with feedback or approval comments.
4196    #[serde(
4197        rename = "approverNote",
4198        default,
4199        skip_serializing_if = "Option::is_none"
4200    )]
4201    pub approver_note: Option<String>,
4202    /// Current approval status of the post. **Available Values:** - `pending` - Awaiting
4203    /// approver review - `approved` - Approved and ready for publishing - `rejected` - Rejected
4204    /// by approver (needs revision) - `not_required` - No approval workflow needed
4205    /// Allowed values: `pending`, `approved`, `rejected`, `not_required`.
4206    #[serde(
4207        rename = "approvalStatus",
4208        default,
4209        skip_serializing_if = "Option::is_none"
4210    )]
4211    pub approval_status: Option<String>,
4212}
4213
4214/// `PostCreateRequest` from the GoHighLevel OpenAPI spec.
4215#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4216pub struct PostCreateRequest {
4217    /// Account Ids
4218    #[serde(rename = "accountIds", default, skip_serializing_if = "Vec::is_empty")]
4219    pub account_ids: Vec<String>,
4220    /// Post Content The limitations of content as per the platforms is provided through the
4221    /// reference link in API description
4222    #[serde(default, skip_serializing_if = "Option::is_none")]
4223    pub summary: Option<String>,
4224    /// Post Media Data The limitations of media as per the platforms is provided through the
4225    /// reference link in API description
4226    #[serde(default, skip_serializing_if = "Vec::is_empty")]
4227    pub media: Vec<PostMediaSchema>,
4228    /// Status must be one of the following values: in_progress, draft, failed, published,
4229    /// scheduled, in_review, notification_sent, deleted
4230    #[serde(default, skip_serializing_if = "Option::is_none")]
4231    pub status: Option<serde_json::Value>,
4232    /// Schedule Date
4233    #[serde(
4234        rename = "scheduleDate",
4235        default,
4236        skip_serializing_if = "Option::is_none"
4237    )]
4238    pub schedule_date: Option<String>,
4239    /// User ID of the creator who is creating/managing the post. Must be a valid MongoDB
4240    /// ObjectId. **Get User IDs from:** [Get User API](../users/get-user) — use the `id` field
4241    /// from the user object. **Validation:** Must be a valid MongoDB ObjectId.
4242    #[serde(rename = "createdBy", default, skip_serializing_if = "Option::is_none")]
4243    pub created_by: Option<String>,
4244    /// Follow-up comment to be posted immediately after the main post is published. **Supported
4245    /// Platforms:** Facebook, Instagram, LinkedIn, YouTube **NOT Supported:** TikTok, Google My
4246    /// Business (GMB), Pinterest **Use Case:** Great for adding hashtags, additional context,
4247    /// or engagement prompts without cluttering the main post. - Follow-up comment is
4248    /// automatically trimmed to platform limits **Reference:** [Platform Limitations
4249    /// Guide](https://help.leadconnectorhq.com/support/solutions/articles/48001240003-social-planner-image-video-content-and-api-limitations)
4250    #[serde(
4251        rename = "followUpComment",
4252        default,
4253        skip_serializing_if = "Option::is_none"
4254    )]
4255    pub follow_up_comment: Option<String>,
4256    /// Og Tags Meta Data
4257    #[serde(
4258        rename = "ogTagsDetails",
4259        default,
4260        skip_serializing_if = "Option::is_none"
4261    )]
4262    pub og_tags_details: Option<OgTagsSchema>,
4263    /// Post Type must be one of the following values: - post, story, reel
4264    /// Required by the API.
4265    #[serde(rename = "type")]
4266    pub type_: serde_json::Value,
4267    /// Post Approval Details
4268    #[serde(
4269        rename = "postApprovalDetails",
4270        default,
4271        skip_serializing_if = "Option::is_none"
4272    )]
4273    pub post_approval_details: Option<PostApprovalSchema>,
4274    /// if schedule datetime is updated
4275    #[serde(
4276        rename = "scheduleTimeUpdated",
4277        default,
4278        skip_serializing_if = "Option::is_none"
4279    )]
4280    pub schedule_time_updated: Option<bool>,
4281    /// Array of Tag Value
4282    #[serde(default, skip_serializing_if = "Vec::is_empty")]
4283    pub tags: Vec<String>,
4284    /// Category Id
4285    #[serde(
4286        rename = "categoryId",
4287        default,
4288        skip_serializing_if = "Option::is_none"
4289    )]
4290    pub category_id: Option<String>,
4291    /// Tiktok Post Details
4292    #[serde(
4293        rename = "tiktokPostDetails",
4294        default,
4295        skip_serializing_if = "Option::is_none"
4296    )]
4297    pub tiktok_post_details: Option<TiktokPostSchema>,
4298    /// GMB Post Details
4299    #[serde(
4300        rename = "gmbPostDetails",
4301        default,
4302        skip_serializing_if = "Option::is_none"
4303    )]
4304    pub gmb_post_details: Option<GMBPostSchema>,
4305    /// User ID
4306    #[serde(rename = "userId", default, skip_serializing_if = "Option::is_none")]
4307    pub user_id: Option<String>,
4308}
4309
4310/// Aggregated engagement metrics for a published post.
4311#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4312pub struct PostInsightsSchema {
4313    /// Total number of likes (or platform-equivalent reactions) on the post.
4314    #[serde(default, skip_serializing_if = "Option::is_none")]
4315    pub like: Option<f64>,
4316    /// Total number of shares/reposts of the post.
4317    #[serde(default, skip_serializing_if = "Option::is_none")]
4318    pub share: Option<f64>,
4319    /// Total number of comments on the post.
4320    #[serde(default, skip_serializing_if = "Option::is_none")]
4321    pub comment: Option<f64>,
4322}
4323
4324/// `PostMediaSchema` from the GoHighLevel OpenAPI spec.
4325#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4326pub struct PostMediaSchema {
4327    /// Public URL of the media file. Must be a valid, accessible HTTPS URL.
4328    /// Required by the API.
4329    pub url: String,
4330    /// Alt text or caption for the media. Used for accessibility and SEO.
4331    #[serde(default, skip_serializing_if = "Option::is_none")]
4332    pub caption: Option<String>,
4333    /// Original media URL before any processing (watermarking/optimization). Set automatically
4334    /// by the system.
4335    #[serde(
4336        rename = "originalUrl",
4337        default,
4338        skip_serializing_if = "Option::is_none"
4339    )]
4340    pub original_url: Option<String>,
4341    /// URL of the media after watermarking. Set automatically when watermark is applied.
4342    #[serde(
4343        rename = "watermarkedUrl",
4344        default,
4345        skip_serializing_if = "Option::is_none"
4346    )]
4347    pub watermarked_url: Option<String>,
4348    /// MIME type of the media file. See Platform Limitations Guide for platform-specific format
4349    /// support.
4350    /// Allowed values: `image/jpeg`, `image/jpg`, `image/png`, `image/gif`, `video/mp4`,
4351    /// `video/mov`, `video/webm`.
4352    /// Required by the API.
4353    #[serde(rename = "type")]
4354    pub type_: String,
4355    /// Cover image URL for a video media item. **Scope** - Applies to the **first video** in
4356    /// `media[]`. Values supplied on subsequent video items are ignored. - Has no effect on
4357    /// image-only media items. **Response behavior** - After the post is published, the
4358    /// resolved cover image is surfaced on the post-level `thumbnail` field of the response and
4359    /// is no longer echoed back inside `media[]`. This represents the post's primary cover
4360    /// image and the cover used for the first video. **Limitations** - Per-item thumbnails for
4361    /// multi-video posts are not supported. Each destination network exposes a single cover
4362    /// image per post for the leading video; this matches the behavior of the underlying social
4363    /// platform APIs. **Format** - Provide a publicly accessible JPEG or PNG URL. Animated
4364    /// formats and video URLs are not accepted. - Recommended: an image matching the
4365    /// orientation of your video and ≤ 2 MB.
4366    #[serde(default, skip_serializing_if = "Option::is_none")]
4367    pub thumbnail: Option<String>,
4368    /// Unique identifier for the media item. Used for tracking and referencing.
4369    #[serde(default, skip_serializing_if = "Option::is_none")]
4370    pub id: Option<String>,
4371    /// URL of the optimized/compressed media. Set automatically when media optimization is
4372    /// enabled. **Enable Optimization:** Set `mediaOptimization: true` in the post request.
4373    #[serde(
4374        rename = "optimizedUrl",
4375        default,
4376        skip_serializing_if = "Option::is_none"
4377    )]
4378    pub optimized_url: Option<String>,
4379    /// MIME type of the optimized media. May differ from original if format conversion
4380    /// occurred.
4381    #[serde(
4382        rename = "optimizedType",
4383        default,
4384        skip_serializing_if = "Option::is_none"
4385    )]
4386    pub optimized_type: Option<String>,
4387    /// Flag indicating if the media was modified (watermarked, optimized, or processed).
4388    #[serde(
4389        rename = "isModified",
4390        default,
4391        skip_serializing_if = "Option::is_none"
4392    )]
4393    pub is_modified: Option<bool>,
4394    /// Alt text for accessibility. Supported on Instagram, Threads, Pinterest, Bluesky, and
4395    /// LinkedIn image posts (ignored for video and other platforms). Auto-truncated per
4396    /// platform: Pinterest 500, Instagram/Threads 1000, Bluesky 2000, LinkedIn 4086 chars.
4397    #[serde(rename = "altText", default, skip_serializing_if = "Option::is_none")]
4398    pub alt_text: Option<String>,
4399}
4400
4401/// `PostSuccessfulResponseDTO` from the GoHighLevel OpenAPI spec.
4402#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4403pub struct PostSuccessfulResponseDTO {
4404    /// Success or Failure
4405    /// Required by the API.
4406    pub success: bool,
4407    /// Status Code
4408    /// Required by the API.
4409    #[serde(rename = "statusCode")]
4410    pub status_code: f64,
4411    /// Message
4412    /// Required by the API.
4413    pub message: String,
4414    /// Requested Results
4415    #[serde(default, skip_serializing_if = "Option::is_none")]
4416    pub results: Option<PostSuccessfulResponseSchema>,
4417}
4418
4419/// `PostSuccessfulResponseSchema` from the GoHighLevel OpenAPI spec.
4420#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4421pub struct PostSuccessfulResponseSchema {
4422    /// Post Data
4423    #[serde(default, skip_serializing_if = "Vec::is_empty")]
4424    pub posts: Vec<GetPostFormattedSchema>,
4425    /// Total count of posts
4426    #[serde(default, skip_serializing_if = "Option::is_none")]
4427    pub count: Option<f64>,
4428}
4429
4430/// `PostUserSchema` from the GoHighLevel OpenAPI spec.
4431#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4432pub struct PostUserSchema {
4433    /// User Id
4434    /// Required by the API.
4435    pub id: String,
4436    /// Title
4437    /// Required by the API.
4438    pub title: String,
4439    /// First name
4440    /// Required by the API.
4441    #[serde(rename = "firstName")]
4442    pub first_name: String,
4443    /// Last name
4444    /// Required by the API.
4445    #[serde(rename = "lastName")]
4446    pub last_name: String,
4447    /// Profile photo
4448    /// Required by the API.
4449    #[serde(rename = "profilePhoto")]
4450    pub profile_photo: String,
4451    /// Phone number
4452    /// Required by the API.
4453    pub phone: String,
4454    /// Email Id
4455    /// Required by the API.
4456    pub email: String,
4457}
4458
4459/// `QueueItemDTO` from the GoHighLevel OpenAPI spec.
4460#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4461pub struct QueueItemDTO {
4462    /// The unique identifier of the queue item.
4463    #[serde(rename = "_id", default, skip_serializing_if = "Option::is_none")]
4464    pub id: Option<String>,
4465    /// The order of the item in the queue.
4466    #[serde(default, skip_serializing_if = "Option::is_none")]
4467    pub order: Option<f64>,
4468    /// A list of content variations for the post.
4469    #[serde(default, skip_serializing_if = "Vec::is_empty")]
4470    pub variations: Vec<VariationDTO>,
4471    /// The primary image URL for the post.
4472    #[serde(
4473        rename = "primaryImage",
4474        default,
4475        skip_serializing_if = "Option::is_none"
4476    )]
4477    pub primary_image: Option<String>,
4478    /// The ID of the original post, if any.
4479    #[serde(rename = "postId", default, skip_serializing_if = "Option::is_none")]
4480    pub post_id: Option<String>,
4481    /// The formatted post data.
4482    #[serde(default, skip_serializing_if = "Option::is_none")]
4483    pub post: Option<GetPostFormattedSchema>,
4484    /// List of errors associated with the queue item. Possible values: INVALID_USER_ID,
4485    /// PIXABAY_MEDIA.
4486    #[serde(default, skip_serializing_if = "Vec::is_empty")]
4487    pub errors: Vec<String>,
4488    /// The calculated date/time when this item is scheduled to be posted
4489    /// Format: date-time (ISO-8601 string).
4490    #[serde(
4491        rename = "scheduledDateTime",
4492        default,
4493        skip_serializing_if = "Option::is_none"
4494    )]
4495    pub scheduled_date_time: Option<String>,
4496    /// The variation index that will be used when this item is posted
4497    #[serde(
4498        rename = "scheduledVariationIndex",
4499        default,
4500        skip_serializing_if = "Option::is_none"
4501    )]
4502    pub scheduled_variation_index: Option<f64>,
4503    /// Indicates if this time slot is skipped and the post will not be published at this time
4504    #[serde(rename = "isSkipped", default, skip_serializing_if = "Option::is_none")]
4505    pub is_skipped: Option<bool>,
4506}
4507
4508/// `QueueItemWithVariationsDTO` from the GoHighLevel OpenAPI spec.
4509#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4510pub struct QueueItemWithVariationsDTO {
4511    /// The unique identifier of the queue item.
4512    #[serde(rename = "_id", default, skip_serializing_if = "Option::is_none")]
4513    pub id: Option<String>,
4514    /// The order of the item in the queue.
4515    #[serde(default, skip_serializing_if = "Option::is_none")]
4516    pub order: Option<f64>,
4517    /// A list of content variations for the post.
4518    #[serde(default, skip_serializing_if = "Vec::is_empty")]
4519    pub variations: Vec<VariationDTO>,
4520    /// The primary image URL for the post.
4521    #[serde(
4522        rename = "primaryImage",
4523        default,
4524        skip_serializing_if = "Option::is_none"
4525    )]
4526    pub primary_image: Option<String>,
4527    /// The ID of the original post, if any.
4528    #[serde(rename = "postId", default, skip_serializing_if = "Option::is_none")]
4529    pub post_id: Option<String>,
4530    /// The formatted post data.
4531    #[serde(default, skip_serializing_if = "Option::is_none")]
4532    pub post: Option<GetPostFormattedSchema>,
4533    /// List of errors associated with the queue item. Possible values: INVALID_USER_ID,
4534    /// PIXABAY_MEDIA.
4535    #[serde(default, skip_serializing_if = "Vec::is_empty")]
4536    pub errors: Vec<String>,
4537    /// The calculated date/time when this item is scheduled to be posted
4538    /// Format: date-time (ISO-8601 string).
4539    #[serde(
4540        rename = "scheduledDateTime",
4541        default,
4542        skip_serializing_if = "Option::is_none"
4543    )]
4544    pub scheduled_date_time: Option<String>,
4545    /// The variation index that will be used when this item is posted
4546    #[serde(
4547        rename = "scheduledVariationIndex",
4548        default,
4549        skip_serializing_if = "Option::is_none"
4550    )]
4551    pub scheduled_variation_index: Option<f64>,
4552    /// Indicates if this time slot is skipped and the post will not be published at this time
4553    #[serde(rename = "isSkipped", default, skip_serializing_if = "Option::is_none")]
4554    pub is_skipped: Option<bool>,
4555    /// The index of the current variation being used for this post
4556    #[serde(
4557        rename = "currentVariation",
4558        default,
4559        skip_serializing_if = "Option::is_none"
4560    )]
4561    pub current_variation: Option<f64>,
4562}
4563
4564/// `QueueModifiedPostDTO` from the GoHighLevel OpenAPI spec.
4565#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4566pub struct QueueModifiedPostDTO {
4567    /// Account Ids (OAuth only)
4568    #[serde(rename = "accountIds", default, skip_serializing_if = "Vec::is_empty")]
4569    pub account_ids: Vec<String>,
4570    /// Post Content
4571    #[serde(default, skip_serializing_if = "Option::is_none")]
4572    pub summary: Option<String>,
4573    /// Post Media
4574    #[serde(default, skip_serializing_if = "Vec::is_empty")]
4575    pub media: Vec<PostMediaSchema>,
4576    /// Post status indicating the current state of the post. **Available Status Values:** -
4577    /// `draft` - Post saved as draft, not yet ready for publishing - `scheduled` - Post
4578    /// scheduled for future publishing (requires `scheduleDate`) - `in_review` - Post pending
4579    /// approval (requires `scheduleDate` and `postApprovalDetails`) - `published` - Post has
4580    /// been published - `in_progress` - Post is currently being processed - `pending` - Post is
4581    /// awaiting platform processing for Instagram media container creation - `failed` - Post
4582    /// publishing failed - `notification_sent` - Story notification sent (for manual story
4583    /// posting) - `deleted` - Post has been deleted **Validations:** - `scheduled` or
4584    /// `in_review` status requires `scheduleDate` to be set - Draft posts skip most validations
4585    /// (accountIds, media requirements)
4586    #[serde(default, skip_serializing_if = "Option::is_none")]
4587    pub status: Option<serde_json::Value>,
4588    /// Schedule Date
4589    #[serde(
4590        rename = "scheduleDate",
4591        default,
4592        skip_serializing_if = "Option::is_none"
4593    )]
4594    pub schedule_date: Option<String>,
4595    /// Selected Best Time slot for scheduling
4596    #[serde(
4597        rename = "selectedBestTime",
4598        default,
4599        skip_serializing_if = "Option::is_none"
4600    )]
4601    pub selected_best_time: Option<String>,
4602    /// Created By
4603    #[serde(rename = "createdBy", default, skip_serializing_if = "Option::is_none")]
4604    pub created_by: Option<String>,
4605    /// Follow-up comment to be posted immediately after the main post is published. **Supported
4606    /// Platforms:** Facebook, Instagram, LinkedIn, YouTube **NOT Supported:** TikTok, Google My
4607    /// Business (GMB), Pinterest **Use Case:** Great for adding hashtags, additional context,
4608    /// or engagement prompts without cluttering the main post. - Follow-up comment is
4609    /// automatically trimmed to platform limits **Reference:** [Platform Limitations
4610    /// Guide](https://help.leadconnectorhq.com/support/solutions/articles/48001240003-social-planner-image-video-content-and-api-limitations)
4611    #[serde(
4612        rename = "followUpComment",
4613        default,
4614        skip_serializing_if = "Option::is_none"
4615    )]
4616    pub follow_up_comment: Option<String>,
4617    /// Og Tags Meta Data
4618    #[serde(
4619        rename = "ogTagsDetails",
4620        default,
4621        skip_serializing_if = "Option::is_none"
4622    )]
4623    pub og_tags_details: Option<OgTagsSchema>,
4624    /// Post Type must be one of the following values: - post, story, reel
4625    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
4626    pub type_: Option<serde_json::Value>,
4627    /// Post Approval Details
4628    #[serde(
4629        rename = "postApprovalDetails",
4630        default,
4631        skip_serializing_if = "Option::is_none"
4632    )]
4633    pub post_approval_details: Option<PostApprovalSchema>,
4634    /// Flag indicating if the schedule datetime was manually updated. Used for tracking
4635    /// rescheduled posts.
4636    #[serde(
4637        rename = "scheduleTimeUpdated",
4638        default,
4639        skip_serializing_if = "Option::is_none"
4640    )]
4641    pub schedule_time_updated: Option<bool>,
4642    /// Array of Tag IDs to associate with the post for organization and filtering. **Get Tag
4643    /// IDs from:** [Get Tags API](./social-planner/get-tags-location-id) — use the `_id` field
4644    /// from each tag. **Validation:** All IDs must be valid MongoDB ObjectIds.
4645    #[serde(default, skip_serializing_if = "Vec::is_empty")]
4646    pub tags: Vec<String>,
4647    /// Category ID to organize the post. Categories help group related posts. **Get Category
4648    /// IDs from:** [Get Categories API](./social-planner/get-categories-location-id) — use the
4649    /// `_id` field. **Validation:** Must be a valid MongoDB ObjectId.
4650    #[serde(
4651        rename = "categoryId",
4652        default,
4653        skip_serializing_if = "Option::is_none"
4654    )]
4655    pub category_id: Option<String>,
4656    /// Apply watermark to media in this post. **Note:** Watermarks are applied to images only.
4657    /// Videos are not watermarked.
4658    #[serde(
4659        rename = "applyWatermark",
4660        default,
4661        skip_serializing_if = "Option::is_none"
4662    )]
4663    pub apply_watermark: Option<bool>,
4664    /// Tiktok Post Details
4665    #[serde(
4666        rename = "tiktokPostDetails",
4667        default,
4668        skip_serializing_if = "Option::is_none"
4669    )]
4670    pub tiktok_post_details: Option<TiktokPostSchema>,
4671    /// GMB Post Details
4672    #[serde(
4673        rename = "gmbPostDetails",
4674        default,
4675        skip_serializing_if = "Option::is_none"
4676    )]
4677    pub gmb_post_details: Option<GMBPostSchema>,
4678    /// User ID
4679    #[serde(rename = "userId", default, skip_serializing_if = "Option::is_none")]
4680    pub user_id: Option<String>,
4681    /// Linkedin Post Details
4682    #[serde(
4683        rename = "linkedinPostDetails",
4684        default,
4685        skip_serializing_if = "Option::is_none"
4686    )]
4687    pub linkedin_post_details: Option<LinkedinPostSchema>,
4688    /// Pinterest Post Details
4689    #[serde(
4690        rename = "pinterestPostDetails",
4691        default,
4692        skip_serializing_if = "Option::is_none"
4693    )]
4694    pub pinterest_post_details: Option<PinterestPostSchema>,
4695    /// Facebook Post Details
4696    #[serde(
4697        rename = "facebookPostDetails",
4698        default,
4699        skip_serializing_if = "Option::is_none"
4700    )]
4701    pub facebook_post_details: Option<FacebookPostSchema>,
4702    /// Instagram Post Details
4703    #[serde(
4704        rename = "instagramPostDetails",
4705        default,
4706        skip_serializing_if = "Option::is_none"
4707    )]
4708    pub instagram_post_details: Option<InstagramPostSchema>,
4709    /// Youtube Post Details
4710    #[serde(
4711        rename = "youtubePostDetails",
4712        default,
4713        skip_serializing_if = "Option::is_none"
4714    )]
4715    pub youtube_post_details: Option<YoutubePostSchema>,
4716    /// Location Id
4717    #[serde(
4718        rename = "locationId",
4719        default,
4720        skip_serializing_if = "Option::is_none"
4721    )]
4722    pub location_id: Option<String>,
4723}
4724
4725/// `ResetQueueItemDTO` from the GoHighLevel OpenAPI spec.
4726#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4727pub struct ResetQueueItemDTO {
4728    /// Location ID
4729    /// Required by the API.
4730    #[serde(rename = "locationId")]
4731    pub location_id: String,
4732    /// Edit session ID
4733    #[serde(rename = "sessionId", default, skip_serializing_if = "Option::is_none")]
4734    pub session_id: Option<String>,
4735}
4736
4737/// `ResetQueueItemResponseDTO` from the GoHighLevel OpenAPI spec.
4738#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4739pub struct ResetQueueItemResponseDTO {
4740    /// A message indicating the result of the operation. Examples: "Queue item reset
4741    /// successfully", "Dummy queue item deleted successfully".
4742    #[serde(default, skip_serializing_if = "Option::is_none")]
4743    pub message: Option<String>,
4744    /// The reset queue item, including its current variation.
4745    #[serde(rename = "queueItem", default, skip_serializing_if = "Option::is_none")]
4746    pub queue_item: Option<QueueItemWithVariationsDTO>,
4747}
4748
4749/// `SaveEditSessionDTO` from the GoHighLevel OpenAPI spec.
4750#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4751pub struct SaveEditSessionDTO {
4752    /// Location ID
4753    /// Required by the API.
4754    #[serde(rename = "locationId")]
4755    pub location_id: String,
4756    /// Edit session ID
4757    /// Required by the API.
4758    #[serde(rename = "sessionId")]
4759    pub session_id: String,
4760    /// If true, keeps the queue in DRAFT state after saving instead of automatically activating
4761    /// it. Only applicable when the queue is currently in DRAFT status.
4762    #[serde(
4763        rename = "keepInDraft",
4764        default,
4765        skip_serializing_if = "Option::is_none"
4766    )]
4767    pub keep_in_draft: Option<bool>,
4768}
4769
4770/// `SaveEditSessionResponseDTO` from the GoHighLevel OpenAPI spec.
4771#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4772pub struct SaveEditSessionResponseDTO {
4773    /// A message indicating the result of the operation.
4774    #[serde(default, skip_serializing_if = "Option::is_none")]
4775    pub message: Option<String>,
4776    /// Updated slot information for all items after saving changes
4777    #[serde(
4778        rename = "updatedSlots",
4779        default,
4780        skip_serializing_if = "Vec::is_empty"
4781    )]
4782    pub updated_slots: Vec<UpdatedSlotInfoDTO>,
4783    /// Number of unique posts that had their slots changed
4784    #[serde(
4785        rename = "totalPostsChanged",
4786        default,
4787        skip_serializing_if = "Option::is_none"
4788    )]
4789    pub total_posts_changed: Option<f64>,
4790}
4791
4792/// `ScheduledPostDTO` from the GoHighLevel OpenAPI spec.
4793#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4794pub struct ScheduledPostDTO {
4795    /// The date and time the post is scheduled to be published
4796    /// Format: date-time (ISO-8601 string).
4797    #[serde(
4798        rename = "scheduledDateTime",
4799        default,
4800        skip_serializing_if = "Option::is_none"
4801    )]
4802    pub scheduled_date_time: Option<String>,
4803    /// The formatted post data.
4804    #[serde(default, skip_serializing_if = "Option::is_none")]
4805    pub post: Option<GetPostFormattedSchema>,
4806    /// The unique identifier of the queue item.
4807    #[serde(
4808        rename = "queueItemId",
4809        default,
4810        skip_serializing_if = "Option::is_none"
4811    )]
4812    pub queue_item_id: Option<String>,
4813    /// The ID of the queue this post belongs to
4814    #[serde(rename = "queueId", default, skip_serializing_if = "Option::is_none")]
4815    pub queue_id: Option<String>,
4816    /// The order of the item in the queue.
4817    #[serde(default, skip_serializing_if = "Option::is_none")]
4818    pub order: Option<f64>,
4819    /// A list of content variations for the post.
4820    #[serde(default, skip_serializing_if = "Vec::is_empty")]
4821    pub variations: Vec<VariationDTO>,
4822    /// The primary image URL for the post.
4823    #[serde(
4824        rename = "primaryImage",
4825        default,
4826        skip_serializing_if = "Option::is_none"
4827    )]
4828    pub primary_image: Option<String>,
4829    /// List of errors associated with the queue item. Possible values: INVALID_USER_ID,
4830    /// PIXABAY_MEDIA.
4831    #[serde(default, skip_serializing_if = "Vec::is_empty")]
4832    pub errors: Vec<String>,
4833    /// The category associated with this post
4834    #[serde(default, skip_serializing_if = "Option::is_none")]
4835    pub category: Option<CategoryInfoDTO>,
4836    /// The index of the current variation being used for this post
4837    #[serde(
4838        rename = "currentVariation",
4839        default,
4840        skip_serializing_if = "Option::is_none"
4841    )]
4842    pub current_variation: Option<f64>,
4843    /// The timezone in which the post is scheduled
4844    #[serde(default, skip_serializing_if = "Option::is_none")]
4845    pub timezone: Option<String>,
4846}
4847
4848/// `SearchPostDTO` from the GoHighLevel OpenAPI spec.
4849#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4850pub struct SearchPostDTO {
4851    /// type must be one of the following values: recent, all, scheduled, draft, failed,
4852    /// in_review, published, in_progress, pending and deleted
4853    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
4854    pub type_: Option<String>,
4855    /// List of account Ids separated by comma as a string
4856    #[serde(default, skip_serializing_if = "Option::is_none")]
4857    pub accounts: Option<String>,
4858    /// Number of records to skip for pagination
4859    /// Required by the API.
4860    pub skip: String,
4861    /// Maximum number of records to return
4862    /// Required by the API.
4863    pub limit: String,
4864    /// From Date
4865    /// Required by the API.
4866    #[serde(rename = "fromDate")]
4867    pub from_date: String,
4868    /// To Date
4869    /// Required by the API.
4870    #[serde(rename = "toDate")]
4871    pub to_date: String,
4872    /// Include User Data
4873    /// Required by the API.
4874    #[serde(rename = "includeUsers")]
4875    pub include_users: String,
4876    /// Post Type must be one of the following values: - post, story, reel
4877    #[serde(rename = "postType", default, skip_serializing_if = "Option::is_none")]
4878    pub post_type: Option<serde_json::Value>,
4879}
4880
4881/// `SetAccountsDTO` from the GoHighLevel OpenAPI spec.
4882#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4883pub struct SetAccountsDTO {
4884    /// Account Ids
4885    /// Required by the API.
4886    #[serde(rename = "accountIds", default, skip_serializing_if = "Vec::is_empty")]
4887    pub account_ids: Vec<String>,
4888    /// File path
4889    /// Required by the API.
4890    #[serde(rename = "filePath")]
4891    pub file_path: String,
4892    /// Entries Count. rowsCount must be between 1 and number of posts in CSV
4893    /// Required by the API.
4894    #[serde(rename = "rowsCount")]
4895    pub rows_count: f64,
4896    /// Name of file
4897    /// Required by the API.
4898    #[serde(rename = "fileName")]
4899    pub file_name: String,
4900    /// Approver User Id
4901    #[serde(default, skip_serializing_if = "Option::is_none")]
4902    pub approver: Option<String>,
4903    /// User ID
4904    /// Required by the API.
4905    #[serde(rename = "userId")]
4906    pub user_id: String,
4907    /// CSV file type - determines the format of the CSV file being imported
4908    /// Allowed values: `basic`, `advance`.
4909    #[serde(
4910        rename = "csvFileType",
4911        default,
4912        skip_serializing_if = "Option::is_none"
4913    )]
4914    pub csv_file_type: Option<String>,
4915}
4916
4917/// `SetAccountsResponseDTO` from the GoHighLevel OpenAPI spec.
4918#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4919pub struct SetAccountsResponseDTO {
4920    /// Success or Failure
4921    /// Required by the API.
4922    pub success: bool,
4923    /// Status Code
4924    /// Required by the API.
4925    #[serde(rename = "statusCode")]
4926    pub status_code: f64,
4927    /// Message
4928    /// Required by the API.
4929    pub message: String,
4930    /// Requested Results
4931    #[serde(default, skip_serializing_if = "Option::is_none")]
4932    pub results: Option<SetAccountsResultSchema>,
4933}
4934
4935/// `SetAccountsResultSchema` from the GoHighLevel OpenAPI spec.
4936#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4937pub struct SetAccountsResultSchema {
4938    /// CSV Id
4939    /// Required by the API.
4940    #[serde(rename = "csvId")]
4941    pub csv_id: String,
4942}
4943
4944/// `SetAccountsUnprocessableDTO` from the GoHighLevel OpenAPI spec.
4945#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4946pub struct SetAccountsUnprocessableDTO {
4947    /// HTTP Status
4948    /// Required by the API.
4949    pub status: f64,
4950    /// Options
4951    #[serde(default, skip_serializing_if = "Option::is_none")]
4952    pub options: Option<serde_json::Value>,
4953    /// Validation error messages
4954    /// Required by the API.
4955    #[serde(default, skip_serializing_if = "Vec::is_empty")]
4956    pub message: Vec<String>,
4957    /// Exception name
4958    /// Required by the API.
4959    pub name: String,
4960    /// Error type
4961    /// Required by the API.
4962    pub error: String,
4963    /// HTTP Status Code
4964    /// Required by the API.
4965    #[serde(rename = "statusCode")]
4966    pub status_code: f64,
4967    /// Trace ID for debugging
4968    #[serde(rename = "traceId", default, skip_serializing_if = "Option::is_none")]
4969    pub trace_id: Option<String>,
4970}
4971
4972/// `SocialGoogleMediaAccountSchema` from the GoHighLevel OpenAPI spec.
4973#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4974pub struct SocialGoogleMediaAccountSchema {
4975    /// MongoDB document ID of the social media account
4976    #[serde(rename = "_id", default, skip_serializing_if = "Option::is_none")]
4977    pub id: Option<String>,
4978    /// OAuth provider account identifier
4979    #[serde(rename = "oAuthId", default, skip_serializing_if = "Option::is_none")]
4980    pub o_auth_id: Option<String>,
4981    /// Legacy account identifier for backward compatibility
4982    #[serde(rename = "oldId", default, skip_serializing_if = "Option::is_none")]
4983    pub old_id: Option<String>,
4984    /// Location ID associated with this account
4985    #[serde(
4986        rename = "locationId",
4987        default,
4988        skip_serializing_if = "Option::is_none"
4989    )]
4990    pub location_id: Option<String>,
4991    /// Original platform-specific account identifier
4992    #[serde(rename = "originId", default, skip_serializing_if = "Option::is_none")]
4993    pub origin_id: Option<String>,
4994    /// Social media platform name
4995    #[serde(default, skip_serializing_if = "Option::is_none")]
4996    pub platform: Option<serde_json::Value>,
4997    /// Type of account (e.g., location, page, profile)
4998    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
4999    pub type_: Option<serde_json::Value>,
5000    /// Display name of the account
5001    #[serde(default, skip_serializing_if = "Option::is_none")]
5002    pub name: Option<String>,
5003    /// Avatar or profile picture URL
5004    #[serde(default, skip_serializing_if = "Option::is_none")]
5005    pub avatar: Option<String>,
5006    /// Additional metadata for the account
5007    #[serde(default, skip_serializing_if = "Option::is_none")]
5008    pub meta: Option<serde_json::Value>,
5009    /// Indicates if the account is currently active
5010    #[serde(default, skip_serializing_if = "Option::is_none")]
5011    pub active: Option<bool>,
5012    /// Indicates if the account has been deleted
5013    #[serde(default, skip_serializing_if = "Option::is_none")]
5014    pub deleted: Option<bool>,
5015    /// created date
5016    /// Format: date-time (ISO-8601 string).
5017    #[serde(rename = "createdAt", default, skip_serializing_if = "Option::is_none")]
5018    pub created_at: Option<String>,
5019    /// updated date
5020    /// Format: date-time (ISO-8601 string).
5021    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
5022    pub updated_at: Option<String>,
5023}
5024
5025/// `SocialMediaFBAccountResponseDTO` from the GoHighLevel OpenAPI spec.
5026#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5027pub struct SocialMediaFBAccountResponseDTO {
5028    /// Success or Failure
5029    /// Required by the API.
5030    pub success: bool,
5031    /// Status Code
5032    /// Required by the API.
5033    #[serde(rename = "statusCode")]
5034    pub status_code: f64,
5035    /// Message
5036    /// Required by the API.
5037    pub message: String,
5038    /// Requested Results
5039    #[serde(default, skip_serializing_if = "Option::is_none")]
5040    pub results: Option<SocialMediaFacebookAccountSchema>,
5041}
5042
5043/// `SocialMediaFacebookAccountSchema` from the GoHighLevel OpenAPI spec.
5044#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5045pub struct SocialMediaFacebookAccountSchema {
5046    /// MongoDB document ID of the social media account
5047    #[serde(rename = "_id", default, skip_serializing_if = "Option::is_none")]
5048    pub id: Option<String>,
5049    /// OAuth provider account identifier
5050    #[serde(rename = "oAuthId", default, skip_serializing_if = "Option::is_none")]
5051    pub o_auth_id: Option<String>,
5052    /// Legacy account identifier for backward compatibility
5053    #[serde(rename = "oldId", default, skip_serializing_if = "Option::is_none")]
5054    pub old_id: Option<String>,
5055    /// Location ID associated with this account
5056    #[serde(
5057        rename = "locationId",
5058        default,
5059        skip_serializing_if = "Option::is_none"
5060    )]
5061    pub location_id: Option<String>,
5062    /// Original platform-specific account identifier
5063    #[serde(rename = "originId", default, skip_serializing_if = "Option::is_none")]
5064    pub origin_id: Option<String>,
5065    /// Social media platform name
5066    #[serde(default, skip_serializing_if = "Option::is_none")]
5067    pub platform: Option<serde_json::Value>,
5068    /// type value must be page
5069    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
5070    pub type_: Option<serde_json::Value>,
5071    /// Display name of the account
5072    #[serde(default, skip_serializing_if = "Option::is_none")]
5073    pub name: Option<String>,
5074    /// Avatar or profile picture URL
5075    #[serde(default, skip_serializing_if = "Option::is_none")]
5076    pub avatar: Option<String>,
5077    /// Additional metadata for the account
5078    #[serde(default, skip_serializing_if = "Option::is_none")]
5079    pub meta: Option<serde_json::Value>,
5080    /// Indicates if the account is currently active
5081    #[serde(default, skip_serializing_if = "Option::is_none")]
5082    pub active: Option<bool>,
5083    /// Indicates if the account has been deleted
5084    #[serde(default, skip_serializing_if = "Option::is_none")]
5085    pub deleted: Option<bool>,
5086    /// created date
5087    /// Format: date-time (ISO-8601 string).
5088    #[serde(rename = "createdAt", default, skip_serializing_if = "Option::is_none")]
5089    pub created_at: Option<String>,
5090    /// updated date
5091    /// Format: date-time (ISO-8601 string).
5092    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
5093    pub updated_at: Option<String>,
5094}
5095
5096/// `SocialMediaGmbAccountResponseDTO` from the GoHighLevel OpenAPI spec.
5097#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5098pub struct SocialMediaGmbAccountResponseDTO {
5099    /// Success or Failure
5100    /// Required by the API.
5101    pub success: bool,
5102    /// Status Code
5103    /// Required by the API.
5104    #[serde(rename = "statusCode")]
5105    pub status_code: f64,
5106    /// Message
5107    /// Required by the API.
5108    pub message: String,
5109    /// Requested Results
5110    #[serde(default, skip_serializing_if = "Option::is_none")]
5111    pub results: Option<SocialGoogleMediaAccountSchema>,
5112}
5113
5114/// `SocialMediaInstagramAccountResponseDTO` from the GoHighLevel OpenAPI spec.
5115#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5116pub struct SocialMediaInstagramAccountResponseDTO {
5117    /// Success or Failure
5118    /// Required by the API.
5119    pub success: bool,
5120    /// Status Code
5121    /// Required by the API.
5122    #[serde(rename = "statusCode")]
5123    pub status_code: f64,
5124    /// Message
5125    /// Required by the API.
5126    pub message: String,
5127    /// Requested Results
5128    #[serde(default, skip_serializing_if = "Option::is_none")]
5129    pub results: Option<SocialMediaInstagramAccountSchema>,
5130}
5131
5132/// `SocialMediaInstagramAccountSchema` from the GoHighLevel OpenAPI spec.
5133#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5134pub struct SocialMediaInstagramAccountSchema {
5135    /// MongoDB document ID of the social media account
5136    #[serde(rename = "_id", default, skip_serializing_if = "Option::is_none")]
5137    pub id: Option<String>,
5138    /// OAuth provider account identifier
5139    #[serde(rename = "oAuthId", default, skip_serializing_if = "Option::is_none")]
5140    pub o_auth_id: Option<String>,
5141    /// Legacy account identifier for backward compatibility
5142    #[serde(rename = "oldId", default, skip_serializing_if = "Option::is_none")]
5143    pub old_id: Option<String>,
5144    /// Location ID associated with this account
5145    #[serde(
5146        rename = "locationId",
5147        default,
5148        skip_serializing_if = "Option::is_none"
5149    )]
5150    pub location_id: Option<String>,
5151    /// Original platform-specific account identifier
5152    #[serde(rename = "originId", default, skip_serializing_if = "Option::is_none")]
5153    pub origin_id: Option<String>,
5154    /// Social media platform name
5155    #[serde(default, skip_serializing_if = "Option::is_none")]
5156    pub platform: Option<serde_json::Value>,
5157    /// Type of account (e.g., location, page, profile)
5158    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
5159    pub type_: Option<serde_json::Value>,
5160    /// Display name of the account
5161    #[serde(default, skip_serializing_if = "Option::is_none")]
5162    pub name: Option<String>,
5163    /// Avatar or profile picture URL
5164    #[serde(default, skip_serializing_if = "Option::is_none")]
5165    pub avatar: Option<String>,
5166    /// Additional metadata for the account
5167    #[serde(default, skip_serializing_if = "Option::is_none")]
5168    pub meta: Option<serde_json::Value>,
5169    /// Indicates if the account is currently active
5170    #[serde(default, skip_serializing_if = "Option::is_none")]
5171    pub active: Option<bool>,
5172    /// Indicates if the account has been deleted
5173    #[serde(default, skip_serializing_if = "Option::is_none")]
5174    pub deleted: Option<bool>,
5175    /// created date
5176    /// Format: date-time (ISO-8601 string).
5177    #[serde(rename = "createdAt", default, skip_serializing_if = "Option::is_none")]
5178    pub created_at: Option<String>,
5179    /// updated date
5180    /// Format: date-time (ISO-8601 string).
5181    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
5182    pub updated_at: Option<String>,
5183}
5184
5185/// `SocialMediaLinkedInAccountResponseDTO` from the GoHighLevel OpenAPI spec.
5186#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5187pub struct SocialMediaLinkedInAccountResponseDTO {
5188    /// Success or Failure
5189    /// Required by the API.
5190    pub success: bool,
5191    /// Status Code
5192    /// Required by the API.
5193    #[serde(rename = "statusCode")]
5194    pub status_code: f64,
5195    /// Message
5196    /// Required by the API.
5197    pub message: String,
5198    /// Requested Results
5199    #[serde(default, skip_serializing_if = "Option::is_none")]
5200    pub results: Option<SocialMediaLinkedInAccountSchema>,
5201}
5202
5203/// `SocialMediaLinkedInAccountSchema` from the GoHighLevel OpenAPI spec.
5204#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5205pub struct SocialMediaLinkedInAccountSchema {
5206    /// MongoDB document ID of the social media account
5207    #[serde(rename = "_id", default, skip_serializing_if = "Option::is_none")]
5208    pub id: Option<String>,
5209    /// OAuth provider account identifier
5210    #[serde(rename = "oAuthId", default, skip_serializing_if = "Option::is_none")]
5211    pub o_auth_id: Option<String>,
5212    /// Legacy account identifier for backward compatibility
5213    #[serde(rename = "oldId", default, skip_serializing_if = "Option::is_none")]
5214    pub old_id: Option<String>,
5215    /// Location ID associated with this account
5216    #[serde(
5217        rename = "locationId",
5218        default,
5219        skip_serializing_if = "Option::is_none"
5220    )]
5221    pub location_id: Option<String>,
5222    /// Original platform-specific account identifier
5223    #[serde(rename = "originId", default, skip_serializing_if = "Option::is_none")]
5224    pub origin_id: Option<String>,
5225    /// Social media platform name
5226    #[serde(default, skip_serializing_if = "Option::is_none")]
5227    pub platform: Option<serde_json::Value>,
5228    /// type must be one of the following values: page, profile
5229    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
5230    pub type_: Option<serde_json::Value>,
5231    /// Display name of the account
5232    #[serde(default, skip_serializing_if = "Option::is_none")]
5233    pub name: Option<String>,
5234    /// Avatar or profile picture URL
5235    #[serde(default, skip_serializing_if = "Option::is_none")]
5236    pub avatar: Option<String>,
5237    /// Additional metadata for the account
5238    #[serde(default, skip_serializing_if = "Option::is_none")]
5239    pub meta: Option<serde_json::Value>,
5240    /// Indicates if the account is currently active
5241    #[serde(default, skip_serializing_if = "Option::is_none")]
5242    pub active: Option<bool>,
5243    /// Indicates if the account has been deleted
5244    #[serde(default, skip_serializing_if = "Option::is_none")]
5245    pub deleted: Option<bool>,
5246    /// created date
5247    /// Format: date-time (ISO-8601 string).
5248    #[serde(rename = "createdAt", default, skip_serializing_if = "Option::is_none")]
5249    pub created_at: Option<String>,
5250    /// updated date
5251    /// Format: date-time (ISO-8601 string).
5252    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
5253    pub updated_at: Option<String>,
5254}
5255
5256/// `SocialMediaPinterestAccountResponseDTO` from the GoHighLevel OpenAPI spec.
5257#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5258pub struct SocialMediaPinterestAccountResponseDTO {
5259    /// Success or Failure
5260    /// Required by the API.
5261    pub success: bool,
5262    /// Status Code
5263    /// Required by the API.
5264    #[serde(rename = "statusCode")]
5265    pub status_code: f64,
5266    /// Message
5267    /// Required by the API.
5268    pub message: String,
5269    /// Requested Results
5270    #[serde(default, skip_serializing_if = "Option::is_none")]
5271    pub results: Option<PinterestOAuthAccountSchema>,
5272}
5273
5274/// `SocialMediaTagSchema` from the GoHighLevel OpenAPI spec.
5275#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5276pub struct SocialMediaTagSchema {
5277    /// Tag Name
5278    #[serde(default, skip_serializing_if = "Option::is_none")]
5279    pub tag: Option<String>,
5280    /// Location Id
5281    #[serde(
5282        rename = "locationId",
5283        default,
5284        skip_serializing_if = "Option::is_none"
5285    )]
5286    pub location_id: Option<String>,
5287    /// MongoDB document ID
5288    #[serde(rename = "_id", default, skip_serializing_if = "Option::is_none")]
5289    pub id: Option<String>,
5290    /// Created By User Id
5291    #[serde(rename = "createdBy", default, skip_serializing_if = "Option::is_none")]
5292    pub created_by: Option<String>,
5293    /// Deleted boolean value
5294    #[serde(default, skip_serializing_if = "Option::is_none")]
5295    pub deleted: Option<bool>,
5296    /// Date when the record was created
5297    /// Format: date-time (ISO-8601 string).
5298    #[serde(rename = "createdAt", default, skip_serializing_if = "Option::is_none")]
5299    pub created_at: Option<String>,
5300    /// Date when the record was last updated
5301    /// Format: date-time (ISO-8601 string).
5302    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
5303    pub updated_at: Option<String>,
5304}
5305
5306/// `SocialMediaThreadsAccountResponseDTO` from the GoHighLevel OpenAPI spec.
5307#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5308pub struct SocialMediaThreadsAccountResponseDTO {
5309    /// Success or Failure
5310    /// Required by the API.
5311    pub success: bool,
5312    /// Status Code
5313    /// Required by the API.
5314    #[serde(rename = "statusCode")]
5315    pub status_code: f64,
5316    /// Message
5317    /// Required by the API.
5318    pub message: String,
5319    /// Requested Results
5320    #[serde(default, skip_serializing_if = "Option::is_none")]
5321    pub results: Option<SocialMediaThreadsAccountSchema>,
5322}
5323
5324/// `SocialMediaThreadsAccountSchema` from the GoHighLevel OpenAPI spec.
5325#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5326pub struct SocialMediaThreadsAccountSchema {
5327    /// The spec defines no fields for this schema.
5328    #[serde(flatten)]
5329    pub extra: serde_json::Map<String, serde_json::Value>,
5330}
5331
5332/// `SocialMediaTiktokAccountResponseDTO` from the GoHighLevel OpenAPI spec.
5333#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5334pub struct SocialMediaTiktokAccountResponseDTO {
5335    /// Success or Failure
5336    /// Required by the API.
5337    pub success: bool,
5338    /// Status Code
5339    /// Required by the API.
5340    #[serde(rename = "statusCode")]
5341    pub status_code: f64,
5342    /// Message
5343    /// Required by the API.
5344    pub message: String,
5345    /// Requested Results
5346    #[serde(default, skip_serializing_if = "Option::is_none")]
5347    pub results: Option<SocialMediaTiktokAccountSchema>,
5348}
5349
5350/// `SocialMediaTiktokAccountSchema` from the GoHighLevel OpenAPI spec.
5351#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5352pub struct SocialMediaTiktokAccountSchema {
5353    /// MongoDB document ID of the social media account
5354    #[serde(rename = "_id", default, skip_serializing_if = "Option::is_none")]
5355    pub id: Option<String>,
5356    /// OAuth provider account identifier
5357    #[serde(rename = "oAuthId", default, skip_serializing_if = "Option::is_none")]
5358    pub o_auth_id: Option<String>,
5359    /// Legacy account identifier for backward compatibility
5360    #[serde(rename = "oldId", default, skip_serializing_if = "Option::is_none")]
5361    pub old_id: Option<String>,
5362    /// Location ID associated with this account
5363    #[serde(
5364        rename = "locationId",
5365        default,
5366        skip_serializing_if = "Option::is_none"
5367    )]
5368    pub location_id: Option<String>,
5369    /// Original platform-specific account identifier
5370    #[serde(rename = "originId", default, skip_serializing_if = "Option::is_none")]
5371    pub origin_id: Option<String>,
5372    /// Social media platform name
5373    #[serde(default, skip_serializing_if = "Option::is_none")]
5374    pub platform: Option<serde_json::Value>,
5375    /// type must be one of the following values: profile, business
5376    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
5377    pub type_: Option<serde_json::Value>,
5378    /// Display name of the account
5379    #[serde(default, skip_serializing_if = "Option::is_none")]
5380    pub name: Option<String>,
5381    /// Avatar or profile picture URL
5382    #[serde(default, skip_serializing_if = "Option::is_none")]
5383    pub avatar: Option<String>,
5384    /// Additional metadata for the account
5385    #[serde(default, skip_serializing_if = "Option::is_none")]
5386    pub meta: Option<serde_json::Value>,
5387    /// Indicates if the account is currently active
5388    #[serde(default, skip_serializing_if = "Option::is_none")]
5389    pub active: Option<bool>,
5390    /// Indicates if the account has been deleted
5391    #[serde(default, skip_serializing_if = "Option::is_none")]
5392    pub deleted: Option<bool>,
5393    /// created date
5394    /// Format: date-time (ISO-8601 string).
5395    #[serde(rename = "createdAt", default, skip_serializing_if = "Option::is_none")]
5396    pub created_at: Option<String>,
5397    /// updated date
5398    /// Format: date-time (ISO-8601 string).
5399    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
5400    pub updated_at: Option<String>,
5401}
5402
5403/// `SocialMediaTiktokBusinessAccountResponseDTO` from the GoHighLevel OpenAPI spec.
5404#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5405pub struct SocialMediaTiktokBusinessAccountResponseDTO {
5406    /// Success or Failure
5407    /// Required by the API.
5408    pub success: bool,
5409    /// Status Code
5410    /// Required by the API.
5411    #[serde(rename = "statusCode")]
5412    pub status_code: f64,
5413    /// Message
5414    /// Required by the API.
5415    pub message: String,
5416    /// Requested Results
5417    #[serde(default, skip_serializing_if = "Option::is_none")]
5418    pub results: Option<TikTokOAuthAccountSchema>,
5419}
5420
5421/// `SocialMediaTwitterAccountResponseDTO` from the GoHighLevel OpenAPI spec.
5422#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5423pub struct SocialMediaTwitterAccountResponseDTO {
5424    /// Success or Failure
5425    /// Required by the API.
5426    pub success: bool,
5427    /// Status Code
5428    /// Required by the API.
5429    #[serde(rename = "statusCode")]
5430    pub status_code: f64,
5431    /// Message
5432    /// Required by the API.
5433    pub message: String,
5434    /// Requested Results
5435    #[serde(default, skip_serializing_if = "Option::is_none")]
5436    pub results: Option<SocialMediaTwitterAccountSchema>,
5437}
5438
5439/// `SocialMediaTwitterAccountSchema` from the GoHighLevel OpenAPI spec.
5440#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5441pub struct SocialMediaTwitterAccountSchema {
5442    /// MongoDB document ID of the social media account
5443    #[serde(rename = "_id", default, skip_serializing_if = "Option::is_none")]
5444    pub id: Option<String>,
5445    /// OAuth provider account identifier
5446    #[serde(rename = "oAuthId", default, skip_serializing_if = "Option::is_none")]
5447    pub o_auth_id: Option<String>,
5448    /// Legacy account identifier for backward compatibility
5449    #[serde(rename = "oldId", default, skip_serializing_if = "Option::is_none")]
5450    pub old_id: Option<String>,
5451    /// Location ID associated with this account
5452    #[serde(
5453        rename = "locationId",
5454        default,
5455        skip_serializing_if = "Option::is_none"
5456    )]
5457    pub location_id: Option<String>,
5458    /// Original platform-specific account identifier
5459    #[serde(rename = "originId", default, skip_serializing_if = "Option::is_none")]
5460    pub origin_id: Option<String>,
5461    /// Social media platform name
5462    #[serde(default, skip_serializing_if = "Option::is_none")]
5463    pub platform: Option<serde_json::Value>,
5464    /// Type of account (e.g., location, page, profile)
5465    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
5466    pub type_: Option<serde_json::Value>,
5467    /// Display name of the account
5468    #[serde(default, skip_serializing_if = "Option::is_none")]
5469    pub name: Option<String>,
5470    /// Avatar or profile picture URL
5471    #[serde(default, skip_serializing_if = "Option::is_none")]
5472    pub avatar: Option<String>,
5473    /// Additional metadata for the account
5474    #[serde(default, skip_serializing_if = "Option::is_none")]
5475    pub meta: Option<serde_json::Value>,
5476    /// Indicates if the account is currently active
5477    #[serde(default, skip_serializing_if = "Option::is_none")]
5478    pub active: Option<bool>,
5479    /// Indicates if the account has been deleted
5480    #[serde(default, skip_serializing_if = "Option::is_none")]
5481    pub deleted: Option<bool>,
5482    /// created date
5483    /// Format: date-time (ISO-8601 string).
5484    #[serde(rename = "createdAt", default, skip_serializing_if = "Option::is_none")]
5485    pub created_at: Option<String>,
5486    /// updated date
5487    /// Format: date-time (ISO-8601 string).
5488    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
5489    pub updated_at: Option<String>,
5490}
5491
5492/// `SocialMediaYouTubeAccountResponseDTO` from the GoHighLevel OpenAPI spec.
5493#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5494pub struct SocialMediaYouTubeAccountResponseDTO {
5495    /// Success or Failure
5496    /// Required by the API.
5497    pub success: bool,
5498    /// Status Code
5499    /// Required by the API.
5500    #[serde(rename = "statusCode")]
5501    pub status_code: f64,
5502    /// Message
5503    /// Required by the API.
5504    pub message: String,
5505    /// Requested Results
5506    #[serde(default, skip_serializing_if = "Option::is_none")]
5507    pub results: Option<YouTubeOAuthAccountSchema>,
5508}
5509
5510/// `StartDateSchema` from the GoHighLevel OpenAPI spec.
5511#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5512pub struct StartDateSchema {
5513    /// Start Date
5514    #[serde(rename = "startDate", default, skip_serializing_if = "Option::is_none")]
5515    pub start_date: Option<DateSchema>,
5516    /// Start Time
5517    #[serde(rename = "startTime", default, skip_serializing_if = "Option::is_none")]
5518    pub start_time: Option<TimeSchema>,
5519}
5520
5521/// `StartEditSessionDTO` from the GoHighLevel OpenAPI spec.
5522#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5523pub struct StartEditSessionDTO {
5524    /// Location ID
5525    /// Required by the API.
5526    #[serde(rename = "locationId")]
5527    pub location_id: String,
5528}
5529
5530/// `StartEditSessionResponseDTO` from the GoHighLevel OpenAPI spec.
5531#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5532pub struct StartEditSessionResponseDTO {
5533    /// A message indicating the result of the operation.
5534    #[serde(default, skip_serializing_if = "Option::is_none")]
5535    pub message: Option<String>,
5536    /// The ID of the edit session.
5537    #[serde(rename = "sessionId", default, skip_serializing_if = "Option::is_none")]
5538    pub session_id: Option<String>,
5539    /// Number of items staged for editing.
5540    #[serde(rename = "itemCount", default, skip_serializing_if = "Option::is_none")]
5541    pub item_count: Option<f64>,
5542}
5543
5544/// `TikTokOAuthAccountSchema` from the GoHighLevel OpenAPI spec.
5545#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5546pub struct TikTokOAuthAccountSchema {
5547    /// The spec defines no fields for this schema.
5548    #[serde(flatten)]
5549    pub extra: serde_json::Map<String, serde_json::Value>,
5550}
5551
5552/// `TiktokPostSchema` from the GoHighLevel OpenAPI spec.
5553#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5554pub struct TiktokPostSchema {
5555    /// Privacy level controlling who can view the video. **Available Values:** -
5556    /// `PUBLIC_TO_EVERYONE` - Anyone can view (default) - `MUTUAL_FOLLOW_FRIENDS` - Only mutual
5557    /// followers can view - `SELF_ONLY` - Only you can view (private) **Note:** If set to
5558    /// `SELF_ONLY`, `videoDisclosure` must be `false`.
5559    /// Allowed values: `PUBLIC_TO_EVERYONE`, `MUTUAL_FOLLOW_FRIENDS`, `SELF_ONLY`.
5560    /// Required by the API.
5561    #[serde(rename = "privacyLevel")]
5562    pub privacy_level: String,
5563    /// Indicates if the video promotes a third-party brand or product. **Required:** Must be
5564    /// `true` if `videoDisclosure` is enabled and you're promoting another brand.
5565    #[serde(
5566        rename = "promoteOtherBrand",
5567        default,
5568        skip_serializing_if = "Option::is_none"
5569    )]
5570    pub promote_other_brand: Option<bool>,
5571    /// Allow users to comment on the video. Default is determined by account settings.
5572    #[serde(
5573        rename = "enableComment",
5574        default,
5575        skip_serializing_if = "Option::is_none"
5576    )]
5577    pub enable_comment: Option<bool>,
5578    /// Allow users to create Duet videos with your content. **Duet:** Side-by-side video
5579    /// featuring your content and the creator's reaction/addition.
5580    #[serde(
5581        rename = "enableDuet",
5582        default,
5583        skip_serializing_if = "Option::is_none"
5584    )]
5585    pub enable_duet: Option<bool>,
5586    /// Allow users to create Stitch videos with your content. **Stitch:** Clips up to 5 seconds
5587    /// of your video that creators can use in their own videos.
5588    #[serde(
5589        rename = "enableStitch",
5590        default,
5591        skip_serializing_if = "Option::is_none"
5592    )]
5593    pub enable_stitch: Option<bool>,
5594    /// Enable branded content disclosure. Required when video is promotional content.
5595    /// **Validations:** - Cannot be `true` if `privacyLevel` is `SELF_ONLY` - If enabled, at
5596    /// least one of `promoteYourBrand` or `promoteOtherBrand` must be `true`
5597    #[serde(
5598        rename = "videoDisclosure",
5599        default,
5600        skip_serializing_if = "Option::is_none"
5601    )]
5602    pub video_disclosure: Option<bool>,
5603    /// Indicates if the video promotes your own brand or product. **Required:** Must be `true`
5604    /// if `videoDisclosure` is enabled and you're promoting your own brand.
5605    #[serde(
5606        rename = "promoteYourBrand",
5607        default,
5608        skip_serializing_if = "Option::is_none"
5609    )]
5610    pub promote_your_brand: Option<bool>,
5611}
5612
5613/// `TiktokProfileSchema` from the GoHighLevel OpenAPI spec.
5614#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5615pub struct TiktokProfileSchema {
5616    /// Id
5617    #[serde(default, skip_serializing_if = "Option::is_none")]
5618    pub id: Option<String>,
5619    /// Name of account
5620    #[serde(default, skip_serializing_if = "Option::is_none")]
5621    pub name: Option<String>,
5622    /// Username of account
5623    #[serde(default, skip_serializing_if = "Option::is_none")]
5624    pub username: Option<String>,
5625    /// Avatar of profile account
5626    #[serde(default, skip_serializing_if = "Option::is_none")]
5627    pub avatar: Option<String>,
5628    /// Is verified
5629    #[serde(default, skip_serializing_if = "Option::is_none")]
5630    pub verified: Option<bool>,
5631    /// Is connected
5632    #[serde(
5633        rename = "isConnected",
5634        default,
5635        skip_serializing_if = "Option::is_none"
5636    )]
5637    pub is_connected: Option<bool>,
5638    /// Tiktok Account Type must be one of the following values: business, profile
5639    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
5640    pub type_: Option<serde_json::Value>,
5641}
5642
5643/// `TimeSchema` from the GoHighLevel OpenAPI spec.
5644#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5645pub struct TimeSchema {
5646    /// Hour component of the time (0-23)
5647    /// Required by the API.
5648    pub hours: f64,
5649    /// Minute component of the time (0-59)
5650    /// Required by the API.
5651    pub minutes: f64,
5652    /// Second component of the time (0-59)
5653    /// Required by the API.
5654    pub seconds: f64,
5655}
5656
5657/// `TimeSlotDTO` from the GoHighLevel OpenAPI spec.
5658#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5659pub struct TimeSlotDTO {
5660    /// Day of the week (0-6)
5661    /// Required by the API.
5662    #[serde(rename = "dayOfWeek")]
5663    pub day_of_week: f64,
5664    /// Time in HH:mm format
5665    /// Required by the API.
5666    pub time: String,
5667}
5668
5669/// `TwitterProfileSchema` from the GoHighLevel OpenAPI spec.
5670#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5671pub struct TwitterProfileSchema {
5672    /// ID of profile
5673    #[serde(default, skip_serializing_if = "Option::is_none")]
5674    pub id: Option<String>,
5675    /// Name of profile
5676    #[serde(default, skip_serializing_if = "Option::is_none")]
5677    pub name: Option<String>,
5678    /// Username of profile
5679    #[serde(default, skip_serializing_if = "Option::is_none")]
5680    pub username: Option<String>,
5681    /// Avatar of profile
5682    #[serde(default, skip_serializing_if = "Option::is_none")]
5683    pub avatar: Option<String>,
5684    /// Is protected
5685    #[serde(default, skip_serializing_if = "Option::is_none")]
5686    pub protected: Option<bool>,
5687    /// Is verified
5688    #[serde(default, skip_serializing_if = "Option::is_none")]
5689    pub verified: Option<bool>,
5690    /// Is connected
5691    #[serde(
5692        rename = "isConnected",
5693        default,
5694        skip_serializing_if = "Option::is_none"
5695    )]
5696    pub is_connected: Option<bool>,
5697}
5698
5699/// `UpdateCategoryQueueDTO` from the GoHighLevel OpenAPI spec.
5700#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5701pub struct UpdateCategoryQueueDTO {
5702    /// Location ID
5703    /// Required by the API.
5704    #[serde(rename = "locationId")]
5705    pub location_id: String,
5706    /// Skip legacy watermark cleanup when rescheduling posts
5707    #[serde(
5708        rename = "skipLegacyWatermark",
5709        default,
5710        skip_serializing_if = "Option::is_none"
5711    )]
5712    pub skip_legacy_watermark: Option<bool>,
5713    /// Status of the Queue
5714    #[serde(default, skip_serializing_if = "Option::is_none")]
5715    pub status: Option<serde_json::Value>,
5716    /// Skip Date Time in ISO format
5717    #[serde(
5718        rename = "skipDateTime",
5719        default,
5720        skip_serializing_if = "Option::is_none"
5721    )]
5722    pub skip_date_time: Option<String>,
5723    #[serde(rename = "timeSlots", default, skip_serializing_if = "Vec::is_empty")]
5724    pub time_slots: Vec<TimeSlotDTO>,
5725    /// Enable posting future content. Automatically Queue any New Posts Created in this
5726    /// Category.
5727    #[serde(
5728        rename = "enableFuturePosts",
5729        default,
5730        skip_serializing_if = "Option::is_none"
5731    )]
5732    pub enable_future_posts: Option<bool>,
5733    /// Prioritize new content over older content. When true, new items added via directToQueue
5734    /// will be placed at the top of the queue.
5735    #[serde(
5736        rename = "prioritizeNewContent",
5737        default,
5738        skip_serializing_if = "Option::is_none"
5739    )]
5740    pub prioritize_new_content: Option<bool>,
5741}
5742
5743/// `UpdateCategoryQueueResponseDTO` from the GoHighLevel OpenAPI spec.
5744#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5745pub struct UpdateCategoryQueueResponseDTO {
5746    /// A message indicating the result of the operation. Examples: "Queue updated
5747    /// successfully.", "Queue paused successfully.", "Queue activated successfully.", "Queue
5748    /// deleted successfully."
5749    #[serde(default, skip_serializing_if = "Option::is_none")]
5750    pub message: Option<String>,
5751    /// The updated queue.
5752    #[serde(default, skip_serializing_if = "Option::is_none")]
5753    pub queue: Option<CategoryQueueDTO>,
5754}
5755
5756/// `UpdatePostSuccessfulResponseDTO` from the GoHighLevel OpenAPI spec.
5757#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5758pub struct UpdatePostSuccessfulResponseDTO {
5759    /// Success or Failure
5760    /// Required by the API.
5761    pub success: bool,
5762    /// Status Code
5763    /// Required by the API.
5764    #[serde(rename = "statusCode")]
5765    pub status_code: f64,
5766    /// Message
5767    /// Required by the API.
5768    pub message: String,
5769}
5770
5771/// `UpdateQueueItemDTO` from the GoHighLevel OpenAPI spec.
5772#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5773pub struct UpdateQueueItemDTO {
5774    /// Location ID
5775    /// Required by the API.
5776    #[serde(rename = "locationId")]
5777    pub location_id: String,
5778    /// Edit session ID
5779    #[serde(rename = "sessionId", default, skip_serializing_if = "Option::is_none")]
5780    pub session_id: Option<String>,
5781    /// Modifications to the original post
5782    #[serde(
5783        rename = "modifiedPostPayload",
5784        default,
5785        skip_serializing_if = "Option::is_none"
5786    )]
5787    pub modified_post_payload: Option<QueueModifiedPostDTO>,
5788    /// New order value or position keyword (cyclic-aware). Accepts: - A number: explicit order
5789    /// value calculated by FE as midpoint between adjacent items - "top": place at cyclic top
5790    /// (first to be scheduled next) - "bottom": place at cyclic bottom (last to be scheduled)
5791    /// For positions between items, FE calculates: Math.floor((prevItem.order + nextItem.order)
5792    /// / 2)
5793    /// Multiple possible shapes in the spec; raw JSON.
5794    #[serde(rename = "newOrder", default, skip_serializing_if = "Option::is_none")]
5795    pub new_order: Option<serde_json::Value>,
5796    /// Variations
5797    #[serde(default, skip_serializing_if = "Vec::is_empty")]
5798    pub variations: Vec<VariationInputDTO>,
5799    /// Primary media URL (image)
5800    #[serde(
5801        rename = "primaryImage",
5802        default,
5803        skip_serializing_if = "Option::is_none"
5804    )]
5805    pub primary_image: Option<String>,
5806}
5807
5808/// `UpdateQueueItemResponseDTO` from the GoHighLevel OpenAPI spec.
5809#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5810pub struct UpdateQueueItemResponseDTO {
5811    /// A message indicating the result of the operation.
5812    #[serde(default, skip_serializing_if = "Option::is_none")]
5813    pub message: Option<String>,
5814    /// The updated queue item.
5815    #[serde(rename = "queueItem", default, skip_serializing_if = "Option::is_none")]
5816    pub queue_item: Option<CreatedQueueItemWithVariationsDTO>,
5817    /// Updated slot information for items affected by reorder operation
5818    #[serde(
5819        rename = "updatedSlots",
5820        default,
5821        skip_serializing_if = "Vec::is_empty"
5822    )]
5823    pub updated_slots: Vec<UpdatedSlotInfoDTO>,
5824    /// Number of unique posts that had their slots changed
5825    #[serde(
5826        rename = "totalPostsChanged",
5827        default,
5828        skip_serializing_if = "Option::is_none"
5829    )]
5830    pub total_posts_changed: Option<f64>,
5831}
5832
5833/// `UpdateTagDTO` from the GoHighLevel OpenAPI spec.
5834#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5835pub struct UpdateTagDTO {
5836    /// Array of Tag Ids
5837    /// Required by the API.
5838    #[serde(rename = "tagIds", default, skip_serializing_if = "Vec::is_empty")]
5839    pub tag_ids: Vec<String>,
5840}
5841
5842/// `UpdatedSlotInfoDTO` from the GoHighLevel OpenAPI spec.
5843#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5844pub struct UpdatedSlotInfoDTO {
5845    /// The ID of the queue item
5846    #[serde(rename = "itemId", default, skip_serializing_if = "Option::is_none")]
5847    pub item_id: Option<String>,
5848    /// The updated scheduled date/time for this item
5849    /// Format: date-time (ISO-8601 string).
5850    #[serde(
5851        rename = "scheduledDateTime",
5852        default,
5853        skip_serializing_if = "Option::is_none"
5854    )]
5855    pub scheduled_date_time: Option<String>,
5856    /// Indicates if this time slot is skipped
5857    #[serde(rename = "isSkipped", default, skip_serializing_if = "Option::is_none")]
5858    pub is_skipped: Option<bool>,
5859}
5860
5861/// `UploadCSVDTO` from the GoHighLevel OpenAPI spec.
5862#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5863pub struct UploadCSVDTO {
5864    #[serde(default, skip_serializing_if = "Option::is_none")]
5865    pub file: Option<String>,
5866}
5867
5868/// `UploadFileResponseDTO` from the GoHighLevel OpenAPI spec.
5869#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5870pub struct UploadFileResponseDTO {
5871    /// Success or Failure
5872    /// Required by the API.
5873    pub success: bool,
5874    /// Status Code
5875    /// Required by the API.
5876    #[serde(rename = "statusCode")]
5877    pub status_code: f64,
5878    /// Message
5879    /// Required by the API.
5880    pub message: String,
5881    /// Requested Results
5882    #[serde(default, skip_serializing_if = "Option::is_none")]
5883    pub results: Option<UploadFileResponseSchema>,
5884}
5885
5886/// `UploadFileResponseSchema` from the GoHighLevel OpenAPI spec.
5887#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5888pub struct UploadFileResponseSchema {
5889    /// File path of uploaded CSV
5890    #[serde(rename = "filePath", default, skip_serializing_if = "Option::is_none")]
5891    pub file_path: Option<String>,
5892    /// Number of rows in the CSV
5893    #[serde(rename = "rowsCount", default, skip_serializing_if = "Option::is_none")]
5894    pub rows_count: Option<f64>,
5895    /// Name of the uploaded file
5896    #[serde(rename = "fileName", default, skip_serializing_if = "Option::is_none")]
5897    pub file_name: Option<String>,
5898    /// Size of the file in bytes
5899    #[serde(rename = "fileSize", default, skip_serializing_if = "Option::is_none")]
5900    pub file_size: Option<f64>,
5901    /// CSV file type
5902    /// Allowed values: `basic`, `advance`.
5903    #[serde(
5904        rename = "csvFileType",
5905        default,
5906        skip_serializing_if = "Option::is_none"
5907    )]
5908    pub csv_file_type: Option<String>,
5909}
5910
5911/// `VariationDTO` from the GoHighLevel OpenAPI spec.
5912#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5913pub struct VariationDTO {
5914    /// The ID of the variation.
5915    #[serde(rename = "_id", default, skip_serializing_if = "Option::is_none")]
5916    pub id: Option<String>,
5917    /// The text content of the variation.
5918    #[serde(default, skip_serializing_if = "Option::is_none")]
5919    pub content: Option<String>,
5920    /// Platform-specific mentions within the content (e.g., @username references).
5921    #[serde(default, skip_serializing_if = "Vec::is_empty")]
5922    pub mentions: Vec<serde_json::Value>,
5923    /// Open Graph tags for link previews.
5924    #[serde(rename = "ogTags", default, skip_serializing_if = "Option::is_none")]
5925    pub og_tags: Option<OgTagsDTO>,
5926}
5927
5928/// `VariationInputDTO` from the GoHighLevel OpenAPI spec.
5929#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5930pub struct VariationInputDTO {
5931    /// The text content of the variation.
5932    #[serde(default, skip_serializing_if = "Option::is_none")]
5933    pub content: Option<String>,
5934    /// Platform-specific mentions within the content (e.g., @username references).
5935    #[serde(default, skip_serializing_if = "Vec::is_empty")]
5936    pub mentions: Vec<serde_json::Value>,
5937    /// Open Graph tags for link previews.
5938    #[serde(rename = "ogTags", default, skip_serializing_if = "Option::is_none")]
5939    pub og_tags: Option<OgTagsInputDTO>,
5940}
5941
5942/// `WrappedCloneQueueItemResponseDTO` from the GoHighLevel OpenAPI spec.
5943#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5944pub struct WrappedCloneQueueItemResponseDTO {
5945    /// Required by the API.
5946    pub success: bool,
5947    /// Required by the API.
5948    #[serde(rename = "statusCode")]
5949    pub status_code: f64,
5950    /// Required by the API.
5951    pub results: CloneQueueItemResponseDTO,
5952    #[serde(rename = "traceId", default, skip_serializing_if = "Option::is_none")]
5953    pub trace_id: Option<String>,
5954}
5955
5956/// `WrappedCreateCategoryQueueResponseDTO` from the GoHighLevel OpenAPI spec.
5957#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5958pub struct WrappedCreateCategoryQueueResponseDTO {
5959    /// Required by the API.
5960    pub success: bool,
5961    /// Required by the API.
5962    #[serde(rename = "statusCode")]
5963    pub status_code: f64,
5964    /// Required by the API.
5965    pub results: CreateCategoryQueueResponseDTO,
5966    #[serde(rename = "traceId", default, skip_serializing_if = "Option::is_none")]
5967    pub trace_id: Option<String>,
5968}
5969
5970/// `WrappedCreateQueueItemResponseDTO` from the GoHighLevel OpenAPI spec.
5971#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5972pub struct WrappedCreateQueueItemResponseDTO {
5973    /// Required by the API.
5974    pub success: bool,
5975    /// Required by the API.
5976    #[serde(rename = "statusCode")]
5977    pub status_code: f64,
5978    /// Required by the API.
5979    pub results: CreateQueueItemResponseDTO,
5980    #[serde(rename = "traceId", default, skip_serializing_if = "Option::is_none")]
5981    pub trace_id: Option<String>,
5982}
5983
5984/// `WrappedDeleteActivePostResponseDTO` from the GoHighLevel OpenAPI spec.
5985#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5986pub struct WrappedDeleteActivePostResponseDTO {
5987    /// Required by the API.
5988    pub success: bool,
5989    /// Required by the API.
5990    #[serde(rename = "statusCode")]
5991    pub status_code: f64,
5992    /// Required by the API.
5993    pub results: DeleteActivePostResponseDTO,
5994    #[serde(rename = "traceId", default, skip_serializing_if = "Option::is_none")]
5995    pub trace_id: Option<String>,
5996}
5997
5998/// `WrappedDiscardEditSessionResponseDTO` from the GoHighLevel OpenAPI spec.
5999#[derive(Debug, Clone, Default, Serialize, Deserialize)]
6000pub struct WrappedDiscardEditSessionResponseDTO {
6001    /// Required by the API.
6002    pub success: bool,
6003    /// Required by the API.
6004    #[serde(rename = "statusCode")]
6005    pub status_code: f64,
6006    /// Required by the API.
6007    pub results: DiscardEditSessionResponseDTO,
6008    #[serde(rename = "traceId", default, skip_serializing_if = "Option::is_none")]
6009    pub trace_id: Option<String>,
6010}
6011
6012/// `WrappedEditSessionCalendarResponseDTO` from the GoHighLevel OpenAPI spec.
6013#[derive(Debug, Clone, Default, Serialize, Deserialize)]
6014pub struct WrappedEditSessionCalendarResponseDTO {
6015    /// Required by the API.
6016    pub success: bool,
6017    /// Required by the API.
6018    #[serde(rename = "statusCode")]
6019    pub status_code: f64,
6020    /// Required by the API.
6021    pub results: EditSessionCalendarResponseDTO,
6022    #[serde(rename = "traceId", default, skip_serializing_if = "Option::is_none")]
6023    pub trace_id: Option<String>,
6024}
6025
6026/// `WrappedFetchAvailableCategoriesResponseDTO` from the GoHighLevel OpenAPI spec.
6027#[derive(Debug, Clone, Default, Serialize, Deserialize)]
6028pub struct WrappedFetchAvailableCategoriesResponseDTO {
6029    /// Required by the API.
6030    pub success: bool,
6031    /// Required by the API.
6032    #[serde(rename = "statusCode")]
6033    pub status_code: f64,
6034    /// Required by the API.
6035    pub results: FetchAvailableCategoriesResponseDTO,
6036    #[serde(rename = "traceId", default, skip_serializing_if = "Option::is_none")]
6037    pub trace_id: Option<String>,
6038}
6039
6040/// `WrappedFetchCalendarListResponseDTO` from the GoHighLevel OpenAPI spec.
6041#[derive(Debug, Clone, Default, Serialize, Deserialize)]
6042pub struct WrappedFetchCalendarListResponseDTO {
6043    /// Required by the API.
6044    pub success: bool,
6045    /// Required by the API.
6046    #[serde(rename = "statusCode")]
6047    pub status_code: f64,
6048    /// Required by the API.
6049    pub results: FetchCalendarListResponseDTO,
6050    #[serde(rename = "traceId", default, skip_serializing_if = "Option::is_none")]
6051    pub trace_id: Option<String>,
6052}
6053
6054/// `WrappedFetchCategoryQueuesResponseDTO` from the GoHighLevel OpenAPI spec.
6055#[derive(Debug, Clone, Default, Serialize, Deserialize)]
6056pub struct WrappedFetchCategoryQueuesResponseDTO {
6057    /// Required by the API.
6058    pub success: bool,
6059    /// Required by the API.
6060    #[serde(rename = "statusCode")]
6061    pub status_code: f64,
6062    /// Required by the API.
6063    pub results: FetchCategoryQueuesResponseDTO,
6064    #[serde(rename = "traceId", default, skip_serializing_if = "Option::is_none")]
6065    pub trace_id: Option<String>,
6066}
6067
6068/// `WrappedFetchQueueByIdResponseDTO` from the GoHighLevel OpenAPI spec.
6069#[derive(Debug, Clone, Default, Serialize, Deserialize)]
6070pub struct WrappedFetchQueueByIdResponseDTO {
6071    /// Required by the API.
6072    pub success: bool,
6073    /// Required by the API.
6074    #[serde(rename = "statusCode")]
6075    pub status_code: f64,
6076    /// Required by the API.
6077    pub results: FetchQueueByIdResponseDTO,
6078    #[serde(rename = "traceId", default, skip_serializing_if = "Option::is_none")]
6079    pub trace_id: Option<String>,
6080}
6081
6082/// `WrappedFetchQueueItemsResponseDTO` from the GoHighLevel OpenAPI spec.
6083#[derive(Debug, Clone, Default, Serialize, Deserialize)]
6084pub struct WrappedFetchQueueItemsResponseDTO {
6085    /// Required by the API.
6086    pub success: bool,
6087    /// Required by the API.
6088    #[serde(rename = "statusCode")]
6089    pub status_code: f64,
6090    /// Required by the API.
6091    pub results: FetchQueueItemsResponseDTO,
6092    #[serde(rename = "traceId", default, skip_serializing_if = "Option::is_none")]
6093    pub trace_id: Option<String>,
6094}
6095
6096/// `WrappedFetchSlotsResponseDTO` from the GoHighLevel OpenAPI spec.
6097#[derive(Debug, Clone, Default, Serialize, Deserialize)]
6098pub struct WrappedFetchSlotsResponseDTO {
6099    /// Required by the API.
6100    pub success: bool,
6101    /// Required by the API.
6102    #[serde(rename = "statusCode")]
6103    pub status_code: f64,
6104    /// Required by the API.
6105    pub results: FetchSlotsResponseDTO,
6106    #[serde(rename = "traceId", default, skip_serializing_if = "Option::is_none")]
6107    pub trace_id: Option<String>,
6108}
6109
6110/// `WrappedGeneralSuccessResponseDTO` from the GoHighLevel OpenAPI spec.
6111#[derive(Debug, Clone, Default, Serialize, Deserialize)]
6112pub struct WrappedGeneralSuccessResponseDTO {
6113    /// Required by the API.
6114    pub success: bool,
6115    /// Required by the API.
6116    #[serde(rename = "statusCode")]
6117    pub status_code: f64,
6118    /// Required by the API.
6119    pub results: GeneralSuccessResponseDTO,
6120    #[serde(rename = "traceId", default, skip_serializing_if = "Option::is_none")]
6121    pub trace_id: Option<String>,
6122}
6123
6124/// `WrappedResetQueueItemResponseDTO` from the GoHighLevel OpenAPI spec.
6125#[derive(Debug, Clone, Default, Serialize, Deserialize)]
6126pub struct WrappedResetQueueItemResponseDTO {
6127    /// Required by the API.
6128    pub success: bool,
6129    /// Required by the API.
6130    #[serde(rename = "statusCode")]
6131    pub status_code: f64,
6132    /// Required by the API.
6133    pub results: ResetQueueItemResponseDTO,
6134    #[serde(rename = "traceId", default, skip_serializing_if = "Option::is_none")]
6135    pub trace_id: Option<String>,
6136}
6137
6138/// `WrappedSaveEditSessionResponseDTO` from the GoHighLevel OpenAPI spec.
6139#[derive(Debug, Clone, Default, Serialize, Deserialize)]
6140pub struct WrappedSaveEditSessionResponseDTO {
6141    /// Required by the API.
6142    pub success: bool,
6143    /// Required by the API.
6144    #[serde(rename = "statusCode")]
6145    pub status_code: f64,
6146    /// Required by the API.
6147    pub results: SaveEditSessionResponseDTO,
6148    #[serde(rename = "traceId", default, skip_serializing_if = "Option::is_none")]
6149    pub trace_id: Option<String>,
6150}
6151
6152/// `WrappedStartEditSessionResponseDTO` from the GoHighLevel OpenAPI spec.
6153#[derive(Debug, Clone, Default, Serialize, Deserialize)]
6154pub struct WrappedStartEditSessionResponseDTO {
6155    /// Required by the API.
6156    pub success: bool,
6157    /// Required by the API.
6158    #[serde(rename = "statusCode")]
6159    pub status_code: f64,
6160    /// Required by the API.
6161    pub results: StartEditSessionResponseDTO,
6162    #[serde(rename = "traceId", default, skip_serializing_if = "Option::is_none")]
6163    pub trace_id: Option<String>,
6164}
6165
6166/// `WrappedUpdateCategoryQueueResponseDTO` from the GoHighLevel OpenAPI spec.
6167#[derive(Debug, Clone, Default, Serialize, Deserialize)]
6168pub struct WrappedUpdateCategoryQueueResponseDTO {
6169    /// Required by the API.
6170    pub success: bool,
6171    /// Required by the API.
6172    #[serde(rename = "statusCode")]
6173    pub status_code: f64,
6174    /// Required by the API.
6175    pub results: UpdateCategoryQueueResponseDTO,
6176    #[serde(rename = "traceId", default, skip_serializing_if = "Option::is_none")]
6177    pub trace_id: Option<String>,
6178}
6179
6180/// `WrappedUpdateQueueItemResponseDTO` from the GoHighLevel OpenAPI spec.
6181#[derive(Debug, Clone, Default, Serialize, Deserialize)]
6182pub struct WrappedUpdateQueueItemResponseDTO {
6183    /// Required by the API.
6184    pub success: bool,
6185    /// Required by the API.
6186    #[serde(rename = "statusCode")]
6187    pub status_code: f64,
6188    /// Required by the API.
6189    pub results: UpdateQueueItemResponseDTO,
6190    #[serde(rename = "traceId", default, skip_serializing_if = "Option::is_none")]
6191    pub trace_id: Option<String>,
6192}
6193
6194/// `YouTubeOAuthAccountSchema` from the GoHighLevel OpenAPI spec.
6195#[derive(Debug, Clone, Default, Serialize, Deserialize)]
6196pub struct YouTubeOAuthAccountSchema {
6197    /// The spec defines no fields for this schema.
6198    #[serde(flatten)]
6199    pub extra: serde_json::Map<String, serde_json::Value>,
6200}
6201
6202/// `YoutubePostSchema` from the GoHighLevel OpenAPI spec.
6203#[derive(Debug, Clone, Default, Serialize, Deserialize)]
6204pub struct YoutubePostSchema {
6205    /// Video title displayed on YouTube. **Max length:** 100 characters **Best Practices:** -
6206    /// Include relevant keywords - Be descriptive but concise - Avoid clickbait
6207    #[serde(default, skip_serializing_if = "Option::is_none")]
6208    pub title: Option<String>,
6209    /// Video visibility/privacy setting. **Available Values:** - `public` - Anyone can search
6210    /// and view - `unlisted` - Only people with the link can view - `private` - Only you can
6211    /// view
6212    /// Allowed values: `private`, `public`, `unlisted`.
6213    #[serde(
6214        rename = "privacyLevel",
6215        default,
6216        skip_serializing_if = "Option::is_none"
6217    )]
6218    pub privacy_level: Option<String>,
6219    /// YouTube video format type. **Available Types:** - `video` - Standard YouTube video
6220    /// (landscape, any duration) - `short` - YouTube Shorts (vertical, up to 60 seconds)
6221    /// **Required field.**
6222    /// Allowed values: `video`, `short`.
6223    /// Required by the API.
6224    #[serde(rename = "type")]
6225    pub type_: String,
6226}
6227
6228/// `YoutubeProfileSchema` from the GoHighLevel OpenAPI spec.
6229#[derive(Debug, Clone, Default, Serialize, Deserialize)]
6230pub struct YoutubeProfileSchema {
6231    /// Id
6232    #[serde(default, skip_serializing_if = "Option::is_none")]
6233    pub id: Option<String>,
6234    /// Name of account
6235    #[serde(default, skip_serializing_if = "Option::is_none")]
6236    pub name: Option<String>,
6237    /// Username of account
6238    #[serde(default, skip_serializing_if = "Option::is_none")]
6239    pub username: Option<String>,
6240    /// Avatar of profile account
6241    #[serde(default, skip_serializing_if = "Option::is_none")]
6242    pub avatar: Option<String>,
6243    /// Is verified
6244    #[serde(default, skip_serializing_if = "Option::is_none")]
6245    pub verified: Option<bool>,
6246    /// Is connected
6247    #[serde(
6248        rename = "isConnected",
6249        default,
6250        skip_serializing_if = "Option::is_none"
6251    )]
6252    pub is_connected: Option<bool>,
6253    /// Youtube Account Type
6254    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
6255    pub type_: Option<String>,
6256}