postboost 1.28.0 → 1.29.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 (656) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -1
  3. data/docs/FreeToolError.md +4 -2
  4. data/docs/FreeToolGenerateCaptionRequest.md +30 -0
  5. data/docs/FreeToolGenerateCaptionResponse.md +22 -0
  6. data/docs/FreeToolGenerateHashtagsRequest.md +24 -0
  7. data/docs/FreeToolGenerateHashtagsResponse.md +22 -0
  8. data/docs/FreeToolsApi.md +140 -0
  9. data/lib/postboost/api/account_groups_api.rb +1 -1
  10. data/lib/postboost/api/accounts_api.rb +1 -1
  11. data/lib/postboost/api/activity_api.rb +1 -1
  12. data/lib/postboost/api/agents_api.rb +1 -1
  13. data/lib/postboost/api/ai_api.rb +1 -1
  14. data/lib/postboost/api/analytics_api.rb +1 -1
  15. data/lib/postboost/api/competitors_api.rb +1 -1
  16. data/lib/postboost/api/free_tools_api.rb +137 -1
  17. data/lib/postboost/api/hashtag_groups_api.rb +1 -1
  18. data/lib/postboost/api/inbox_api.rb +1 -1
  19. data/lib/postboost/api/media_api.rb +1 -1
  20. data/lib/postboost/api/mentions_api.rb +1 -1
  21. data/lib/postboost/api/posting_schedule_api.rb +1 -1
  22. data/lib/postboost/api/posts_api.rb +1 -1
  23. data/lib/postboost/api/receipts_api.rb +1 -1
  24. data/lib/postboost/api/subscriptions_api.rb +1 -1
  25. data/lib/postboost/api/tags_api.rb +1 -1
  26. data/lib/postboost/api/templates_api.rb +1 -1
  27. data/lib/postboost/api/users_api.rb +1 -1
  28. data/lib/postboost/api/webhooks_api.rb +1 -1
  29. data/lib/postboost/api/workspaces_api.rb +1 -1
  30. data/lib/postboost/api_client.rb +1 -1
  31. data/lib/postboost/api_error.rb +1 -1
  32. data/lib/postboost/configuration.rb +1 -1
  33. data/lib/postboost/models/account.rb +1 -1
  34. data/lib/postboost/models/account_analytics.rb +1 -1
  35. data/lib/postboost/models/account_analytics_initial_sync.rb +1 -1
  36. data/lib/postboost/models/account_connection_health.rb +1 -1
  37. data/lib/postboost/models/account_errors_inner.rb +1 -1
  38. data/lib/postboost/models/account_errors_inner_one_of.rb +1 -1
  39. data/lib/postboost/models/account_group.rb +1 -1
  40. data/lib/postboost/models/account_group_input.rb +1 -1
  41. data/lib/postboost/models/account_health.rb +1 -1
  42. data/lib/postboost/models/account_health_daily_cap.rb +1 -1
  43. data/lib/postboost/models/account_schedule.rb +1 -1
  44. data/lib/postboost/models/add_competitor202_response.rb +1 -1
  45. data/lib/postboost/models/add_competitor409_response.rb +1 -1
  46. data/lib/postboost/models/add_generic_subscription_request.rb +1 -1
  47. data/lib/postboost/models/add_post_to_queue_request.rb +1 -1
  48. data/lib/postboost/models/agent_page_meta.rb +1 -1
  49. data/lib/postboost/models/agent_proposal.rb +1 -1
  50. data/lib/postboost/models/agent_proposal_decision.rb +1 -1
  51. data/lib/postboost/models/agent_run.rb +1 -1
  52. data/lib/postboost/models/ai_credits.rb +1 -1
  53. data/lib/postboost/models/ai_usage.rb +1 -1
  54. data/lib/postboost/models/ai_usage_text.rb +1 -1
  55. data/lib/postboost/models/analytics_period.rb +1 -1
  56. data/lib/postboost/models/analytics_summary.rb +1 -1
  57. data/lib/postboost/models/analytics_summary_data.rb +1 -1
  58. data/lib/postboost/models/api_activity.rb +1 -1
  59. data/lib/postboost/models/api_activity_outcome.rb +1 -1
  60. data/lib/postboost/models/api_key.rb +1 -1
  61. data/lib/postboost/models/api_key_ability.rb +1 -1
  62. data/lib/postboost/models/api_key_input.rb +1 -1
  63. data/lib/postboost/models/approve_agent_proposal200_response.rb +1 -1
  64. data/lib/postboost/models/approve_agent_proposal409_response.rb +1 -1
  65. data/lib/postboost/models/approve_inbox_reply_draft403_response.rb +1 -1
  66. data/lib/postboost/models/approve_post_request.rb +1 -1
  67. data/lib/postboost/models/best_posting_times.rb +1 -1
  68. data/lib/postboost/models/best_posting_times_times_inner.rb +1 -1
  69. data/lib/postboost/models/blog_to_social200_response.rb +1 -1
  70. data/lib/postboost/models/blog_to_social429_response.rb +1 -1
  71. data/lib/postboost/models/blog_to_social_caption.rb +1 -1
  72. data/lib/postboost/models/blog_to_social_input.rb +1 -1
  73. data/lib/postboost/models/blog_to_social_media.rb +1 -1
  74. data/lib/postboost/models/blog_to_social_response.rb +1 -1
  75. data/lib/postboost/models/brand_voice.rb +1 -1
  76. data/lib/postboost/models/brand_voice_input.rb +1 -1
  77. data/lib/postboost/models/brand_voice_meta.rb +1 -1
  78. data/lib/postboost/models/cancel_subscription422_response.rb +1 -1
  79. data/lib/postboost/models/cancel_subscription422_response_errors.rb +1 -1
  80. data/lib/postboost/models/cancel_subscription_request.rb +1 -1
  81. data/lib/postboost/models/change_subscription_plan_request.rb +1 -1
  82. data/lib/postboost/models/channel_account.rb +1 -1
  83. data/lib/postboost/models/checkout_subscription200_response.rb +1 -1
  84. data/lib/postboost/models/checkout_subscription_request.rb +1 -1
  85. data/lib/postboost/models/coded_error.rb +1 -1
  86. data/lib/postboost/models/competitor.rb +1 -1
  87. data/lib/postboost/models/competitor_detail.rb +1 -1
  88. data/lib/postboost/models/competitor_input.rb +1 -1
  89. data/lib/postboost/models/competitor_media.rb +1 -1
  90. data/lib/postboost/models/competitor_snapshot.rb +1 -1
  91. data/lib/postboost/models/complete_chunked_upload_request.rb +1 -1
  92. data/lib/postboost/models/connect_channel_input.rb +1 -1
  93. data/lib/postboost/models/connect_link.rb +1 -1
  94. data/lib/postboost/models/create_account_group201_response.rb +1 -1
  95. data/lib/postboost/models/create_agent201_response.rb +1 -1
  96. data/lib/postboost/models/create_api_key201_response.rb +1 -1
  97. data/lib/postboost/models/create_api_key201_response_data.rb +1 -1
  98. data/lib/postboost/models/create_connect_link_request.rb +1 -1
  99. data/lib/postboost/models/create_hashtag_group201_response.rb +1 -1
  100. data/lib/postboost/models/create_inbox_reply_draft201_response.rb +1 -1
  101. data/lib/postboost/models/create_media_folder_request.rb +1 -1
  102. data/lib/postboost/models/create_mention201_response.rb +1 -1
  103. data/lib/postboost/models/create_post201_response.rb +1 -1
  104. data/lib/postboost/models/create_recycling_rule201_response.rb +1 -1
  105. data/lib/postboost/models/create_report_export201_response.rb +1 -1
  106. data/lib/postboost/models/create_reseller_client201_response.rb +1 -1
  107. data/lib/postboost/models/create_rss_feed201_response.rb +1 -1
  108. data/lib/postboost/models/create_template201_response.rb +1 -1
  109. data/lib/postboost/models/create_webhook_subscription201_response.rb +1 -1
  110. data/lib/postboost/models/create_webhook_subscription201_response_data.rb +1 -1
  111. data/lib/postboost/models/delete_agent200_response.rb +1 -1
  112. data/lib/postboost/models/delete_media_bulk_request.rb +1 -1
  113. data/lib/postboost/models/delete_media_bulk_request_items_inner.rb +1 -1
  114. data/lib/postboost/models/delete_media_folder_request.rb +1 -1
  115. data/lib/postboost/models/delete_mode.rb +1 -1
  116. data/lib/postboost/models/delete_post_request.rb +1 -1
  117. data/lib/postboost/models/delete_posts_bulk_request.rb +1 -1
  118. data/lib/postboost/models/delete_receipts_bulk_request.rb +1 -1
  119. data/lib/postboost/models/delete_result.rb +1 -1
  120. data/lib/postboost/models/delete_user400_response.rb +1 -1
  121. data/lib/postboost/models/delete_users_bulk_request.rb +1 -1
  122. data/lib/postboost/models/delete_workspaces_bulk_request.rb +1 -1
  123. data/lib/postboost/models/free_tool_build_utm_url_request.rb +1 -1
  124. data/lib/postboost/models/free_tool_build_utm_url_response.rb +1 -1
  125. data/lib/postboost/models/free_tool_calculate_engagement_rate_request.rb +1 -1
  126. data/lib/postboost/models/free_tool_calculate_engagement_rate_response.rb +1 -1
  127. data/lib/postboost/models/free_tool_check_post_request.rb +1 -1
  128. data/lib/postboost/models/free_tool_check_post_request_media.rb +1 -1
  129. data/lib/postboost/models/free_tool_check_post_response.rb +1 -1
  130. data/lib/postboost/models/free_tool_check_post_response_networks_inner.rb +1 -1
  131. data/lib/postboost/models/free_tool_check_post_response_networks_inner_errors_inner.rb +1 -1
  132. data/lib/postboost/models/free_tool_clean_text_request.rb +1 -1
  133. data/lib/postboost/models/free_tool_clean_text_response.rb +1 -1
  134. data/lib/postboost/models/free_tool_clean_text_response_changes_inner.rb +1 -1
  135. data/lib/postboost/models/free_tool_clean_text_response_flags_inner.rb +1 -1
  136. data/lib/postboost/models/free_tool_count_characters_request.rb +1 -1
  137. data/lib/postboost/models/free_tool_count_characters_response.rb +1 -1
  138. data/lib/postboost/models/free_tool_count_characters_response_networks_inner.rb +1 -1
  139. data/lib/postboost/models/free_tool_error.rb +14 -4
  140. data/lib/postboost/models/free_tool_format_linked_in_post_request.rb +1 -1
  141. data/lib/postboost/models/free_tool_format_linked_in_post_response.rb +1 -1
  142. data/lib/postboost/models/free_tool_generate_caption_request.rb +396 -0
  143. data/lib/postboost/models/free_tool_generate_caption_response.rb +237 -0
  144. data/lib/postboost/models/free_tool_generate_fancy_text_request.rb +1 -1
  145. data/lib/postboost/models/free_tool_generate_fancy_text_response.rb +1 -1
  146. data/lib/postboost/models/free_tool_generate_fancy_text_response_styles_inner.rb +1 -1
  147. data/lib/postboost/models/free_tool_generate_hashtags_request.rb +354 -0
  148. data/lib/postboost/models/free_tool_generate_hashtags_response.rb +237 -0
  149. data/lib/postboost/models/free_tool_list.rb +1 -1
  150. data/lib/postboost/models/free_tool_list_item.rb +1 -1
  151. data/lib/postboost/models/free_tool_split_thread_request.rb +1 -1
  152. data/lib/postboost/models/free_tool_split_thread_response.rb +1 -1
  153. data/lib/postboost/models/free_tool_split_thread_response_posts_inner.rb +1 -1
  154. data/lib/postboost/models/get_account_health200_response.rb +1 -1
  155. data/lib/postboost/models/get_brand_voice200_response.rb +1 -1
  156. data/lib/postboost/models/get_competitor200_response.rb +1 -1
  157. data/lib/postboost/models/get_inbox_conversation200_response.rb +1 -1
  158. data/lib/postboost/models/get_posting_schedule200_response.rb +1 -1
  159. data/lib/postboost/models/get_remote_upload_status200_response.rb +1 -1
  160. data/lib/postboost/models/get_report_branding200_response.rb +1 -1
  161. data/lib/postboost/models/get_repurpose_run200_response.rb +1 -1
  162. data/lib/postboost/models/guardrail_error.rb +1 -1
  163. data/lib/postboost/models/hashtag_group.rb +1 -1
  164. data/lib/postboost/models/hashtag_group_input.rb +1 -1
  165. data/lib/postboost/models/image_alt_text200_response.rb +1 -1
  166. data/lib/postboost/models/image_alt_text_input.rb +1 -1
  167. data/lib/postboost/models/image_alt_text_response.rb +1 -1
  168. data/lib/postboost/models/image_credit_balance.rb +1 -1
  169. data/lib/postboost/models/image_edit_input.rb +1 -1
  170. data/lib/postboost/models/image_generate200_response.rb +1 -1
  171. data/lib/postboost/models/image_generate429_response.rb +1 -1
  172. data/lib/postboost/models/image_generate_input.rb +1 -1
  173. data/lib/postboost/models/image_generation_response.rb +1 -1
  174. data/lib/postboost/models/image_prompt200_response.rb +1 -1
  175. data/lib/postboost/models/image_prompt429_response.rb +1 -1
  176. data/lib/postboost/models/image_prompt_input.rb +1 -1
  177. data/lib/postboost/models/image_prompt_response.rb +1 -1
  178. data/lib/postboost/models/image_variations200_response.rb +1 -1
  179. data/lib/postboost/models/image_variations_input.rb +1 -1
  180. data/lib/postboost/models/image_variations_response.rb +1 -1
  181. data/lib/postboost/models/inbox_author.rb +1 -1
  182. data/lib/postboost/models/inbox_conversation.rb +1 -1
  183. data/lib/postboost/models/inbox_conversation_account.rb +1 -1
  184. data/lib/postboost/models/inbox_conversation_update.rb +1 -1
  185. data/lib/postboost/models/inbox_message.rb +1 -1
  186. data/lib/postboost/models/inbox_message_author.rb +1 -1
  187. data/lib/postboost/models/inbox_reply_draft.rb +1 -1
  188. data/lib/postboost/models/inbox_reply_draft_approve.rb +1 -1
  189. data/lib/postboost/models/inbox_reply_draft_edit.rb +1 -1
  190. data/lib/postboost/models/inbox_reply_draft_input.rb +1 -1
  191. data/lib/postboost/models/initiate_chunked_upload201_response.rb +1 -1
  192. data/lib/postboost/models/initiate_chunked_upload_request.rb +1 -1
  193. data/lib/postboost/models/initiate_remote_upload201_response.rb +1 -1
  194. data/lib/postboost/models/initiate_remote_upload201_response_one_of.rb +1 -1
  195. data/lib/postboost/models/initiate_remote_upload_request.rb +1 -1
  196. data/lib/postboost/models/learn_brand_voice_input.rb +1 -1
  197. data/lib/postboost/models/learn_brand_voice_response.rb +1 -1
  198. data/lib/postboost/models/learn_brand_voice_response_meta.rb +1 -1
  199. data/lib/postboost/models/list_account_groups200_response.rb +1 -1
  200. data/lib/postboost/models/list_accounts200_response.rb +1 -1
  201. data/lib/postboost/models/list_agent_proposals200_response.rb +1 -1
  202. data/lib/postboost/models/list_agent_runs200_response.rb +1 -1
  203. data/lib/postboost/models/list_agents200_response.rb +1 -1
  204. data/lib/postboost/models/list_api_activity200_response.rb +1 -1
  205. data/lib/postboost/models/list_api_keys200_response.rb +1 -1
  206. data/lib/postboost/models/list_competitors200_response.rb +1 -1
  207. data/lib/postboost/models/list_hashtag_groups200_response.rb +1 -1
  208. data/lib/postboost/models/list_inbox_conversations200_response.rb +1 -1
  209. data/lib/postboost/models/list_inbox_reply_drafts200_response.rb +1 -1
  210. data/lib/postboost/models/list_media200_response.rb +1 -1
  211. data/lib/postboost/models/list_media_folders200_response.rb +1 -1
  212. data/lib/postboost/models/list_mentions200_response.rb +1 -1
  213. data/lib/postboost/models/list_my_workspaces200_response.rb +1 -1
  214. data/lib/postboost/models/list_posts200_response.rb +1 -1
  215. data/lib/postboost/models/list_receipts200_response.rb +1 -1
  216. data/lib/postboost/models/list_recycling_rules200_response.rb +1 -1
  217. data/lib/postboost/models/list_recycling_runs200_response.rb +1 -1
  218. data/lib/postboost/models/list_report_exports200_response.rb +1 -1
  219. data/lib/postboost/models/list_reseller_clients200_response.rb +1 -1
  220. data/lib/postboost/models/list_rss_feeds200_response.rb +1 -1
  221. data/lib/postboost/models/list_tags200_response.rb +1 -1
  222. data/lib/postboost/models/list_templates200_response.rb +1 -1
  223. data/lib/postboost/models/list_users200_response.rb +1 -1
  224. data/lib/postboost/models/list_webhook_subscriptions200_response.rb +1 -1
  225. data/lib/postboost/models/list_workspaces200_response.rb +1 -1
  226. data/lib/postboost/models/media.rb +1 -1
  227. data/lib/postboost/models/media_base64_input.rb +1 -1
  228. data/lib/postboost/models/media_folder.rb +1 -1
  229. data/lib/postboost/models/media_folder_input.rb +1 -1
  230. data/lib/postboost/models/media_folder_ref.rb +1 -1
  231. data/lib/postboost/models/mention.rb +1 -1
  232. data/lib/postboost/models/mention_identity.rb +1 -1
  233. data/lib/postboost/models/mention_identity_input.rb +1 -1
  234. data/lib/postboost/models/mention_input.rb +1 -1
  235. data/lib/postboost/models/message_only.rb +1 -1
  236. data/lib/postboost/models/pagination_meta.rb +1 -1
  237. data/lib/postboost/models/pagination_meta_links.rb +1 -1
  238. data/lib/postboost/models/pagination_meta_meta.rb +1 -1
  239. data/lib/postboost/models/poll_rss_feed200_response.rb +1 -1
  240. data/lib/postboost/models/post.rb +1 -1
  241. data/lib/postboost/models/post_analytics.rb +1 -1
  242. data/lib/postboost/models/post_content.rb +1 -1
  243. data/lib/postboost/models/post_input.rb +1 -1
  244. data/lib/postboost/models/post_options_instagram.rb +1 -1
  245. data/lib/postboost/models/post_options_tik_tok.rb +1 -1
  246. data/lib/postboost/models/post_options_youtube.rb +1 -1
  247. data/lib/postboost/models/post_status.rb +1 -1
  248. data/lib/postboost/models/post_version.rb +1 -1
  249. data/lib/postboost/models/post_version_options.rb +1 -1
  250. data/lib/postboost/models/post_warning.rb +1 -1
  251. data/lib/postboost/models/post_warnings.rb +1 -1
  252. data/lib/postboost/models/posting_schedule.rb +1 -1
  253. data/lib/postboost/models/posting_schedule_day.rb +1 -1
  254. data/lib/postboost/models/posting_schedule_day_times_inner.rb +1 -1
  255. data/lib/postboost/models/posting_schedule_input.rb +1 -1
  256. data/lib/postboost/models/posting_time_slot.rb +1 -1
  257. data/lib/postboost/models/posting_times.rb +1 -1
  258. data/lib/postboost/models/posting_times_best_inner.rb +1 -1
  259. data/lib/postboost/models/posting_times_day_intervals_inner_inner.rb +1 -1
  260. data/lib/postboost/models/posting_times_days_inner.rb +1 -1
  261. data/lib/postboost/models/preflight_result.rb +1 -1
  262. data/lib/postboost/models/public_workspace.rb +1 -1
  263. data/lib/postboost/models/public_workspace_pivot.rb +1 -1
  264. data/lib/postboost/models/publish_progress.rb +1 -1
  265. data/lib/postboost/models/queue_slots.rb +1 -1
  266. data/lib/postboost/models/receipt.rb +1 -1
  267. data/lib/postboost/models/receipt_input.rb +1 -1
  268. data/lib/postboost/models/receipt_update_input.rb +1 -1
  269. data/lib/postboost/models/recommended_posting_times.rb +1 -1
  270. data/lib/postboost/models/reconnect_link.rb +1 -1
  271. data/lib/postboost/models/recycling_rule.rb +1 -1
  272. data/lib/postboost/models/recycling_rule_input.rb +1 -1
  273. data/lib/postboost/models/recycling_rule_settings.rb +1 -1
  274. data/lib/postboost/models/recycling_rule_update.rb +1 -1
  275. data/lib/postboost/models/recycling_run.rb +1 -1
  276. data/lib/postboost/models/remove_generic_subscription422_response.rb +1 -1
  277. data/lib/postboost/models/remove_user_from_workspace_request.rb +1 -1
  278. data/lib/postboost/models/report_branding.rb +1 -1
  279. data/lib/postboost/models/report_branding_input.rb +1 -1
  280. data/lib/postboost/models/report_export.rb +1 -1
  281. data/lib/postboost/models/report_export_input.rb +1 -1
  282. data/lib/postboost/models/repurpose_content200_response.rb +1 -1
  283. data/lib/postboost/models/repurpose_content202_response.rb +1 -1
  284. data/lib/postboost/models/repurpose_content500_response.rb +1 -1
  285. data/lib/postboost/models/repurpose_input.rb +1 -1
  286. data/lib/postboost/models/repurpose_input_theme.rb +1 -1
  287. data/lib/postboost/models/repurpose_result.rb +1 -1
  288. data/lib/postboost/models/repurpose_result_media.rb +1 -1
  289. data/lib/postboost/models/repurpose_result_source.rb +1 -1
  290. data/lib/postboost/models/repurpose_run.rb +1 -1
  291. data/lib/postboost/models/repurpose_run_accepted.rb +1 -1
  292. data/lib/postboost/models/repurpose_slide.rb +1 -1
  293. data/lib/postboost/models/reseller_client.rb +1 -1
  294. data/lib/postboost/models/reseller_client_input.rb +1 -1
  295. data/lib/postboost/models/reseller_client_usage.rb +1 -1
  296. data/lib/postboost/models/retry_post_account_result.rb +1 -1
  297. data/lib/postboost/models/rss_feed.rb +1 -1
  298. data/lib/postboost/models/rss_feed_input.rb +1 -1
  299. data/lib/postboost/models/rss_feed_update.rb +1 -1
  300. data/lib/postboost/models/run_agent202_response.rb +1 -1
  301. data/lib/postboost/models/schedule_post_request.rb +1 -1
  302. data/lib/postboost/models/schedule_result.rb +1 -1
  303. data/lib/postboost/models/subscription.rb +1 -1
  304. data/lib/postboost/models/subscription_input.rb +1 -1
  305. data/lib/postboost/models/subscription_status.rb +1 -1
  306. data/lib/postboost/models/subscription_update_input.rb +1 -1
  307. data/lib/postboost/models/tag.rb +1 -1
  308. data/lib/postboost/models/tag_input.rb +1 -1
  309. data/lib/postboost/models/template.rb +1 -1
  310. data/lib/postboost/models/template_content_item.rb +1 -1
  311. data/lib/postboost/models/template_input.rb +1 -1
  312. data/lib/postboost/models/template_input_content_inner.rb +1 -1
  313. data/lib/postboost/models/update_media_request.rb +1 -1
  314. data/lib/postboost/models/update_post200_response.rb +1 -1
  315. data/lib/postboost/models/upload_chunk201_response.rb +1 -1
  316. data/lib/postboost/models/user.rb +1 -1
  317. data/lib/postboost/models/user_input.rb +1 -1
  318. data/lib/postboost/models/user_update_input.rb +1 -1
  319. data/lib/postboost/models/webhook_event_name.rb +1 -1
  320. data/lib/postboost/models/webhook_event_payload.rb +1 -1
  321. data/lib/postboost/models/webhook_subscription.rb +1 -1
  322. data/lib/postboost/models/webhook_subscription_input.rb +1 -1
  323. data/lib/postboost/models/workspace.rb +1 -1
  324. data/lib/postboost/models/workspace_agent.rb +1 -1
  325. data/lib/postboost/models/workspace_agent_input.rb +1 -1
  326. data/lib/postboost/models/workspace_agent_settings.rb +1 -1
  327. data/lib/postboost/models/workspace_agent_update.rb +1 -1
  328. data/lib/postboost/models/workspace_input.rb +1 -1
  329. data/lib/postboost/models/workspace_user_input.rb +1 -1
  330. data/lib/postboost/models/x_usage.rb +1 -1
  331. data/lib/postboost/models/x_usage_counter.rb +1 -1
  332. data/lib/postboost/version.rb +2 -2
  333. data/lib/postboost.rb +5 -1
  334. data/postboost.gemspec +1 -1
  335. data/spec/api/account_groups_api_spec.rb +1 -1
  336. data/spec/api/accounts_api_spec.rb +1 -1
  337. data/spec/api/activity_api_spec.rb +1 -1
  338. data/spec/api/agents_api_spec.rb +1 -1
  339. data/spec/api/ai_api_spec.rb +1 -1
  340. data/spec/api/analytics_api_spec.rb +1 -1
  341. data/spec/api/competitors_api_spec.rb +1 -1
  342. data/spec/api/free_tools_api_spec.rb +25 -1
  343. data/spec/api/hashtag_groups_api_spec.rb +1 -1
  344. data/spec/api/inbox_api_spec.rb +1 -1
  345. data/spec/api/media_api_spec.rb +1 -1
  346. data/spec/api/mentions_api_spec.rb +1 -1
  347. data/spec/api/posting_schedule_api_spec.rb +1 -1
  348. data/spec/api/posts_api_spec.rb +1 -1
  349. data/spec/api/receipts_api_spec.rb +1 -1
  350. data/spec/api/subscriptions_api_spec.rb +1 -1
  351. data/spec/api/tags_api_spec.rb +1 -1
  352. data/spec/api/templates_api_spec.rb +1 -1
  353. data/spec/api/users_api_spec.rb +1 -1
  354. data/spec/api/webhooks_api_spec.rb +1 -1
  355. data/spec/api/workspaces_api_spec.rb +1 -1
  356. data/spec/models/account_analytics_initial_sync_spec.rb +1 -1
  357. data/spec/models/account_analytics_spec.rb +1 -1
  358. data/spec/models/account_connection_health_spec.rb +1 -1
  359. data/spec/models/account_errors_inner_one_of_spec.rb +1 -1
  360. data/spec/models/account_errors_inner_spec.rb +1 -1
  361. data/spec/models/account_group_input_spec.rb +1 -1
  362. data/spec/models/account_group_spec.rb +1 -1
  363. data/spec/models/account_health_daily_cap_spec.rb +1 -1
  364. data/spec/models/account_health_spec.rb +1 -1
  365. data/spec/models/account_schedule_spec.rb +1 -1
  366. data/spec/models/account_spec.rb +1 -1
  367. data/spec/models/add_competitor202_response_spec.rb +1 -1
  368. data/spec/models/add_competitor409_response_spec.rb +1 -1
  369. data/spec/models/add_generic_subscription_request_spec.rb +1 -1
  370. data/spec/models/add_post_to_queue_request_spec.rb +1 -1
  371. data/spec/models/agent_page_meta_spec.rb +1 -1
  372. data/spec/models/agent_proposal_decision_spec.rb +1 -1
  373. data/spec/models/agent_proposal_spec.rb +1 -1
  374. data/spec/models/agent_run_spec.rb +1 -1
  375. data/spec/models/ai_credits_spec.rb +1 -1
  376. data/spec/models/ai_usage_spec.rb +1 -1
  377. data/spec/models/ai_usage_text_spec.rb +1 -1
  378. data/spec/models/analytics_period_spec.rb +1 -1
  379. data/spec/models/analytics_summary_data_spec.rb +1 -1
  380. data/spec/models/analytics_summary_spec.rb +1 -1
  381. data/spec/models/api_activity_outcome_spec.rb +1 -1
  382. data/spec/models/api_activity_spec.rb +1 -1
  383. data/spec/models/api_key_ability_spec.rb +1 -1
  384. data/spec/models/api_key_input_spec.rb +1 -1
  385. data/spec/models/api_key_spec.rb +1 -1
  386. data/spec/models/approve_agent_proposal200_response_spec.rb +1 -1
  387. data/spec/models/approve_agent_proposal409_response_spec.rb +1 -1
  388. data/spec/models/approve_inbox_reply_draft403_response_spec.rb +1 -1
  389. data/spec/models/approve_post_request_spec.rb +1 -1
  390. data/spec/models/best_posting_times_spec.rb +1 -1
  391. data/spec/models/best_posting_times_times_inner_spec.rb +1 -1
  392. data/spec/models/blog_to_social200_response_spec.rb +1 -1
  393. data/spec/models/blog_to_social429_response_spec.rb +1 -1
  394. data/spec/models/blog_to_social_caption_spec.rb +1 -1
  395. data/spec/models/blog_to_social_input_spec.rb +1 -1
  396. data/spec/models/blog_to_social_media_spec.rb +1 -1
  397. data/spec/models/blog_to_social_response_spec.rb +1 -1
  398. data/spec/models/brand_voice_input_spec.rb +1 -1
  399. data/spec/models/brand_voice_meta_spec.rb +1 -1
  400. data/spec/models/brand_voice_spec.rb +1 -1
  401. data/spec/models/cancel_subscription422_response_errors_spec.rb +1 -1
  402. data/spec/models/cancel_subscription422_response_spec.rb +1 -1
  403. data/spec/models/cancel_subscription_request_spec.rb +1 -1
  404. data/spec/models/change_subscription_plan_request_spec.rb +1 -1
  405. data/spec/models/channel_account_spec.rb +1 -1
  406. data/spec/models/checkout_subscription200_response_spec.rb +1 -1
  407. data/spec/models/checkout_subscription_request_spec.rb +1 -1
  408. data/spec/models/coded_error_spec.rb +1 -1
  409. data/spec/models/competitor_detail_spec.rb +1 -1
  410. data/spec/models/competitor_input_spec.rb +1 -1
  411. data/spec/models/competitor_media_spec.rb +1 -1
  412. data/spec/models/competitor_snapshot_spec.rb +1 -1
  413. data/spec/models/competitor_spec.rb +1 -1
  414. data/spec/models/complete_chunked_upload_request_spec.rb +1 -1
  415. data/spec/models/connect_channel_input_spec.rb +1 -1
  416. data/spec/models/connect_link_spec.rb +1 -1
  417. data/spec/models/create_account_group201_response_spec.rb +1 -1
  418. data/spec/models/create_agent201_response_spec.rb +1 -1
  419. data/spec/models/create_api_key201_response_data_spec.rb +1 -1
  420. data/spec/models/create_api_key201_response_spec.rb +1 -1
  421. data/spec/models/create_connect_link_request_spec.rb +1 -1
  422. data/spec/models/create_hashtag_group201_response_spec.rb +1 -1
  423. data/spec/models/create_inbox_reply_draft201_response_spec.rb +1 -1
  424. data/spec/models/create_media_folder_request_spec.rb +1 -1
  425. data/spec/models/create_mention201_response_spec.rb +1 -1
  426. data/spec/models/create_post201_response_spec.rb +1 -1
  427. data/spec/models/create_recycling_rule201_response_spec.rb +1 -1
  428. data/spec/models/create_report_export201_response_spec.rb +1 -1
  429. data/spec/models/create_reseller_client201_response_spec.rb +1 -1
  430. data/spec/models/create_rss_feed201_response_spec.rb +1 -1
  431. data/spec/models/create_template201_response_spec.rb +1 -1
  432. data/spec/models/create_webhook_subscription201_response_data_spec.rb +1 -1
  433. data/spec/models/create_webhook_subscription201_response_spec.rb +1 -1
  434. data/spec/models/delete_agent200_response_spec.rb +1 -1
  435. data/spec/models/delete_media_bulk_request_items_inner_spec.rb +1 -1
  436. data/spec/models/delete_media_bulk_request_spec.rb +1 -1
  437. data/spec/models/delete_media_folder_request_spec.rb +1 -1
  438. data/spec/models/delete_mode_spec.rb +1 -1
  439. data/spec/models/delete_post_request_spec.rb +1 -1
  440. data/spec/models/delete_posts_bulk_request_spec.rb +1 -1
  441. data/spec/models/delete_receipts_bulk_request_spec.rb +1 -1
  442. data/spec/models/delete_result_spec.rb +1 -1
  443. data/spec/models/delete_user400_response_spec.rb +1 -1
  444. data/spec/models/delete_users_bulk_request_spec.rb +1 -1
  445. data/spec/models/delete_workspaces_bulk_request_spec.rb +1 -1
  446. data/spec/models/free_tool_build_utm_url_request_spec.rb +1 -1
  447. data/spec/models/free_tool_build_utm_url_response_spec.rb +1 -1
  448. data/spec/models/free_tool_calculate_engagement_rate_request_spec.rb +1 -1
  449. data/spec/models/free_tool_calculate_engagement_rate_response_spec.rb +1 -1
  450. data/spec/models/free_tool_check_post_request_media_spec.rb +1 -1
  451. data/spec/models/free_tool_check_post_request_spec.rb +1 -1
  452. data/spec/models/free_tool_check_post_response_networks_inner_errors_inner_spec.rb +1 -1
  453. data/spec/models/free_tool_check_post_response_networks_inner_spec.rb +1 -1
  454. data/spec/models/free_tool_check_post_response_spec.rb +1 -1
  455. data/spec/models/free_tool_clean_text_request_spec.rb +1 -1
  456. data/spec/models/free_tool_clean_text_response_changes_inner_spec.rb +1 -1
  457. data/spec/models/free_tool_clean_text_response_flags_inner_spec.rb +1 -1
  458. data/spec/models/free_tool_clean_text_response_spec.rb +1 -1
  459. data/spec/models/free_tool_count_characters_request_spec.rb +1 -1
  460. data/spec/models/free_tool_count_characters_response_networks_inner_spec.rb +1 -1
  461. data/spec/models/free_tool_count_characters_response_spec.rb +1 -1
  462. data/spec/models/free_tool_error_spec.rb +7 -1
  463. data/spec/models/free_tool_format_linked_in_post_request_spec.rb +1 -1
  464. data/spec/models/free_tool_format_linked_in_post_response_spec.rb +1 -1
  465. data/spec/models/free_tool_generate_caption_request_spec.rb +84 -0
  466. data/spec/models/free_tool_generate_caption_response_spec.rb +48 -0
  467. data/spec/models/free_tool_generate_fancy_text_request_spec.rb +1 -1
  468. data/spec/models/free_tool_generate_fancy_text_response_spec.rb +1 -1
  469. data/spec/models/free_tool_generate_fancy_text_response_styles_inner_spec.rb +1 -1
  470. data/spec/models/free_tool_generate_hashtags_request_spec.rb +58 -0
  471. data/spec/models/free_tool_generate_hashtags_response_spec.rb +48 -0
  472. data/spec/models/free_tool_list_item_spec.rb +1 -1
  473. data/spec/models/free_tool_list_spec.rb +1 -1
  474. data/spec/models/free_tool_split_thread_request_spec.rb +1 -1
  475. data/spec/models/free_tool_split_thread_response_posts_inner_spec.rb +1 -1
  476. data/spec/models/free_tool_split_thread_response_spec.rb +1 -1
  477. data/spec/models/get_account_health200_response_spec.rb +1 -1
  478. data/spec/models/get_brand_voice200_response_spec.rb +1 -1
  479. data/spec/models/get_competitor200_response_spec.rb +1 -1
  480. data/spec/models/get_inbox_conversation200_response_spec.rb +1 -1
  481. data/spec/models/get_posting_schedule200_response_spec.rb +1 -1
  482. data/spec/models/get_remote_upload_status200_response_spec.rb +1 -1
  483. data/spec/models/get_report_branding200_response_spec.rb +1 -1
  484. data/spec/models/get_repurpose_run200_response_spec.rb +1 -1
  485. data/spec/models/guardrail_error_spec.rb +1 -1
  486. data/spec/models/hashtag_group_input_spec.rb +1 -1
  487. data/spec/models/hashtag_group_spec.rb +1 -1
  488. data/spec/models/image_alt_text200_response_spec.rb +1 -1
  489. data/spec/models/image_alt_text_input_spec.rb +1 -1
  490. data/spec/models/image_alt_text_response_spec.rb +1 -1
  491. data/spec/models/image_credit_balance_spec.rb +1 -1
  492. data/spec/models/image_edit_input_spec.rb +1 -1
  493. data/spec/models/image_generate200_response_spec.rb +1 -1
  494. data/spec/models/image_generate429_response_spec.rb +1 -1
  495. data/spec/models/image_generate_input_spec.rb +1 -1
  496. data/spec/models/image_generation_response_spec.rb +1 -1
  497. data/spec/models/image_prompt200_response_spec.rb +1 -1
  498. data/spec/models/image_prompt429_response_spec.rb +1 -1
  499. data/spec/models/image_prompt_input_spec.rb +1 -1
  500. data/spec/models/image_prompt_response_spec.rb +1 -1
  501. data/spec/models/image_variations200_response_spec.rb +1 -1
  502. data/spec/models/image_variations_input_spec.rb +1 -1
  503. data/spec/models/image_variations_response_spec.rb +1 -1
  504. data/spec/models/inbox_author_spec.rb +1 -1
  505. data/spec/models/inbox_conversation_account_spec.rb +1 -1
  506. data/spec/models/inbox_conversation_spec.rb +1 -1
  507. data/spec/models/inbox_conversation_update_spec.rb +1 -1
  508. data/spec/models/inbox_message_author_spec.rb +1 -1
  509. data/spec/models/inbox_message_spec.rb +1 -1
  510. data/spec/models/inbox_reply_draft_approve_spec.rb +1 -1
  511. data/spec/models/inbox_reply_draft_edit_spec.rb +1 -1
  512. data/spec/models/inbox_reply_draft_input_spec.rb +1 -1
  513. data/spec/models/inbox_reply_draft_spec.rb +1 -1
  514. data/spec/models/initiate_chunked_upload201_response_spec.rb +1 -1
  515. data/spec/models/initiate_chunked_upload_request_spec.rb +1 -1
  516. data/spec/models/initiate_remote_upload201_response_one_of_spec.rb +1 -1
  517. data/spec/models/initiate_remote_upload201_response_spec.rb +1 -1
  518. data/spec/models/initiate_remote_upload_request_spec.rb +1 -1
  519. data/spec/models/learn_brand_voice_input_spec.rb +1 -1
  520. data/spec/models/learn_brand_voice_response_meta_spec.rb +1 -1
  521. data/spec/models/learn_brand_voice_response_spec.rb +1 -1
  522. data/spec/models/list_account_groups200_response_spec.rb +1 -1
  523. data/spec/models/list_accounts200_response_spec.rb +1 -1
  524. data/spec/models/list_agent_proposals200_response_spec.rb +1 -1
  525. data/spec/models/list_agent_runs200_response_spec.rb +1 -1
  526. data/spec/models/list_agents200_response_spec.rb +1 -1
  527. data/spec/models/list_api_activity200_response_spec.rb +1 -1
  528. data/spec/models/list_api_keys200_response_spec.rb +1 -1
  529. data/spec/models/list_competitors200_response_spec.rb +1 -1
  530. data/spec/models/list_hashtag_groups200_response_spec.rb +1 -1
  531. data/spec/models/list_inbox_conversations200_response_spec.rb +1 -1
  532. data/spec/models/list_inbox_reply_drafts200_response_spec.rb +1 -1
  533. data/spec/models/list_media200_response_spec.rb +1 -1
  534. data/spec/models/list_media_folders200_response_spec.rb +1 -1
  535. data/spec/models/list_mentions200_response_spec.rb +1 -1
  536. data/spec/models/list_my_workspaces200_response_spec.rb +1 -1
  537. data/spec/models/list_posts200_response_spec.rb +1 -1
  538. data/spec/models/list_receipts200_response_spec.rb +1 -1
  539. data/spec/models/list_recycling_rules200_response_spec.rb +1 -1
  540. data/spec/models/list_recycling_runs200_response_spec.rb +1 -1
  541. data/spec/models/list_report_exports200_response_spec.rb +1 -1
  542. data/spec/models/list_reseller_clients200_response_spec.rb +1 -1
  543. data/spec/models/list_rss_feeds200_response_spec.rb +1 -1
  544. data/spec/models/list_tags200_response_spec.rb +1 -1
  545. data/spec/models/list_templates200_response_spec.rb +1 -1
  546. data/spec/models/list_users200_response_spec.rb +1 -1
  547. data/spec/models/list_webhook_subscriptions200_response_spec.rb +1 -1
  548. data/spec/models/list_workspaces200_response_spec.rb +1 -1
  549. data/spec/models/media_base64_input_spec.rb +1 -1
  550. data/spec/models/media_folder_input_spec.rb +1 -1
  551. data/spec/models/media_folder_ref_spec.rb +1 -1
  552. data/spec/models/media_folder_spec.rb +1 -1
  553. data/spec/models/media_spec.rb +1 -1
  554. data/spec/models/mention_identity_input_spec.rb +1 -1
  555. data/spec/models/mention_identity_spec.rb +1 -1
  556. data/spec/models/mention_input_spec.rb +1 -1
  557. data/spec/models/mention_spec.rb +1 -1
  558. data/spec/models/message_only_spec.rb +1 -1
  559. data/spec/models/pagination_meta_links_spec.rb +1 -1
  560. data/spec/models/pagination_meta_meta_spec.rb +1 -1
  561. data/spec/models/pagination_meta_spec.rb +1 -1
  562. data/spec/models/poll_rss_feed200_response_spec.rb +1 -1
  563. data/spec/models/post_analytics_spec.rb +1 -1
  564. data/spec/models/post_content_spec.rb +1 -1
  565. data/spec/models/post_input_spec.rb +1 -1
  566. data/spec/models/post_options_instagram_spec.rb +1 -1
  567. data/spec/models/post_options_tik_tok_spec.rb +1 -1
  568. data/spec/models/post_options_youtube_spec.rb +1 -1
  569. data/spec/models/post_spec.rb +1 -1
  570. data/spec/models/post_status_spec.rb +1 -1
  571. data/spec/models/post_version_options_spec.rb +1 -1
  572. data/spec/models/post_version_spec.rb +1 -1
  573. data/spec/models/post_warning_spec.rb +1 -1
  574. data/spec/models/post_warnings_spec.rb +1 -1
  575. data/spec/models/posting_schedule_day_spec.rb +1 -1
  576. data/spec/models/posting_schedule_day_times_inner_spec.rb +1 -1
  577. data/spec/models/posting_schedule_input_spec.rb +1 -1
  578. data/spec/models/posting_schedule_spec.rb +1 -1
  579. data/spec/models/posting_time_slot_spec.rb +1 -1
  580. data/spec/models/posting_times_best_inner_spec.rb +1 -1
  581. data/spec/models/posting_times_day_intervals_inner_inner_spec.rb +1 -1
  582. data/spec/models/posting_times_days_inner_spec.rb +1 -1
  583. data/spec/models/posting_times_spec.rb +1 -1
  584. data/spec/models/preflight_result_spec.rb +1 -1
  585. data/spec/models/public_workspace_pivot_spec.rb +1 -1
  586. data/spec/models/public_workspace_spec.rb +1 -1
  587. data/spec/models/publish_progress_spec.rb +1 -1
  588. data/spec/models/queue_slots_spec.rb +1 -1
  589. data/spec/models/receipt_input_spec.rb +1 -1
  590. data/spec/models/receipt_spec.rb +1 -1
  591. data/spec/models/receipt_update_input_spec.rb +1 -1
  592. data/spec/models/recommended_posting_times_spec.rb +1 -1
  593. data/spec/models/reconnect_link_spec.rb +1 -1
  594. data/spec/models/recycling_rule_input_spec.rb +1 -1
  595. data/spec/models/recycling_rule_settings_spec.rb +1 -1
  596. data/spec/models/recycling_rule_spec.rb +1 -1
  597. data/spec/models/recycling_rule_update_spec.rb +1 -1
  598. data/spec/models/recycling_run_spec.rb +1 -1
  599. data/spec/models/remove_generic_subscription422_response_spec.rb +1 -1
  600. data/spec/models/remove_user_from_workspace_request_spec.rb +1 -1
  601. data/spec/models/report_branding_input_spec.rb +1 -1
  602. data/spec/models/report_branding_spec.rb +1 -1
  603. data/spec/models/report_export_input_spec.rb +1 -1
  604. data/spec/models/report_export_spec.rb +1 -1
  605. data/spec/models/repurpose_content200_response_spec.rb +1 -1
  606. data/spec/models/repurpose_content202_response_spec.rb +1 -1
  607. data/spec/models/repurpose_content500_response_spec.rb +1 -1
  608. data/spec/models/repurpose_input_spec.rb +1 -1
  609. data/spec/models/repurpose_input_theme_spec.rb +1 -1
  610. data/spec/models/repurpose_result_media_spec.rb +1 -1
  611. data/spec/models/repurpose_result_source_spec.rb +1 -1
  612. data/spec/models/repurpose_result_spec.rb +1 -1
  613. data/spec/models/repurpose_run_accepted_spec.rb +1 -1
  614. data/spec/models/repurpose_run_spec.rb +1 -1
  615. data/spec/models/repurpose_slide_spec.rb +1 -1
  616. data/spec/models/reseller_client_input_spec.rb +1 -1
  617. data/spec/models/reseller_client_spec.rb +1 -1
  618. data/spec/models/reseller_client_usage_spec.rb +1 -1
  619. data/spec/models/retry_post_account_result_spec.rb +1 -1
  620. data/spec/models/rss_feed_input_spec.rb +1 -1
  621. data/spec/models/rss_feed_spec.rb +1 -1
  622. data/spec/models/rss_feed_update_spec.rb +1 -1
  623. data/spec/models/run_agent202_response_spec.rb +1 -1
  624. data/spec/models/schedule_post_request_spec.rb +1 -1
  625. data/spec/models/schedule_result_spec.rb +1 -1
  626. data/spec/models/subscription_input_spec.rb +1 -1
  627. data/spec/models/subscription_spec.rb +1 -1
  628. data/spec/models/subscription_status_spec.rb +1 -1
  629. data/spec/models/subscription_update_input_spec.rb +1 -1
  630. data/spec/models/tag_input_spec.rb +1 -1
  631. data/spec/models/tag_spec.rb +1 -1
  632. data/spec/models/template_content_item_spec.rb +1 -1
  633. data/spec/models/template_input_content_inner_spec.rb +1 -1
  634. data/spec/models/template_input_spec.rb +1 -1
  635. data/spec/models/template_spec.rb +1 -1
  636. data/spec/models/update_media_request_spec.rb +1 -1
  637. data/spec/models/update_post200_response_spec.rb +1 -1
  638. data/spec/models/upload_chunk201_response_spec.rb +1 -1
  639. data/spec/models/user_input_spec.rb +1 -1
  640. data/spec/models/user_spec.rb +1 -1
  641. data/spec/models/user_update_input_spec.rb +1 -1
  642. data/spec/models/webhook_event_name_spec.rb +1 -1
  643. data/spec/models/webhook_event_payload_spec.rb +1 -1
  644. data/spec/models/webhook_subscription_input_spec.rb +1 -1
  645. data/spec/models/webhook_subscription_spec.rb +1 -1
  646. data/spec/models/workspace_agent_input_spec.rb +1 -1
  647. data/spec/models/workspace_agent_settings_spec.rb +1 -1
  648. data/spec/models/workspace_agent_spec.rb +1 -1
  649. data/spec/models/workspace_agent_update_spec.rb +1 -1
  650. data/spec/models/workspace_input_spec.rb +1 -1
  651. data/spec/models/workspace_spec.rb +1 -1
  652. data/spec/models/workspace_user_input_spec.rb +1 -1
  653. data/spec/models/x_usage_counter_spec.rb +1 -1
  654. data/spec/models/x_usage_spec.rb +1 -1
  655. data/spec/spec_helper.rb +1 -1
  656. metadata +17 -1
