postboost 1.0.0 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (815) hide show
  1. checksums.yaml +4 -4
  2. data/CODE_OF_CONDUCT.md +7 -0
  3. data/CONTRIBUTING.md +31 -0
  4. data/README.md +252 -0
  5. data/SECURITY.md +9 -0
  6. data/docs/AIApi.md +871 -0
  7. data/docs/AICredits.md +22 -0
  8. data/docs/AIUsage.md +20 -0
  9. data/docs/AIUsageText.md +24 -0
  10. data/docs/Account.md +19 -9
  11. data/docs/AccountAnalytics.md +28 -0
  12. data/docs/AccountAnalyticsInitialSync.md +20 -0
  13. data/docs/AccountConnectionHealth.md +34 -0
  14. data/docs/AccountErrorsInner.md +49 -0
  15. data/docs/AccountErrorsInnerOneOf.md +24 -0
  16. data/docs/AccountGroup.md +24 -0
  17. data/docs/AccountGroupInput.md +20 -0
  18. data/docs/AccountGroupsApi.md +372 -0
  19. data/docs/AccountHealth.md +34 -0
  20. data/docs/AccountHealthDailyCap.md +20 -0
  21. data/docs/AccountSchedule.md +22 -0
  22. data/docs/AccountsApi.md +231 -5
  23. data/docs/ActivityApi.md +87 -0
  24. data/docs/AddCompetitor202Response.md +20 -0
  25. data/docs/AddCompetitor409Response.md +20 -0
  26. data/docs/AddPostToQueueRequest.md +18 -0
  27. data/docs/AgentPageMeta.md +24 -0
  28. data/docs/AgentProposal.md +44 -0
  29. data/docs/AgentProposalDecision.md +18 -0
  30. data/docs/AgentRun.md +44 -0
  31. data/docs/AgentsApi.md +745 -0
  32. data/docs/AnalyticsApi.md +899 -0
  33. data/docs/AnalyticsPeriod.md +24 -0
  34. data/docs/AnalyticsSummary.md +20 -0
  35. data/docs/AnalyticsSummaryData.md +38 -0
  36. data/docs/ApiActivity.md +36 -0
  37. data/docs/ApiActivityOutcome.md +15 -0
  38. data/docs/ApiKey.md +32 -0
  39. data/docs/ApiKeyAbility.md +15 -0
  40. data/docs/ApiKeyInput.md +24 -0
  41. data/docs/ApproveAgentProposal200Response.md +18 -0
  42. data/docs/ApproveAgentProposal409Response.md +20 -0
  43. data/docs/ApproveInboxReplyDraft403Response.md +20 -0
  44. data/docs/ApprovePostRequest.md +24 -0
  45. data/docs/BestPostingTimes.md +20 -0
  46. data/docs/BestPostingTimesTimesInner.md +24 -0
  47. data/docs/BlogToSocial200Response.md +20 -0
  48. data/docs/BlogToSocial429Response.md +18 -0
  49. data/docs/BlogToSocialCaption.md +28 -0
  50. data/docs/BlogToSocialInput.md +44 -0
  51. data/docs/BlogToSocialMedia.md +20 -0
  52. data/docs/BlogToSocialResponse.md +30 -0
  53. data/docs/BrandVoice.md +48 -0
  54. data/docs/BrandVoiceInput.md +46 -0
  55. data/docs/BrandVoiceMeta.md +18 -0
  56. data/docs/CancelSubscription422Response.md +20 -0
  57. data/docs/CancelSubscription422ResponseErrors.md +18 -0
  58. data/docs/CancelSubscriptionRequest.md +18 -0
  59. data/docs/ChannelAccount.md +36 -0
  60. data/docs/CodedError.md +22 -0
  61. data/docs/Competitor.md +34 -0
  62. data/docs/CompetitorDetail.md +38 -0
  63. data/docs/CompetitorInput.md +20 -0
  64. data/docs/CompetitorMedia.md +28 -0
  65. data/docs/CompetitorSnapshot.md +22 -0
  66. data/docs/CompetitorsApi.md +296 -0
  67. data/docs/CompleteChunkedUploadRequest.md +20 -0
  68. data/docs/ConnectChannelInput.md +24 -0
  69. data/docs/CreateAccountGroup201Response.md +18 -0
  70. data/docs/CreateAgent201Response.md +18 -0
  71. data/docs/CreateApiKey201Response.md +18 -0
  72. data/docs/CreateApiKey201ResponseData.md +34 -0
  73. data/docs/CreateHashtagGroup201Response.md +18 -0
  74. data/docs/CreateInboxReplyDraft201Response.md +18 -0
  75. data/docs/CreateMediaFolderRequest.md +20 -0
  76. data/docs/CreateMention201Response.md +18 -0
  77. data/docs/CreateRecyclingRule201Response.md +18 -0
  78. data/docs/CreateReportExport201Response.md +18 -0
  79. data/docs/CreateResellerClient201Response.md +18 -0
  80. data/docs/CreateRssFeed201Response.md +18 -0
  81. data/docs/CreateTemplate201Response.md +18 -0
  82. data/docs/CreateWebhookSubscription201Response.md +18 -0
  83. data/docs/CreateWebhookSubscription201ResponseData.md +30 -0
  84. data/docs/DeleteAgent200Response.md +18 -0
  85. data/docs/DeleteMediaBulkRequest.md +1 -1
  86. data/docs/DeleteMediaBulkRequestItemsInner.md +49 -0
  87. data/docs/DeleteMediaFolderRequest.md +18 -0
  88. data/docs/DeleteResult.md +3 -3
  89. data/docs/GetAccountHealth200Response.md +18 -0
  90. data/docs/GetBrandVoice200Response.md +18 -0
  91. data/docs/GetCompetitor200Response.md +18 -0
  92. data/docs/GetInboxConversation200Response.md +18 -0
  93. data/docs/GetPostingSchedule200Response.md +18 -0
  94. data/docs/GetReportBranding200Response.md +18 -0
  95. data/docs/GuardrailError.md +28 -0
  96. data/docs/HashtagGroup.md +22 -0
  97. data/docs/HashtagGroupInput.md +20 -0
  98. data/docs/HashtagGroupsApi.md +372 -0
  99. data/docs/ImageAltText200Response.md +18 -0
  100. data/docs/ImageAltTextInput.md +18 -0
  101. data/docs/ImageAltTextResponse.md +24 -0
  102. data/docs/ImageCreditBalance.md +28 -0
  103. data/docs/ImageEditInput.md +30 -0
  104. data/docs/ImageGenerate200Response.md +20 -0
  105. data/docs/ImageGenerate429Response.md +18 -0
  106. data/docs/ImageGenerateInput.md +38 -0
  107. data/docs/ImageGenerationResponse.md +30 -0
  108. data/docs/ImagePrompt200Response.md +20 -0
  109. data/docs/ImagePrompt429Response.md +18 -0
  110. data/docs/ImagePromptInput.md +30 -0
  111. data/docs/ImagePromptResponse.md +18 -0
  112. data/docs/ImageVariations200Response.md +18 -0
  113. data/docs/ImageVariationsInput.md +24 -0
  114. data/docs/ImageVariationsResponse.md +26 -0
  115. data/docs/InboxApi.md +758 -0
  116. data/docs/InboxAuthor.md +22 -0
  117. data/docs/InboxConversation.md +46 -0
  118. data/docs/InboxConversationAccount.md +24 -0
  119. data/docs/InboxConversationUpdate.md +20 -0
  120. data/docs/InboxMessage.md +32 -0
  121. data/docs/InboxMessageAuthor.md +22 -0
  122. data/docs/InboxReplyDraft.md +42 -0
  123. data/docs/InboxReplyDraftApprove.md +18 -0
  124. data/docs/InboxReplyDraftEdit.md +18 -0
  125. data/docs/InboxReplyDraftInput.md +20 -0
  126. data/docs/{InitiateChunkedUpload200Response.md → InitiateChunkedUpload201Response.md} +2 -2
  127. data/docs/{InitiateRemoteUpload200Response.md → InitiateRemoteUpload201Response.md} +7 -7
  128. data/docs/{InitiateRemoteUpload200ResponseOneOf.md → InitiateRemoteUpload201ResponseOneOf.md} +2 -2
  129. data/docs/InitiateRemoteUploadRequest.md +3 -1
  130. data/docs/LearnBrandVoiceInput.md +24 -0
  131. data/docs/LearnBrandVoiceResponse.md +20 -0
  132. data/docs/LearnBrandVoiceResponseMeta.md +26 -0
  133. data/docs/ListAccountGroups200Response.md +22 -0
  134. data/docs/ListAgentProposals200Response.md +20 -0
  135. data/docs/ListAgentRuns200Response.md +20 -0
  136. data/docs/ListAgents200Response.md +18 -0
  137. data/docs/ListApiActivity200Response.md +22 -0
  138. data/docs/ListApiKeys200Response.md +18 -0
  139. data/docs/ListCompetitors200Response.md +18 -0
  140. data/docs/ListHashtagGroups200Response.md +22 -0
  141. data/docs/ListInboxConversations200Response.md +22 -0
  142. data/docs/ListInboxReplyDrafts200Response.md +22 -0
  143. data/docs/ListMediaFolders200Response.md +18 -0
  144. data/docs/ListMentions200Response.md +22 -0
  145. data/docs/ListMyWorkspaces200Response.md +18 -0
  146. data/docs/ListRecyclingRules200Response.md +18 -0
  147. data/docs/ListRecyclingRuns200Response.md +18 -0
  148. data/docs/ListReportExports200Response.md +18 -0
  149. data/docs/ListResellerClients200Response.md +20 -0
  150. data/docs/ListRssFeeds200Response.md +18 -0
  151. data/docs/ListTemplates200Response.md +22 -0
  152. data/docs/ListWebhookSubscriptions200Response.md +18 -0
  153. data/docs/Media.md +22 -8
  154. data/docs/MediaApi.md +435 -31
  155. data/docs/MediaBase64Input.md +24 -0
  156. data/docs/MediaFolder.md +24 -0
  157. data/docs/MediaFolderInput.md +20 -0
  158. data/docs/MediaFolderRef.md +20 -0
  159. data/docs/Mention.md +28 -0
  160. data/docs/MentionIdentity.md +24 -0
  161. data/docs/MentionIdentityInput.md +26 -0
  162. data/docs/MentionInput.md +22 -0
  163. data/docs/MentionsApi.md +379 -0
  164. data/docs/MessageOnly.md +18 -0
  165. data/docs/PollRssFeed200Response.md +22 -0
  166. data/docs/Post.md +10 -8
  167. data/docs/PostAnalytics.md +22 -0
  168. data/docs/PostContent.md +1 -1
  169. data/docs/PostInput.md +8 -2
  170. data/docs/PostOptionsInstagram.md +22 -0
  171. data/docs/PostOptionsTikTok.md +34 -0
  172. data/docs/PostOptionsYoutube.md +24 -0
  173. data/docs/PostVersion.md +4 -2
  174. data/docs/PostVersionOptions.md +24 -0
  175. data/docs/PostingSchedule.md +28 -0
  176. data/docs/PostingScheduleApi.md +377 -0
  177. data/docs/PostingScheduleDay.md +22 -0
  178. data/docs/PostingScheduleDayTimesInner.md +18 -0
  179. data/docs/PostingScheduleInput.md +24 -0
  180. data/docs/PostingTimeSlot.md +22 -0
  181. data/docs/PostingTimes.md +32 -0
  182. data/docs/PostingTimesBestInner.md +24 -0
  183. data/docs/PostingTimesDayIntervalsInnerInner.md +28 -0
  184. data/docs/PostingTimesDaysInner.md +24 -0
  185. data/docs/PostsApi.md +1264 -82
  186. data/docs/PreflightResult.md +26 -0
  187. data/docs/PublicWorkspace.md +24 -0
  188. data/docs/PublicWorkspacePivot.md +22 -0
  189. data/docs/PublishProgress.md +22 -0
  190. data/docs/QueueSlots.md +20 -0
  191. data/docs/Receipt.md +8 -8
  192. data/docs/ReceiptsApi.md +15 -1
  193. data/docs/RecommendedPostingTimes.md +26 -0
  194. data/docs/ReconnectLink.md +22 -0
  195. data/docs/RecyclingRule.md +42 -0
  196. data/docs/RecyclingRuleInput.md +34 -0
  197. data/docs/RecyclingRuleSettings.md +28 -0
  198. data/docs/RecyclingRuleUpdate.md +28 -0
  199. data/docs/RecyclingRun.md +28 -0
  200. data/docs/RemoveGenericSubscription422Response.md +18 -0
  201. data/docs/ReportBranding.md +28 -0
  202. data/docs/ReportBrandingInput.md +24 -0
  203. data/docs/ReportExport.md +42 -0
  204. data/docs/ReportExportInput.md +28 -0
  205. data/docs/RepurposeContent200Response.md +20 -0
  206. data/docs/RepurposeInput.md +54 -0
  207. data/docs/RepurposeInputTheme.md +22 -0
  208. data/docs/RepurposeResult.md +32 -0
  209. data/docs/RepurposeResultMedia.md +20 -0
  210. data/docs/RepurposeResultSource.md +22 -0
  211. data/docs/RepurposeSlide.md +20 -0
  212. data/docs/ResellerClient.md +32 -0
  213. data/docs/ResellerClientInput.md +18 -0
  214. data/docs/ResellerClientUsage.md +20 -0
  215. data/docs/RetryPostAccountResult.md +22 -0
  216. data/docs/RssFeed.md +38 -0
  217. data/docs/RssFeedInput.md +30 -0
  218. data/docs/RssFeedUpdate.md +30 -0
  219. data/docs/RunAgent202Response.md +18 -0
  220. data/docs/SchedulePostRequest.md +9 -1
  221. data/docs/ScheduleResult.md +4 -2
  222. data/docs/Subscription.md +5 -5
  223. data/docs/SubscriptionsApi.md +27 -5
  224. data/docs/Tag.md +4 -4
  225. data/docs/TagsApi.md +18 -4
  226. data/docs/Template.md +22 -0
  227. data/docs/TemplateContentItem.md +20 -0
  228. data/docs/TemplateInput.md +20 -0
  229. data/docs/TemplateInputContentInner.md +20 -0
  230. data/docs/TemplatesApi.md +372 -0
  231. data/docs/UpdateMediaRequest.md +6 -2
  232. data/docs/{UploadChunk200Response.md → UploadChunk201Response.md} +2 -2
  233. data/docs/User.md +7 -5
  234. data/docs/UsersApi.md +15 -1
  235. data/docs/WebhookEventName.md +15 -0
  236. data/docs/WebhookEventPayload.md +20 -0
  237. data/docs/WebhookSubscription.md +28 -0
  238. data/docs/WebhookSubscriptionInput.md +24 -0
  239. data/docs/WebhooksApi.md +221 -0
  240. data/docs/Workspace.md +8 -6
  241. data/docs/WorkspaceAgent.md +34 -0
  242. data/docs/WorkspaceAgentInput.md +26 -0
  243. data/docs/WorkspaceAgentSettings.md +26 -0
  244. data/docs/WorkspaceAgentUpdate.md +24 -0
  245. data/docs/WorkspaceInput.md +1 -1
  246. data/docs/WorkspacesApi.md +582 -3
  247. data/docs/XUsage.md +28 -0
  248. data/docs/XUsageCounter.md +20 -0
  249. data/lib/postboost/api/account_groups_api.rb +395 -0
  250. data/lib/postboost/api/accounts_api.rb +233 -4
  251. data/lib/postboost/api/activity_api.rb +97 -0
  252. data/lib/postboost/api/agents_api.rb +771 -0
  253. data/lib/postboost/api/ai_api.rb +884 -0
  254. data/lib/postboost/api/analytics_api.rb +910 -0
  255. data/lib/postboost/api/competitors_api.rb +300 -0
  256. data/lib/postboost/api/hashtag_groups_api.rb +395 -0
  257. data/lib/postboost/api/inbox_api.rb +789 -0
  258. data/lib/postboost/api/media_api.rb +496 -24
  259. data/lib/postboost/api/mentions_api.rb +397 -0
  260. data/lib/postboost/api/posting_schedule_api.rb +389 -0
  261. data/lib/postboost/api/posts_api.rb +1321 -104
  262. data/lib/postboost/api/receipts_api.rb +17 -2
  263. data/lib/postboost/api/subscriptions_api.rb +28 -3
  264. data/lib/postboost/api/tags_api.rb +23 -2
  265. data/lib/postboost/api/templates_api.rb +395 -0
  266. data/lib/postboost/api/users_api.rb +17 -2
  267. data/lib/postboost/api/webhooks_api.rb +228 -0
  268. data/lib/postboost/api/workspaces_api.rb +545 -2
  269. data/lib/postboost/api_client.rb +2 -2
  270. data/lib/postboost/api_error.rb +2 -2
  271. data/lib/postboost/configuration.rb +2 -2
  272. data/lib/postboost/models/account.rb +145 -4
  273. data/lib/postboost/models/account_analytics.rb +308 -0
  274. data/lib/postboost/models/account_analytics_initial_sync.rb +231 -0
  275. data/lib/postboost/models/account_connection_health.rb +389 -0
  276. data/lib/postboost/models/account_errors_inner.rb +105 -0
  277. data/lib/postboost/models/account_errors_inner_one_of.rb +243 -0
  278. data/lib/postboost/models/account_group.rb +271 -0
  279. data/lib/postboost/models/account_group_input.rb +252 -0
  280. data/lib/postboost/models/account_health.rb +352 -0
  281. data/lib/postboost/models/account_health_daily_cap.rb +239 -0
  282. data/lib/postboost/models/account_schedule.rb +255 -0
  283. data/lib/postboost/models/add_competitor202_response.rb +271 -0
  284. data/lib/postboost/models/add_competitor409_response.rb +223 -0
  285. data/lib/postboost/models/add_generic_subscription_request.rb +2 -2
  286. data/lib/postboost/models/add_post_to_queue_request.rb +215 -0
  287. data/lib/postboost/models/agent_page_meta.rb +269 -0
  288. data/lib/postboost/models/agent_proposal.rb +444 -0
  289. data/lib/postboost/models/agent_proposal_decision.rb +233 -0
  290. data/lib/postboost/models/agent_run.rb +434 -0
  291. data/lib/postboost/models/ai_credits.rb +256 -0
  292. data/lib/postboost/models/ai_usage.rb +237 -0
  293. data/lib/postboost/models/ai_usage_text.rb +252 -0
  294. data/lib/postboost/models/analytics_period.rb +270 -0
  295. data/lib/postboost/models/analytics_summary.rb +237 -0
  296. data/lib/postboost/models/analytics_summary_data.rb +327 -0
  297. data/lib/postboost/models/api_activity.rb +359 -0
  298. data/lib/postboost/models/api_activity_outcome.rb +49 -0
  299. data/lib/postboost/models/api_key.rb +308 -0
  300. data/lib/postboost/models/api_key_ability.rb +43 -0
  301. data/lib/postboost/models/api_key_input.rb +316 -0
  302. data/lib/postboost/models/approve_agent_proposal200_response.rb +221 -0
  303. data/lib/postboost/models/approve_agent_proposal409_response.rb +237 -0
  304. data/lib/postboost/models/approve_inbox_reply_draft403_response.rb +264 -0
  305. data/lib/postboost/models/approve_post_request.rb +247 -0
  306. data/lib/postboost/models/best_posting_times.rb +240 -0
  307. data/lib/postboost/models/best_posting_times_times_inner.rb +269 -0
  308. data/lib/postboost/models/blog_to_social200_response.rb +223 -0
  309. data/lib/postboost/models/blog_to_social429_response.rb +214 -0
  310. data/lib/postboost/models/blog_to_social_caption.rb +265 -0
  311. data/lib/postboost/models/blog_to_social_input.rb +548 -0
  312. data/lib/postboost/models/blog_to_social_media.rb +226 -0
  313. data/lib/postboost/models/blog_to_social_response.rb +276 -0
  314. data/lib/postboost/models/brand_voice.rb +531 -0
  315. data/lib/postboost/models/brand_voice_input.rb +646 -0
  316. data/lib/postboost/models/brand_voice_meta.rb +222 -0
  317. data/lib/postboost/models/cancel_subscription422_response.rb +223 -0
  318. data/lib/postboost/models/cancel_subscription422_response_errors.rb +216 -0
  319. data/lib/postboost/models/cancel_subscription_request.rb +217 -0
  320. data/lib/postboost/models/change_subscription_plan_request.rb +2 -2
  321. data/lib/postboost/models/channel_account.rb +380 -0
  322. data/lib/postboost/models/checkout_subscription200_response.rb +2 -2
  323. data/lib/postboost/models/checkout_subscription_request.rb +2 -2
  324. data/lib/postboost/models/coded_error.rb +242 -0
  325. data/lib/postboost/models/competitor.rb +320 -0
  326. data/lib/postboost/models/competitor_detail.rb +358 -0
  327. data/lib/postboost/models/competitor_input.rb +258 -0
  328. data/lib/postboost/models/competitor_media.rb +263 -0
  329. data/lib/postboost/models/competitor_snapshot.rb +234 -0
  330. data/lib/postboost/models/complete_chunked_upload_request.rb +243 -0
  331. data/lib/postboost/models/connect_channel_input.rb +265 -0
  332. data/lib/postboost/models/create_account_group201_response.rb +221 -0
  333. data/lib/postboost/models/create_agent201_response.rb +221 -0
  334. data/lib/postboost/models/create_api_key201_response.rb +221 -0
  335. data/lib/postboost/models/create_api_key201_response_data.rb +327 -0
  336. data/lib/postboost/models/create_hashtag_group201_response.rb +221 -0
  337. data/lib/postboost/models/create_inbox_reply_draft201_response.rb +221 -0
  338. data/lib/postboost/models/create_media_folder_request.rb +258 -0
  339. data/lib/postboost/models/create_mention201_response.rb +214 -0
  340. data/lib/postboost/models/create_recycling_rule201_response.rb +221 -0
  341. data/lib/postboost/models/create_report_export201_response.rb +221 -0
  342. data/lib/postboost/models/create_reseller_client201_response.rb +221 -0
  343. data/lib/postboost/models/create_rss_feed201_response.rb +221 -0
  344. data/lib/postboost/models/create_template201_response.rb +221 -0
  345. data/lib/postboost/models/create_webhook_subscription201_response.rb +221 -0
  346. data/lib/postboost/models/create_webhook_subscription201_response_data.rb +320 -0
  347. data/lib/postboost/models/delete_agent200_response.rb +221 -0
  348. data/lib/postboost/models/delete_media_bulk_request.rb +23 -4
  349. data/lib/postboost/models/delete_media_bulk_request_items_inner.rb +105 -0
  350. data/lib/postboost/models/delete_media_folder_request.rb +216 -0
  351. data/lib/postboost/models/delete_mode.rb +2 -2
  352. data/lib/postboost/models/delete_post_request.rb +2 -2
  353. data/lib/postboost/models/delete_posts_bulk_request.rb +2 -2
  354. data/lib/postboost/models/delete_receipts_bulk_request.rb +2 -2
  355. data/lib/postboost/models/delete_result.rb +23 -2
  356. data/lib/postboost/models/delete_user400_response.rb +2 -2
  357. data/lib/postboost/models/delete_users_bulk_request.rb +2 -2
  358. data/lib/postboost/models/delete_workspaces_bulk_request.rb +2 -2
  359. data/lib/postboost/models/get_account_health200_response.rb +223 -0
  360. data/lib/postboost/models/get_brand_voice200_response.rb +217 -0
  361. data/lib/postboost/models/get_competitor200_response.rb +221 -0
  362. data/lib/postboost/models/get_inbox_conversation200_response.rb +221 -0
  363. data/lib/postboost/models/get_posting_schedule200_response.rb +221 -0
  364. data/lib/postboost/models/get_remote_upload_status200_response.rb +2 -2
  365. data/lib/postboost/models/get_report_branding200_response.rb +221 -0
  366. data/lib/postboost/models/guardrail_error.rb +304 -0
  367. data/lib/postboost/models/hashtag_group.rb +254 -0
  368. data/lib/postboost/models/hashtag_group_input.rb +275 -0
  369. data/lib/postboost/models/image_alt_text200_response.rb +221 -0
  370. data/lib/postboost/models/image_alt_text_input.rb +221 -0
  371. data/lib/postboost/models/image_alt_text_response.rb +262 -0
  372. data/lib/postboost/models/image_credit_balance.rb +295 -0
  373. data/lib/postboost/models/image_edit_input.rb +387 -0
  374. data/lib/postboost/models/image_generate200_response.rb +230 -0
  375. data/lib/postboost/models/image_generate429_response.rb +214 -0
  376. data/lib/postboost/models/image_generate_input.rb +479 -0
  377. data/lib/postboost/models/image_generation_response.rb +305 -0
  378. data/lib/postboost/models/image_prompt200_response.rb +230 -0
  379. data/lib/postboost/models/image_prompt429_response.rb +214 -0
  380. data/lib/postboost/models/image_prompt_input.rb +377 -0
  381. data/lib/postboost/models/image_prompt_response.rb +221 -0
  382. data/lib/postboost/models/image_variations200_response.rb +221 -0
  383. data/lib/postboost/models/image_variations_input.rb +328 -0
  384. data/lib/postboost/models/image_variations_response.rb +280 -0
  385. data/lib/postboost/models/inbox_author.rb +235 -0
  386. data/lib/postboost/models/inbox_conversation.rb +425 -0
  387. data/lib/postboost/models/inbox_conversation_account.rb +241 -0
  388. data/lib/postboost/models/inbox_conversation_update.rb +257 -0
  389. data/lib/postboost/models/inbox_message.rb +360 -0
  390. data/lib/postboost/models/inbox_message_author.rb +235 -0
  391. data/lib/postboost/models/inbox_reply_draft.rb +410 -0
  392. data/lib/postboost/models/inbox_reply_draft_approve.rb +215 -0
  393. data/lib/postboost/models/inbox_reply_draft_edit.rb +221 -0
  394. data/lib/postboost/models/inbox_reply_draft_input.rb +232 -0
  395. data/lib/postboost/models/{initiate_chunked_upload200_response.rb → initiate_chunked_upload201_response.rb} +5 -5
  396. data/lib/postboost/models/initiate_chunked_upload_request.rb +2 -2
  397. data/lib/postboost/models/{initiate_remote_upload200_response.rb → initiate_remote_upload201_response.rb} +4 -4
  398. data/lib/postboost/models/{initiate_remote_upload200_response_one_of.rb → initiate_remote_upload201_response_one_of.rb} +5 -5
  399. data/lib/postboost/models/initiate_remote_upload_request.rb +16 -6
  400. data/lib/postboost/models/learn_brand_voice_input.rb +300 -0
  401. data/lib/postboost/models/learn_brand_voice_response.rb +237 -0
  402. data/lib/postboost/models/learn_brand_voice_response_meta.rb +281 -0
  403. data/lib/postboost/models/list_account_groups200_response.rb +248 -0
  404. data/lib/postboost/models/list_accounts200_response.rb +2 -2
  405. data/lib/postboost/models/list_agent_proposals200_response.rb +239 -0
  406. data/lib/postboost/models/list_agent_runs200_response.rb +239 -0
  407. data/lib/postboost/models/list_agents200_response.rb +223 -0
  408. data/lib/postboost/models/list_api_activity200_response.rb +241 -0
  409. data/lib/postboost/models/list_api_keys200_response.rb +223 -0
  410. data/lib/postboost/models/list_competitors200_response.rb +223 -0
  411. data/lib/postboost/models/list_hashtag_groups200_response.rb +248 -0
  412. data/lib/postboost/models/list_inbox_conversations200_response.rb +241 -0
  413. data/lib/postboost/models/list_inbox_reply_drafts200_response.rb +241 -0
  414. data/lib/postboost/models/list_media200_response.rb +2 -2
  415. data/lib/postboost/models/list_media_folders200_response.rb +216 -0
  416. data/lib/postboost/models/list_mentions200_response.rb +241 -0
  417. data/lib/postboost/models/list_my_workspaces200_response.rb +216 -0
  418. data/lib/postboost/models/list_posts200_response.rb +2 -2
  419. data/lib/postboost/models/list_receipts200_response.rb +2 -2
  420. data/lib/postboost/models/list_recycling_rules200_response.rb +223 -0
  421. data/lib/postboost/models/list_recycling_runs200_response.rb +223 -0
  422. data/lib/postboost/models/list_report_exports200_response.rb +223 -0
  423. data/lib/postboost/models/list_reseller_clients200_response.rb +239 -0
  424. data/lib/postboost/models/list_rss_feeds200_response.rb +223 -0
  425. data/lib/postboost/models/list_tags200_response.rb +2 -2
  426. data/lib/postboost/models/list_templates200_response.rb +248 -0
  427. data/lib/postboost/models/list_users200_response.rb +2 -2
  428. data/lib/postboost/models/list_webhook_subscriptions200_response.rb +223 -0
  429. data/lib/postboost/models/list_workspaces200_response.rb +2 -2
  430. data/lib/postboost/models/media.rb +128 -3
  431. data/lib/postboost/models/media_base64_input.rb +295 -0
  432. data/lib/postboost/models/media_folder.rb +271 -0
  433. data/lib/postboost/models/media_folder_input.rb +244 -0
  434. data/lib/postboost/models/media_folder_ref.rb +237 -0
  435. data/lib/postboost/models/mention.rb +290 -0
  436. data/lib/postboost/models/mention_identity.rb +257 -0
  437. data/lib/postboost/models/mention_identity_input.rb +325 -0
  438. data/lib/postboost/models/mention_input.rb +279 -0
  439. data/lib/postboost/models/message_only.rb +221 -0
  440. data/lib/postboost/models/pagination_meta.rb +2 -2
  441. data/lib/postboost/models/pagination_meta_links.rb +4 -2
  442. data/lib/postboost/models/pagination_meta_meta.rb +4 -2
  443. data/lib/postboost/models/poll_rss_feed200_response.rb +255 -0
  444. data/lib/postboost/models/post.rb +69 -3
  445. data/lib/postboost/models/post_analytics.rb +252 -0
  446. data/lib/postboost/models/post_content.rb +4 -3
  447. data/lib/postboost/models/post_input.rb +41 -6
  448. data/lib/postboost/models/post_options_instagram.rb +294 -0
  449. data/lib/postboost/models/post_options_tik_tok.rb +329 -0
  450. data/lib/postboost/models/post_options_youtube.rb +302 -0
  451. data/lib/postboost/models/post_status.rb +6 -3
  452. data/lib/postboost/models/post_version.rb +53 -5
  453. data/lib/postboost/models/post_version_options.rb +242 -0
  454. data/lib/postboost/models/posting_schedule.rb +303 -0
  455. data/lib/postboost/models/posting_schedule_day.rb +285 -0
  456. data/lib/postboost/models/posting_schedule_day_times_inner.rb +222 -0
  457. data/lib/postboost/models/posting_schedule_input.rb +312 -0
  458. data/lib/postboost/models/posting_time_slot.rb +315 -0
  459. data/lib/postboost/models/posting_times.rb +362 -0
  460. data/lib/postboost/models/posting_times_best_inner.rb +269 -0
  461. data/lib/postboost/models/posting_times_day_intervals_inner_inner.rb +370 -0
  462. data/lib/postboost/models/posting_times_days_inner.rb +366 -0
  463. data/lib/postboost/models/preflight_result.rb +291 -0
  464. data/lib/postboost/models/public_workspace.rb +262 -0
  465. data/lib/postboost/models/public_workspace_pivot.rb +267 -0
  466. data/lib/postboost/models/publish_progress.rb +254 -0
  467. data/lib/postboost/models/queue_slots.rb +237 -0
  468. data/lib/postboost/models/receipt.rb +58 -2
  469. data/lib/postboost/models/receipt_input.rb +2 -2
  470. data/lib/postboost/models/receipt_update_input.rb +2 -2
  471. data/lib/postboost/models/recommended_posting_times.rb +282 -0
  472. data/lib/postboost/models/reconnect_link.rb +254 -0
  473. data/lib/postboost/models/recycling_rule.rb +434 -0
  474. data/lib/postboost/models/recycling_rule_input.rb +435 -0
  475. data/lib/postboost/models/recycling_rule_settings.rb +381 -0
  476. data/lib/postboost/models/recycling_rule_update.rb +366 -0
  477. data/lib/postboost/models/recycling_run.rb +320 -0
  478. data/lib/postboost/models/remove_generic_subscription422_response.rb +214 -0
  479. data/lib/postboost/models/remove_user_from_workspace_request.rb +2 -2
  480. data/lib/postboost/models/report_branding.rb +285 -0
  481. data/lib/postboost/models/report_branding_input.rb +293 -0
  482. data/lib/postboost/models/report_export.rb +442 -0
  483. data/lib/postboost/models/report_export_input.rb +350 -0
  484. data/lib/postboost/models/repurpose_content200_response.rb +237 -0
  485. data/lib/postboost/models/repurpose_input.rb +667 -0
  486. data/lib/postboost/models/repurpose_input_theme.rb +296 -0
  487. data/lib/postboost/models/repurpose_result.rb +328 -0
  488. data/lib/postboost/models/repurpose_result_media.rb +224 -0
  489. data/lib/postboost/models/repurpose_result_source.rb +283 -0
  490. data/lib/postboost/models/repurpose_slide.rb +239 -0
  491. data/lib/postboost/models/reseller_client.rb +360 -0
  492. data/lib/postboost/models/reseller_client_input.rb +240 -0
  493. data/lib/postboost/models/reseller_client_usage.rb +239 -0
  494. data/lib/postboost/models/retry_post_account_result.rb +275 -0
  495. data/lib/postboost/models/rss_feed.rb +402 -0
  496. data/lib/postboost/models/rss_feed_input.rb +433 -0
  497. data/lib/postboost/models/rss_feed_update.rb +396 -0
  498. data/lib/postboost/models/run_agent202_response.rb +221 -0
  499. data/lib/postboost/models/schedule_post_request.rb +48 -6
  500. data/lib/postboost/models/schedule_result.rb +23 -6
  501. data/lib/postboost/models/subscription.rb +37 -2
  502. data/lib/postboost/models/subscription_input.rb +2 -2
  503. data/lib/postboost/models/subscription_status.rb +2 -2
  504. data/lib/postboost/models/subscription_update_input.rb +2 -2
  505. data/lib/postboost/models/tag.rb +30 -2
  506. data/lib/postboost/models/tag_input.rb +2 -2
  507. data/lib/postboost/models/template.rb +256 -0
  508. data/lib/postboost/models/template_content_item.rb +240 -0
  509. data/lib/postboost/models/template_input.rb +271 -0
  510. data/lib/postboost/models/template_input_content_inner.rb +227 -0
  511. data/lib/postboost/models/update_media_request.rb +61 -11
  512. data/lib/postboost/models/{upload_chunk200_response.rb → upload_chunk201_response.rb} +5 -5
  513. data/lib/postboost/models/user.rb +48 -3
  514. data/lib/postboost/models/user_input.rb +2 -2
  515. data/lib/postboost/models/user_update_input.rb +2 -2
  516. data/lib/postboost/models/webhook_event_name.rb +50 -0
  517. data/lib/postboost/models/webhook_event_payload.rb +262 -0
  518. data/lib/postboost/models/webhook_subscription.rb +297 -0
  519. data/lib/postboost/models/webhook_subscription_input.rb +349 -0
  520. data/lib/postboost/models/workspace.rb +42 -3
  521. data/lib/postboost/models/workspace_agent.rb +381 -0
  522. data/lib/postboost/models/workspace_agent_input.rb +326 -0
  523. data/lib/postboost/models/workspace_agent_settings.rb +340 -0
  524. data/lib/postboost/models/workspace_agent_update.rb +294 -0
  525. data/lib/postboost/models/workspace_input.rb +3 -9
  526. data/lib/postboost/models/workspace_user_input.rb +2 -2
  527. data/lib/postboost/models/x_usage.rb +303 -0
  528. data/lib/postboost/models/x_usage_counter.rb +234 -0
  529. data/lib/postboost/version.rb +3 -3
  530. data/lib/postboost.rb +219 -6
  531. data/postboost.gemspec +3 -3
  532. data/spec/api/account_groups_api_spec.rb +102 -0
  533. data/spec/api/accounts_api_spec.rb +46 -3
  534. data/spec/api/activity_api_spec.rb +51 -0
  535. data/spec/api/agents_api_spec.rb +170 -0
  536. data/spec/api/ai_api_spec.rb +189 -0
  537. data/spec/api/analytics_api_spec.rb +201 -0
  538. data/spec/api/competitors_api_spec.rb +87 -0
  539. data/spec/api/hashtag_groups_api_spec.rb +102 -0
  540. data/spec/api/inbox_api_spec.rb +178 -0
  541. data/spec/api/media_api_spec.rb +92 -11
  542. data/spec/api/mentions_api_spec.rb +104 -0
  543. data/spec/api/posting_schedule_api_spec.rb +102 -0
  544. data/spec/api/posts_api_spec.rb +224 -6
  545. data/spec/api/receipts_api_spec.rb +9 -2
  546. data/spec/api/subscriptions_api_spec.rb +12 -2
  547. data/spec/api/tags_api_spec.rb +8 -2
  548. data/spec/api/templates_api_spec.rb +102 -0
  549. data/spec/api/users_api_spec.rb +9 -2
  550. data/spec/api/webhooks_api_spec.rb +73 -0
  551. data/spec/api/workspaces_api_spec.rb +108 -2
  552. data/spec/models/account_analytics_initial_sync_spec.rb +42 -0
  553. data/spec/models/account_analytics_spec.rb +66 -0
  554. data/spec/models/account_connection_health_spec.rb +92 -0
  555. data/spec/models/account_errors_inner_one_of_spec.rb +54 -0
  556. data/spec/models/account_errors_inner_spec.rb +32 -0
  557. data/spec/models/account_group_input_spec.rb +42 -0
  558. data/spec/models/account_group_spec.rb +54 -0
  559. data/spec/models/account_health_daily_cap_spec.rb +42 -0
  560. data/spec/models/account_health_spec.rb +84 -0
  561. data/spec/models/account_schedule_spec.rb +48 -0
  562. data/spec/models/account_spec.rb +36 -2
  563. data/spec/models/add_competitor202_response_spec.rb +46 -0
  564. data/spec/models/add_competitor409_response_spec.rb +42 -0
  565. data/spec/models/add_generic_subscription_request_spec.rb +2 -2
  566. data/spec/models/add_post_to_queue_request_spec.rb +36 -0
  567. data/spec/models/agent_page_meta_spec.rb +54 -0
  568. data/spec/models/agent_proposal_decision_spec.rb +36 -0
  569. data/spec/models/agent_proposal_spec.rb +126 -0
  570. data/spec/models/agent_run_spec.rb +122 -0
  571. data/spec/models/ai_credits_spec.rb +48 -0
  572. data/spec/models/ai_usage_spec.rb +42 -0
  573. data/spec/models/ai_usage_text_spec.rb +54 -0
  574. data/spec/models/analytics_period_spec.rb +54 -0
  575. data/spec/models/analytics_summary_data_spec.rb +96 -0
  576. data/spec/models/analytics_summary_spec.rb +42 -0
  577. data/spec/models/api_activity_outcome_spec.rb +30 -0
  578. data/spec/models/api_activity_spec.rb +90 -0
  579. data/spec/models/api_key_ability_spec.rb +30 -0
  580. data/spec/models/api_key_input_spec.rb +54 -0
  581. data/spec/models/api_key_spec.rb +78 -0
  582. data/spec/models/approve_agent_proposal200_response_spec.rb +36 -0
  583. data/spec/models/approve_agent_proposal409_response_spec.rb +42 -0
  584. data/spec/models/approve_inbox_reply_draft403_response_spec.rb +46 -0
  585. data/spec/models/approve_post_request_spec.rb +54 -0
  586. data/spec/models/best_posting_times_spec.rb +42 -0
  587. data/spec/models/best_posting_times_times_inner_spec.rb +54 -0
  588. data/spec/models/blog_to_social200_response_spec.rb +42 -0
  589. data/spec/models/blog_to_social429_response_spec.rb +36 -0
  590. data/spec/models/blog_to_social_caption_spec.rb +66 -0
  591. data/spec/models/blog_to_social_input_spec.rb +134 -0
  592. data/spec/models/blog_to_social_media_spec.rb +42 -0
  593. data/spec/models/blog_to_social_response_spec.rb +72 -0
  594. data/spec/models/brand_voice_input_spec.rb +128 -0
  595. data/spec/models/brand_voice_meta_spec.rb +36 -0
  596. data/spec/models/brand_voice_spec.rb +134 -0
  597. data/spec/models/cancel_subscription422_response_errors_spec.rb +36 -0
  598. data/spec/models/cancel_subscription422_response_spec.rb +42 -0
  599. data/spec/models/cancel_subscription_request_spec.rb +36 -0
  600. data/spec/models/change_subscription_plan_request_spec.rb +2 -2
  601. data/spec/models/channel_account_spec.rb +94 -0
  602. data/spec/models/checkout_subscription200_response_spec.rb +2 -2
  603. data/spec/models/checkout_subscription_request_spec.rb +2 -2
  604. data/spec/models/coded_error_spec.rb +48 -0
  605. data/spec/models/competitor_detail_spec.rb +96 -0
  606. data/spec/models/competitor_input_spec.rb +42 -0
  607. data/spec/models/competitor_media_spec.rb +66 -0
  608. data/spec/models/competitor_snapshot_spec.rb +48 -0
  609. data/spec/models/competitor_spec.rb +84 -0
  610. data/spec/models/complete_chunked_upload_request_spec.rb +42 -0
  611. data/spec/models/connect_channel_input_spec.rb +54 -0
  612. data/spec/models/create_account_group201_response_spec.rb +36 -0
  613. data/spec/models/create_agent201_response_spec.rb +36 -0
  614. data/spec/models/create_api_key201_response_data_spec.rb +84 -0
  615. data/spec/models/create_api_key201_response_spec.rb +36 -0
  616. data/spec/models/create_hashtag_group201_response_spec.rb +36 -0
  617. data/spec/models/create_inbox_reply_draft201_response_spec.rb +36 -0
  618. data/spec/models/create_media_folder_request_spec.rb +42 -0
  619. data/spec/models/create_mention201_response_spec.rb +36 -0
  620. data/spec/models/create_recycling_rule201_response_spec.rb +36 -0
  621. data/spec/models/create_report_export201_response_spec.rb +36 -0
  622. data/spec/models/create_reseller_client201_response_spec.rb +36 -0
  623. data/spec/models/create_rss_feed201_response_spec.rb +36 -0
  624. data/spec/models/create_template201_response_spec.rb +36 -0
  625. data/spec/models/create_webhook_subscription201_response_data_spec.rb +72 -0
  626. data/spec/models/create_webhook_subscription201_response_spec.rb +36 -0
  627. data/spec/models/delete_agent200_response_spec.rb +36 -0
  628. data/spec/models/delete_media_bulk_request_items_inner_spec.rb +32 -0
  629. data/spec/models/delete_media_bulk_request_spec.rb +2 -2
  630. data/spec/models/delete_media_folder_request_spec.rb +36 -0
  631. data/spec/models/delete_mode_spec.rb +2 -2
  632. data/spec/models/delete_post_request_spec.rb +2 -2
  633. data/spec/models/delete_posts_bulk_request_spec.rb +2 -2
  634. data/spec/models/delete_receipts_bulk_request_spec.rb +2 -2
  635. data/spec/models/delete_result_spec.rb +2 -2
  636. data/spec/models/delete_user400_response_spec.rb +2 -2
  637. data/spec/models/delete_users_bulk_request_spec.rb +2 -2
  638. data/spec/models/delete_workspaces_bulk_request_spec.rb +2 -2
  639. data/spec/models/get_account_health200_response_spec.rb +36 -0
  640. data/spec/models/get_brand_voice200_response_spec.rb +36 -0
  641. data/spec/models/get_competitor200_response_spec.rb +36 -0
  642. data/spec/models/get_inbox_conversation200_response_spec.rb +36 -0
  643. data/spec/models/get_posting_schedule200_response_spec.rb +36 -0
  644. data/spec/models/get_remote_upload_status200_response_spec.rb +2 -2
  645. data/spec/models/get_report_branding200_response_spec.rb +36 -0
  646. data/spec/models/guardrail_error_spec.rb +70 -0
  647. data/spec/models/hashtag_group_input_spec.rb +42 -0
  648. data/spec/models/hashtag_group_spec.rb +48 -0
  649. data/spec/models/image_alt_text200_response_spec.rb +36 -0
  650. data/spec/models/image_alt_text_input_spec.rb +36 -0
  651. data/spec/models/image_alt_text_response_spec.rb +54 -0
  652. data/spec/models/image_credit_balance_spec.rb +66 -0
  653. data/spec/models/image_edit_input_spec.rb +80 -0
  654. data/spec/models/image_generate200_response_spec.rb +42 -0
  655. data/spec/models/image_generate429_response_spec.rb +36 -0
  656. data/spec/models/image_generate_input_spec.rb +108 -0
  657. data/spec/models/image_generation_response_spec.rb +72 -0
  658. data/spec/models/image_prompt200_response_spec.rb +42 -0
  659. data/spec/models/image_prompt429_response_spec.rb +36 -0
  660. data/spec/models/image_prompt_input_spec.rb +76 -0
  661. data/spec/models/image_prompt_response_spec.rb +36 -0
  662. data/spec/models/image_variations200_response_spec.rb +36 -0
  663. data/spec/models/image_variations_input_spec.rb +62 -0
  664. data/spec/models/image_variations_response_spec.rb +60 -0
  665. data/spec/models/inbox_author_spec.rb +48 -0
  666. data/spec/models/inbox_conversation_account_spec.rb +54 -0
  667. data/spec/models/inbox_conversation_spec.rb +128 -0
  668. data/spec/models/inbox_conversation_update_spec.rb +46 -0
  669. data/spec/models/inbox_message_author_spec.rb +48 -0
  670. data/spec/models/inbox_message_spec.rb +90 -0
  671. data/spec/models/inbox_reply_draft_approve_spec.rb +36 -0
  672. data/spec/models/inbox_reply_draft_edit_spec.rb +36 -0
  673. data/spec/models/inbox_reply_draft_input_spec.rb +42 -0
  674. data/spec/models/inbox_reply_draft_spec.rb +116 -0
  675. data/spec/models/initiate_chunked_upload201_response_spec.rb +48 -0
  676. data/spec/models/initiate_chunked_upload_request_spec.rb +2 -2
  677. data/spec/models/initiate_remote_upload201_response_one_of_spec.rb +36 -0
  678. data/spec/models/initiate_remote_upload201_response_spec.rb +32 -0
  679. data/spec/models/initiate_remote_upload_request_spec.rb +8 -2
  680. data/spec/models/learn_brand_voice_input_spec.rb +54 -0
  681. data/spec/models/learn_brand_voice_response_meta_spec.rb +60 -0
  682. data/spec/models/learn_brand_voice_response_spec.rb +42 -0
  683. data/spec/models/list_account_groups200_response_spec.rb +48 -0
  684. data/spec/models/list_accounts200_response_spec.rb +2 -2
  685. data/spec/models/list_agent_proposals200_response_spec.rb +42 -0
  686. data/spec/models/list_agent_runs200_response_spec.rb +42 -0
  687. data/spec/models/list_agents200_response_spec.rb +36 -0
  688. data/spec/models/list_api_activity200_response_spec.rb +48 -0
  689. data/spec/models/list_api_keys200_response_spec.rb +36 -0
  690. data/spec/models/list_competitors200_response_spec.rb +36 -0
  691. data/spec/models/list_hashtag_groups200_response_spec.rb +48 -0
  692. data/spec/models/list_inbox_conversations200_response_spec.rb +48 -0
  693. data/spec/models/list_inbox_reply_drafts200_response_spec.rb +48 -0
  694. data/spec/models/list_media200_response_spec.rb +2 -2
  695. data/spec/models/list_media_folders200_response_spec.rb +36 -0
  696. data/spec/models/list_mentions200_response_spec.rb +48 -0
  697. data/spec/models/list_my_workspaces200_response_spec.rb +36 -0
  698. data/spec/models/list_posts200_response_spec.rb +2 -2
  699. data/spec/models/list_receipts200_response_spec.rb +2 -2
  700. data/spec/models/list_recycling_rules200_response_spec.rb +36 -0
  701. data/spec/models/list_recycling_runs200_response_spec.rb +36 -0
  702. data/spec/models/list_report_exports200_response_spec.rb +36 -0
  703. data/spec/models/list_reseller_clients200_response_spec.rb +42 -0
  704. data/spec/models/list_rss_feeds200_response_spec.rb +36 -0
  705. data/spec/models/list_tags200_response_spec.rb +2 -2
  706. data/spec/models/list_templates200_response_spec.rb +48 -0
  707. data/spec/models/list_users200_response_spec.rb +2 -2
  708. data/spec/models/list_webhook_subscriptions200_response_spec.rb +36 -0
  709. data/spec/models/list_workspaces200_response_spec.rb +2 -2
  710. data/spec/models/media_base64_input_spec.rb +54 -0
  711. data/spec/models/media_folder_input_spec.rb +42 -0
  712. data/spec/models/media_folder_ref_spec.rb +42 -0
  713. data/spec/models/media_folder_spec.rb +54 -0
  714. data/spec/models/media_spec.rb +44 -2
  715. data/spec/models/mention_identity_input_spec.rb +60 -0
  716. data/spec/models/mention_identity_spec.rb +54 -0
  717. data/spec/models/mention_input_spec.rb +48 -0
  718. data/spec/models/mention_spec.rb +66 -0
  719. data/spec/models/message_only_spec.rb +36 -0
  720. data/spec/models/pagination_meta_links_spec.rb +2 -2
  721. data/spec/models/pagination_meta_meta_spec.rb +2 -2
  722. data/spec/models/pagination_meta_spec.rb +2 -2
  723. data/spec/models/poll_rss_feed200_response_spec.rb +48 -0
  724. data/spec/models/post_analytics_spec.rb +48 -0
  725. data/spec/models/post_content_spec.rb +2 -2
  726. data/spec/models/post_input_spec.rb +20 -2
  727. data/spec/models/post_options_instagram_spec.rb +52 -0
  728. data/spec/models/post_options_tik_tok_spec.rb +88 -0
  729. data/spec/models/post_options_youtube_spec.rb +58 -0
  730. data/spec/models/post_spec.rb +8 -2
  731. data/spec/models/post_status_spec.rb +2 -2
  732. data/spec/models/post_version_options_spec.rb +54 -0
  733. data/spec/models/post_version_spec.rb +8 -2
  734. data/spec/models/posting_schedule_day_spec.rb +48 -0
  735. data/spec/models/posting_schedule_day_times_inner_spec.rb +36 -0
  736. data/spec/models/posting_schedule_input_spec.rb +54 -0
  737. data/spec/models/posting_schedule_spec.rb +66 -0
  738. data/spec/models/posting_time_slot_spec.rb +52 -0
  739. data/spec/models/posting_times_best_inner_spec.rb +54 -0
  740. data/spec/models/posting_times_day_intervals_inner_inner_spec.rb +70 -0
  741. data/spec/models/posting_times_days_inner_spec.rb +58 -0
  742. data/spec/models/posting_times_spec.rb +78 -0
  743. data/spec/models/preflight_result_spec.rb +60 -0
  744. data/spec/models/public_workspace_pivot_spec.rb +52 -0
  745. data/spec/models/public_workspace_spec.rb +54 -0
  746. data/spec/models/publish_progress_spec.rb +48 -0
  747. data/spec/models/queue_slots_spec.rb +42 -0
  748. data/spec/models/receipt_input_spec.rb +2 -2
  749. data/spec/models/receipt_spec.rb +2 -2
  750. data/spec/models/receipt_update_input_spec.rb +2 -2
  751. data/spec/models/recommended_posting_times_spec.rb +60 -0
  752. data/spec/models/reconnect_link_spec.rb +48 -0
  753. data/spec/models/recycling_rule_input_spec.rb +92 -0
  754. data/spec/models/recycling_rule_settings_spec.rb +70 -0
  755. data/spec/models/recycling_rule_spec.rb +116 -0
  756. data/spec/models/recycling_rule_update_spec.rb +70 -0
  757. data/spec/models/recycling_run_spec.rb +70 -0
  758. data/spec/models/remove_generic_subscription422_response_spec.rb +36 -0
  759. data/spec/models/remove_user_from_workspace_request_spec.rb +2 -2
  760. data/spec/models/report_branding_input_spec.rb +54 -0
  761. data/spec/models/report_branding_spec.rb +66 -0
  762. data/spec/models/report_export_input_spec.rb +78 -0
  763. data/spec/models/report_export_spec.rb +120 -0
  764. data/spec/models/repurpose_content200_response_spec.rb +42 -0
  765. data/spec/models/repurpose_input_spec.rb +164 -0
  766. data/spec/models/repurpose_input_theme_spec.rb +48 -0
  767. data/spec/models/repurpose_result_media_spec.rb +42 -0
  768. data/spec/models/repurpose_result_source_spec.rb +52 -0
  769. data/spec/models/repurpose_result_spec.rb +78 -0
  770. data/spec/models/repurpose_slide_spec.rb +42 -0
  771. data/spec/models/reseller_client_input_spec.rb +36 -0
  772. data/spec/models/reseller_client_spec.rb +82 -0
  773. data/spec/models/reseller_client_usage_spec.rb +42 -0
  774. data/spec/models/retry_post_account_result_spec.rb +48 -0
  775. data/spec/models/rss_feed_input_spec.rb +76 -0
  776. data/spec/models/rss_feed_spec.rb +100 -0
  777. data/spec/models/rss_feed_update_spec.rb +76 -0
  778. data/spec/models/run_agent202_response_spec.rb +36 -0
  779. data/spec/models/schedule_post_request_spec.rb +26 -2
  780. data/spec/models/schedule_result_spec.rb +8 -2
  781. data/spec/models/subscription_input_spec.rb +2 -2
  782. data/spec/models/subscription_spec.rb +2 -2
  783. data/spec/models/subscription_status_spec.rb +2 -2
  784. data/spec/models/subscription_update_input_spec.rb +2 -2
  785. data/spec/models/tag_input_spec.rb +2 -2
  786. data/spec/models/tag_spec.rb +2 -2
  787. data/spec/models/template_content_item_spec.rb +42 -0
  788. data/spec/models/template_input_content_inner_spec.rb +42 -0
  789. data/spec/models/template_input_spec.rb +42 -0
  790. data/spec/models/template_spec.rb +48 -0
  791. data/spec/models/update_media_request_spec.rb +14 -2
  792. data/spec/models/upload_chunk201_response_spec.rb +36 -0
  793. data/spec/models/user_input_spec.rb +2 -2
  794. data/spec/models/user_spec.rb +8 -2
  795. data/spec/models/user_update_input_spec.rb +2 -2
  796. data/spec/models/webhook_event_name_spec.rb +30 -0
  797. data/spec/models/webhook_event_payload_spec.rb +42 -0
  798. data/spec/models/webhook_subscription_input_spec.rb +58 -0
  799. data/spec/models/webhook_subscription_spec.rb +66 -0
  800. data/spec/models/workspace_agent_input_spec.rb +68 -0
  801. data/spec/models/workspace_agent_settings_spec.rb +60 -0
  802. data/spec/models/workspace_agent_spec.rb +92 -0
  803. data/spec/models/workspace_agent_update_spec.rb +58 -0
  804. data/spec/models/workspace_input_spec.rb +2 -2
  805. data/spec/models/workspace_spec.rb +8 -2
  806. data/spec/models/workspace_user_input_spec.rb +2 -2
  807. data/spec/models/x_usage_counter_spec.rb +42 -0
  808. data/spec/models/x_usage_spec.rb +66 -0
  809. data/spec/spec_helper.rb +2 -2
  810. metadata +943 -76
  811. data/git_push.sh +0 -57
  812. data/spec/models/initiate_chunked_upload200_response_spec.rb +0 -48
  813. data/spec/models/initiate_remote_upload200_response_one_of_spec.rb +0 -36
  814. data/spec/models/initiate_remote_upload200_response_spec.rb +0 -32
  815. data/spec/models/upload_chunk200_response_spec.rb +0 -36
