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