@@ -0,0 +1,396 @@
1
+ =begin
2
+ #PostBoost API
3
+
4
+ #The PostBoost REST API lets you publish, schedule, and analyze social media posts on every supported network 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.29.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 'date'
14
+ require 'time'
15
+
16
+ module PostBoost
17
+ class FreeToolGenerateCaptionRequest
18
+ # What the post is about.
19
+ attr_accessor :text
20
+
21
+ attr_accessor :tone
22
+
23
+ # short: 10-20 words, medium: 25-40, long: 45-60.
24
+ attr_accessor :length
25
+
26
+ # Use a few fitting emoji.
27
+ attr_accessor :emoji
28
+
29
+ # End each caption with 3-5 relevant hashtags.
30
+ attr_accessor :hashtags
31
+
32
+ # The network the text is written for.
33
+ attr_accessor :network
34
+
35
+ # UUID of the workspace whose AI credits pay for the call. Default: your active workspace (a scoped API key: its own workspace).
36
+ attr_accessor :workspace
37
+
38
+ class EnumAttributeValidator
39
+ attr_reader :datatype
40
+ attr_reader :allowable_values
41
+
42
+ def initialize(datatype, allowable_values)
43
+ @allowable_values = allowable_values.map do |value|
44
+ case datatype.to_s
45
+ when /Integer/i
46
+ value.to_i
47
+ when /Float/i
48
+ value.to_f
49
+ else
50
+ value
51
+ end
52
+ end
53
+ end
54
+
55
+ def valid?(value)
56
+ !value || allowable_values.include?(value)
57
+ end
58
+ end
59
+
60
+ # Attribute mapping from ruby-style variable name to JSON key.
61
+ def self.attribute_map
62
+ {
63
+ :'text' => :'text',
64
+ :'tone' => :'tone',
65
+ :'length' => :'length',
66
+ :'emoji' => :'emoji',
67
+ :'hashtags' => :'hashtags',
68
+ :'network' => :'network',
69
+ :'workspace' => :'workspace'
70
+ }
71
+ end
72
+
73
+ # Returns all the JSON keys this model knows about
74
+ def self.acceptable_attributes
75
+ attribute_map.values
76
+ end
77
+
78
+ # Attribute type mapping.
79
+ def self.openapi_types
80
+ {
81
+ :'text' => :'String',
82
+ :'tone' => :'String',
83
+ :'length' => :'String',
84
+ :'emoji' => :'Boolean',
85
+ :'hashtags' => :'Boolean',
86
+ :'network' => :'String',
87
+ :'workspace' => :'String'
88
+ }
89
+ end
90
+
91
+ # List of attributes with nullable: true
92
+ def self.openapi_nullable
93
+ Set.new([
94
+ ])
95
+ end
96
+
97
+ # Initializes the object
98
+ # @param [Hash] attributes Model attributes in the form of hash
99
+ def initialize(attributes = {})
100
+ if (!attributes.is_a?(Hash))
101
+ fail ArgumentError, "The input argument (attributes) must be a hash in `PostBoost::FreeToolGenerateCaptionRequest` initialize method"
102
+ end
103
+
104
+ # check to see if the attribute exists and convert string to symbol for hash key
105
+ attributes = attributes.each_with_object({}) { |(k, v), h|
106
+ if (!self.class.attribute_map.key?(k.to_sym))
107
+ fail ArgumentError, "`#{k}` is not a valid attribute in `PostBoost::FreeToolGenerateCaptionRequest`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
108
+ end
109
+ h[k.to_sym] = v
110
+ }
111
+
112
+ if attributes.key?(:'text')
113
+ self.text = attributes[:'text']
114
+ else
115
+ self.text = nil
116
+ end
117
+
118
+ if attributes.key?(:'tone')
119
+ self.tone = attributes[:'tone']
120
+ else
121
+ self.tone = 'friendly'
122
+ end
123
+
124
+ if attributes.key?(:'length')
125
+ self.length = attributes[:'length']
126
+ else
127
+ self.length = 'medium'
128
+ end
129
+
130
+ if attributes.key?(:'emoji')
131
+ self.emoji = attributes[:'emoji']
132
+ else
133
+ self.emoji = true
134
+ end
135
+
136
+ if attributes.key?(:'hashtags')
137
+ self.hashtags = attributes[:'hashtags']
138
+ else
139
+ self.hashtags = false
140
+ end
141
+
142
+ if attributes.key?(:'network')
143
+ self.network = attributes[:'network']
144
+ else
145
+ self.network = 'instagram'
146
+ end
147
+
148
+ if attributes.key?(:'workspace')
149
+ self.workspace = attributes[:'workspace']
150
+ end
151
+ end
152
+
153
+ # Show invalid properties with the reasons. Usually used together with valid?
154
+ # @return Array for valid properties with the reasons
155
+ def list_invalid_properties
156
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
157
+ invalid_properties = Array.new
158
+ if @text.nil?
159
+ invalid_properties.push('invalid value for "text", text cannot be nil.')
160
+ end
161
+
162
+ if @text.to_s.length > 1000
163
+ invalid_properties.push('invalid value for "text", the character length must be smaller than or equal to 1000.')
164
+ end
165
+
166
+ if @text.to_s.length < 1
167
+ invalid_properties.push('invalid value for "text", the character length must be great than or equal to 1.')
168
+ end
169
+
170
+ if !@workspace.nil? && @workspace.to_s.length > 64
171
+ invalid_properties.push('invalid value for "workspace", the character length must be smaller than or equal to 64.')
172
+ end
173
+
174
+ invalid_properties
175
+ end
176
+
177
+ # Check to see if the all the properties in the model are valid
178
+ # @return true if the model is valid
179
+ def valid?
180
+ warn '[DEPRECATED] the `valid?` method is obsolete'
181
+ return false if @text.nil?
182
+ return false if @text.to_s.length > 1000
183
+ return false if @text.to_s.length < 1
184
+ tone_validator = EnumAttributeValidator.new('String', ["friendly", "professional", "playful", "inspirational", "bold"])
185
+ return false unless tone_validator.valid?(@tone)
186
+ length_validator = EnumAttributeValidator.new('String', ["short", "medium", "long"])
187
+ return false unless length_validator.valid?(@length)
188
+ network_validator = EnumAttributeValidator.new('String', ["instagram", "tiktok", "linkedin", "x", "threads", "facebook"])
189
+ return false unless network_validator.valid?(@network)
190
+ return false if !@workspace.nil? && @workspace.to_s.length > 64
191
+ true
192
+ end
193
+
194
+ # Custom attribute writer method with validation
195
+ # @param [Object] text Value to be assigned
196
+ def text=(text)
197
+ if text.nil?
198
+ fail ArgumentError, 'text cannot be nil'
199
+ end
200
+
201
+ if text.to_s.length > 1000
202
+ fail ArgumentError, 'invalid value for "text", the character length must be smaller than or equal to 1000.'
203
+ end
204
+
205
+ if text.to_s.length < 1
206
+ fail ArgumentError, 'invalid value for "text", the character length must be great than or equal to 1.'
207
+ end
208
+
209
+ @text = text
210
+ end
211
+
212
+ # Custom attribute writer method checking allowed values (enum).
213
+ # @param [Object] tone Object to be assigned
214
+ def tone=(tone)
215
+ validator = EnumAttributeValidator.new('String', ["friendly", "professional", "playful", "inspirational", "bold"])
216
+ unless validator.valid?(tone)
217
+ fail ArgumentError, "invalid value for \"tone\", must be one of #{validator.allowable_values}."
218
+ end
219
+ @tone = tone
220
+ end
221
+
222
+ # Custom attribute writer method checking allowed values (enum).
223
+ # @param [Object] length Object to be assigned
224
+ def length=(length)
225
+ validator = EnumAttributeValidator.new('String', ["short", "medium", "long"])
226
+ unless validator.valid?(length)
227
+ fail ArgumentError, "invalid value for \"length\", must be one of #{validator.allowable_values}."
228
+ end
229
+ @length = length
230
+ end
231
+
232
+ # Custom attribute writer method checking allowed values (enum).
233
+ # @param [Object] network Object to be assigned
234
+ def network=(network)
235
+ validator = EnumAttributeValidator.new('String', ["instagram", "tiktok", "linkedin", "x", "threads", "facebook"])
236
+ unless validator.valid?(network)
237
+ fail ArgumentError, "invalid value for \"network\", must be one of #{validator.allowable_values}."
238
+ end
239
+ @network = network
240
+ end
241
+
242
+ # Custom attribute writer method with validation
243
+ # @param [Object] workspace Value to be assigned
244
+ def workspace=(workspace)
245
+ if workspace.nil?
246
+ fail ArgumentError, 'workspace cannot be nil'
247
+ end
248
+
249
+ if workspace.to_s.length > 64
250
+ fail ArgumentError, 'invalid value for "workspace", the character length must be smaller than or equal to 64.'
251
+ end
252
+
253
+ @workspace = workspace
254
+ end
255
+
256
+ # Checks equality by comparing each attribute.
257
+ # @param [Object] Object to be compared
258
+ def ==(o)
259
+ return true if self.equal?(o)
260
+ self.class == o.class &&
261
+ text == o.text &&
262
+ tone == o.tone &&
263
+ length == o.length &&
264
+ emoji == o.emoji &&
265
+ hashtags == o.hashtags &&
266
+ network == o.network &&
267
+ workspace == o.workspace
268
+ end
269
+
270
+ # @see the `==` method
271
+ # @param [Object] Object to be compared
272
+ def eql?(o)
273
+ self == o
274
+ end
275
+
276
+ # Calculates hash code according to all attributes.
277
+ # @return [Integer] Hash code
278
+ def hash
279
+ [text, tone, length, emoji, hashtags, network, workspace].hash
280
+ end
281
+
282
+ # Builds the object from hash
283
+ # @param [Hash] attributes Model attributes in the form of hash
284
+ # @return [Object] Returns the model itself
285
+ def self.build_from_hash(attributes)
286
+ return nil unless attributes.is_a?(Hash)
287
+ attributes = attributes.transform_keys(&:to_sym)
288
+ transformed_hash = {}
289
+ openapi_types.each_pair do |key, type|
290
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
291
+ transformed_hash["#{key}"] = nil
292
+ elsif type =~ /\AArray<(.*)>/i
293
+ # check to ensure the input is an array given that the attribute
294
+ # is documented as an array but the input is not
295
+ if attributes[attribute_map[key]].is_a?(Array)
296
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
297
+ end
298
+ elsif !attributes[attribute_map[key]].nil?
299
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
300
+ end
301
+ end
302
+ new(transformed_hash)
303
+ end
304
+
305
+ # Deserializes the data based on type
306
+ # @param string type Data type
307
+ # @param string value Value to be deserialized
308
+ # @return [Object] Deserialized data
309
+ def self._deserialize(type, value)
310
+ case type.to_sym
311
+ when :Time
312
+ Time.parse(value)
313
+ when :Date
314
+ Date.parse(value)
315
+ when :String
316
+ value.to_s
317
+ when :Integer
318
+ value.to_i
319
+ when :Float
320
+ value.to_f
321
+ when :Boolean
322
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
323
+ true
324
+ else
325
+ false
326
+ end
327
+ when :Object
328
+ # generic object (usually a Hash), return directly
329
+ value
330
+ when /\AArray<(?<inner_type>.+)>\z/
331
+ inner_type = Regexp.last_match[:inner_type]
332
+ value.map { |v| _deserialize(inner_type, v) }
333
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
334
+ k_type = Regexp.last_match[:k_type]
335
+ v_type = Regexp.last_match[:v_type]
336
+ {}.tap do |hash|
337
+ value.each do |k, v|
338
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
339
+ end
340
+ end
341
+ else # model
342
+ # models (e.g. Pet) or oneOf
343
+ klass = PostBoost.const_get(type)
344
+ klass.respond_to?(:openapi_any_of) || klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
345
+ end
346
+ end
347
+
348
+ # Returns the string representation of the object
349
+ # @return [String] String presentation of the object
350
+ def to_s
351
+ to_hash.to_s
352
+ end
353
+
354
+ # to_body is an alias to to_hash (backward compatibility)
355
+ # @return [Hash] Returns the object in the form of hash
356
+ def to_body
357
+ to_hash
358
+ end
359
+
360
+ # Returns the object in the form of hash
361
+ # @return [Hash] Returns the object in the form of hash
362
+ def to_hash
363
+ hash = {}
364
+ self.class.attribute_map.each_pair do |attr, param|
365
+ value = self.send(attr)
366
+ if value.nil?
367
+ is_nullable = self.class.openapi_nullable.include?(attr)
368
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
369
+ end
370
+
371
+ hash[param] = _to_hash(value)
372
+ end
373
+ hash
374
+ end
375
+
376
+ # Outputs non-array value in the form of hash
377
+ # For object, use to_hash. Otherwise, just return the value
378
+ # @param [Object] value Any valid value
379
+ # @return [Hash] Returns the value in the form of hash
380
+ def _to_hash(value)
381
+ if value.is_a?(Array)
382
+ value.compact.map { |v| _to_hash(v) }
383
+ elsif value.is_a?(Hash)
384
+ {}.tap do |hash|
385
+ value.each { |k, v| hash[k] = _to_hash(v) }
386
+ end
387
+ elsif value.respond_to? :to_hash
388
+ value.to_hash
389
+ else
390
+ value
391
+ end
392
+ end
393
+
394
+ end
395
+
396
+ end
@@ -0,0 +1,237 @@
1
+ =begin
2
+ #PostBoost API
3
+
4
+ #The PostBoost REST API lets you publish, schedule, and analyze social media posts on every supported network 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.29.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 'date'
14
+ require 'time'
15
+
16
+ module PostBoost
17
+ class FreeToolGenerateCaptionResponse
18
+ # Three different captions.
19
+ attr_accessor :captions
20
+
21
+ # AI credits this call took from the workspace: 1, or 0 for a cached result.
22
+ attr_accessor :credits_spent
23
+
24
+ # True when the same request was answered before (free).
25
+ attr_accessor :cached
26
+
27
+ # Attribute mapping from ruby-style variable name to JSON key.
28
+ def self.attribute_map
29
+ {
30
+ :'captions' => :'captions',
31
+ :'credits_spent' => :'credits_spent',
32
+ :'cached' => :'cached'
33
+ }
34
+ end
35
+
36
+ # Returns all the JSON keys this model knows about
37
+ def self.acceptable_attributes
38
+ attribute_map.values
39
+ end
40
+
41
+ # Attribute type mapping.
42
+ def self.openapi_types
43
+ {
44
+ :'captions' => :'Array<String>',
45
+ :'credits_spent' => :'Integer',
46
+ :'cached' => :'Boolean'
47
+ }
48
+ end
49
+
50
+ # List of attributes with nullable: true
51
+ def self.openapi_nullable
52
+ Set.new([
53
+ ])
54
+ end
55
+
56
+ # Initializes the object
57
+ # @param [Hash] attributes Model attributes in the form of hash
58
+ def initialize(attributes = {})
59
+ if (!attributes.is_a?(Hash))
60
+ fail ArgumentError, "The input argument (attributes) must be a hash in `PostBoost::FreeToolGenerateCaptionResponse` initialize method"
61
+ end
62
+
63
+ # check to see if the attribute exists and convert string to symbol for hash key
64
+ attributes = attributes.each_with_object({}) { |(k, v), h|
65
+ if (!self.class.attribute_map.key?(k.to_sym))
66
+ fail ArgumentError, "`#{k}` is not a valid attribute in `PostBoost::FreeToolGenerateCaptionResponse`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
67
+ end
68
+ h[k.to_sym] = v
69
+ }
70
+
71
+ if attributes.key?(:'captions')
72
+ if (value = attributes[:'captions']).is_a?(Array)
73
+ self.captions = value
74
+ end
75
+ end
76
+
77
+ if attributes.key?(:'credits_spent')
78
+ self.credits_spent = attributes[:'credits_spent']
79
+ end
80
+
81
+ if attributes.key?(:'cached')
82
+ self.cached = attributes[:'cached']
83
+ end
84
+ end
85
+
86
+ # Show invalid properties with the reasons. Usually used together with valid?
87
+ # @return Array for valid properties with the reasons
88
+ def list_invalid_properties
89
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
90
+ invalid_properties = Array.new
91
+ invalid_properties
92
+ end
93
+
94
+ # Check to see if the all the properties in the model are valid
95
+ # @return true if the model is valid
96
+ def valid?
97
+ warn '[DEPRECATED] the `valid?` method is obsolete'
98
+ true
99
+ end
100
+
101
+ # Checks equality by comparing each attribute.
102
+ # @param [Object] Object to be compared
103
+ def ==(o)
104
+ return true if self.equal?(o)
105
+ self.class == o.class &&
106
+ captions == o.captions &&
107
+ credits_spent == o.credits_spent &&
108
+ cached == o.cached
109
+ end
110
+
111
+ # @see the `==` method
112
+ # @param [Object] Object to be compared
113
+ def eql?(o)
114
+ self == o
115
+ end
116
+
117
+ # Calculates hash code according to all attributes.
118
+ # @return [Integer] Hash code
119
+ def hash
120
+ [captions, credits_spent, cached].hash
121
+ end
122
+
123
+ # Builds the object from hash
124
+ # @param [Hash] attributes Model attributes in the form of hash
125
+ # @return [Object] Returns the model itself
126
+ def self.build_from_hash(attributes)
127
+ return nil unless attributes.is_a?(Hash)
128
+ attributes = attributes.transform_keys(&:to_sym)
129
+ transformed_hash = {}
130
+ openapi_types.each_pair do |key, type|
131
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
132
+ transformed_hash["#{key}"] = nil
133
+ elsif type =~ /\AArray<(.*)>/i
134
+ # check to ensure the input is an array given that the attribute
135
+ # is documented as an array but the input is not
136
+ if attributes[attribute_map[key]].is_a?(Array)
137
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
138
+ end
139
+ elsif !attributes[attribute_map[key]].nil?
140
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
141
+ end
142
+ end
143
+ new(transformed_hash)
144
+ end
145
+
146
+ # Deserializes the data based on type
147
+ # @param string type Data type
148
+ # @param string value Value to be deserialized
149
+ # @return [Object] Deserialized data
150
+ def self._deserialize(type, value)
151
+ case type.to_sym
152
+ when :Time
153
+ Time.parse(value)
154
+ when :Date
155
+ Date.parse(value)
156
+ when :String
157
+ value.to_s
158
+ when :Integer
159
+ value.to_i
160
+ when :Float
161
+ value.to_f
162
+ when :Boolean
163
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
164
+ true
165
+ else
166
+ false
167
+ end
168
+ when :Object
169
+ # generic object (usually a Hash), return directly
170
+ value
171
+ when /\AArray<(?<inner_type>.+)>\z/
172
+ inner_type = Regexp.last_match[:inner_type]
173
+ value.map { |v| _deserialize(inner_type, v) }
174
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
175
+ k_type = Regexp.last_match[:k_type]
176
+ v_type = Regexp.last_match[:v_type]
177
+ {}.tap do |hash|
178
+ value.each do |k, v|
179
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
180
+ end
181
+ end
182
+ else # model
183
+ # models (e.g. Pet) or oneOf
184
+ klass = PostBoost.const_get(type)
185
+ klass.respond_to?(:openapi_any_of) || klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
186
+ end
187
+ end
188
+
189
+ # Returns the string representation of the object
190
+ # @return [String] String presentation of the object
191
+ def to_s
192
+ to_hash.to_s
193
+ end
194
+
195
+ # to_body is an alias to to_hash (backward compatibility)
196
+ # @return [Hash] Returns the object in the form of hash
197
+ def to_body
198
+ to_hash
199
+ end
200
+
201
+ # Returns the object in the form of hash
202
+ # @return [Hash] Returns the object in the form of hash
203
+ def to_hash
204
+ hash = {}
205
+ self.class.attribute_map.each_pair do |attr, param|
206
+ value = self.send(attr)
207
+ if value.nil?
208
+ is_nullable = self.class.openapi_nullable.include?(attr)
209
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
210
+ end
211
+
212
+ hash[param] = _to_hash(value)
213
+ end
214
+ hash
215
+ end
216
+
217
+ # Outputs non-array value in the form of hash
218
+ # For object, use to_hash. Otherwise, just return the value
219
+ # @param [Object] value Any valid value
220
+ # @return [Hash] Returns the value in the form of hash
221
+ def _to_hash(value)
222
+ if value.is_a?(Array)
223
+ value.compact.map { |v| _to_hash(v) }
224
+ elsif value.is_a?(Hash)
225
+ {}.tap do |hash|
226
+ value.each { |k, v| hash[k] = _to_hash(v) }
227
+ end
228
+ elsif value.respond_to? :to_hash
229
+ value.to_hash
230
+ else
231
+ value
232
+ end
233
+ end
234
+
235
+ end
236
+
237
+ end
@@ -3,7 +3,7 @@
3
3
 
4
4
  #The PostBoost REST API lets you publish, schedule, and analyze social media posts on every supported network 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
5
 
6
- The version of the OpenAPI document: 1.28.0
6
+ The version of the OpenAPI document: 1.29.0
7
7
  Contact: hi@postboost.co
8
8
  Generated by: https://openapi-generator.tech
9
9
  Generator version: 7.9.0
@@ -3,7 +3,7 @@
3
3
 
4
4
  #The PostBoost REST API lets you publish, schedule, and analyze social media posts on every supported network 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
5
 
6
- The version of the OpenAPI document: 1.28.0
6
+ The version of the OpenAPI document: 1.29.0
7
7
  Contact: hi@postboost.co
8
8
  Generated by: https://openapi-generator.tech
9
9
  Generator version: 7.9.0
@@ -3,7 +3,7 @@
3
3
 
4
4
  #The PostBoost REST API lets you publish, schedule, and analyze social media posts on every supported network 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
5
 
6
- The version of the OpenAPI document: 1.28.0
6
+ The version of the OpenAPI document: 1.29.0
7
7
  Contact: hi@postboost.co
8
8
  Generated by: https://openapi-generator.tech
9
9
  Generator version: 7.9.0