Skip to main content

ghl_models/v3/
social_planner.rs

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