@@ -0,0 +1,884 @@
1
+ =begin
2
+ #PostBoost API
3
+
4
+ #The PostBoost REST API lets you publish, schedule, and analyze social media posts across 12+ platforms from a single integration. No OAuth apps to maintain — PostBoost handles platform authorization for you. ## Base URL All workspace-scoped endpoints are prefixed with `/{workspaceUuid}`. Panel/admin endpoints are prefixed with `/panel`. ## Plan access Every workspace-scoped endpoint returns `403` when the workspace's plan does not include API access (capability `api`). ## Dates and times Post dates and times (`date`, `time`, `accounts_schedule`) are read in the request's `timezone` when one is given, otherwise in the workspace timezone. ## Idempotent requests Send an `Idempotency-Key` header (any unique string, for example a UUID) with a `POST`. Repeating the request with the same key within 24 hours returns the stored response with `Idempotent-Replayed: true` and creates nothing new. Reusing a key with a different body returns `422`; a request still in progress with the same key returns `409`. `5xx` and `429` responses are not stored, so they can be retried with the same key. ## Guardrails for automated clients Create and update requests are checked before anything is written: a post whose content matches one created for the same account in the last 24 hours returns `409` (`code: duplicate_post`, override with `allow_duplicate: true`), scheduling past an account's daily cap returns `429` (`code: account_daily_cap_reached`), and scheduling to an account that must be reconnected returns `422` (`code: account_unauthorized` or `account_token_missing`). Use `POST /{workspaceUuid}/posts/validate` for a dry run and `GET /{workspaceUuid}/activity` to review what API clients did. ## Authentication All requests require a Bearer token in the `Authorization` header. Generate tokens in your PostBoost dashboard under **Settings → Access Tokens**. ``` Authorization: Bearer YOUR_API_TOKEN ```
5
+
6
+ The version of the OpenAPI document: 1.14.0
7
+ Contact: hi@postboost.co
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.9.0
10
+
11
+ =end
12
+
13
+ require 'cgi'
14
+
15
+ module PostBoost
16
+ class AIApi
17
+ attr_accessor :api_client
18
+
19
+ def initialize(api_client = ApiClient.default)
20
+ @api_client = api_client
21
+ end
22
+ # Generate social media captions from a blog post
23
+ # Generates platform-specific social media captions from a blog post URL or directly provided title and excerpt. Each platform generates one caption, which consumes one AI credit from the workspace's monthly allowance. **Input modes** (at least one required): - **URL mode**: provide `url` and the API scrapes the blog content automatically, including detecting the featured image via `og:image`. - **Direct mode**: provide `title` and `excerpt` directly (no scraping). If both are provided, direct values take priority. When `create_post` is `true`, a draft post is created in the workspace with per-account caption versions. If an image is available (from `image_url` or the scraped `og:image`), it is imported into the workspace media library and attached to the draft post.
24
+ # @param workspace_uuid [String] UUID of the workspace.
25
+ # @param blog_to_social_input [BlogToSocialInput]
26
+ # @param [Hash] opts the optional parameters
27
+ # @return [BlogToSocial200Response]
28
+ def blog_to_social(workspace_uuid, blog_to_social_input, opts = {})
29
+ data, _status_code, _headers = blog_to_social_with_http_info(workspace_uuid, blog_to_social_input, opts)
30
+ data
31
+ end
32
+
33
+ # Generate social media captions from a blog post
34
+ # Generates platform-specific social media captions from a blog post URL or directly provided title and excerpt. Each platform generates one caption, which consumes one AI credit from the workspace's monthly allowance. **Input modes** (at least one required): - **URL mode**: provide `url` and the API scrapes the blog content automatically, including detecting the featured image via `og:image`. - **Direct mode**: provide `title` and `excerpt` directly (no scraping). If both are provided, direct values take priority. When `create_post` is `true`, a draft post is created in the workspace with per-account caption versions. If an image is available (from `image_url` or the scraped `og:image`), it is imported into the workspace media library and attached to the draft post.
35
+ # @param workspace_uuid [String] UUID of the workspace.
36
+ # @param blog_to_social_input [BlogToSocialInput]
37
+ # @param [Hash] opts the optional parameters
38
+ # @return [Array<(BlogToSocial200Response, Integer, Hash)>] BlogToSocial200Response data, response status code and response headers
39
+ def blog_to_social_with_http_info(workspace_uuid, blog_to_social_input, opts = {})
40
+ if @api_client.config.debugging
41
+ @api_client.config.logger.debug 'Calling API: AIApi.blog_to_social ...'
42
+ end
43
+ # verify the required parameter 'workspace_uuid' is set
44
+ if @api_client.config.client_side_validation && workspace_uuid.nil?
45
+ fail ArgumentError, "Missing the required parameter 'workspace_uuid' when calling AIApi.blog_to_social"
46
+ end
47
+ # verify the required parameter 'blog_to_social_input' is set
48
+ if @api_client.config.client_side_validation && blog_to_social_input.nil?
49
+ fail ArgumentError, "Missing the required parameter 'blog_to_social_input' when calling AIApi.blog_to_social"
50
+ end
51
+ # resource path
52
+ local_var_path = '/{workspaceUuid}/ai/blog-to-social'.sub('{' + 'workspaceUuid' + '}', CGI.escape(workspace_uuid.to_s))
53
+
54
+ # query parameters
55
+ query_params = opts[:query_params] || {}
56
+
57
+ # header parameters
58
+ header_params = opts[:header_params] || {}
59
+ # HTTP header 'Accept' (if needed)
60
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
61
+ # HTTP header 'Content-Type'
62
+ content_type = @api_client.select_header_content_type(['application/json'])
63
+ if !content_type.nil?
64
+ header_params['Content-Type'] = content_type
65
+ end
66
+
67
+ # form parameters
68
+ form_params = opts[:form_params] || {}
69
+
70
+ # http body (model)
71
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(blog_to_social_input)
72
+
73
+ # return_type
74
+ return_type = opts[:debug_return_type] || 'BlogToSocial200Response'
75
+
76
+ # auth_names
77
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
78
+
79
+ new_options = opts.merge(
80
+ :operation => :"AIApi.blog_to_social",
81
+ :header_params => header_params,
82
+ :query_params => query_params,
83
+ :form_params => form_params,
84
+ :body => post_body,
85
+ :auth_names => auth_names,
86
+ :return_type => return_type
87
+ )
88
+
89
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
90
+ if @api_client.config.debugging
91
+ @api_client.config.logger.debug "API called: AIApi#blog_to_social\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
92
+ end
93
+ return data, status_code, headers
94
+ end
95
+
96
+ # Delete the brand voice
97
+ # Removes the workspace's brand voice. AI endpoints then run without one. Admins and members only.
98
+ # @param workspace_uuid [String] UUID of the workspace.
99
+ # @param [Hash] opts the optional parameters
100
+ # @return [Object]
101
+ def delete_brand_voice(workspace_uuid, opts = {})
102
+ data, _status_code, _headers = delete_brand_voice_with_http_info(workspace_uuid, opts)
103
+ data
104
+ end
105
+
106
+ # Delete the brand voice
107
+ # Removes the workspace&#39;s brand voice. AI endpoints then run without one. Admins and members only.
108
+ # @param workspace_uuid [String] UUID of the workspace.
109
+ # @param [Hash] opts the optional parameters
110
+ # @return [Array<(Object, Integer, Hash)>] Object data, response status code and response headers
111
+ def delete_brand_voice_with_http_info(workspace_uuid, opts = {})
112
+ if @api_client.config.debugging
113
+ @api_client.config.logger.debug 'Calling API: AIApi.delete_brand_voice ...'
114
+ end
115
+ # verify the required parameter 'workspace_uuid' is set
116
+ if @api_client.config.client_side_validation && workspace_uuid.nil?
117
+ fail ArgumentError, "Missing the required parameter 'workspace_uuid' when calling AIApi.delete_brand_voice"
118
+ end
119
+ # resource path
120
+ local_var_path = '/{workspaceUuid}/brand-voice'.sub('{' + 'workspaceUuid' + '}', CGI.escape(workspace_uuid.to_s))
121
+
122
+ # query parameters
123
+ query_params = opts[:query_params] || {}
124
+
125
+ # header parameters
126
+ header_params = opts[:header_params] || {}
127
+ # HTTP header 'Accept' (if needed)
128
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
129
+
130
+ # form parameters
131
+ form_params = opts[:form_params] || {}
132
+
133
+ # http body (model)
134
+ post_body = opts[:debug_body]
135
+
136
+ # return_type
137
+ return_type = opts[:debug_return_type] || 'Object'
138
+
139
+ # auth_names
140
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
141
+
142
+ new_options = opts.merge(
143
+ :operation => :"AIApi.delete_brand_voice",
144
+ :header_params => header_params,
145
+ :query_params => query_params,
146
+ :form_params => form_params,
147
+ :body => post_body,
148
+ :auth_names => auth_names,
149
+ :return_type => return_type
150
+ )
151
+
152
+ data, status_code, headers = @api_client.call_api(:DELETE, local_var_path, new_options)
153
+ if @api_client.config.debugging
154
+ @api_client.config.logger.debug "API called: AIApi#delete_brand_voice\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
155
+ end
156
+ return data, status_code, headers
157
+ end
158
+
159
+ # AI credit usage
160
+ # The workspace's AI credits: text credits (captions, rewrites, outlines, alt text; counted per billing cycle) and image credits (one per generated, edited or varied image, and one per repurpose carousel; counted per calendar month, UTC). `limit` and `remaining` are `null` when the workspace has no limit. Readable when credits are used up; costs nothing. When image credits run out, the image endpoints and carousels answer `429` with `code: image_credits_exhausted`; when text credits run out, the AI endpoints answer `429` with `code: ai_credits_exhausted`. Image endpoint responses also carry `image_credits_used` and `image_credits_remaining`; their `credits_used` counts text credits only. If the image pool is switched off (`image.enabled: false`), images cost text credits as before.
161
+ # @param workspace_uuid [String] UUID of the workspace.
162
+ # @param [Hash] opts the optional parameters
163
+ # @return [AIUsage]
164
+ def get_ai_usage(workspace_uuid, opts = {})
165
+ data, _status_code, _headers = get_ai_usage_with_http_info(workspace_uuid, opts)
166
+ data
167
+ end
168
+
169
+ # AI credit usage
170
+ # The workspace&#39;s AI credits: text credits (captions, rewrites, outlines, alt text; counted per billing cycle) and image credits (one per generated, edited or varied image, and one per repurpose carousel; counted per calendar month, UTC). &#x60;limit&#x60; and &#x60;remaining&#x60; are &#x60;null&#x60; when the workspace has no limit. Readable when credits are used up; costs nothing. When image credits run out, the image endpoints and carousels answer &#x60;429&#x60; with &#x60;code: image_credits_exhausted&#x60;; when text credits run out, the AI endpoints answer &#x60;429&#x60; with &#x60;code: ai_credits_exhausted&#x60;. Image endpoint responses also carry &#x60;image_credits_used&#x60; and &#x60;image_credits_remaining&#x60;; their &#x60;credits_used&#x60; counts text credits only. If the image pool is switched off (&#x60;image.enabled: false&#x60;), images cost text credits as before.
171
+ # @param workspace_uuid [String] UUID of the workspace.
172
+ # @param [Hash] opts the optional parameters
173
+ # @return [Array<(AIUsage, Integer, Hash)>] AIUsage data, response status code and response headers
174
+ def get_ai_usage_with_http_info(workspace_uuid, opts = {})
175
+ if @api_client.config.debugging
176
+ @api_client.config.logger.debug 'Calling API: AIApi.get_ai_usage ...'
177
+ end
178
+ # verify the required parameter 'workspace_uuid' is set
179
+ if @api_client.config.client_side_validation && workspace_uuid.nil?
180
+ fail ArgumentError, "Missing the required parameter 'workspace_uuid' when calling AIApi.get_ai_usage"
181
+ end
182
+ # resource path
183
+ local_var_path = '/{workspaceUuid}/usage/ai'.sub('{' + 'workspaceUuid' + '}', CGI.escape(workspace_uuid.to_s))
184
+
185
+ # query parameters
186
+ query_params = opts[:query_params] || {}
187
+
188
+ # header parameters
189
+ header_params = opts[:header_params] || {}
190
+ # HTTP header 'Accept' (if needed)
191
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
192
+
193
+ # form parameters
194
+ form_params = opts[:form_params] || {}
195
+
196
+ # http body (model)
197
+ post_body = opts[:debug_body]
198
+
199
+ # return_type
200
+ return_type = opts[:debug_return_type] || 'AIUsage'
201
+
202
+ # auth_names
203
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
204
+
205
+ new_options = opts.merge(
206
+ :operation => :"AIApi.get_ai_usage",
207
+ :header_params => header_params,
208
+ :query_params => query_params,
209
+ :form_params => form_params,
210
+ :body => post_body,
211
+ :auth_names => auth_names,
212
+ :return_type => return_type
213
+ )
214
+
215
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
216
+ if @api_client.config.debugging
217
+ @api_client.config.logger.debug "API called: AIApi#get_ai_usage\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
218
+ end
219
+ return data, status_code, headers
220
+ end
221
+
222
+ # Get the brand voice
223
+ # The workspace's brand voice: identity, audience, tone sliders, style rules and example posts. It is the same profile as the Brand Voice page in the app (one per workspace). `data` is `null` when no voice is set. Any workspace member may read it; reading costs no AI credits. The AI endpoints apply it automatically: `blog-to-social` adds it to the caption instructions, `image-prompt` and `image-generate` turn it into a short visual tone line, and `image-edit` applies it when you send `use_brand_voice: true`. `image-variations` and `image-alt-text` never use it (alt text must describe the image literally). Send `use_brand_voice: false` to skip it on a call; responses report `meta.brand_voice_applied`.
224
+ # @param workspace_uuid [String] UUID of the workspace.
225
+ # @param [Hash] opts the optional parameters
226
+ # @return [GetBrandVoice200Response]
227
+ def get_brand_voice(workspace_uuid, opts = {})
228
+ data, _status_code, _headers = get_brand_voice_with_http_info(workspace_uuid, opts)
229
+ data
230
+ end
231
+
232
+ # Get the brand voice
233
+ # The workspace&#39;s brand voice: identity, audience, tone sliders, style rules and example posts. It is the same profile as the Brand Voice page in the app (one per workspace). &#x60;data&#x60; is &#x60;null&#x60; when no voice is set. Any workspace member may read it; reading costs no AI credits. The AI endpoints apply it automatically: &#x60;blog-to-social&#x60; adds it to the caption instructions, &#x60;image-prompt&#x60; and &#x60;image-generate&#x60; turn it into a short visual tone line, and &#x60;image-edit&#x60; applies it when you send &#x60;use_brand_voice: true&#x60;. &#x60;image-variations&#x60; and &#x60;image-alt-text&#x60; never use it (alt text must describe the image literally). Send &#x60;use_brand_voice: false&#x60; to skip it on a call; responses report &#x60;meta.brand_voice_applied&#x60;.
234
+ # @param workspace_uuid [String] UUID of the workspace.
235
+ # @param [Hash] opts the optional parameters
236
+ # @return [Array<(GetBrandVoice200Response, Integer, Hash)>] GetBrandVoice200Response data, response status code and response headers
237
+ def get_brand_voice_with_http_info(workspace_uuid, opts = {})
238
+ if @api_client.config.debugging
239
+ @api_client.config.logger.debug 'Calling API: AIApi.get_brand_voice ...'
240
+ end
241
+ # verify the required parameter 'workspace_uuid' is set
242
+ if @api_client.config.client_side_validation && workspace_uuid.nil?
243
+ fail ArgumentError, "Missing the required parameter 'workspace_uuid' when calling AIApi.get_brand_voice"
244
+ end
245
+ # resource path
246
+ local_var_path = '/{workspaceUuid}/brand-voice'.sub('{' + 'workspaceUuid' + '}', CGI.escape(workspace_uuid.to_s))
247
+
248
+ # query parameters
249
+ query_params = opts[:query_params] || {}
250
+
251
+ # header parameters
252
+ header_params = opts[:header_params] || {}
253
+ # HTTP header 'Accept' (if needed)
254
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
255
+
256
+ # form parameters
257
+ form_params = opts[:form_params] || {}
258
+
259
+ # http body (model)
260
+ post_body = opts[:debug_body]
261
+
262
+ # return_type
263
+ return_type = opts[:debug_return_type] || 'GetBrandVoice200Response'
264
+
265
+ # auth_names
266
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
267
+
268
+ new_options = opts.merge(
269
+ :operation => :"AIApi.get_brand_voice",
270
+ :header_params => header_params,
271
+ :query_params => query_params,
272
+ :form_params => form_params,
273
+ :body => post_body,
274
+ :auth_names => auth_names,
275
+ :return_type => return_type
276
+ )
277
+
278
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
279
+ if @api_client.config.debugging
280
+ @api_client.config.logger.debug "API called: AIApi#get_brand_voice\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
281
+ end
282
+ return data, status_code, headers
283
+ end
284
+
285
+ # Generate alt text for a media image using AI
286
+ # Analyzes an existing workspace media item and generates accessible alt text. The alt text is saved back to the media record. Costs 1 AI credit per call.
287
+ # @param workspace_uuid [String] UUID of the workspace.
288
+ # @param image_alt_text_input [ImageAltTextInput]
289
+ # @param [Hash] opts the optional parameters
290
+ # @return [ImageAltText200Response]
291
+ def image_alt_text(workspace_uuid, image_alt_text_input, opts = {})
292
+ data, _status_code, _headers = image_alt_text_with_http_info(workspace_uuid, image_alt_text_input, opts)
293
+ data
294
+ end
295
+
296
+ # Generate alt text for a media image using AI
297
+ # Analyzes an existing workspace media item and generates accessible alt text. The alt text is saved back to the media record. Costs 1 AI credit per call.
298
+ # @param workspace_uuid [String] UUID of the workspace.
299
+ # @param image_alt_text_input [ImageAltTextInput]
300
+ # @param [Hash] opts the optional parameters
301
+ # @return [Array<(ImageAltText200Response, Integer, Hash)>] ImageAltText200Response data, response status code and response headers
302
+ def image_alt_text_with_http_info(workspace_uuid, image_alt_text_input, opts = {})
303
+ if @api_client.config.debugging
304
+ @api_client.config.logger.debug 'Calling API: AIApi.image_alt_text ...'
305
+ end
306
+ # verify the required parameter 'workspace_uuid' is set
307
+ if @api_client.config.client_side_validation && workspace_uuid.nil?
308
+ fail ArgumentError, "Missing the required parameter 'workspace_uuid' when calling AIApi.image_alt_text"
309
+ end
310
+ # verify the required parameter 'image_alt_text_input' is set
311
+ if @api_client.config.client_side_validation && image_alt_text_input.nil?
312
+ fail ArgumentError, "Missing the required parameter 'image_alt_text_input' when calling AIApi.image_alt_text"
313
+ end
314
+ # resource path
315
+ local_var_path = '/{workspaceUuid}/ai/image-alt-text'.sub('{' + 'workspaceUuid' + '}', CGI.escape(workspace_uuid.to_s))
316
+
317
+ # query parameters
318
+ query_params = opts[:query_params] || {}
319
+
320
+ # header parameters
321
+ header_params = opts[:header_params] || {}
322
+ # HTTP header 'Accept' (if needed)
323
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
324
+ # HTTP header 'Content-Type'
325
+ content_type = @api_client.select_header_content_type(['application/json'])
326
+ if !content_type.nil?
327
+ header_params['Content-Type'] = content_type
328
+ end
329
+
330
+ # form parameters
331
+ form_params = opts[:form_params] || {}
332
+
333
+ # http body (model)
334
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(image_alt_text_input)
335
+
336
+ # return_type
337
+ return_type = opts[:debug_return_type] || 'ImageAltText200Response'
338
+
339
+ # auth_names
340
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
341
+
342
+ new_options = opts.merge(
343
+ :operation => :"AIApi.image_alt_text",
344
+ :header_params => header_params,
345
+ :query_params => query_params,
346
+ :form_params => form_params,
347
+ :body => post_body,
348
+ :auth_names => auth_names,
349
+ :return_type => return_type
350
+ )
351
+
352
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
353
+ if @api_client.config.debugging
354
+ @api_client.config.logger.debug "API called: AIApi#image_alt_text\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
355
+ end
356
+ return data, status_code, headers
357
+ end
358
+
359
+ # Edit an existing media image using AI
360
+ # Edits an existing workspace media item using the source image and a text prompt. Optionally accepts a mask (transparent areas are replaced). Saves results to the media library. Credits: `count × credit_weight`.
361
+ # @param workspace_uuid [String] UUID of the workspace.
362
+ # @param image_edit_input [ImageEditInput]
363
+ # @param [Hash] opts the optional parameters
364
+ # @return [ImageGenerate200Response]
365
+ def image_edit(workspace_uuid, image_edit_input, opts = {})
366
+ data, _status_code, _headers = image_edit_with_http_info(workspace_uuid, image_edit_input, opts)
367
+ data
368
+ end
369
+
370
+ # Edit an existing media image using AI
371
+ # Edits an existing workspace media item using the source image and a text prompt. Optionally accepts a mask (transparent areas are replaced). Saves results to the media library. Credits: &#x60;count × credit_weight&#x60;.
372
+ # @param workspace_uuid [String] UUID of the workspace.
373
+ # @param image_edit_input [ImageEditInput]
374
+ # @param [Hash] opts the optional parameters
375
+ # @return [Array<(ImageGenerate200Response, Integer, Hash)>] ImageGenerate200Response data, response status code and response headers
376
+ def image_edit_with_http_info(workspace_uuid, image_edit_input, opts = {})
377
+ if @api_client.config.debugging
378
+ @api_client.config.logger.debug 'Calling API: AIApi.image_edit ...'
379
+ end
380
+ # verify the required parameter 'workspace_uuid' is set
381
+ if @api_client.config.client_side_validation && workspace_uuid.nil?
382
+ fail ArgumentError, "Missing the required parameter 'workspace_uuid' when calling AIApi.image_edit"
383
+ end
384
+ # verify the required parameter 'image_edit_input' is set
385
+ if @api_client.config.client_side_validation && image_edit_input.nil?
386
+ fail ArgumentError, "Missing the required parameter 'image_edit_input' when calling AIApi.image_edit"
387
+ end
388
+ # resource path
389
+ local_var_path = '/{workspaceUuid}/ai/image-edit'.sub('{' + 'workspaceUuid' + '}', CGI.escape(workspace_uuid.to_s))
390
+
391
+ # query parameters
392
+ query_params = opts[:query_params] || {}
393
+
394
+ # header parameters
395
+ header_params = opts[:header_params] || {}
396
+ # HTTP header 'Accept' (if needed)
397
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
398
+ # HTTP header 'Content-Type'
399
+ content_type = @api_client.select_header_content_type(['application/json'])
400
+ if !content_type.nil?
401
+ header_params['Content-Type'] = content_type
402
+ end
403
+
404
+ # form parameters
405
+ form_params = opts[:form_params] || {}
406
+
407
+ # http body (model)
408
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(image_edit_input)
409
+
410
+ # return_type
411
+ return_type = opts[:debug_return_type] || 'ImageGenerate200Response'
412
+
413
+ # auth_names
414
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
415
+
416
+ new_options = opts.merge(
417
+ :operation => :"AIApi.image_edit",
418
+ :header_params => header_params,
419
+ :query_params => query_params,
420
+ :form_params => form_params,
421
+ :body => post_body,
422
+ :auth_names => auth_names,
423
+ :return_type => return_type
424
+ )
425
+
426
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
427
+ if @api_client.config.debugging
428
+ @api_client.config.logger.debug "API called: AIApi#image_edit\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
429
+ end
430
+ return data, status_code, headers
431
+ end
432
+
433
+ # Generate social media images from a caption
434
+ # Generates one or more images and saves them immediately to the workspace media library. **Standard mode** (recommended): provide `caption` + `platform`. PostBoost builds a professional image prompt internally using platform-specific templates. No prompt engineering required. **Developer mode**: provide `prompt` directly to bypass prompt building. If both `caption` and `prompt` are sent, standard mode runs. Credits: `count x credit_weight` (default: 5 per image).
435
+ # @param workspace_uuid [String] UUID of the workspace.
436
+ # @param image_generate_input [ImageGenerateInput]
437
+ # @param [Hash] opts the optional parameters
438
+ # @return [ImageGenerate200Response]
439
+ def image_generate(workspace_uuid, image_generate_input, opts = {})
440
+ data, _status_code, _headers = image_generate_with_http_info(workspace_uuid, image_generate_input, opts)
441
+ data
442
+ end
443
+
444
+ # Generate social media images from a caption
445
+ # Generates one or more images and saves them immediately to the workspace media library. **Standard mode** (recommended): provide &#x60;caption&#x60; + &#x60;platform&#x60;. PostBoost builds a professional image prompt internally using platform-specific templates. No prompt engineering required. **Developer mode**: provide &#x60;prompt&#x60; directly to bypass prompt building. If both &#x60;caption&#x60; and &#x60;prompt&#x60; are sent, standard mode runs. Credits: &#x60;count x credit_weight&#x60; (default: 5 per image).
446
+ # @param workspace_uuid [String] UUID of the workspace.
447
+ # @param image_generate_input [ImageGenerateInput]
448
+ # @param [Hash] opts the optional parameters
449
+ # @return [Array<(ImageGenerate200Response, Integer, Hash)>] ImageGenerate200Response data, response status code and response headers
450
+ def image_generate_with_http_info(workspace_uuid, image_generate_input, opts = {})
451
+ if @api_client.config.debugging
452
+ @api_client.config.logger.debug 'Calling API: AIApi.image_generate ...'
453
+ end
454
+ # verify the required parameter 'workspace_uuid' is set
455
+ if @api_client.config.client_side_validation && workspace_uuid.nil?
456
+ fail ArgumentError, "Missing the required parameter 'workspace_uuid' when calling AIApi.image_generate"
457
+ end
458
+ # verify the required parameter 'image_generate_input' is set
459
+ if @api_client.config.client_side_validation && image_generate_input.nil?
460
+ fail ArgumentError, "Missing the required parameter 'image_generate_input' when calling AIApi.image_generate"
461
+ end
462
+ # resource path
463
+ local_var_path = '/{workspaceUuid}/ai/image-generate'.sub('{' + 'workspaceUuid' + '}', CGI.escape(workspace_uuid.to_s))
464
+
465
+ # query parameters
466
+ query_params = opts[:query_params] || {}
467
+
468
+ # header parameters
469
+ header_params = opts[:header_params] || {}
470
+ # HTTP header 'Accept' (if needed)
471
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
472
+ # HTTP header 'Content-Type'
473
+ content_type = @api_client.select_header_content_type(['application/json'])
474
+ if !content_type.nil?
475
+ header_params['Content-Type'] = content_type
476
+ end
477
+
478
+ # form parameters
479
+ form_params = opts[:form_params] || {}
480
+
481
+ # http body (model)
482
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(image_generate_input)
483
+
484
+ # return_type
485
+ return_type = opts[:debug_return_type] || 'ImageGenerate200Response'
486
+
487
+ # auth_names
488
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
489
+
490
+ new_options = opts.merge(
491
+ :operation => :"AIApi.image_generate",
492
+ :header_params => header_params,
493
+ :query_params => query_params,
494
+ :form_params => form_params,
495
+ :body => post_body,
496
+ :auth_names => auth_names,
497
+ :return_type => return_type
498
+ )
499
+
500
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
501
+ if @api_client.config.debugging
502
+ @api_client.config.logger.debug "API called: AIApi#image_generate\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
503
+ end
504
+ return data, status_code, headers
505
+ end
506
+
507
+ # Build an optimized image prompt from a social media caption
508
+ # Builds a professional image generation prompt from a caption and platform. No image is generated. Use this to preview the prompt before calling `image-generate`. Costs 1 AI credit per call. When `image-generate` builds the prompt internally (standard mode), no credit is charged for the prompt step.
509
+ # @param workspace_uuid [String] UUID of the workspace.
510
+ # @param image_prompt_input [ImagePromptInput]
511
+ # @param [Hash] opts the optional parameters
512
+ # @return [ImagePrompt200Response]
513
+ def image_prompt(workspace_uuid, image_prompt_input, opts = {})
514
+ data, _status_code, _headers = image_prompt_with_http_info(workspace_uuid, image_prompt_input, opts)
515
+ data
516
+ end
517
+
518
+ # Build an optimized image prompt from a social media caption
519
+ # Builds a professional image generation prompt from a caption and platform. No image is generated. Use this to preview the prompt before calling &#x60;image-generate&#x60;. Costs 1 AI credit per call. When &#x60;image-generate&#x60; builds the prompt internally (standard mode), no credit is charged for the prompt step.
520
+ # @param workspace_uuid [String] UUID of the workspace.
521
+ # @param image_prompt_input [ImagePromptInput]
522
+ # @param [Hash] opts the optional parameters
523
+ # @return [Array<(ImagePrompt200Response, Integer, Hash)>] ImagePrompt200Response data, response status code and response headers
524
+ def image_prompt_with_http_info(workspace_uuid, image_prompt_input, opts = {})
525
+ if @api_client.config.debugging
526
+ @api_client.config.logger.debug 'Calling API: AIApi.image_prompt ...'
527
+ end
528
+ # verify the required parameter 'workspace_uuid' is set
529
+ if @api_client.config.client_side_validation && workspace_uuid.nil?
530
+ fail ArgumentError, "Missing the required parameter 'workspace_uuid' when calling AIApi.image_prompt"
531
+ end
532
+ # verify the required parameter 'image_prompt_input' is set
533
+ if @api_client.config.client_side_validation && image_prompt_input.nil?
534
+ fail ArgumentError, "Missing the required parameter 'image_prompt_input' when calling AIApi.image_prompt"
535
+ end
536
+ # resource path
537
+ local_var_path = '/{workspaceUuid}/ai/image-prompt'.sub('{' + 'workspaceUuid' + '}', CGI.escape(workspace_uuid.to_s))
538
+
539
+ # query parameters
540
+ query_params = opts[:query_params] || {}
541
+
542
+ # header parameters
543
+ header_params = opts[:header_params] || {}
544
+ # HTTP header 'Accept' (if needed)
545
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
546
+ # HTTP header 'Content-Type'
547
+ content_type = @api_client.select_header_content_type(['application/json'])
548
+ if !content_type.nil?
549
+ header_params['Content-Type'] = content_type
550
+ end
551
+
552
+ # form parameters
553
+ form_params = opts[:form_params] || {}
554
+
555
+ # http body (model)
556
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(image_prompt_input)
557
+
558
+ # return_type
559
+ return_type = opts[:debug_return_type] || 'ImagePrompt200Response'
560
+
561
+ # auth_names
562
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
563
+
564
+ new_options = opts.merge(
565
+ :operation => :"AIApi.image_prompt",
566
+ :header_params => header_params,
567
+ :query_params => query_params,
568
+ :form_params => form_params,
569
+ :body => post_body,
570
+ :auth_names => auth_names,
571
+ :return_type => return_type
572
+ )
573
+
574
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
575
+ if @api_client.config.debugging
576
+ @api_client.config.logger.debug "API called: AIApi#image_prompt\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
577
+ end
578
+ return data, status_code, headers
579
+ end
580
+
581
+ # Generate variations of an existing media image
582
+ # Creates one or more variations of an existing workspace media item. Saves results to the media library. Credits: `count × credit_weight`.
583
+ # @param workspace_uuid [String] UUID of the workspace.
584
+ # @param image_variations_input [ImageVariationsInput]
585
+ # @param [Hash] opts the optional parameters
586
+ # @return [ImageVariations200Response]
587
+ def image_variations(workspace_uuid, image_variations_input, opts = {})
588
+ data, _status_code, _headers = image_variations_with_http_info(workspace_uuid, image_variations_input, opts)
589
+ data
590
+ end
591
+
592
+ # Generate variations of an existing media image
593
+ # Creates one or more variations of an existing workspace media item. Saves results to the media library. Credits: &#x60;count × credit_weight&#x60;.
594
+ # @param workspace_uuid [String] UUID of the workspace.
595
+ # @param image_variations_input [ImageVariationsInput]
596
+ # @param [Hash] opts the optional parameters
597
+ # @return [Array<(ImageVariations200Response, Integer, Hash)>] ImageVariations200Response data, response status code and response headers
598
+ def image_variations_with_http_info(workspace_uuid, image_variations_input, opts = {})
599
+ if @api_client.config.debugging
600
+ @api_client.config.logger.debug 'Calling API: AIApi.image_variations ...'
601
+ end
602
+ # verify the required parameter 'workspace_uuid' is set
603
+ if @api_client.config.client_side_validation && workspace_uuid.nil?
604
+ fail ArgumentError, "Missing the required parameter 'workspace_uuid' when calling AIApi.image_variations"
605
+ end
606
+ # verify the required parameter 'image_variations_input' is set
607
+ if @api_client.config.client_side_validation && image_variations_input.nil?
608
+ fail ArgumentError, "Missing the required parameter 'image_variations_input' when calling AIApi.image_variations"
609
+ end
610
+ # resource path
611
+ local_var_path = '/{workspaceUuid}/ai/image-variations'.sub('{' + 'workspaceUuid' + '}', CGI.escape(workspace_uuid.to_s))
612
+
613
+ # query parameters
614
+ query_params = opts[:query_params] || {}
615
+
616
+ # header parameters
617
+ header_params = opts[:header_params] || {}
618
+ # HTTP header 'Accept' (if needed)
619
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
620
+ # HTTP header 'Content-Type'
621
+ content_type = @api_client.select_header_content_type(['application/json'])
622
+ if !content_type.nil?
623
+ header_params['Content-Type'] = content_type
624
+ end
625
+
626
+ # form parameters
627
+ form_params = opts[:form_params] || {}
628
+
629
+ # http body (model)
630
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(image_variations_input)
631
+
632
+ # return_type
633
+ return_type = opts[:debug_return_type] || 'ImageVariations200Response'
634
+
635
+ # auth_names
636
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
637
+
638
+ new_options = opts.merge(
639
+ :operation => :"AIApi.image_variations",
640
+ :header_params => header_params,
641
+ :query_params => query_params,
642
+ :form_params => form_params,
643
+ :body => post_body,
644
+ :auth_names => auth_names,
645
+ :return_type => return_type
646
+ )
647
+
648
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
649
+ if @api_client.config.debugging
650
+ @api_client.config.logger.debug "API called: AIApi#image_variations\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
651
+ end
652
+ return data, status_code, headers
653
+ end
654
+
655
+ # Learn a brand voice from past posts
656
+ # Reads the workspace's latest published posts (original text) and proposes a brand voice in the same shape as `GET /brand-voice`. Returns a draft and saves nothing unless `apply: true`. Without `overwrite`, learned values only fill fields that are empty (tone sliders and styles still at their defaults count as empty); with `overwrite: true` they replace them. The first five sampled posts become `example_posts`. Needs at least 3 published posts (`422`, `code: not_enough_posts`). Costs one AI text credit per AI call (one retry when the reply is not usable). Admins and members only. A key limited to some accounts must send `account_ids`; only posts whose accounts are all among them are read. `apply` also needs the `write` ability.
657
+ # @param workspace_uuid [String] UUID of the workspace.
658
+ # @param [Hash] opts the optional parameters
659
+ # @option opts [LearnBrandVoiceInput] :learn_brand_voice_input
660
+ # @return [LearnBrandVoiceResponse]
661
+ def learn_brand_voice(workspace_uuid, opts = {})
662
+ data, _status_code, _headers = learn_brand_voice_with_http_info(workspace_uuid, opts)
663
+ data
664
+ end
665
+
666
+ # Learn a brand voice from past posts
667
+ # Reads the workspace&#39;s latest published posts (original text) and proposes a brand voice in the same shape as &#x60;GET /brand-voice&#x60;. Returns a draft and saves nothing unless &#x60;apply: true&#x60;. Without &#x60;overwrite&#x60;, learned values only fill fields that are empty (tone sliders and styles still at their defaults count as empty); with &#x60;overwrite: true&#x60; they replace them. The first five sampled posts become &#x60;example_posts&#x60;. Needs at least 3 published posts (&#x60;422&#x60;, &#x60;code: not_enough_posts&#x60;). Costs one AI text credit per AI call (one retry when the reply is not usable). Admins and members only. A key limited to some accounts must send &#x60;account_ids&#x60;; only posts whose accounts are all among them are read. &#x60;apply&#x60; also needs the &#x60;write&#x60; ability.
668
+ # @param workspace_uuid [String] UUID of the workspace.
669
+ # @param [Hash] opts the optional parameters
670
+ # @option opts [LearnBrandVoiceInput] :learn_brand_voice_input
671
+ # @return [Array<(LearnBrandVoiceResponse, Integer, Hash)>] LearnBrandVoiceResponse data, response status code and response headers
672
+ def learn_brand_voice_with_http_info(workspace_uuid, opts = {})
673
+ if @api_client.config.debugging
674
+ @api_client.config.logger.debug 'Calling API: AIApi.learn_brand_voice ...'
675
+ end
676
+ # verify the required parameter 'workspace_uuid' is set
677
+ if @api_client.config.client_side_validation && workspace_uuid.nil?
678
+ fail ArgumentError, "Missing the required parameter 'workspace_uuid' when calling AIApi.learn_brand_voice"
679
+ end
680
+ # resource path
681
+ local_var_path = '/{workspaceUuid}/brand-voice/learn'.sub('{' + 'workspaceUuid' + '}', CGI.escape(workspace_uuid.to_s))
682
+
683
+ # query parameters
684
+ query_params = opts[:query_params] || {}
685
+
686
+ # header parameters
687
+ header_params = opts[:header_params] || {}
688
+ # HTTP header 'Accept' (if needed)
689
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
690
+ # HTTP header 'Content-Type'
691
+ content_type = @api_client.select_header_content_type(['application/json'])
692
+ if !content_type.nil?
693
+ header_params['Content-Type'] = content_type
694
+ end
695
+
696
+ # form parameters
697
+ form_params = opts[:form_params] || {}
698
+
699
+ # http body (model)
700
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(opts[:'learn_brand_voice_input'])
701
+
702
+ # return_type
703
+ return_type = opts[:debug_return_type] || 'LearnBrandVoiceResponse'
704
+
705
+ # auth_names
706
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
707
+
708
+ new_options = opts.merge(
709
+ :operation => :"AIApi.learn_brand_voice",
710
+ :header_params => header_params,
711
+ :query_params => query_params,
712
+ :form_params => form_params,
713
+ :body => post_body,
714
+ :auth_names => auth_names,
715
+ :return_type => return_type
716
+ )
717
+
718
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
719
+ if @api_client.config.debugging
720
+ @api_client.config.logger.debug "API called: AIApi#learn_brand_voice\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
721
+ end
722
+ return data, status_code, headers
723
+ end
724
+
725
+ # Repurpose long-form content into a draft post set with a carousel
726
+ # Turns an article URL, a YouTube video, a PDF or pasted text into one **draft** post with a caption for every target account, plus a carousel of rendered slide images (hook, 1 to 6 idea slides, call to action; 1080×1350 PNG). Nothing is published or scheduled. **Sources** (`source_type`): - `url`: the article is fetched and its main text extracted. - `youtube`: title, description and chapters come from YouTube; send the transcript in `transcript` for better results (required when the description is short). - `pdf`: `pdf_url` must be a public PDF of at most 20 MB; the first 30 pages are read. - `text`: send `title` and `text`. **Carousel per network**: Instagram, Facebook, Threads up to 10 slides; LinkedIn up to 9; X and Bluesky up to 4; other networks get the cover slide; YouTube and TikTok get none (listed in `warnings`). Without a carousel, the source image (article image or video thumbnail) is attached when available. **AI credits**: one per target account plus one for the carousel outline. Slides are drawn without AI and cost nothing. The workspace brand voice applies unless `use_brand_voice` is `false`. Send an `Idempotency-Key` so a retried call does not create a second draft. Limited to 10 calls per minute.
727
+ # @param workspace_uuid [String] UUID of the workspace.
728
+ # @param repurpose_input [RepurposeInput]
729
+ # @param [Hash] opts the optional parameters
730
+ # @option opts [String] :idempotency_key Unique key (for example a UUID) that makes the request safe to retry. A repeat with the same key and body within 24 hours returns the stored response with &#x60;Idempotent-Replayed: true&#x60; and has no further effect. Keys are scoped to your user, the workspace, the method and the path.
731
+ # @return [RepurposeContent200Response]
732
+ def repurpose_content(workspace_uuid, repurpose_input, opts = {})
733
+ data, _status_code, _headers = repurpose_content_with_http_info(workspace_uuid, repurpose_input, opts)
734
+ data
735
+ end
736
+
737
+ # Repurpose long-form content into a draft post set with a carousel
738
+ # Turns an article URL, a YouTube video, a PDF or pasted text into one **draft** post with a caption for every target account, plus a carousel of rendered slide images (hook, 1 to 6 idea slides, call to action; 1080×1350 PNG). Nothing is published or scheduled. **Sources** (&#x60;source_type&#x60;): - &#x60;url&#x60;: the article is fetched and its main text extracted. - &#x60;youtube&#x60;: title, description and chapters come from YouTube; send the transcript in &#x60;transcript&#x60; for better results (required when the description is short). - &#x60;pdf&#x60;: &#x60;pdf_url&#x60; must be a public PDF of at most 20 MB; the first 30 pages are read. - &#x60;text&#x60;: send &#x60;title&#x60; and &#x60;text&#x60;. **Carousel per network**: Instagram, Facebook, Threads up to 10 slides; LinkedIn up to 9; X and Bluesky up to 4; other networks get the cover slide; YouTube and TikTok get none (listed in &#x60;warnings&#x60;). Without a carousel, the source image (article image or video thumbnail) is attached when available. **AI credits**: one per target account plus one for the carousel outline. Slides are drawn without AI and cost nothing. The workspace brand voice applies unless &#x60;use_brand_voice&#x60; is &#x60;false&#x60;. Send an &#x60;Idempotency-Key&#x60; so a retried call does not create a second draft. Limited to 10 calls per minute.
739
+ # @param workspace_uuid [String] UUID of the workspace.
740
+ # @param repurpose_input [RepurposeInput]
741
+ # @param [Hash] opts the optional parameters
742
+ # @option opts [String] :idempotency_key Unique key (for example a UUID) that makes the request safe to retry. A repeat with the same key and body within 24 hours returns the stored response with &#x60;Idempotent-Replayed: true&#x60; and has no further effect. Keys are scoped to your user, the workspace, the method and the path.
743
+ # @return [Array<(RepurposeContent200Response, Integer, Hash)>] RepurposeContent200Response data, response status code and response headers
744
+ def repurpose_content_with_http_info(workspace_uuid, repurpose_input, opts = {})
745
+ if @api_client.config.debugging
746
+ @api_client.config.logger.debug 'Calling API: AIApi.repurpose_content ...'
747
+ end
748
+ # verify the required parameter 'workspace_uuid' is set
749
+ if @api_client.config.client_side_validation && workspace_uuid.nil?
750
+ fail ArgumentError, "Missing the required parameter 'workspace_uuid' when calling AIApi.repurpose_content"
751
+ end
752
+ # verify the required parameter 'repurpose_input' is set
753
+ if @api_client.config.client_side_validation && repurpose_input.nil?
754
+ fail ArgumentError, "Missing the required parameter 'repurpose_input' when calling AIApi.repurpose_content"
755
+ end
756
+ if @api_client.config.client_side_validation && !opts[:'idempotency_key'].nil? && opts[:'idempotency_key'].to_s.length > 255
757
+ fail ArgumentError, 'invalid value for "opts[:"idempotency_key"]" when calling AIApi.repurpose_content, the character length must be smaller than or equal to 255.'
758
+ end
759
+
760
+ if @api_client.config.client_side_validation && !opts[:'idempotency_key'].nil? && opts[:'idempotency_key'].to_s.length < 1
761
+ fail ArgumentError, 'invalid value for "opts[:"idempotency_key"]" when calling AIApi.repurpose_content, the character length must be great than or equal to 1.'
762
+ end
763
+
764
+ # resource path
765
+ local_var_path = '/{workspaceUuid}/ai/repurpose'.sub('{' + 'workspaceUuid' + '}', CGI.escape(workspace_uuid.to_s))
766
+
767
+ # query parameters
768
+ query_params = opts[:query_params] || {}
769
+
770
+ # header parameters
771
+ header_params = opts[:header_params] || {}
772
+ # HTTP header 'Accept' (if needed)
773
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
774
+ # HTTP header 'Content-Type'
775
+ content_type = @api_client.select_header_content_type(['application/json'])
776
+ if !content_type.nil?
777
+ header_params['Content-Type'] = content_type
778
+ end
779
+ header_params[:'Idempotency-Key'] = opts[:'idempotency_key'] if !opts[:'idempotency_key'].nil?
780
+
781
+ # form parameters
782
+ form_params = opts[:form_params] || {}
783
+
784
+ # http body (model)
785
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(repurpose_input)
786
+
787
+ # return_type
788
+ return_type = opts[:debug_return_type] || 'RepurposeContent200Response'
789
+
790
+ # auth_names
791
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
792
+
793
+ new_options = opts.merge(
794
+ :operation => :"AIApi.repurpose_content",
795
+ :header_params => header_params,
796
+ :query_params => query_params,
797
+ :form_params => form_params,
798
+ :body => post_body,
799
+ :auth_names => auth_names,
800
+ :return_type => return_type
801
+ )
802
+
803
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
804
+ if @api_client.config.debugging
805
+ @api_client.config.logger.debug "API called: AIApi#repurpose_content\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
806
+ end
807
+ return data, status_code, headers
808
+ end
809
+
810
+ # Create or update the brand voice
811
+ # Creates the workspace's brand voice or updates it. Fields you leave out keep their current value. Admins and members only (not viewers); the workspace must have AI enabled.
812
+ # @param workspace_uuid [String] UUID of the workspace.
813
+ # @param brand_voice_input [BrandVoiceInput]
814
+ # @param [Hash] opts the optional parameters
815
+ # @return [GetBrandVoice200Response]
816
+ def update_brand_voice(workspace_uuid, brand_voice_input, opts = {})
817
+ data, _status_code, _headers = update_brand_voice_with_http_info(workspace_uuid, brand_voice_input, opts)
818
+ data
819
+ end
820
+
821
+ # Create or update the brand voice
822
+ # Creates the workspace&#39;s brand voice or updates it. Fields you leave out keep their current value. Admins and members only (not viewers); the workspace must have AI enabled.
823
+ # @param workspace_uuid [String] UUID of the workspace.
824
+ # @param brand_voice_input [BrandVoiceInput]
825
+ # @param [Hash] opts the optional parameters
826
+ # @return [Array<(GetBrandVoice200Response, Integer, Hash)>] GetBrandVoice200Response data, response status code and response headers
827
+ def update_brand_voice_with_http_info(workspace_uuid, brand_voice_input, opts = {})
828
+ if @api_client.config.debugging
829
+ @api_client.config.logger.debug 'Calling API: AIApi.update_brand_voice ...'
830
+ end
831
+ # verify the required parameter 'workspace_uuid' is set
832
+ if @api_client.config.client_side_validation && workspace_uuid.nil?
833
+ fail ArgumentError, "Missing the required parameter 'workspace_uuid' when calling AIApi.update_brand_voice"
834
+ end
835
+ # verify the required parameter 'brand_voice_input' is set
836
+ if @api_client.config.client_side_validation && brand_voice_input.nil?
837
+ fail ArgumentError, "Missing the required parameter 'brand_voice_input' when calling AIApi.update_brand_voice"
838
+ end
839
+ # resource path
840
+ local_var_path = '/{workspaceUuid}/brand-voice'.sub('{' + 'workspaceUuid' + '}', CGI.escape(workspace_uuid.to_s))
841
+
842
+ # query parameters
843
+ query_params = opts[:query_params] || {}
844
+
845
+ # header parameters
846
+ header_params = opts[:header_params] || {}
847
+ # HTTP header 'Accept' (if needed)
848
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
849
+ # HTTP header 'Content-Type'
850
+ content_type = @api_client.select_header_content_type(['application/json'])
851
+ if !content_type.nil?
852
+ header_params['Content-Type'] = content_type
853
+ end
854
+
855
+ # form parameters
856
+ form_params = opts[:form_params] || {}
857
+
858
+ # http body (model)
859
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(brand_voice_input)
860
+
861
+ # return_type
862
+ return_type = opts[:debug_return_type] || 'GetBrandVoice200Response'
863
+
864
+ # auth_names
865
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
866
+
867
+ new_options = opts.merge(
868
+ :operation => :"AIApi.update_brand_voice",
869
+ :header_params => header_params,
870
+ :query_params => query_params,
871
+ :form_params => form_params,
872
+ :body => post_body,
873
+ :auth_names => auth_names,
874
+ :return_type => return_type
875
+ )
876
+
877
+ data, status_code, headers = @api_client.call_api(:PUT, local_var_path, new_options)
878
+ if @api_client.config.debugging
879
+ @api_client.config.logger.debug "API called: AIApi#update_brand_voice\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
880
+ end
881
+ return data, status_code, headers
882
+ end
883
+ end
884
+ end