late-sdk 0.0.871 → 0.0.873

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 (514) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +17 -8
  3. data/docs/AccountGroupsApi.md +1 -1
  4. data/docs/AccountWithFollowerStatsAllOfAccountStats.md +2 -2
  5. data/docs/AccountsApi.md +5 -5
  6. data/docs/Ad.md +4 -4
  7. data/docs/AdAccountsApi.md +9 -9
  8. data/docs/AdAudiencesApi.md +4 -4
  9. data/docs/AdCampaignsApi.md +46 -46
  10. data/docs/AdCreative.md +6 -6
  11. data/docs/AdCreativesApi.md +12 -12
  12. data/docs/AdDailyMetrics.md +4 -4
  13. data/docs/AdFunnelCounts.md +3 -3
  14. data/docs/AdInsightsApi.md +3 -3
  15. data/docs/AdKeyword.md +1 -1
  16. data/docs/AdLibraryApi.md +2 -2
  17. data/docs/AdMetrics.md +4 -4
  18. data/docs/AdTargetingApi.md +5 -5
  19. data/docs/AdTreeAdSet.md +1 -1
  20. data/docs/AdTreeCampaign.md +4 -4
  21. data/docs/AddAdKeywordsRequest.md +1 -1
  22. data/docs/AddMessageReactionRequest.md +1 -1
  23. data/docs/AdjustConversionsRequestAdjustmentsInner.md +4 -4
  24. data/docs/AdsTimelineResponseRowsInner.md +1 -1
  25. data/docs/AnalyticsApi.md +22 -22
  26. data/docs/AnalyticsDeltaEntry.md +1 -1
  27. data/docs/AnalyticsListResponse.md +1 -1
  28. data/docs/ApiKey.md +1 -1
  29. data/docs/AppealSmsRegistrationRequest.md +1 -1
  30. data/docs/AssignGoogleBusinessLocation200ResponseAccount.md +1 -1
  31. data/docs/AssignGoogleBusinessLocationRequest.md +2 -2
  32. data/docs/AttachCampaignAssetsRequest.md +2 -2
  33. data/docs/BillingSnapshotPlan.md +1 -1
  34. data/docs/BlockWhatsAppUsersRequest.md +1 -1
  35. data/docs/BookmarkPostRequest.md +1 -1
  36. data/docs/BoostPostRequest.md +5 -5
  37. data/docs/BusinessCenter.md +1 -1
  38. data/docs/CallRecord.md +2 -2
  39. data/docs/CampaignAnalyticsResponseAnalyticsDailyInner.md +4 -4
  40. data/docs/CheckPhoneNumberAvailability200Response.md +1 -1
  41. data/docs/CheckPhoneNumberPortability200ResponseResultsInner.md +2 -2
  42. data/docs/CommentsApi.md +11 -11
  43. data/docs/ConnectApi.md +102 -35
  44. data/docs/ConnectWhatsAppEmbeddedSignupRequest.md +4 -4
  45. data/docs/Conversation.md +34 -0
  46. data/docs/ConversionEvent.md +1 -1
  47. data/docs/ConversionsApi.md +6 -6
  48. data/docs/CreateAdCampaignRequest.md +1 -1
  49. data/docs/CreateAdCreativeRequest.md +1 -1
  50. data/docs/CreateApiKeyRequest.md +1 -1
  51. data/docs/CreateInboxConversation201ResponseData.md +2 -2
  52. data/docs/CreateInboxConversationRequest.md +3 -3
  53. data/docs/CreatePhoneNumberPortInRequestEndUser.md +2 -2
  54. data/docs/CreateStandaloneAdRequest.md +22 -22
  55. data/docs/CreateStandaloneAdRequestVideo.md +2 -2
  56. data/docs/CreateWhatsAppFlowRequest.md +1 -1
  57. data/docs/CreateWhatsAppGroupChatRequest.md +1 -1
  58. data/docs/CreateWhatsAppTemplateRequest.md +1 -1
  59. data/docs/CtwaAdRequestBodyVideo.md +1 -1
  60. data/docs/CustomConversion.md +1 -1
  61. data/docs/DeleteWhatsappBusinessUsernameRequest.md +1 -1
  62. data/docs/DiscordApi.md +9 -9
  63. data/docs/DiscordScheduledEvent.md +1 -1
  64. data/docs/EditInboxCommentRequest.md +1 -1
  65. data/docs/EditInboxMessageRequest.md +1 -1
  66. data/docs/EnableSmsOnNumber200Response.md +1 -1
  67. data/docs/ErrorResponse.md +1 -1
  68. data/docs/EstimateAdReachRequest.md +1 -1
  69. data/docs/ExternalPostWebhookPost.md +2 -2
  70. data/docs/FollowUserRequest.md +2 -2
  71. data/docs/GMBAttributesApi.md +3 -3
  72. data/docs/GMBFoodMenusApi.md +2 -2
  73. data/docs/GMBLocationDetailsApi.md +2 -2
  74. data/docs/GMBMediaApi.md +1 -1
  75. data/docs/GMBPlaceActionsApi.md +1 -1
  76. data/docs/GMBReviewsApi.md +4 -4
  77. data/docs/GetAdComments200ResponseMeta.md +4 -4
  78. data/docs/GetAdMedia200Response.md +1 -1
  79. data/docs/GetAdMedia200ResponseMediaInner.md +1 -1
  80. data/docs/GetAdsSearchTerms200ResponseDataInner.md +1 -1
  81. data/docs/GetGoogleBusinessLocationDetails200ResponseLocation.md +1 -1
  82. data/docs/GetInboxConversation200ResponseData.md +1 -1
  83. data/docs/GetInboxConversationMessages200ResponseMessagesInner.md +1 -1
  84. data/docs/GetInboxPostComments200ResponseCommentsInner.md +2 -2
  85. data/docs/GetInboxPostComments200ResponseCommentsInnerFrom.md +1 -1
  86. data/docs/GetInboxTopAccounts200ResponseAccountsInner.md +1 -1
  87. data/docs/GetLinkedInBidPricingRequest.md +1 -1
  88. data/docs/GetPhoneNumber200ResponsePhoneNumber.md +1 -1
  89. data/docs/GetPhoneNumberKycForm200ResponseReusable.md +1 -1
  90. data/docs/GetPhoneNumberKycForm200ResponseReusableOptionsInner.md +2 -2
  91. data/docs/GetPhoneNumberKycForm200ResponseReusableOptionsInnerDetailsInner.md +1 -1
  92. data/docs/GetPhoneNumberPortInRequirements200Response.md +1 -1
  93. data/docs/GetWhatsAppNumberKycForm200ResponseFieldsInner.md +1 -1
  94. data/docs/GetWhatsAppSdkConfig200Response.md +22 -0
  95. data/docs/GoogleBusinessPlatformData.md +1 -1
  96. data/docs/HideInboxCommentRequest.md +1 -1
  97. data/docs/InboxAnalyticsApi.md +5 -5
  98. data/docs/InboxWebhookAccount.md +3 -3
  99. data/docs/InboxWebhookConversation.md +1 -1
  100. data/docs/InboxWebhookMessageSender.md +3 -3
  101. data/docs/InstagramApi.md +1 -1
  102. data/docs/LeadGenApi.md +2 -2
  103. data/docs/LikeInboxCommentRequest.md +1 -1
  104. data/docs/LikePostRequest.md +1 -1
  105. data/docs/LinkedInMentionsApi.md +1 -1
  106. data/docs/LinkedInPlatformData.md +1 -1
  107. data/docs/ListAdAudiences200ResponseAudiencesInner.md +1 -1
  108. data/docs/ListCalls200ResponseCallsInner.md +2 -2
  109. data/docs/ListGoogleBusinessLocations200ResponseLocationsInner.md +1 -1
  110. data/docs/ListInboxComments200ResponseDataInner.md +3 -3
  111. data/docs/ListInboxConversations200ResponseDataInner.md +3 -1
  112. data/docs/ListInboxReviews200ResponseDataInner.md +6 -6
  113. data/docs/ListPhoneNumbers200Response.md +1 -1
  114. data/docs/ListPhoneNumbers200ResponseNumbersInner.md +3 -3
  115. data/docs/ListSipTrunks200Response.md +1 -1
  116. data/docs/ListWhatsAppAccountEvents200ResponseEventsInner.md +1 -1
  117. data/docs/LogsApi.md +2 -2
  118. data/docs/MediaItem.md +1 -1
  119. data/docs/MentionsApi.md +3 -3
  120. data/docs/MessagesApi.md +95 -23
  121. data/docs/MessagingAdsApi.md +1 -1
  122. data/docs/PhoneNumbersApi.md +14 -14
  123. data/docs/PinterestPlatformData.md +1 -1
  124. data/docs/PostAnalytics.md +1 -1
  125. data/docs/PostsApi.md +5 -5
  126. data/docs/ProfilesApi.md +1 -1
  127. data/docs/PurchasePhoneNumberRequest.md +1 -1
  128. data/docs/PurchaseWhatsAppPhoneNumberRequest.md +1 -1
  129. data/docs/ReachAndFrequencyApi.md +2 -2
  130. data/docs/RecyclingConfig.md +1 -1
  131. data/docs/ReplyToMentionRequest.md +1 -1
  132. data/docs/RetweetPostRequest.md +1 -1
  133. data/docs/ReviewWebhookReview.md +1 -1
  134. data/docs/ReviewWebhookReviewReviewer.md +1 -1
  135. data/docs/ReviewsApi.md +6 -6
  136. data/docs/SMSApi.md +11 -11
  137. data/docs/SavedTargetingAudience.md +1 -1
  138. data/docs/SelectGoogleBusinessLocation200ResponseAccount.md +1 -1
  139. data/docs/SelectGoogleBusinessLocationRequest.md +2 -2
  140. data/docs/SendDiscordDirectMessage200Response.md +1 -1
  141. data/docs/SendInboxMessage200ResponseData.md +1 -1
  142. data/docs/SendInboxMessageRequest.md +3 -3
  143. data/docs/SendPrivateReplyToCommentRequest.md +2 -2
  144. data/docs/SendTypingIndicatorRequest.md +1 -1
  145. data/docs/SendWhatsAppFlowMessageRequest.md +1 -1
  146. data/docs/SetCommentModerationRequest.md +1 -1
  147. data/docs/SetConversationThreadControl200Response.md +20 -0
  148. data/docs/SetConversationThreadControl200ResponseControl.md +18 -0
  149. data/docs/SetConversationThreadControlRequest.md +24 -0
  150. data/docs/SetWhatsAppFlowsEncryptionKeyRequest.md +1 -1
  151. data/docs/SetWhatsappBusinessUsernameRequest.md +1 -1
  152. data/docs/StartSmsRegistrationRequest.md +1 -1
  153. data/docs/StartSmsRegistrationRequestCampaign.md +1 -1
  154. data/docs/SubmitPhoneNumberKycRequest.md +1 -1
  155. data/docs/SubmitWhatsAppNumberKycRequest.md +1 -1
  156. data/docs/SyncExternalPosts200Response.md +1 -1
  157. data/docs/SyncExternalPostsRequest.md +1 -1
  158. data/docs/TrackingTag.md +2 -2
  159. data/docs/TrackingTagsApi.md +6 -6
  160. data/docs/TwitterEngagementApi.md +9 -9
  161. data/docs/UnblockWhatsAppUsersRequest.md +1 -1
  162. data/docs/UpdateAccountRequestXCapabilities.md +1 -1
  163. data/docs/UpdateAdAccountRequest.md +1 -1
  164. data/docs/UpdateAdSetRequestPlatformSpecificData.md +1 -1
  165. data/docs/UpdateConversionDestinationRequest.md +1 -1
  166. data/docs/UpdateGmbLocationRequest.md +1 -1
  167. data/docs/UpdateInboxConversationRequest.md +1 -1
  168. data/docs/UpdatePostMetadataRequest.md +1 -1
  169. data/docs/UpdateWhatsAppBusinessProfileRequest.md +1 -1
  170. data/docs/UpdateWhatsAppDisplayNameRequest.md +1 -1
  171. data/docs/UpdateWhatsAppFlowRequest.md +1 -1
  172. data/docs/UpdateWhatsAppTemplateByIdRequest.md +1 -1
  173. data/docs/UpdateWhatsAppTemplateRequest.md +1 -1
  174. data/docs/UpdateWorkflowRequest.md +1 -1
  175. data/docs/UploadWhatsAppFlowJsonRequest.md +1 -1
  176. data/docs/UploadWhatsAppProfilePhotoRequest1.md +1 -1
  177. data/docs/UploadedOrDerivedAudience.md +2 -2
  178. data/docs/UsageApi.md +12 -12
  179. data/docs/UsageMetering.md +1 -1
  180. data/docs/UsageStats.md +1 -1
  181. data/docs/UsageStatsSpend.md +1 -1
  182. data/docs/UsageStatsUsage.md +2 -2
  183. data/docs/UsersApi.md +1 -1
  184. data/docs/ValidateApi.md +3 -3
  185. data/docs/VerifyApi.md +1 -1
  186. data/docs/VoiceApi.md +2 -2
  187. data/docs/WebhookEventsApi.md +76 -7
  188. data/docs/WebhookPayloadAdStatusChangedError.md +3 -3
  189. data/docs/WebhookPayloadAdStatusChangedStatus.md +1 -1
  190. data/docs/WebhookPayloadCommentAccount.md +2 -2
  191. data/docs/WebhookPayloadCommentPost.md +1 -1
  192. data/docs/WebhookPayloadConversationControlChanged.md +30 -0
  193. data/docs/WebhookPayloadConversationControlChangedControl.md +22 -0
  194. data/docs/WebhookPayloadLeadAccount.md +2 -2
  195. data/docs/WebhookPayloadMessageMessageSender.md +3 -3
  196. data/docs/WebhookPayloadMessageMetadata.md +3 -1
  197. data/docs/WebhookPayloadMessageSentMessage.md +1 -1
  198. data/docs/WebhookPayloadReviewNewAccount.md +1 -1
  199. data/docs/WhatsAppApi.md +51 -51
  200. data/docs/WhatsAppCallingApi.md +3 -3
  201. data/docs/WhatsAppFlowsApi.md +18 -18
  202. data/docs/WhatsAppPhoneNumbersApi.md +12 -12
  203. data/docs/WhatsAppSandboxApi.md +2 -2
  204. data/docs/WhatsAppTemplatesApi.md +2 -2
  205. data/docs/WorkflowEdge.md +1 -1
  206. data/docs/WorkflowExecutionEvent.md +1 -1
  207. data/docs/WorkflowsApi.md +3 -3
  208. data/docs/XApiOperation.md +2 -2
  209. data/docs/XApiOperationTriggeredByInner.md +1 -1
  210. data/docs/XApiPricing.md +1 -1
  211. data/lib/zernio-sdk/api/account_groups_api.rb +2 -2
  212. data/lib/zernio-sdk/api/accounts_api.rb +10 -10
  213. data/lib/zernio-sdk/api/ad_accounts_api.rb +12 -12
  214. data/lib/zernio-sdk/api/ad_audiences_api.rb +6 -6
  215. data/lib/zernio-sdk/api/ad_campaigns_api.rb +60 -60
  216. data/lib/zernio-sdk/api/ad_creatives_api.rb +20 -20
  217. data/lib/zernio-sdk/api/ad_insights_api.rb +4 -4
  218. data/lib/zernio-sdk/api/ad_library_api.rb +2 -2
  219. data/lib/zernio-sdk/api/ad_targeting_api.rb +6 -6
  220. data/lib/zernio-sdk/api/analytics_api.rb +22 -22
  221. data/lib/zernio-sdk/api/comments_api.rb +20 -20
  222. data/lib/zernio-sdk/api/connect_api.rb +91 -34
  223. data/lib/zernio-sdk/api/conversions_api.rb +12 -12
  224. data/lib/zernio-sdk/api/discord_api.rb +18 -18
  225. data/lib/zernio-sdk/api/gmb_attributes_api.rb +4 -4
  226. data/lib/zernio-sdk/api/gmb_food_menus_api.rb +4 -4
  227. data/lib/zernio-sdk/api/gmb_location_details_api.rb +4 -4
  228. data/lib/zernio-sdk/api/gmb_media_api.rb +2 -2
  229. data/lib/zernio-sdk/api/gmb_place_actions_api.rb +2 -2
  230. data/lib/zernio-sdk/api/gmb_reviews_api.rb +8 -8
  231. data/lib/zernio-sdk/api/inbox_analytics_api.rb +10 -10
  232. data/lib/zernio-sdk/api/instagram_api.rb +2 -2
  233. data/lib/zernio-sdk/api/lead_gen_api.rb +4 -4
  234. data/lib/zernio-sdk/api/linked_in_mentions_api.rb +2 -2
  235. data/lib/zernio-sdk/api/logs_api.rb +2 -2
  236. data/lib/zernio-sdk/api/mentions_api.rb +4 -4
  237. data/lib/zernio-sdk/api/messages_api.rb +104 -30
  238. data/lib/zernio-sdk/api/messaging_ads_api.rb +2 -2
  239. data/lib/zernio-sdk/api/phone_numbers_api.rb +24 -24
  240. data/lib/zernio-sdk/api/posts_api.rb +8 -8
  241. data/lib/zernio-sdk/api/profiles_api.rb +2 -2
  242. data/lib/zernio-sdk/api/reach_and_frequency_api.rb +4 -4
  243. data/lib/zernio-sdk/api/reviews_api.rb +8 -8
  244. data/lib/zernio-sdk/api/sms_api.rb +20 -20
  245. data/lib/zernio-sdk/api/tracking_tags_api.rb +12 -12
  246. data/lib/zernio-sdk/api/twitter_engagement_api.rb +12 -12
  247. data/lib/zernio-sdk/api/usage_api.rb +14 -14
  248. data/lib/zernio-sdk/api/users_api.rb +2 -2
  249. data/lib/zernio-sdk/api/validate_api.rb +4 -4
  250. data/lib/zernio-sdk/api/verify_api.rb +2 -2
  251. data/lib/zernio-sdk/api/voice_api.rb +4 -4
  252. data/lib/zernio-sdk/api/webhook_events_api.rb +80 -14
  253. data/lib/zernio-sdk/api/whats_app_api.rb +54 -54
  254. data/lib/zernio-sdk/api/whats_app_calling_api.rb +4 -4
  255. data/lib/zernio-sdk/api/whats_app_flows_api.rb +20 -20
  256. data/lib/zernio-sdk/api/whats_app_phone_numbers_api.rb +20 -20
  257. data/lib/zernio-sdk/api/whats_app_sandbox_api.rb +4 -4
  258. data/lib/zernio-sdk/api/whats_app_templates_api.rb +2 -2
  259. data/lib/zernio-sdk/api/workflows_api.rb +6 -6
  260. data/lib/zernio-sdk/models/account_with_follower_stats_all_of_account_stats.rb +2 -2
  261. data/lib/zernio-sdk/models/ad.rb +4 -4
  262. data/lib/zernio-sdk/models/ad_creative.rb +6 -6
  263. data/lib/zernio-sdk/models/ad_daily_metrics.rb +4 -4
  264. data/lib/zernio-sdk/models/ad_engagement_counts.rb +1 -1
  265. data/lib/zernio-sdk/models/ad_funnel_counts.rb +4 -4
  266. data/lib/zernio-sdk/models/ad_keyword.rb +1 -1
  267. data/lib/zernio-sdk/models/ad_metrics.rb +4 -4
  268. data/lib/zernio-sdk/models/ad_tree_ad_set.rb +1 -1
  269. data/lib/zernio-sdk/models/ad_tree_campaign.rb +4 -4
  270. data/lib/zernio-sdk/models/add_ad_keywords_request.rb +1 -1
  271. data/lib/zernio-sdk/models/add_message_reaction_request.rb +1 -1
  272. data/lib/zernio-sdk/models/adjust_conversions_request_adjustments_inner.rb +4 -4
  273. data/lib/zernio-sdk/models/adjust_conversions_request_adjustments_inner_user.rb +1 -1
  274. data/lib/zernio-sdk/models/ads_timeline_response_rows_inner.rb +1 -1
  275. data/lib/zernio-sdk/models/analytics_delta_entry.rb +1 -1
  276. data/lib/zernio-sdk/models/analytics_list_response.rb +1 -1
  277. data/lib/zernio-sdk/models/api_key.rb +1 -1
  278. data/lib/zernio-sdk/models/appeal_sms_registration_request.rb +1 -1
  279. data/lib/zernio-sdk/models/assign_google_business_location200_response_account.rb +1 -1
  280. data/lib/zernio-sdk/models/assign_google_business_location_request.rb +2 -2
  281. data/lib/zernio-sdk/models/attach_campaign_assets_request.rb +2 -2
  282. data/lib/zernio-sdk/models/billing_snapshot.rb +1 -1
  283. data/lib/zernio-sdk/models/billing_snapshot_plan.rb +1 -1
  284. data/lib/zernio-sdk/models/block_whats_app_users_request.rb +1 -1
  285. data/lib/zernio-sdk/models/bookmark_post_request.rb +1 -1
  286. data/lib/zernio-sdk/models/boost_post_request.rb +5 -5
  287. data/lib/zernio-sdk/models/boost_post_request_platform_specific_data.rb +1 -1
  288. data/lib/zernio-sdk/models/business_center.rb +2 -2
  289. data/lib/zernio-sdk/models/call_record.rb +2 -2
  290. data/lib/zernio-sdk/models/campaign_analytics_response_analytics_daily_inner.rb +4 -4
  291. data/lib/zernio-sdk/models/check_phone_number_availability200_response.rb +1 -1
  292. data/lib/zernio-sdk/models/check_phone_number_portability200_response_results_inner.rb +2 -2
  293. data/lib/zernio-sdk/models/connect_whats_app_embedded_signup_request.rb +4 -3
  294. data/lib/zernio-sdk/models/conversation.rb +334 -0
  295. data/lib/zernio-sdk/models/conversion_destination.rb +1 -1
  296. data/lib/zernio-sdk/models/conversion_event.rb +1 -1
  297. data/lib/zernio-sdk/models/create_ad_campaign_request.rb +1 -1
  298. data/lib/zernio-sdk/models/create_ad_creative_request.rb +1 -1
  299. data/lib/zernio-sdk/models/create_api_key_request.rb +1 -1
  300. data/lib/zernio-sdk/models/create_inbox_conversation201_response_data.rb +2 -2
  301. data/lib/zernio-sdk/models/create_inbox_conversation_request.rb +3 -3
  302. data/lib/zernio-sdk/models/create_phone_number_port_in_request_end_user.rb +3 -3
  303. data/lib/zernio-sdk/models/create_standalone_ad201_response_one_of.rb +1 -1
  304. data/lib/zernio-sdk/models/create_standalone_ad201_response_one_of1.rb +1 -1
  305. data/lib/zernio-sdk/models/create_standalone_ad_request.rb +22 -22
  306. data/lib/zernio-sdk/models/create_standalone_ad_request_placement_assets.rb +1 -1
  307. data/lib/zernio-sdk/models/create_standalone_ad_request_placement_assets_rules_inner_placements.rb +1 -1
  308. data/lib/zernio-sdk/models/create_standalone_ad_request_placements.rb +1 -1
  309. data/lib/zernio-sdk/models/create_standalone_ad_request_platform_specific_data.rb +1 -1
  310. data/lib/zernio-sdk/models/create_standalone_ad_request_video.rb +3 -3
  311. data/lib/zernio-sdk/models/create_whats_app_flow_request.rb +1 -1
  312. data/lib/zernio-sdk/models/create_whats_app_group_chat_request.rb +1 -1
  313. data/lib/zernio-sdk/models/create_whats_app_template_request.rb +1 -1
  314. data/lib/zernio-sdk/models/ctwa_ad_request_body_video.rb +1 -1
  315. data/lib/zernio-sdk/models/custom_conversion.rb +1 -1
  316. data/lib/zernio-sdk/models/delete_whatsapp_business_username_request.rb +1 -1
  317. data/lib/zernio-sdk/models/discord_scheduled_event.rb +2 -2
  318. data/lib/zernio-sdk/models/edit_inbox_comment_request.rb +1 -1
  319. data/lib/zernio-sdk/models/edit_inbox_message_request.rb +1 -1
  320. data/lib/zernio-sdk/models/enable_sms_on_number200_response.rb +1 -1
  321. data/lib/zernio-sdk/models/error_response.rb +1 -1
  322. data/lib/zernio-sdk/models/estimate_ad_reach_request.rb +1 -1
  323. data/lib/zernio-sdk/models/external_post_webhook_post.rb +2 -2
  324. data/lib/zernio-sdk/models/follow_user_request.rb +2 -2
  325. data/lib/zernio-sdk/models/geo_restriction.rb +1 -1
  326. data/lib/zernio-sdk/models/get_ad_comments200_response_meta.rb +4 -4
  327. data/lib/zernio-sdk/models/get_ad_media200_response.rb +1 -1
  328. data/lib/zernio-sdk/models/get_ad_media200_response_media_inner.rb +1 -1
  329. data/lib/zernio-sdk/models/get_ads_search_terms200_response_data_inner.rb +1 -1
  330. data/lib/zernio-sdk/models/get_google_business_location_details200_response_location.rb +1 -1
  331. data/lib/zernio-sdk/models/get_inbox_conversation200_response_data.rb +1 -1
  332. data/lib/zernio-sdk/models/get_inbox_conversation_messages200_response_messages_inner.rb +1 -1
  333. data/lib/zernio-sdk/models/get_inbox_post_comments200_response_comments_inner.rb +2 -2
  334. data/lib/zernio-sdk/models/get_inbox_post_comments200_response_comments_inner_from.rb +1 -1
  335. data/lib/zernio-sdk/models/get_inbox_post_comments200_response_meta_ad_comments.rb +1 -1
  336. data/lib/zernio-sdk/models/get_inbox_top_accounts200_response_accounts_inner.rb +1 -1
  337. data/lib/zernio-sdk/models/get_linked_in_bid_pricing_request.rb +1 -1
  338. data/lib/zernio-sdk/models/get_phone_number200_response_phone_number.rb +1 -1
  339. data/lib/zernio-sdk/models/get_phone_number_kyc_form200_response_reusable.rb +1 -1
  340. data/lib/zernio-sdk/models/get_phone_number_kyc_form200_response_reusable_options_inner.rb +2 -2
  341. data/lib/zernio-sdk/models/get_phone_number_kyc_form200_response_reusable_options_inner_details_inner.rb +1 -1
  342. data/lib/zernio-sdk/models/get_phone_number_port_in_requirements200_response.rb +1 -1
  343. data/lib/zernio-sdk/models/get_whats_app_number_kyc_form200_response_fields_inner.rb +1 -1
  344. data/lib/zernio-sdk/models/get_whats_app_sdk_config200_response.rb +219 -0
  345. data/lib/zernio-sdk/models/google_business_platform_data.rb +2 -2
  346. data/lib/zernio-sdk/models/hide_inbox_comment_request.rb +1 -1
  347. data/lib/zernio-sdk/models/inbox_webhook_account.rb +3 -3
  348. data/lib/zernio-sdk/models/inbox_webhook_conversation.rb +1 -1
  349. data/lib/zernio-sdk/models/inbox_webhook_message_sender.rb +3 -3
  350. data/lib/zernio-sdk/models/like_inbox_comment_request.rb +1 -1
  351. data/lib/zernio-sdk/models/like_post_request.rb +1 -1
  352. data/lib/zernio-sdk/models/linked_in_ads_platform_data_thought_leader.rb +1 -1
  353. data/lib/zernio-sdk/models/linked_in_platform_data.rb +1 -1
  354. data/lib/zernio-sdk/models/list_ad_audiences200_response_audiences_inner.rb +1 -1
  355. data/lib/zernio-sdk/models/list_calls200_response_calls_inner.rb +2 -2
  356. data/lib/zernio-sdk/models/list_discord_pinned_messages200_response_data_inner.rb +1 -1
  357. data/lib/zernio-sdk/models/list_google_business_locations200_response_locations_inner.rb +1 -1
  358. data/lib/zernio-sdk/models/list_inbox_comments200_response_data_inner.rb +3 -3
  359. data/lib/zernio-sdk/models/list_inbox_conversations200_response_data_inner.rb +24 -2
  360. data/lib/zernio-sdk/models/list_inbox_reviews200_response_data_inner.rb +6 -6
  361. data/lib/zernio-sdk/models/list_phone_numbers200_response.rb +1 -1
  362. data/lib/zernio-sdk/models/list_phone_numbers200_response_numbers_inner.rb +3 -3
  363. data/lib/zernio-sdk/models/list_sip_trunks200_response.rb +1 -1
  364. data/lib/zernio-sdk/models/list_sms_sender_ids200_response_budget.rb +1 -1
  365. data/lib/zernio-sdk/models/list_whats_app_account_events200_response_events_inner.rb +1 -1
  366. data/lib/zernio-sdk/models/media_item.rb +1 -1
  367. data/lib/zernio-sdk/models/pinterest_platform_data.rb +1 -1
  368. data/lib/zernio-sdk/models/post_analytics.rb +1 -1
  369. data/lib/zernio-sdk/models/purchase_phone_number_request.rb +1 -1
  370. data/lib/zernio-sdk/models/purchase_whats_app_phone_number_request.rb +1 -1
  371. data/lib/zernio-sdk/models/recycling_config.rb +2 -2
  372. data/lib/zernio-sdk/models/reply_to_mention_request.rb +1 -1
  373. data/lib/zernio-sdk/models/retweet_post_request.rb +1 -1
  374. data/lib/zernio-sdk/models/review_webhook_review.rb +1 -1
  375. data/lib/zernio-sdk/models/review_webhook_review_reviewer.rb +1 -1
  376. data/lib/zernio-sdk/models/saved_targeting_audience.rb +1 -1
  377. data/lib/zernio-sdk/models/select_google_business_location200_response_account.rb +1 -1
  378. data/lib/zernio-sdk/models/select_google_business_location_request.rb +2 -2
  379. data/lib/zernio-sdk/models/send_discord_direct_message200_response.rb +1 -1
  380. data/lib/zernio-sdk/models/send_inbox_message200_response_data.rb +1 -1
  381. data/lib/zernio-sdk/models/send_inbox_message_request.rb +3 -3
  382. data/lib/zernio-sdk/models/send_private_reply_to_comment_request.rb +2 -2
  383. data/lib/zernio-sdk/models/send_typing_indicator_request.rb +1 -1
  384. data/lib/zernio-sdk/models/send_whats_app_flow_message_request.rb +1 -1
  385. data/lib/zernio-sdk/models/set_comment_moderation_request.rb +1 -1
  386. data/lib/zernio-sdk/models/set_conversation_thread_control200_response.rb +156 -0
  387. data/lib/zernio-sdk/models/set_conversation_thread_control200_response_control.rb +181 -0
  388. data/lib/zernio-sdk/models/set_conversation_thread_control_request.rb +266 -0
  389. data/lib/zernio-sdk/models/set_whats_app_flows_encryption_key_request.rb +1 -1
  390. data/lib/zernio-sdk/models/set_whatsapp_business_username_request.rb +1 -1
  391. data/lib/zernio-sdk/models/slack_platform_data.rb +1 -1
  392. data/lib/zernio-sdk/models/start_sms_registration_request.rb +1 -1
  393. data/lib/zernio-sdk/models/start_sms_registration_request_campaign.rb +2 -2
  394. data/lib/zernio-sdk/models/submit_phone_number_kyc_request.rb +1 -1
  395. data/lib/zernio-sdk/models/submit_whats_app_number_kyc_request.rb +1 -1
  396. data/lib/zernio-sdk/models/sync_external_posts200_response.rb +1 -1
  397. data/lib/zernio-sdk/models/sync_external_posts_request.rb +1 -1
  398. data/lib/zernio-sdk/models/tracking_tag.rb +3 -3
  399. data/lib/zernio-sdk/models/unblock_whats_app_users_request.rb +1 -1
  400. data/lib/zernio-sdk/models/update_account_request_x_capabilities.rb +2 -2
  401. data/lib/zernio-sdk/models/update_ad_account_request.rb +1 -1
  402. data/lib/zernio-sdk/models/update_ad_request_creative.rb +1 -1
  403. data/lib/zernio-sdk/models/update_ad_set_request_platform_specific_data.rb +1 -1
  404. data/lib/zernio-sdk/models/update_ad_tracking_tags_request_creative.rb +1 -1
  405. data/lib/zernio-sdk/models/update_conversion_destination_request.rb +1 -1
  406. data/lib/zernio-sdk/models/update_gmb_location_request.rb +1 -1
  407. data/lib/zernio-sdk/models/update_inbox_conversation_request.rb +1 -1
  408. data/lib/zernio-sdk/models/update_post_metadata_request.rb +1 -1
  409. data/lib/zernio-sdk/models/update_whats_app_business_profile_request.rb +1 -1
  410. data/lib/zernio-sdk/models/update_whats_app_display_name_request.rb +1 -1
  411. data/lib/zernio-sdk/models/update_whats_app_flow_request.rb +1 -1
  412. data/lib/zernio-sdk/models/update_whats_app_template_by_id_request.rb +1 -1
  413. data/lib/zernio-sdk/models/update_whats_app_template_request.rb +1 -1
  414. data/lib/zernio-sdk/models/update_workflow_request.rb +1 -1
  415. data/lib/zernio-sdk/models/upload_whats_app_flow_json_request.rb +1 -1
  416. data/lib/zernio-sdk/models/upload_whats_app_profile_photo_request1.rb +1 -1
  417. data/lib/zernio-sdk/models/uploaded_or_derived_audience.rb +2 -2
  418. data/lib/zernio-sdk/models/usage_metering.rb +2 -2
  419. data/lib/zernio-sdk/models/usage_metering_peaks.rb +1 -1
  420. data/lib/zernio-sdk/models/usage_stats.rb +2 -2
  421. data/lib/zernio-sdk/models/usage_stats_limits.rb +1 -1
  422. data/lib/zernio-sdk/models/usage_stats_spend.rb +2 -2
  423. data/lib/zernio-sdk/models/usage_stats_usage.rb +3 -3
  424. data/lib/zernio-sdk/models/usage_stats_usage_x_api_calls.rb +1 -1
  425. data/lib/zernio-sdk/models/webhook_payload_ad_status_changed_error.rb +3 -3
  426. data/lib/zernio-sdk/models/webhook_payload_ad_status_changed_status.rb +1 -1
  427. data/lib/zernio-sdk/models/webhook_payload_analytics_synced.rb +1 -1
  428. data/lib/zernio-sdk/models/webhook_payload_analytics_synced_sync.rb +1 -1
  429. data/lib/zernio-sdk/models/webhook_payload_comment.rb +1 -1
  430. data/lib/zernio-sdk/models/webhook_payload_comment_account.rb +2 -2
  431. data/lib/zernio-sdk/models/webhook_payload_comment_post.rb +1 -1
  432. data/lib/zernio-sdk/models/webhook_payload_conversation_control_changed.rb +347 -0
  433. data/lib/zernio-sdk/models/webhook_payload_conversation_control_changed_control.rb +224 -0
  434. data/lib/zernio-sdk/models/webhook_payload_conversation_started.rb +1 -1
  435. data/lib/zernio-sdk/models/webhook_payload_lead_account.rb +2 -2
  436. data/lib/zernio-sdk/models/webhook_payload_message_message_sender.rb +3 -3
  437. data/lib/zernio-sdk/models/webhook_payload_message_metadata.rb +13 -3
  438. data/lib/zernio-sdk/models/webhook_payload_message_sent_message.rb +3 -3
  439. data/lib/zernio-sdk/models/webhook_payload_post_platform.rb +1 -1
  440. data/lib/zernio-sdk/models/webhook_payload_post_platform_account.rb +1 -1
  441. data/lib/zernio-sdk/models/webhook_payload_post_platform_platform.rb +1 -1
  442. data/lib/zernio-sdk/models/webhook_payload_review_new_account.rb +1 -1
  443. data/lib/zernio-sdk/models/workflow_edge.rb +1 -1
  444. data/lib/zernio-sdk/models/workflow_execution_event.rb +1 -1
  445. data/lib/zernio-sdk/models/x_api_operation.rb +2 -2
  446. data/lib/zernio-sdk/models/x_api_operation_triggered_by_inner.rb +1 -1
  447. data/lib/zernio-sdk/models/x_api_pricing.rb +2 -2
  448. data/lib/zernio-sdk/version.rb +1 -1
  449. data/lib/zernio-sdk.rb +7 -0
  450. data/openapi.yaml +1073 -853
  451. data/spec/api/account_groups_api_spec.rb +1 -1
  452. data/spec/api/accounts_api_spec.rb +5 -5
  453. data/spec/api/ad_accounts_api_spec.rb +6 -6
  454. data/spec/api/ad_audiences_api_spec.rb +3 -3
  455. data/spec/api/ad_campaigns_api_spec.rb +30 -30
  456. data/spec/api/ad_creatives_api_spec.rb +10 -10
  457. data/spec/api/ad_insights_api_spec.rb +2 -2
  458. data/spec/api/ad_library_api_spec.rb +1 -1
  459. data/spec/api/ad_targeting_api_spec.rb +3 -3
  460. data/spec/api/analytics_api_spec.rb +11 -11
  461. data/spec/api/comments_api_spec.rb +10 -10
  462. data/spec/api/connect_api_spec.rb +28 -17
  463. data/spec/api/conversions_api_spec.rb +6 -6
  464. data/spec/api/discord_api_spec.rb +9 -9
  465. data/spec/api/gmb_attributes_api_spec.rb +2 -2
  466. data/spec/api/gmb_food_menus_api_spec.rb +2 -2
  467. data/spec/api/gmb_location_details_api_spec.rb +2 -2
  468. data/spec/api/gmb_media_api_spec.rb +1 -1
  469. data/spec/api/gmb_place_actions_api_spec.rb +1 -1
  470. data/spec/api/gmb_reviews_api_spec.rb +4 -4
  471. data/spec/api/inbox_analytics_api_spec.rb +5 -5
  472. data/spec/api/instagram_api_spec.rb +1 -1
  473. data/spec/api/lead_gen_api_spec.rb +2 -2
  474. data/spec/api/linked_in_mentions_api_spec.rb +1 -1
  475. data/spec/api/logs_api_spec.rb +1 -1
  476. data/spec/api/mentions_api_spec.rb +2 -2
  477. data/spec/api/messages_api_spec.rb +28 -15
  478. data/spec/api/messaging_ads_api_spec.rb +1 -1
  479. data/spec/api/phone_numbers_api_spec.rb +12 -12
  480. data/spec/api/posts_api_spec.rb +4 -4
  481. data/spec/api/profiles_api_spec.rb +1 -1
  482. data/spec/api/reach_and_frequency_api_spec.rb +2 -2
  483. data/spec/api/reviews_api_spec.rb +4 -4
  484. data/spec/api/sms_api_spec.rb +10 -10
  485. data/spec/api/tracking_tags_api_spec.rb +6 -6
  486. data/spec/api/twitter_engagement_api_spec.rb +6 -6
  487. data/spec/api/usage_api_spec.rb +7 -7
  488. data/spec/api/users_api_spec.rb +1 -1
  489. data/spec/api/validate_api_spec.rb +2 -2
  490. data/spec/api/verify_api_spec.rb +1 -1
  491. data/spec/api/voice_api_spec.rb +2 -2
  492. data/spec/api/whats_app_api_spec.rb +27 -27
  493. data/spec/api/whats_app_calling_api_spec.rb +2 -2
  494. data/spec/api/whats_app_flows_api_spec.rb +10 -10
  495. data/spec/api/whats_app_phone_numbers_api_spec.rb +10 -10
  496. data/spec/api/whats_app_sandbox_api_spec.rb +2 -2
  497. data/spec/api/whats_app_templates_api_spec.rb +1 -1
  498. data/spec/api/workflows_api_spec.rb +3 -3
  499. data/spec/models/conversation_spec.rb +92 -0
  500. data/spec/models/create_webhook_settings_request_spec.rb +1 -1
  501. data/spec/models/get_whats_app_sdk_config200_response_spec.rb +48 -0
  502. data/spec/models/list_inbox_conversations200_response_data_inner_spec.rb +10 -0
  503. data/spec/models/set_conversation_thread_control200_response_control_spec.rb +40 -0
  504. data/spec/models/set_conversation_thread_control200_response_spec.rb +42 -0
  505. data/spec/models/set_conversation_thread_control_request_spec.rb +62 -0
  506. data/spec/models/update_webhook_settings_request_spec.rb +1 -1
  507. data/spec/models/webhook_payload_conversation_control_changed_control_spec.rb +56 -0
  508. data/spec/models/webhook_payload_conversation_control_changed_spec.rb +76 -0
  509. data/spec/models/webhook_payload_message_metadata_spec.rb +6 -0
  510. data/spec/models/webhook_payload_message_sent_message_spec.rb +1 -1
  511. data/spec/models/webhook_spec.rb +1 -1
  512. data/zernio-sdk-0.0.873.gem +0 -0
  513. metadata +30 -2
  514. data/zernio-sdk-0.0.871.gem +0 -0
@@ -118,7 +118,7 @@ end
118
118
 
119
119
  Attach extension assets to a Google Search campaign
120
120
 
121
- Attach sitelinks, callouts and/or structured snippets to an already-existing Google Search campaign — the same builders POST /v1/ads/create uses, but without rebuilding the hierarchy. At least one of sitelinks, callouts or structuredSnippets is required. Google-only. Other platforms have no equivalent extension surface and return 501. Approval status is Google-async; poll `asset.policy_summary` after review. Assets stay in the account library even if the campaign is later deleted.
121
+ Attach sitelinks, callouts and/or structured snippets to an already-existing Google Search campaign. These are the same builders POST /v1/ads/create uses, but without rebuilding the hierarchy. At least one of sitelinks, callouts or structuredSnippets is required. Google-only. Other platforms have no equivalent extension surface and return 501. Approval status is Google-async; poll `asset.policy_summary` after review. Assets stay in the account library even if the campaign is later deleted.
122
122
 
123
123
  ### Examples
124
124
 
@@ -546,7 +546,7 @@ end
546
546
 
547
547
  Create standalone ad
548
548
 
549
- Creates a paid ad with custom creative across Meta, Google Ads, Pinterest, TikTok, X/Twitter, LinkedIn, and OpenAI Ads (ChatGPT Ads). Supports three mutually-exclusive request shapes selected by the body, a legacy single-creative shape (all platforms, default), a Meta-only multi-creative shape via the creatives array (one ad set with N ads sharing budget and targeting), and an attach shape via adSetId that adds one new ad to an existing ad set, inheriting its budget, targeting, and schedule (Meta, TikTok, and LinkedIn; on LinkedIn adSetId is the existing Campaign id, and the budget, schedule, targeting and bidding fields must be omitted). Per-platform required fields, budget minimums, and video-ad rules are documented on each property below. LinkedIn creates a Single Image or Single Video Ad backed by a Direct Sponsored Content \"dark post\" authored by a Company Page (see `organizationId`); supported goals are engagement, traffic, awareness, and video_views (video ads use the `video` field; video_views requires a video), and traffic ads require `linkUrl`. **Idempotency:** this endpoint is not idempotent at the platform level (a blind retry creates a second campaign/ad set/ad). Send an `Idempotency-Key` header to make retries safe: the first request with a given key creates the ad and we store the response; a retry with the same key replays that exact response (with `Idempotent-Replayed: true`) instead of creating duplicates. Reusing a key with a different body returns 422; a key whose first request is still in flight returns 409 (retry after a short backoff). Keys are scoped to your credential and expire after 24h.
549
+ Create a paid ad with custom creative across Meta, Google Ads, Pinterest, TikTok, X, LinkedIn, and OpenAI Ads (ChatGPT Ads). Three mutually-exclusive request shapes are selected by the body: - Legacy single-creative shape (all platforms, the default). - Meta-only multi-creative shape via the creatives array: one ad set with N ads sharing budget and targeting. - Attach shape via adSetId: adds one new ad to an existing ad set, inheriting its budget, targeting, and schedule (Meta, TikTok, and LinkedIn). On LinkedIn adSetId is the existing Campaign id, and the budget, schedule, targeting and bidding fields must be omitted. Per-platform required fields, budget minimums, and video-ad rules are documented on each property below. LinkedIn creates a Single Image or Single Video Ad backed by a Direct Sponsored Content \"dark post\" authored by a Company Page (see `organizationId`). Supported goals are engagement, traffic, awareness, and video_views (video ads use the `video` field; video_views requires a video), and traffic ads require `linkUrl`. **Idempotency:** this endpoint is not idempotent at the platform level (a blind retry creates a second campaign/ad set/ad). Send an `Idempotency-Key` header to make retries safe: the first request with a given key creates the ad and we store the response; a retry with the same key replays that exact response (with `Idempotent-Replayed: true`) instead of creating duplicates. Reusing a key with a different body returns 422; a key whose first request is still in flight returns 409 (retry after a short backoff). Keys are scoped to your credential and expire after 24h.
550
550
 
551
551
  ### Examples
552
552
 
@@ -903,7 +903,7 @@ end
903
903
 
904
904
  Duplicate a campaign
905
905
 
906
- Duplicates a campaign, including its ad sets, ads, creatives, and targeting by default (`deepCopy: true`). The copy is created paused so callers can review before launching. Per-platform implementation: - **Meta** uses the native `POST /{campaign-id}/copies` endpoint. - **TikTok** has no native copy primitive; Zernio walks the source graph (`/v2/campaign/get/`, `/v2/adgroup/get/`, `/v2/ad/get/`) and recreates each entity via the corresponding `/create/` endpoints, carrying over budget / targeting / bid_type / bid_price / deep_bid_type / creative fields. Spark Ad linkage (`tiktok_item_id`) is preserved. - **LinkedIn** has no native copy primitive; Zernio walks the source CampaignGroup → Campaigns → Creatives and recreates each entity, carrying over `type` / `costType` / `unitCost` / `optimizationTargetType` / `creativeSelection` / `objectiveType` / `format` / `dailyBudget` / `totalBudget` / `targetingCriteria` / `runSchedule` and every Creative's `content` object verbatim. `statusOption: INHERITED_FROM_SOURCE` is evaluated **per entity**: any Group / Campaign / Creative whose source is `ACTIVE` gets its clone activated too. Duplicating an ACTIVE campaign with `INHERITED_FROM_SOURCE` starts a second front of spend the moment the clone activates — the safe default is `PAUSED`. The new hierarchy is asynchronous to materialize in our DB — we trigger sync discovery automatically. Set `syncAfter: false` to skip and poll `/v1/ads/tree` on your own cadence. Other platforms return 501 Not Implemented.
906
+ Duplicates a campaign, including its ad sets, ads, creatives, and targeting by default (`deepCopy: true`). The copy is created paused so callers can review before launching. Per-platform implementation: - **Meta** uses the native `POST /{campaign-id}/copies` endpoint. - **TikTok** has no native copy primitive; Zernio walks the source graph (`/v2/campaign/get/`, `/v2/adgroup/get/`, `/v2/ad/get/`) and recreates each entity via the corresponding `/create/` endpoints, carrying over budget / targeting / bid_type / bid_price / deep_bid_type / creative fields. Spark Ad linkage (`tiktok_item_id`) is preserved. - **LinkedIn** has no native copy primitive; Zernio walks the source CampaignGroup → Campaigns → Creatives and recreates each entity, carrying over `type` / `costType` / `unitCost` / `optimizationTargetType` / `creativeSelection` / `objectiveType` / `format` / `dailyBudget` / `totalBudget` / `targetingCriteria` / `runSchedule` and every Creative's `content` object verbatim. `statusOption: INHERITED_FROM_SOURCE` is evaluated **per entity**: any Group / Campaign / Creative whose source is `ACTIVE` gets its clone activated too. Duplicating an ACTIVE campaign with `INHERITED_FROM_SOURCE` starts a second front of spend the moment the clone activates. The safe default is `PAUSED`. The new hierarchy is asynchronous to materialize in our DB, and we trigger sync discovery automatically. Set `syncAfter: false` to skip and poll `/v1/ads/tree` on your own cadence. Other platforms return 501 Not Implemented.
907
907
 
908
908
  ### Examples
909
909
 
@@ -978,7 +978,7 @@ end
978
978
 
979
979
  Duplicate an ad set
980
980
 
981
- Duplicates an ad set, including its ads and creatives by default (`deepCopy: true`), via Meta's native `POST /{adset-id}/copies`. The copy is created paused so callers can review before launching. `campaignId` retargets the copy into another campaign; omitted = the source's own campaign. The new hierarchy materializes asynchronously — sync discovery is triggered automatically (`syncAfter: false` to skip).
981
+ Duplicates an ad set, including its ads and creatives by default (`deepCopy: true`), via Meta's native `POST /{adset-id}/copies`. The copy is created paused so callers can review before launching. `campaignId` retargets the copy into another campaign; omitted = the source's own campaign. The new hierarchy materializes asynchronously, and sync discovery is triggered automatically (`syncAfter: false` to skip).
982
982
 
983
983
  ### Examples
984
984
 
@@ -1122,7 +1122,7 @@ end
1122
1122
 
1123
1123
  Live ad-set details incl. learning phase
1124
1124
 
1125
- Reads the ad set live from Meta, returned verbatim. The default projection includes `learning_stage_info` (learning-phase status: LEARNING / SUCCESS / FAIL / WAIVING — Meta omits its `status` key on paused ad sets), delivery settings, budgets, schedule and targeting. `fields` is a raw-passthrough override; unknown fields return Meta's 400 verbatim.
1125
+ Reads the ad set live from Meta, returned verbatim. The default projection includes `learning_stage_info` (learning-phase status: LEARNING / SUCCESS / FAIL / WAIVING; Meta omits its `status` key on paused ad sets), delivery settings, budgets, schedule and targeting. `fields` is a raw-passthrough override; unknown fields return Meta's 400 verbatim.
1126
1126
 
1127
1127
  ### Examples
1128
1128
 
@@ -1214,21 +1214,21 @@ api_instance = Zernio::AdCampaignsApi.new
1214
1214
  opts = {
1215
1215
  page: 56, # Integer | Page number (1-based)
1216
1216
  limit: 56, # Integer | Campaigns per page
1217
- source: 'zernio', # String | `all` (default) returns both Zernio-created ads and those discovered from the platform's ad manager — matches the web UI's default view. Pass `zernio` to restrict to isExternal=false only. Status is NOT filtered by default — use the `status` param for that.
1217
+ source: 'zernio', # String | `all` (default) returns both Zernio-created ads and those discovered from the platform's ad manager. Matches the web UI's default view. Pass `zernio` to restrict to isExternal=false only. Status is NOT filtered by default; use the `status` param for that.
1218
1218
  platform: 'facebook', # String |
1219
1219
  status: Zernio::AdStatus::ACTIVE, # AdStatus | Filter by derived campaign status (post-aggregation)
1220
- ad_account_id: 'ad_account_id_example', # String | One or more platform ad account IDs to scope the tree to (agency profiles connect a whole Business Manager but a workspace usually cares about a subset). Comma-separate for multiple (`?adAccountId=act_1,act_2,act_3`); single value keeps its old shape. Max 50 accounts per request; the plural aliases `adAccountIds` and `platformAdAccountIds` are rejected with a 400 to stop them from silently returning the unfiltered fleet.
1221
- page_id: 'page_id_example', # String | Meta only: Facebook Page ID. Prunes the tree to ads whose creative is backed by this Page — campaigns and ad sets with no ad on the Page drop out, and rolled-up metrics cover only the Page's ads. Mirrors the same filter on /v1/ads and /v1/ads/campaigns.
1222
- account_id: 'account_id_example', # String | Social account ID
1220
+ ad_account_id: 'ad_account_id_example', # String | One or more platform ad account IDs to scope the tree to (agency profiles connect a whole Business Manager but a team usually cares about a subset). Comma-separate for multiple (`?adAccountId=act_1,act_2,act_3`); single value keeps its old shape. Max 50 accounts per request; the plural aliases `adAccountIds` and `platformAdAccountIds` are rejected with a 400 to stop them from silently returning the unfiltered fleet.
1221
+ page_id: 'page_id_example', # String | Meta only: Facebook Page ID. Prunes the tree to ads whose creative is backed by this Page: campaigns and ad sets with no ad on the Page drop out, and rolled-up metrics cover only the Page's ads. Mirrors the same filter on /v1/ads and /v1/ads/campaigns.
1222
+ account_id: 'account_id_example', # String | Account ID
1223
1223
  profile_id: 'profile_id_example', # String | Profile ID
1224
- campaign_id: 'campaign_id_example', # String | Restrict the tree to a single campaign by its platform campaign id (the id the platform assigns, e.g. Meta's numeric campaign id). Filters the campaign set itself, so it works regardless of account size and pagination — pass this when you already hold a campaign id instead of paging the tree to find it. Mirrors the `campaignId` filter on GET /v1/ads.
1225
- from_date: Date.parse('2013-10-20'), # Date | Start of the METRICS date range (YYYY-MM-DD). On its own it affects only the spend/impression numbers overlaid on each node, not which campaigns are returned — pass `hasDelivery` or `minSpend` to also filter the campaign set to this window. Defaults to 90 days ago.
1224
+ campaign_id: 'campaign_id_example', # String | Restrict the tree to a single campaign by its platform campaign id (the id the platform assigns, e.g. Meta's numeric campaign id). Filters the campaign set itself, so it works regardless of account size and pagination. Pass this when you already hold a campaign id instead of paging the tree to find it. Mirrors the `campaignId` filter on GET /v1/ads.
1225
+ from_date: Date.parse('2013-10-20'), # Date | Start of the METRICS date range (YYYY-MM-DD). On its own it affects only the spend/impression numbers overlaid on each node, not which campaigns are returned. Pass `hasDelivery` or `minSpend` to also filter the campaign set to this window. Defaults to 90 days ago.
1226
1226
  to_date: Date.parse('2013-10-20'), # Date | End of metrics date range (YYYY-MM-DD). Defaults to today. Max 730-day range.
1227
- has_delivery: true, # Boolean | Return only campaigns that delivered between `fromDate` and `toDate` — spend above zero, or impressions served at zero spend. Unlike `status`, which reads a campaign's CURRENT state, this filters on what happened inside the window, so a campaign that spent then and is paused today is still returned. Filters the campaign set itself, so `pagination.total` counts only matching campaigns.
1227
+ has_delivery: true, # Boolean | Return only campaigns that delivered between `fromDate` and `toDate`: spend above zero, or impressions served at zero spend. Unlike `status`, which reads a campaign's CURRENT state, this filters on what happened inside the window, so a campaign that spent then and is paused today is still returned. Filters the campaign set itself, so `pagination.total` counts only matching campaigns.
1228
1228
  min_spend: 8.14, # Float | Return only campaigns whose spend between `fromDate` and `toDate` reaches this amount. Expressed in each campaign's OWN currency (the `currency` field on the campaign node): spend is stored per ad account in its native currency and one response can span several. Implies `hasDelivery`; `minSpend=0` applies no filter.
1229
1229
  sort: 'newest', # String | Campaign-level sort order. `newest` (default) / `oldest` order by the campaign's newest-ad createdAt. `spend_desc` / `spend_asc` order by aggregated spend in the requested date range; campaigns with no spend land at the end.
1230
1230
  time_increment: 1, # Integer | Set to `1` to also return a daily breakdown. Mirrors Meta Insights' `time_increment=1`: each node gains a `daily[]` array of per-day metrics (same fields as the aggregated `metrics`) alongside the range total, so you get per-entity daily trends in ONE call instead of calling the tree once per day. Only `1` (daily) is supported. The daily series covers the same date range and uses the same source data as `metrics`, except `reach` on Meta and TikTok: the range total is the platform's de-duplicated value, so daily reach does not sum to it. See `dailyLevel` to control which levels carry it.
1231
- daily_level: 'campaign' # String | Which tree levels get the `daily[]` series when `timeIncrement=1`. `campaign` (default) attaches it on campaign nodes only — the common per-campaign-trend case, and the smallest payload. `adset` adds it on ad sets too; `ad` adds it on every ad in `ads[]` as well (heaviest — a long range × up to 100 ads per ad set). Scope with `campaignId` to keep `ad`-level responses small. Ignored when `timeIncrement` is unset.
1231
+ daily_level: 'campaign' # String | Which tree levels get the `daily[]` series when `timeIncrement=1`. `campaign` (default) attaches it on campaign nodes only: the common per-campaign-trend case, and the smallest payload. `adset` adds it on ad sets too; `ad` adds it on every ad in `ads[]` as well (heaviest: a long range × up to 100 ads per ad set). Scope with `campaignId` to keep `ad`-level responses small. Ignored when `timeIncrement` is unset.
1232
1232
  }
1233
1233
 
1234
1234
  begin
@@ -1264,21 +1264,21 @@ end
1264
1264
  | ---- | ---- | ----------- | ----- |
1265
1265
  | **page** | **Integer** | Page number (1-based) | [optional][default to 1] |
1266
1266
  | **limit** | **Integer** | Campaigns per page | [optional][default to 20] |
1267
- | **source** | **String** | `all` (default) returns both Zernio-created ads and those discovered from the platform's ad manager — matches the web UI's default view. Pass `zernio` to restrict to isExternal=false only. Status is NOT filtered by default — use the `status` param for that. | [optional][default to 'all'] |
1267
+ | **source** | **String** | `all` (default) returns both Zernio-created ads and those discovered from the platform's ad manager. Matches the web UI's default view. Pass `zernio` to restrict to isExternal=false only. Status is NOT filtered by default; use the `status` param for that. | [optional][default to 'all'] |
1268
1268
  | **platform** | **String** | | [optional] |
1269
1269
  | **status** | [**AdStatus**](.md) | Filter by derived campaign status (post-aggregation) | [optional] |
1270
- | **ad_account_id** | **String** | One or more platform ad account IDs to scope the tree to (agency profiles connect a whole Business Manager but a workspace usually cares about a subset). Comma-separate for multiple (`?adAccountId=act_1,act_2,act_3`); single value keeps its old shape. Max 50 accounts per request; the plural aliases `adAccountIds` and `platformAdAccountIds` are rejected with a 400 to stop them from silently returning the unfiltered fleet. | [optional] |
1271
- | **page_id** | **String** | Meta only: Facebook Page ID. Prunes the tree to ads whose creative is backed by this Page — campaigns and ad sets with no ad on the Page drop out, and rolled-up metrics cover only the Page's ads. Mirrors the same filter on /v1/ads and /v1/ads/campaigns. | [optional] |
1272
- | **account_id** | **String** | Social account ID | [optional] |
1270
+ | **ad_account_id** | **String** | One or more platform ad account IDs to scope the tree to (agency profiles connect a whole Business Manager but a team usually cares about a subset). Comma-separate for multiple (`?adAccountId=act_1,act_2,act_3`); single value keeps its old shape. Max 50 accounts per request; the plural aliases `adAccountIds` and `platformAdAccountIds` are rejected with a 400 to stop them from silently returning the unfiltered fleet. | [optional] |
1271
+ | **page_id** | **String** | Meta only: Facebook Page ID. Prunes the tree to ads whose creative is backed by this Page: campaigns and ad sets with no ad on the Page drop out, and rolled-up metrics cover only the Page's ads. Mirrors the same filter on /v1/ads and /v1/ads/campaigns. | [optional] |
1272
+ | **account_id** | **String** | Account ID | [optional] |
1273
1273
  | **profile_id** | **String** | Profile ID | [optional] |
1274
- | **campaign_id** | **String** | Restrict the tree to a single campaign by its platform campaign id (the id the platform assigns, e.g. Meta's numeric campaign id). Filters the campaign set itself, so it works regardless of account size and pagination — pass this when you already hold a campaign id instead of paging the tree to find it. Mirrors the `campaignId` filter on GET /v1/ads. | [optional] |
1275
- | **from_date** | **Date** | Start of the METRICS date range (YYYY-MM-DD). On its own it affects only the spend/impression numbers overlaid on each node, not which campaigns are returned — pass `hasDelivery` or `minSpend` to also filter the campaign set to this window. Defaults to 90 days ago. | [optional] |
1274
+ | **campaign_id** | **String** | Restrict the tree to a single campaign by its platform campaign id (the id the platform assigns, e.g. Meta's numeric campaign id). Filters the campaign set itself, so it works regardless of account size and pagination. Pass this when you already hold a campaign id instead of paging the tree to find it. Mirrors the `campaignId` filter on GET /v1/ads. | [optional] |
1275
+ | **from_date** | **Date** | Start of the METRICS date range (YYYY-MM-DD). On its own it affects only the spend/impression numbers overlaid on each node, not which campaigns are returned. Pass `hasDelivery` or `minSpend` to also filter the campaign set to this window. Defaults to 90 days ago. | [optional] |
1276
1276
  | **to_date** | **Date** | End of metrics date range (YYYY-MM-DD). Defaults to today. Max 730-day range. | [optional] |
1277
- | **has_delivery** | **Boolean** | Return only campaigns that delivered between `fromDate` and `toDate` — spend above zero, or impressions served at zero spend. Unlike `status`, which reads a campaign's CURRENT state, this filters on what happened inside the window, so a campaign that spent then and is paused today is still returned. Filters the campaign set itself, so `pagination.total` counts only matching campaigns. | [optional] |
1277
+ | **has_delivery** | **Boolean** | Return only campaigns that delivered between `fromDate` and `toDate`: spend above zero, or impressions served at zero spend. Unlike `status`, which reads a campaign's CURRENT state, this filters on what happened inside the window, so a campaign that spent then and is paused today is still returned. Filters the campaign set itself, so `pagination.total` counts only matching campaigns. | [optional] |
1278
1278
  | **min_spend** | **Float** | Return only campaigns whose spend between `fromDate` and `toDate` reaches this amount. Expressed in each campaign's OWN currency (the `currency` field on the campaign node): spend is stored per ad account in its native currency and one response can span several. Implies `hasDelivery`; `minSpend=0` applies no filter. | [optional] |
1279
1279
  | **sort** | **String** | Campaign-level sort order. `newest` (default) / `oldest` order by the campaign's newest-ad createdAt. `spend_desc` / `spend_asc` order by aggregated spend in the requested date range; campaigns with no spend land at the end. | [optional][default to 'newest'] |
1280
1280
  | **time_increment** | **Integer** | Set to `1` to also return a daily breakdown. Mirrors Meta Insights' `time_increment=1`: each node gains a `daily[]` array of per-day metrics (same fields as the aggregated `metrics`) alongside the range total, so you get per-entity daily trends in ONE call instead of calling the tree once per day. Only `1` (daily) is supported. The daily series covers the same date range and uses the same source data as `metrics`, except `reach` on Meta and TikTok: the range total is the platform's de-duplicated value, so daily reach does not sum to it. See `dailyLevel` to control which levels carry it. | [optional] |
1281
- | **daily_level** | **String** | Which tree levels get the `daily[]` series when `timeIncrement=1`. `campaign` (default) attaches it on campaign nodes only — the common per-campaign-trend case, and the smallest payload. `adset` adds it on ad sets too; `ad` adds it on every ad in `ads[]` as well (heaviest — a long range × up to 100 ads per ad set). Scope with `campaignId` to keep `ad`-level responses small. Ignored when `timeIncrement` is unset. | [optional][default to 'campaign'] |
1281
+ | **daily_level** | **String** | Which tree levels get the `daily[]` series when `timeIncrement=1`. `campaign` (default) attaches it on campaign nodes only: the common per-campaign-trend case, and the smallest payload. `adset` adds it on ad sets too; `ad` adds it on every ad in `ads[]` as well (heaviest: a long range × up to 100 ads per ad set). Scope with `campaignId` to keep `ad`-level responses small. Ignored when `timeIncrement` is unset. | [optional][default to 'campaign'] |
1282
1282
 
1283
1283
  ### Return type
1284
1284
 
@@ -1300,7 +1300,7 @@ end
1300
1300
 
1301
1301
  Get daily account metrics
1302
1302
 
1303
- Returns daily aggregate metrics across all ads in a SocialAccount as a single time series — one row per calendar day in the requested range. Use this for dashboards that draw a daily-spend or daily-conversions chart, instead of calling `/v1/ads/tree` once per day. `accountId` is required. The lookup is sibling-expanded so passing the `metaads` ID also includes ads under the linked `facebook` / `instagram` posting account (and vice-versa) — same convention as `/v1/ads/tree` and `/v1/ads`. Date range defaults to the last 90 days. Capped at 730 days. Ranges older than the ingested history return a `202` immediately with the covered part and `backfillPending: true` while the rest is backfilled in the background; repeat the request shortly until it returns 200 with full data. With adAccountId set to a Google customer id this is the customer-level performance report (clicks, cost, impressions, conversions, all conversions per day).
1303
+ Returns daily aggregate metrics across all ads in a SocialAccount as a single time series, one row per calendar day in the requested range. Use this for dashboards that draw a daily-spend or daily-conversions chart, instead of calling `/v1/ads/tree` once per day. `accountId` is required. The lookup is sibling-expanded so passing the `metaads` ID also includes ads under the linked `facebook` / `instagram` posting account (and vice-versa), the same convention as `/v1/ads/tree` and `/v1/ads`. Date range defaults to the last 90 days. Capped at 730 days. Ranges older than the ingested history return a `202` immediately with the covered part and `backfillPending: true` while the rest is backfilled in the background; repeat the request shortly until it returns 200 with full data. With adAccountId set to a Google customer id this is the customer-level performance report (clicks, cost, impressions, conversions, all conversions per day).
1304
1304
 
1305
1305
  ### Examples
1306
1306
 
@@ -1314,7 +1314,7 @@ Zernio.configure do |config|
1314
1314
  end
1315
1315
 
1316
1316
  api_instance = Zernio::AdCampaignsApi.new
1317
- account_id = 'account_id_example' # String | Social account ID. Sibling-expanded to its linked posting↔ads pair.
1317
+ account_id = 'account_id_example' # String | Account ID. Sibling-expanded to its linked posting↔ads pair.
1318
1318
  opts = {
1319
1319
  ad_account_id: 'ad_account_id_example', # String | Optional platform-native ad account ID (e.g. Meta `act_…`, TikTok advertiser ID). Use when the connection wraps multiple platform ad accounts and the chart should show one only. Note: rows ingested before 2026-05-13 don't carry this column; the recurring 7-day re-sync repopulates them naturally.
1320
1320
  from_date: Date.parse('2013-10-20'), # Date | Inclusive start of metrics range (YYYY-MM-DD). Defaults to 90 days ago.
@@ -1353,7 +1353,7 @@ end
1353
1353
 
1354
1354
  | Name | Type | Description | Notes |
1355
1355
  | ---- | ---- | ----------- | ----- |
1356
- | **account_id** | **String** | Social account ID. Sibling-expanded to its linked posting↔ads pair. | |
1356
+ | **account_id** | **String** | Account ID. Sibling-expanded to its linked posting↔ads pair. | |
1357
1357
  | **ad_account_id** | **String** | Optional platform-native ad account ID (e.g. Meta `act_…`, TikTok advertiser ID). Use when the connection wraps multiple platform ad accounts and the chart should show one only. Note: rows ingested before 2026-05-13 don't carry this column; the recurring 7-day re-sync repopulates them naturally. | [optional] |
1358
1358
  | **from_date** | **Date** | Inclusive start of metrics range (YYYY-MM-DD). Defaults to 90 days ago. | [optional] |
1359
1359
  | **to_date** | **Date** | Inclusive end of metrics range (YYYY-MM-DD). Defaults to today. Max 730-day range. | [optional] |
@@ -1544,19 +1544,19 @@ end
1544
1544
 
1545
1545
  api_instance = Zernio::AdCampaignsApi.new
1546
1546
  opts = {
1547
- include_empty: true, # Boolean | Meta only. Campaign reads aggregate over ad documents, so a campaign with ZERO ads is normally invisible here — the state the two-step create (campaign, then ads via `existingCampaignId`) leaves behind whenever Meta rejects the ad step. Set true to list those too, with `adCount: 0` and zeroed metrics. Requires `accountId` and `adAccountId`, since an empty campaign has no ad row to resolve a token or ad account from.
1547
+ include_empty: true, # Boolean | Meta only. Campaign reads aggregate over ad documents, so a campaign with ZERO ads is normally invisible here, the state the two-step create (campaign, then ads via `existingCampaignId`) leaves behind whenever Meta rejects the ad step. Set true to list those too, with `adCount: 0` and zeroed metrics. Requires `accountId` and `adAccountId`, since an empty campaign has no ad row to resolve a token or ad account from.
1548
1548
  page: 56, # Integer | Page number (1-based)
1549
1549
  limit: 56, # Integer |
1550
- source: 'zernio', # String | `all` (default) returns both Zernio-created ads and those discovered from the platform's ad manager — matches the web UI's default view. Pass `zernio` to restrict to isExternal=false only. Status is NOT filtered by default — use the `status` param for that.
1550
+ source: 'zernio', # String | `all` (default) returns both Zernio-created ads and those discovered from the platform's ad manager. Matches the web UI's default view. Pass `zernio` to restrict to isExternal=false only. Status is NOT filtered by default; use the `status` param for that.
1551
1551
  platform: 'facebook', # String |
1552
1552
  status: Zernio::AdStatus::ACTIVE, # AdStatus | Filter by derived campaign status (post-aggregation)
1553
1553
  ad_account_id: 'ad_account_id_example', # String | Platform ad account ID (e.g. act_123 for Meta)
1554
1554
  page_id: 'page_id_example', # String | Meta only: Facebook Page ID. Campaigns have no Page of their own, so this keeps campaigns having at least one ad backed by this Page, with adCount and metrics computed over those ads only. Mirrors the same filter on /v1/ads and /v1/ads/tree.
1555
- account_id: 'account_id_example', # String | Social account ID
1555
+ account_id: 'account_id_example', # String | Account ID
1556
1556
  profile_id: 'profile_id_example', # String | Profile ID
1557
1557
  from_date: Date.parse('2013-10-20'), # Date | Start of metrics date range (YYYY-MM-DD, inclusive). Defaults to 90 days ago when both date params are omitted.
1558
1558
  to_date: Date.parse('2013-10-20'), # Date | End of metrics date range (YYYY-MM-DD, inclusive). Defaults to today. Max 730-day range.
1559
- has_delivery: true, # Boolean | Return only campaigns that delivered between `fromDate` and `toDate` — spend above zero, or impressions served at zero spend. Unlike `status`, which reads a campaign's CURRENT state, this filters on what happened inside the window. Filters the campaign set itself, so `pagination.total` counts only matching campaigns. Mirrors the same filter on /v1/ads/tree.
1559
+ has_delivery: true, # Boolean | Return only campaigns that delivered between `fromDate` and `toDate`: spend above zero, or impressions served at zero spend. Unlike `status`, which reads a campaign's CURRENT state, this filters on what happened inside the window. Filters the campaign set itself, so `pagination.total` counts only matching campaigns. Mirrors the same filter on /v1/ads/tree.
1560
1560
  min_spend: 8.14 # Float | Return only campaigns whose spend between `fromDate` and `toDate` reaches this amount, in each campaign's OWN currency (the `currency` field on the campaign). Implies `hasDelivery`; `minSpend=0` applies no filter. Mirrors the same filter on /v1/ads/tree.
1561
1561
  }
1562
1562
 
@@ -1591,19 +1591,19 @@ end
1591
1591
 
1592
1592
  | Name | Type | Description | Notes |
1593
1593
  | ---- | ---- | ----------- | ----- |
1594
- | **include_empty** | **Boolean** | Meta only. Campaign reads aggregate over ad documents, so a campaign with ZERO ads is normally invisible here — the state the two-step create (campaign, then ads via `existingCampaignId`) leaves behind whenever Meta rejects the ad step. Set true to list those too, with `adCount: 0` and zeroed metrics. Requires `accountId` and `adAccountId`, since an empty campaign has no ad row to resolve a token or ad account from. | [optional] |
1594
+ | **include_empty** | **Boolean** | Meta only. Campaign reads aggregate over ad documents, so a campaign with ZERO ads is normally invisible here, the state the two-step create (campaign, then ads via `existingCampaignId`) leaves behind whenever Meta rejects the ad step. Set true to list those too, with `adCount: 0` and zeroed metrics. Requires `accountId` and `adAccountId`, since an empty campaign has no ad row to resolve a token or ad account from. | [optional] |
1595
1595
  | **page** | **Integer** | Page number (1-based) | [optional][default to 1] |
1596
1596
  | **limit** | **Integer** | | [optional][default to 20] |
1597
- | **source** | **String** | `all` (default) returns both Zernio-created ads and those discovered from the platform's ad manager — matches the web UI's default view. Pass `zernio` to restrict to isExternal=false only. Status is NOT filtered by default — use the `status` param for that. | [optional][default to 'all'] |
1597
+ | **source** | **String** | `all` (default) returns both Zernio-created ads and those discovered from the platform's ad manager. Matches the web UI's default view. Pass `zernio` to restrict to isExternal=false only. Status is NOT filtered by default; use the `status` param for that. | [optional][default to 'all'] |
1598
1598
  | **platform** | **String** | | [optional] |
1599
1599
  | **status** | [**AdStatus**](.md) | Filter by derived campaign status (post-aggregation) | [optional] |
1600
1600
  | **ad_account_id** | **String** | Platform ad account ID (e.g. act_123 for Meta) | [optional] |
1601
1601
  | **page_id** | **String** | Meta only: Facebook Page ID. Campaigns have no Page of their own, so this keeps campaigns having at least one ad backed by this Page, with adCount and metrics computed over those ads only. Mirrors the same filter on /v1/ads and /v1/ads/tree. | [optional] |
1602
- | **account_id** | **String** | Social account ID | [optional] |
1602
+ | **account_id** | **String** | Account ID | [optional] |
1603
1603
  | **profile_id** | **String** | Profile ID | [optional] |
1604
1604
  | **from_date** | **Date** | Start of metrics date range (YYYY-MM-DD, inclusive). Defaults to 90 days ago when both date params are omitted. | [optional] |
1605
1605
  | **to_date** | **Date** | End of metrics date range (YYYY-MM-DD, inclusive). Defaults to today. Max 730-day range. | [optional] |
1606
- | **has_delivery** | **Boolean** | Return only campaigns that delivered between `fromDate` and `toDate` — spend above zero, or impressions served at zero spend. Unlike `status`, which reads a campaign's CURRENT state, this filters on what happened inside the window. Filters the campaign set itself, so `pagination.total` counts only matching campaigns. Mirrors the same filter on /v1/ads/tree. | [optional] |
1606
+ | **has_delivery** | **Boolean** | Return only campaigns that delivered between `fromDate` and `toDate`: spend above zero, or impressions served at zero spend. Unlike `status`, which reads a campaign's CURRENT state, this filters on what happened inside the window. Filters the campaign set itself, so `pagination.total` counts only matching campaigns. Mirrors the same filter on /v1/ads/tree. | [optional] |
1607
1607
  | **min_spend** | **Float** | Return only campaigns whose spend between `fromDate` and `toDate` reaches this amount, in each campaign's OWN currency (the `currency` field on the campaign). Implies `hasDelivery`; `minSpend=0` applies no filter. Mirrors the same filter on /v1/ads/tree. | [optional] |
1608
1608
 
1609
1609
  ### Return type
@@ -1643,7 +1643,7 @@ api_instance = Zernio::AdCampaignsApi.new
1643
1643
  opts = {
1644
1644
  page: 56, # Integer | Page number (1-based)
1645
1645
  limit: 56, # Integer |
1646
- account_id: 'account_id_example', # String | Social account ID
1646
+ account_id: 'account_id_example', # String | Account ID
1647
1647
  ad_account_id: 'ad_account_id_example', # String | Platform ad account ID (Google customer ID). Mirrors the same filter on /v1/ads.
1648
1648
  profile_id: 'profile_id_example', # String | Profile ID
1649
1649
  campaign_id: 'campaign_id_example', # String | Platform campaign ID
@@ -1687,7 +1687,7 @@ end
1687
1687
  | ---- | ---- | ----------- | ----- |
1688
1688
  | **page** | **Integer** | Page number (1-based) | [optional][default to 1] |
1689
1689
  | **limit** | **Integer** | | [optional][default to 50] |
1690
- | **account_id** | **String** | Social account ID | [optional] |
1690
+ | **account_id** | **String** | Account ID | [optional] |
1691
1691
  | **ad_account_id** | **String** | Platform ad account ID (Google customer ID). Mirrors the same filter on /v1/ads. | [optional] |
1692
1692
  | **profile_id** | **String** | Profile ID | [optional] |
1693
1693
  | **campaign_id** | **String** | Platform campaign ID | [optional] |
@@ -1717,7 +1717,7 @@ end
1717
1717
 
1718
1718
  List ad sets
1719
1719
 
1720
- Ad sets (Google ad groups) synced for the connection, optionally filtered by platform and campaignId. Reads the `ad_sets` table directly, independent of the `ads` rollup GET /v1/ads/tree uses, so a just-created standalone ad group with no ad yet (POST /v1/ads/ad-sets, Google only) is visible here even though it is invisible in the tree until an ad joins it via `existingAdGroupId`. Returns at most 500 rows, newest first.
1720
+ Ad sets (Google ad groups) synced for the connection, optionally filtered by platform and campaignId. Reads the `ad_sets` table directly, independent of the `ads` rollup GET /v1/ads/tree uses, so a newly created standalone ad group with no ad yet (POST /v1/ads/ad-sets, Google only) is visible here even though it is invisible in the tree until an ad joins it via `existingAdGroupId`. Returns at most 500 rows, newest first.
1721
1721
 
1722
1722
  ### Examples
1723
1723
 
@@ -1732,7 +1732,7 @@ end
1732
1732
 
1733
1733
  api_instance = Zernio::AdCampaignsApi.new
1734
1734
  opts = {
1735
- account_id: 'account_id_example', # String | Social account ID
1735
+ account_id: 'account_id_example', # String | Account ID
1736
1736
  campaign_id: 'campaign_id_example', # String | Platform campaign ID
1737
1737
  platform: 'facebook' # String |
1738
1738
  }
@@ -1768,7 +1768,7 @@ end
1768
1768
 
1769
1769
  | Name | Type | Description | Notes |
1770
1770
  | ---- | ---- | ----------- | ----- |
1771
- | **account_id** | **String** | Social account ID | [optional] |
1771
+ | **account_id** | **String** | Account ID | [optional] |
1772
1772
  | **campaign_id** | **String** | Platform campaign ID | [optional] |
1773
1773
  | **platform** | **String** | | [optional] |
1774
1774
 
@@ -1792,7 +1792,7 @@ end
1792
1792
 
1793
1793
  List ads
1794
1794
 
1795
- Returns a paginated list of ads with metrics computed over an optional date range. Use source=all to include externally-synced ads from platform ad managers. If no date range is provided, defaults to the last 90 days. Date range is capped at 730 days max. To find the Zernio ad behind a comment you see in Meta Business Manager, filter by platformAdId (the Meta ad ID), effectiveObjectStoryId (Facebook), or effectiveInstagramMediaId (Instagram) — those are the post/media the ad's engagement lives on, and are also returned on each ad's `creative` object. Then call GET /v1/ads/{adId}/comments with the returned ad id.
1795
+ Returns a paginated list of ads with metrics computed over an optional date range. Use source=all to include externally-synced ads from platform ad managers. If no date range is provided, defaults to the last 90 days. Date range is capped at 730 days max. To find the Zernio ad behind a comment you see in Meta Business Manager, filter by platformAdId (the Meta ad ID), effectiveObjectStoryId (Facebook), or effectiveInstagramMediaId (Instagram). Those are the post/media the ad's engagement lives on, and are also returned on each ad's `creative` object. Then call GET /v1/ads/{adId}/comments with the returned ad id.
1796
1796
 
1797
1797
  ### Examples
1798
1798
 
@@ -1812,7 +1812,7 @@ opts = {
1812
1812
  source: 'zernio', # String | all (default) = Zernio-created + platform-discovered ads. zernio = restrict to Zernio-created only.
1813
1813
  status: Zernio::AdStatus::ACTIVE, # AdStatus |
1814
1814
  platform: 'facebook', # String |
1815
- account_id: 'account_id_example', # String | Social account ID
1815
+ account_id: 'account_id_example', # String | Account ID
1816
1816
  ad_account_id: 'ad_account_id_example', # String | Platform ad account ID (e.g. act_123 for Meta). Mirrors the same filter on /v1/ads/campaigns and /v1/ads/tree.
1817
1817
  page_id: 'page_id_example', # String | Meta only: Facebook Page ID. Returns only ads whose creative is backed by this Page (a Meta ad account serves ads for every Page in the Business Manager). Matches each ad's `creative.pageId`; ads with no page signal (rare IG-only creatives) never match. Mirrors the same filter on /v1/ads/campaigns and /v1/ads/tree.
1818
1818
  profile_id: 'profile_id_example', # String | Profile ID
@@ -1861,7 +1861,7 @@ end
1861
1861
  | **source** | **String** | all (default) = Zernio-created + platform-discovered ads. zernio = restrict to Zernio-created only. | [optional][default to 'all'] |
1862
1862
  | **status** | [**AdStatus**](.md) | | [optional] |
1863
1863
  | **platform** | **String** | | [optional] |
1864
- | **account_id** | **String** | Social account ID | [optional] |
1864
+ | **account_id** | **String** | Account ID | [optional] |
1865
1865
  | **ad_account_id** | **String** | Platform ad account ID (e.g. act_123 for Meta). Mirrors the same filter on /v1/ads/campaigns and /v1/ads/tree. | [optional] |
1866
1866
  | **page_id** | **String** | Meta only: Facebook Page ID. Returns only ads whose creative is backed by this Page (a Meta ad account serves ads for every Page in the Business Manager). Matches each ad's `creative.pageId`; ads with no page signal (rare IG-only creatives) never match. Mirrors the same filter on /v1/ads/campaigns and /v1/ads/tree. | [optional] |
1867
1867
  | **profile_id** | **String** | Profile ID | [optional] |
@@ -2183,7 +2183,7 @@ end
2183
2183
 
2184
2184
  Update ad
2185
2185
 
2186
- Patch one or more fields on an ad. Status, budget, targeting, and creative changes are propagated to the platform. Per-platform support: - **Meta** (Facebook + Instagram): all fields supported. - **TikTok**: status, budget, targeting (via `/v2/adgroup/update/`), and creative (via `/v2/ad/update/` patch-style — `headline` is ignored, `body` becomes `ad_text`). - **Google**: status, budget, KEYWORD edits via `targeting.keywords` / `targeting.negativeKeywords`, and DEVICE bid adjustments via `targeting.devices` — each list you send becomes the FULL new set of its kind (criteria not in the list are removed); a kind left out is untouched. Any other `targeting` field returns 400: Google cannot mutate broad targeting post-create without recreating the campaign. `creative` returns 501. - **LinkedIn**: status, budget, targeting (geo countries only, applied to the LinkedIn Campaign via PARTIAL_UPDATE), and creative (uploads new media, creates a replacement inline creative on the same campaign, pauses the old one). - **Pinterest / X / OpenAI Ads**: status + budget only. Sending `targeting` or `creative` returns 501 with code `unsupported_platform_operation`. OpenAI Ads budget is lifetime-only (see `budget.type` below). **Google keyword replacement:** These edits affect the ad's entire ad group, including sibling ads. Positive (`targeting.keywords`) and negative (`targeting.negativeKeywords`) sets are independent: omit a field to leave that set unchanged, or send `[]` to remove every keyword of that kind. Zernio compares each supplied set with Google's live criteria by case-insensitive keyword text and match type. A matching criterion is left untouched, retaining its criterion ID, enabled/paused status, keyword-level bid overrides, labels, and criterion-associated history/statistics. Zernio does not reset its quality score; Google continues to calculate scores and statistics normally. Text comparison does not trim whitespace. A bare string or an object without `matchType` means `broad`, not the existing criterion's match type. For example, resending an existing `{ \"text\": \"plumber\", \"matchType\": \"exact\" }` preserves it; sending `\"plumber\"` instead removes that EXACT criterion and requests a BROAD one. Changing text or match type removes criteria no longer requested and creates any missing criteria. New criteria get new IDs and do not inherit removed criteria's bid overrides, labels, or history. Historical reporting for a removed criterion is not transferred to its replacement. To add keywords without replacing a set, use [POST /v1/ads/keywords](https://docs.zernio.com/ad-campaigns/add-ad-keywords). Use `PATCH /v1/ads/keywords/{keywordId}` to pause/enable one keyword, or `DELETE /v1/ads/keywords/{keywordId}` to remove it.
2186
+ Patch one or more fields on an ad. Status, budget, targeting, and creative changes are propagated to the platform. Per-platform support: - **Meta** (Facebook + Instagram): all fields supported. - **TikTok**: status, budget, targeting (via `/v2/adgroup/update/`), and creative (via `/v2/ad/update/` patch-style: `headline` is ignored, `body` becomes `ad_text`). - **Google**: status, budget, KEYWORD edits via `targeting.keywords` / `targeting.negativeKeywords`, and DEVICE bid adjustments via `targeting.devices`. Each list you send becomes the FULL new set of its kind (criteria not in the list are removed); a kind left out is untouched. Any other `targeting` field returns 400: Google cannot mutate broad targeting post-create without recreating the campaign. `creative` returns 501. - **LinkedIn**: status, budget, targeting (geo countries only, applied to the LinkedIn Campaign via PARTIAL_UPDATE), and creative (uploads new media, creates a replacement inline creative on the same campaign, pauses the old one). - **Pinterest / X / OpenAI Ads**: status + budget only. Sending `targeting` or `creative` returns 501 with code `unsupported_platform_operation`. OpenAI Ads budget is lifetime-only (see `budget.type` below). **Google keyword replacement:** These edits affect the ad's entire ad group, including sibling ads. Positive (`targeting.keywords`) and negative (`targeting.negativeKeywords`) sets are independent: omit a field to leave that set unchanged, or send `[]` to remove every keyword of that kind. Zernio compares each supplied set with Google's live criteria by case-insensitive keyword text and match type. A matching criterion is left untouched, retaining its criterion ID, enabled/paused status, keyword-level bid overrides, labels, and criterion-associated history/statistics. Zernio does not reset its quality score; Google continues to calculate scores and statistics normally. Text comparison does not trim whitespace. A bare string or an object without `matchType` means `broad`, not the existing criterion's match type. For example, resending an existing `{ \"text\": \"plumber\", \"matchType\": \"exact\" }` preserves it; sending `\"plumber\"` instead removes that EXACT criterion and requests a BROAD one. Changing text or match type removes criteria no longer requested and creates any missing criteria. New criteria get new IDs and do not inherit removed criteria's bid overrides, labels, or history. Historical reporting for a removed criterion is not transferred to its replacement. To add keywords without replacing a set, use [POST /v1/ads/keywords](https://docs.zernio.com/ad-campaigns/add-ad-keywords). Use `PATCH /v1/ads/keywords/{keywordId}` to pause/enable one keyword, or `DELETE /v1/ads/keywords/{keywordId}` to remove it.
2187
2187
 
2188
2188
  ### Examples
2189
2189
 
@@ -2254,7 +2254,7 @@ end
2254
2254
 
2255
2255
  Update a campaign
2256
2256
 
2257
- Campaign-level edits. Send at least one of `budget`, `bidStrategy`, `portfolioBidStrategyId`, `name` or `platformSpecificData`. An unsupported field is always an error, never a silent drop. | Body field | Meta | Google | Others | |---|---|---|---| | `bidStrategy` | Yes | Yes | 501 | | `bidAmount`, `roasAverageFloor` | 400 — ad-set level | Yes | 400 | | `portfolioBidStrategyId` | 400 | Yes | 400 | | `budget` (CBO; ABO returns 409) | Yes | 501 | 501 | | `name` | Yes | 501 | 501 | | `platformSpecificData.spendCap` | Yes | 400 | 400 | | `accountId` (empty campaigns) | Yes | - | - | On Google: `LOWEST_COST_WITHOUT_CAP` = Maximize Conversions, `COST_CAP` + `bidAmount` = Target CPA, `LOWEST_COST_WITH_MIN_ROAS` + `roasAverageFloor` = Target ROAS, `LOWEST_COST_WITH_BID_CAP` + `bidAmount` = Maximize Clicks with a CPC ceiling; `portfolioBidStrategyId` attaches a portfolio strategy instead (exclusive with `bidStrategy`). Setting the standard triplet on a campaign that is currently on a PORTFOLIO strategy is rejected: detach it in Google Ads first, since it is shared across campaigns. `accountId` forwards the update straight to Meta for a campaign with zero ads, which would otherwise 404; the response then carries `updated: 0`.
2257
+ Campaign-level edits. Send at least one of `budget`, `bidStrategy`, `portfolioBidStrategyId`, `name` or `platformSpecificData`. An unsupported field is always an error, never a silent drop. | Body field | Meta | Google | Others | |---|---|---|---| | `bidStrategy` | Yes | Yes | 501 | | `bidAmount`, `roasAverageFloor` | 400 (ad-set level) | Yes | 400 | | `portfolioBidStrategyId` | 400 | Yes | 400 | | `budget` (CBO; ABO returns 409) | Yes | 501 | 501 | | `name` | Yes | 501 | 501 | | `platformSpecificData.spendCap` | Yes | 400 | 400 | | `accountId` (empty campaigns) | Yes | - | - | On Google: `LOWEST_COST_WITHOUT_CAP` = Maximize Conversions, `COST_CAP` + `bidAmount` = Target CPA, `LOWEST_COST_WITH_MIN_ROAS` + `roasAverageFloor` = Target ROAS, `LOWEST_COST_WITH_BID_CAP` + `bidAmount` = Maximize Clicks with a CPC ceiling; `portfolioBidStrategyId` attaches a portfolio strategy instead (exclusive with `bidStrategy`). Setting the standard triplet on a campaign that is currently on a PORTFOLIO strategy is rejected: detach it in Google Ads first, since it is shared across campaigns. `accountId` forwards the update straight to Meta for a campaign with zero ads, which would otherwise 404; the response then carries `updated: 0`.
2258
2258
 
2259
2259
  ### Examples
2260
2260
 
@@ -2325,7 +2325,7 @@ end
2325
2325
 
2326
2326
  Pause or resume a campaign
2327
2327
 
2328
- Writes the campaign's own on/off switch, then lets the platform cascade delivery to its ad sets and ads. Makes one platform API call, not one per ad. The switch is always written, whatever delivery status the ads underneath report: an ad still in review does not block resuming its campaign. The echoed `status` is the confirmation that it landed. `updated` / `skipped` describe only the ads whose own stored status CHANGED alongside it, so `updated: 0` is a normal successful response, not a no-op. Ads are skipped when they are in a terminal status (rejected, completed, cancelled), already in the target state, or switched on but not yet delivering — the last group keeps its `pending_review` / `error` status until the platform reports what it became. `skippedReasons` names which case applies. On Meta this flips the campaign only. An ad set paused in its own right stays paused, so pair this with PUT /v1/ads/ad-sets/{adSetId}/status when you also need the ad set switched back on.
2328
+ Writes the campaign's own on/off switch, then lets the platform cascade delivery to its ad sets and ads. Makes one platform API call, not one per ad. The switch is always written, whatever delivery status the ads underneath report: an ad still in review does not block resuming its campaign. The echoed `status` is the confirmation that it landed. `updated` / `skipped` describe only the ads whose own stored status CHANGED alongside it, so `updated: 0` is a normal successful response, not a no-op. Ads are skipped when they are in a terminal status (rejected, completed, cancelled), already in the target state, or switched on but not yet delivering. The last group keeps its `pending_review` / `error` status until the platform reports what it became. `skippedReasons` names which case applies. On Meta this flips the campaign only. An ad set paused in its own right stays paused, so pair this with PUT /v1/ads/ad-sets/{adSetId}/status when you also need the ad set switched back on.
2329
2329
 
2330
2330
  ### Examples
2331
2331
 
@@ -2467,7 +2467,7 @@ end
2467
2467
 
2468
2468
  Update an ad set
2469
2469
 
2470
- Ad-set-level writes. Use this for ABO budget updates, ad-set-scoped pause/resume, bid-strategy edits, Meta value-rule-set attach/detach, and Meta-only post-launch delivery settings via `platformSpecificData`. At least one updatable field is required. Value rule sets (Meta only, see `/v1/ads/value-rule-sets`): - ATTACH or REPLACE: send `valueRuleSetId`. Attachment is driven by the id's presence, so `valueRulesApplied: true` is optional. Sending a different id replaces the previous association; there is no separate replace call. - DETACH: send `valueRulesApplied: false` and OMIT `valueRuleSetId`. - Sending `valueRulesApplied: false` TOGETHER with `valueRuleSetId` returns 400 `mutually_exclusive_fields`. This is deliberate: Meta attaches the rule set whenever `value_rule_set_id` is present, even with `value_rules_applied` false, so echoing stored state while asking to detach would silently keep the bid adjustments live. - Eligibility: only ad sets on `LOWEST_COST_WITHOUT_CAP` or `COST_CAP`. Meta rejects the rest server-side. - Read back with `GET /v1/ads/ad-sets/{adSetId}?fields=value_rule_set_id`. Meta does not document `value_rules_applied` as a readable ad-set field, so the boolean cannot be read back. Bid strategy compatibility (per Meta's spec): - `LOWEST_COST_WITHOUT_CAP`: no `bidAmount`, no `roasAverageFloor`. - `LOWEST_COST_WITH_BID_CAP` / `COST_CAP`: `bidAmount` REQUIRED (whole currency units). - `LOWEST_COST_WITH_MIN_ROAS`: `roasAverageFloor` REQUIRED (decimal multiplier, e.g. 2.0 = 2.0x ROAS). - Meta only: send `bidAmount` WITHOUT `bidStrategy` to change the cap amount on an ad set under a COST_CAP / LOWEST_COST_WITH_BID_CAP parent campaign, leaving the strategy itself (inherited from the campaign) untouched. `roasAverageFloor` without `bidStrategy` is rejected (it has no meaning outside LOWEST_COST_WITH_MIN_ROAS). Delivery settings are validated by Meta against the campaign objective; incompatible combinations (e.g. a billingEvent the optimization goal doesn't allow) surface as 400s from Meta. When updating `budget` on an ABO campaign: if the parent campaign is CBO, the response is 409 with code BUDGET_LEVEL_MISMATCH — route to PUT /v1/ads/campaigns/{campaignId} instead.
2470
+ Ad-set-level writes. Use this for ABO budget updates, ad-set-scoped pause/resume, bid-strategy edits, Meta value-rule-set attach/detach, and Meta-only post-launch delivery settings via `platformSpecificData`. At least one updatable field is required. Value rule sets (Meta only, see `/v1/ads/value-rule-sets`): - ATTACH or REPLACE: send `valueRuleSetId`. Attachment is driven by the id's presence, so `valueRulesApplied: true` is optional. Sending a different id replaces the previous association; there is no separate replace call. - DETACH: send `valueRulesApplied: false` and OMIT `valueRuleSetId`. - Sending `valueRulesApplied: false` TOGETHER with `valueRuleSetId` returns 400 `mutually_exclusive_fields`. This is deliberate: Meta attaches the rule set whenever `value_rule_set_id` is present, even with `value_rules_applied` false, so echoing stored state while asking to detach would silently keep the bid adjustments live. - Eligibility: only ad sets on `LOWEST_COST_WITHOUT_CAP` or `COST_CAP`. Meta rejects the rest server-side. - Read back with `GET /v1/ads/ad-sets/{adSetId}?fields=value_rule_set_id`. Meta does not document `value_rules_applied` as a readable ad-set field, so the boolean cannot be read back. Bid strategy compatibility (per Meta's spec): - `LOWEST_COST_WITHOUT_CAP`: no `bidAmount`, no `roasAverageFloor`. - `LOWEST_COST_WITH_BID_CAP` / `COST_CAP`: `bidAmount` REQUIRED (whole currency units). - `LOWEST_COST_WITH_MIN_ROAS`: `roasAverageFloor` REQUIRED (decimal multiplier, e.g. 2.0 = 2.0x ROAS). - Meta only: send `bidAmount` WITHOUT `bidStrategy` to change the cap amount on an ad set under a COST_CAP / LOWEST_COST_WITH_BID_CAP parent campaign, leaving the strategy itself (inherited from the campaign) untouched. `roasAverageFloor` without `bidStrategy` is rejected (it has no meaning outside LOWEST_COST_WITH_MIN_ROAS). Delivery settings are validated by Meta against the campaign objective; incompatible combinations (e.g. a billingEvent the optimization goal doesn't allow) surface as 400s from Meta. When updating `budget` on an ABO campaign: if the parent campaign is CBO, the response is 409 with code BUDGET_LEVEL_MISMATCH. Route to PUT /v1/ads/campaigns/{campaignId} instead.
2471
2471
 
2472
2472
  ### Examples
2473
2473
 
@@ -2538,7 +2538,7 @@ end
2538
2538
 
2539
2539
  Pause or resume a single ad set
2540
2540
 
2541
- Ad-set-scoped pause/resume (doesn't touch sibling ad sets). Thin wrapper over PUT /v1/ads/ad-sets/{adSetId} for callers that only want the status toggle and prefer a symmetric URL to /v1/ads/campaigns/{campaignId}/status. On Meta and LinkedIn this writes the ad set's own on/off switch (Meta: `configured_status`), whatever delivery status its ads report — an ad still in review does not block resuming its ad set. The echoed `status` is the confirmation that it landed. Where the platform has no ad-set switch (TikTok and others) the toggle is emulated by flipping the child ads; a call with no actionable ad then writes nothing and returns a `message` with no `status`. `updated` / `skipped` describe only the ads whose own stored status CHANGED alongside the switch, so `updated: 0` is a normal successful response. See `skippedReasons` for which of the three cases applies (terminal, already in the target state, or switched on but not yet delivering). A campaign created paused needs its campaign resumed as well: pair this with PUT /v1/ads/campaigns/{campaignId}/status.
2541
+ Ad-set-scoped pause/resume (doesn't touch sibling ad sets). Thin wrapper over PUT /v1/ads/ad-sets/{adSetId} for callers that only want the status toggle and prefer a symmetric URL to /v1/ads/campaigns/{campaignId}/status. On Meta and LinkedIn this writes the ad set's own on/off switch (Meta: `configured_status`), whatever delivery status its ads report: an ad still in review does not block resuming its ad set. The echoed `status` is the confirmation that it landed. Where the platform has no ad-set switch (TikTok and others) the toggle is emulated by flipping the child ads; a call with no actionable ad then writes nothing and returns a `message` with no `status`. `updated` / `skipped` describe only the ads whose own stored status CHANGED alongside the switch, so `updated: 0` is a normal successful response. See `skippedReasons` for which of the three cases applies (terminal, already in the target state, or switched on but not yet delivering). A campaign created paused needs its campaign resumed as well: pair this with PUT /v1/ads/campaigns/{campaignId}/status.
2542
2542
 
2543
2543
  ### Examples
2544
2544
 
@@ -2609,7 +2609,7 @@ end
2609
2609
 
2610
2610
  Pause or resume a single ad
2611
2611
 
2612
- Ad-scoped pause/resume — touches ONLY this ad, never its parent ad set or campaign (so sibling ads keep running). Thin wrapper over the `status` field of PUT /v1/ads/{adId}, for callers that want a URL symmetric to /v1/ads/campaigns/{campaignId}/status and /v1/ads/ad-sets/{adSetId}/status. `{adId}` accepts the same identifier dialects as GET/PUT /v1/ads/{adId} (Zernio hex `_id`, Meta numeric `platformAdId`, or the creative's effective story/media IDs). `platform` is inferred from the ad, so it's not required in the body. Ads in terminal statuses (rejected, completed, cancelled) and no-op flips (already in the target state) are skipped.
2612
+ Ad-scoped pause/resume: touches ONLY this ad, never its parent ad set or campaign (so sibling ads keep running). Thin wrapper over the `status` field of PUT /v1/ads/{adId}, for callers that want a URL symmetric to /v1/ads/campaigns/{campaignId}/status and /v1/ads/ad-sets/{adSetId}/status. `{adId}` accepts the same identifier dialects as GET/PUT /v1/ads/{adId} (Zernio hex `_id`, Meta numeric `platformAdId`, or the creative's effective story/media IDs). `platform` is inferred from the ad, so it's not required in the body. Ads in terminal statuses (rejected, completed, cancelled) and no-op flips (already in the target state) are skipped.
2613
2613
 
2614
2614
  ### Examples
2615
2615
 
data/docs/AdCreative.md CHANGED
@@ -9,13 +9,13 @@
9
9
  | **video_id** | **String** | Meta video ID for VIDEO-type ads. Null for non-video ads. Callers that need an embeddable MP4 can call GET /{videoId}?fields=source with the page access token. | [optional] |
10
10
  | **video_url** | **String** | Public Facebook watch URL for VIDEO-type ads (https://www.facebook.com/watch/?v={videoId}). Null for non-video ads. | [optional] |
11
11
  | **creative_id** | **String** | Meta ad creative id backing this ad. Reusable via existingCreativeId on POST /v1/ads/create. | [optional] |
12
- | **object_type** | **String** | Meta creative object_type (e.g. SHARE, VIDEO, PRIVACY_CHECK_FAIL, POST_DELETED). Use this to render state-aware previews — when Meta moderation strips image/video fields, only thumbnailUrl at 64x64 is available. | [optional] |
13
- | **object_story_id** | **String** | Meta creative `object_story_id` (the SHARE reference). Frequently absent — Meta omits it for SHARE creatives. Use effectiveObjectStoryId instead. | [optional] |
14
- | **effective_object_story_id** | **String** | Meta `effective_object_story_id` — `{pageId}_{postId}` of the Facebook post the ad's engagement (comments) lives on. Pass to GET /v1/ads?effectiveObjectStoryId= to map a Business-Manager-visible post back to this ad; GET /v1/ads/{adId}/comments resolves comments against it. | [optional] |
12
+ | **object_type** | **String** | Meta creative object_type (e.g. SHARE, VIDEO, PRIVACY_CHECK_FAIL, POST_DELETED). Use this to render state-aware previews: when Meta moderation strips image/video fields, only thumbnailUrl at 64x64 is available. | [optional] |
13
+ | **object_story_id** | **String** | Meta creative `object_story_id` (the SHARE reference). Frequently absent, because Meta omits it for SHARE creatives. Use effectiveObjectStoryId instead. | [optional] |
14
+ | **effective_object_story_id** | **String** | Meta `effective_object_story_id`, the `{pageId}_{postId}` of the Facebook post the ad's engagement (comments) lives on. Pass to GET /v1/ads?effectiveObjectStoryId= to map a Business-Manager-visible post back to this ad; GET /v1/ads/{adId}/comments resolves comments against it. | [optional] |
15
15
  | **page_id** | **String** | Facebook Page backing the creative (Meta only). What the `pageId` filter on /v1/ads, /v1/ads/campaigns and /v1/ads/tree matches against. Absent for non-Meta ads and rare Meta creatives with no page signal. | [optional] |
16
- | **effective_instagram_media_id** | **String** | Meta `effective_instagram_media_id` — the Instagram media ID of the boosted post the ad's engagement lives on. Pass to GET /v1/ads?effectiveInstagramMediaId= to map a Business-Manager-visible IG post back to this ad. | [optional] |
17
- | **instagram_user_id** | **String** | Meta `instagram_user_id` — the Instagram-scoped business ID that owns the boosted media. | [optional] |
18
- | **instagram_permalink_url** | **String** | Meta `instagram_permalink_url` — public Instagram post URL of the boosted media. | [optional] |
16
+ | **effective_instagram_media_id** | **String** | Meta `effective_instagram_media_id`, the Instagram media ID of the boosted post the ad's engagement lives on. Pass to GET /v1/ads?effectiveInstagramMediaId= to map a Business-Manager-visible IG post back to this ad. | [optional] |
17
+ | **instagram_user_id** | **String** | Meta `instagram_user_id`, the Instagram-scoped business ID that owns the boosted media. | [optional] |
18
+ | **instagram_permalink_url** | **String** | Meta `instagram_permalink_url`, the public Instagram post URL of the boosted media. | [optional] |
19
19
  | **media_urls** | **Array<String>** | All media URLs for this ad (carousel images, multiple assets). Populated for Meta (carousel child_attachments), Google Ads (responsive display marketing_images), and LinkedIn (multi-image posts). | [optional] |
20
20
  | **is_serving** | **Boolean** | LinkedIn only. Whether LinkedIn is currently serving this specific creative. Complements the ad-level `servingStatuses`, which describes the parent campaign. | [optional] |
21
21
  | **serving_hold_reasons** | **Array<String>** | LinkedIn only. Why this specific creative is not being served. Empty when it is serving. A superset of the ad-level `servingStatuses`: it repeats the inherited campaign, campaign group and account holds AND adds creative-only causes such as UNDER_REVIEW, REJECTED, PROCESSING, PROCESSING_FAILED, FORM_HOLD (lead-gen-form creatives), REFERRED_CONTENT_QUALITY_HOLD, JOB_POSTING_ON_HOLD and JOB_POSTING_INVALID (job ads). Some values are format-specific and will never appear on other ad formats. The list is open, so treat unrecognized values as holds rather than errors. | [optional] |
@@ -96,7 +96,7 @@ end
96
96
 
97
97
  Delete a creative
98
98
 
99
- Deletes a creative from the library. Meta only allows deleting creatives not referenced by any ad — otherwise its 400 surfaces verbatim.
99
+ Deletes a creative from the library. Meta only allows deleting creatives not referenced by any ad; otherwise its 400 surfaces verbatim.
100
100
 
101
101
  ### Examples
102
102
 
@@ -384,7 +384,7 @@ end
384
384
 
385
385
  Direct video and image URLs for an ad
386
386
 
387
- Returns the direct signed URLs for every video and image asset used by an ad's live creative, normalised across shapes: single image/video, carousel, Reels/Story (`object_story_spec.video_data`) and dynamic creative (`asset_feed_spec`). Video items include Meta's poster thumbnail and the video's Meta id when available. Reads Meta live rather than the stored creative blob because Meta's signed fbcdn URLs carry an `oe=<hex>` expiration (image_url ~24 h, video source ~12 d). Treat URLs as short-lived — re-fetch this endpoint before serving or downloading assets instead of caching URLs beyond that window.
387
+ Returns the direct signed URLs for every video and image asset used by an ad's live creative, normalised across shapes: single image/video, carousel, Reels/Story (`object_story_spec.video_data`) and dynamic creative (`asset_feed_spec`). Video items include Meta's poster thumbnail and the video's Meta id when available. Reads Meta live rather than the stored creative blob because Meta's signed fbcdn URLs carry an `oe=<hex>` expiration (image_url ~24 h, video source ~12 d). Treat URLs as short-lived: re-fetch this endpoint before serving or downloading assets instead of caching URLs beyond that window.
388
388
 
389
389
  ### Examples
390
390
 
@@ -526,7 +526,7 @@ end
526
526
 
527
527
  List a catalog's product sets
528
528
 
529
- Lists a Meta product catalog's product sets — the unit a catalog ad promotes. Pass the chosen set as `promotedObject.productSetId` on POST /v1/ads/create with `goal: catalog_sales`.
529
+ Lists a Meta product catalog's product sets, the unit a catalog ad promotes. Pass the chosen set as `promotedObject.productSetId` on POST /v1/ads/create with `goal: catalog_sales`.
530
530
 
531
531
  ### Examples
532
532
 
@@ -541,7 +541,7 @@ end
541
541
 
542
542
  api_instance = Zernio::AdCreativesApi.new
543
543
  catalog_id = 'catalog_id_example' # String | Meta product catalog ID (from GET /v1/ads/catalogs)
544
- account_id = 'account_id_example' # String | A facebook, instagram, or metaads social account ID
544
+ account_id = 'account_id_example' # String | A facebook, instagram, or metaads account ID
545
545
 
546
546
  begin
547
547
  # List a catalog's product sets
@@ -575,7 +575,7 @@ end
575
575
  | Name | Type | Description | Notes |
576
576
  | ---- | ---- | ----------- | ----- |
577
577
  | **catalog_id** | **String** | Meta product catalog ID (from GET /v1/ads/catalogs) | |
578
- | **account_id** | **String** | A facebook, instagram, or metaads social account ID | |
578
+ | **account_id** | **String** | A facebook, instagram, or metaads account ID | |
579
579
 
580
580
  ### Return type
581
581
 
@@ -597,7 +597,7 @@ end
597
597
 
598
598
  List Meta product catalogs
599
599
 
600
- Lists the Meta product catalogs reachable from an ad account (owned + agency-shared catalogs of the ad account's business), for Advantage+ catalog ads (`goal: catalog_sales` on POST /v1/ads/create — e.g. vehicle inventory catalogs). Read-only; uses scopes customers already granted (no reconnect needed). Catalog contents (items, feeds) are managed in Meta Commerce Manager, not through this API.
600
+ Lists the Meta product catalogs reachable from an ad account (owned + agency-shared catalogs of the ad account's business), for Advantage+ catalog ads (`goal: catalog_sales` on POST /v1/ads/create, e.g. vehicle inventory catalogs). Read-only; uses scopes customers already granted (no reconnect needed). Catalog contents (items, feeds) are managed in Meta Commerce Manager, not through this API.
601
601
 
602
602
  ### Examples
603
603
 
@@ -611,7 +611,7 @@ Zernio.configure do |config|
611
611
  end
612
612
 
613
613
  api_instance = Zernio::AdCreativesApi.new
614
- account_id = 'account_id_example' # String | A facebook, instagram, or metaads social account ID
614
+ account_id = 'account_id_example' # String | A facebook, instagram, or metaads account ID
615
615
  ad_account_id = 'ad_account_id_example' # String | Meta ad account ID (act_...)
616
616
 
617
617
  begin
@@ -645,7 +645,7 @@ end
645
645
 
646
646
  | Name | Type | Description | Notes |
647
647
  | ---- | ---- | ----------- | ----- |
648
- | **account_id** | **String** | A facebook, instagram, or metaads social account ID | |
648
+ | **account_id** | **String** | A facebook, instagram, or metaads account ID | |
649
649
  | **ad_account_id** | **String** | Meta ad account ID (act_...) | |
650
650
 
651
651
  ### Return type
@@ -826,7 +826,7 @@ end
826
826
 
827
827
  Ad video library
828
828
 
829
- Lists the ad account's video library (Meta's `/act_X/advideos`), rows returned verbatim. The default projection covers id, title, status, poster frames, length and `source` (the playable MP4); `fields` is a raw-passthrough override. Any `id` here is reusable as `video.id` on the create endpoints, so N ads that differ only in copy share one upload. `source` lets you PLAY a video before picking it, which a poster frame alone can't settle when several videos share a first frame. It is a signed CDN URL that EXPIRES, so treat it as good for preview at selection time only — never persist it, re-list to get a fresh one. This is the only way to reach a video uploaded OUTSIDE Zernio (Ads Manager, another tool); videos we uploaded also come back as `creative.videoId` on GET /v1/ads. Meta transcodes asynchronously, so a row is only usable once `status.video_status` reads `ready`. Upload a new video via POST /v1/ads/videos, or inline via `video.url` on POST /v1/ads/create.
829
+ Lists the ad account's video library (Meta's `/act_X/advideos`), rows returned verbatim. The default projection covers id, title, status, poster frames, length and `source` (the playable MP4); `fields` is a raw-passthrough override. Any `id` here is reusable as `video.id` on the create endpoints, so N ads that differ only in copy share one upload. `source` lets you PLAY a video before picking it, which a poster frame alone can't settle when several videos share a first frame. It is a signed CDN URL that EXPIRES, so treat it as good for preview at selection time only. Never persist it; re-list to get a fresh one. This is the only way to reach a video uploaded OUTSIDE Zernio (Ads Manager, another tool); videos we uploaded also come back as `creative.videoId` on GET /v1/ads. Meta transcodes asynchronously, so a row is only usable once `status.video_status` reads `ready`. Upload a new video via POST /v1/ads/videos, or inline via `video.url` on POST /v1/ads/create.
830
830
 
831
831
  ### Examples
832
832
 
@@ -905,7 +905,7 @@ end
905
905
 
906
906
  Rename a creative
907
907
 
908
- Renames a creative. Creatives are immutable on Meta beyond `name` — for content changes create a new creative (POST /v1/ads/creatives) and swap it onto the ad (PUT /v1/ads/{adId} with `creative`).
908
+ Renames a creative. Creatives are immutable on Meta beyond `name`. For content changes create a new creative (POST /v1/ads/creatives) and swap it onto the ad (PUT /v1/ads/{adId} with `creative`).
909
909
 
910
910
  ### Examples
911
911
 
@@ -976,7 +976,7 @@ end
976
976
 
977
977
  Upload an ad image from base64
978
978
 
979
- Uploads raw image bytes to the Meta ad account's image library — for callers whose creatives aren't hosted at a public URL. Returns the image `hash` (Meta's identifier for the asset) and the Meta-hosted `url`, which can be used directly as `imageUrl` on the create endpoints. Max 30 MB decoded.
979
+ Uploads raw image bytes to the Meta ad account's image library, for callers whose creatives aren't hosted at a public URL. Returns the image `hash` (Meta's identifier for the asset) and the Meta-hosted `url`, which can be used directly as `imageUrl` on the create endpoints. Max 30 MB decoded.
980
980
 
981
981
  ### Examples
982
982
 
@@ -1045,7 +1045,7 @@ end
1045
1045
 
1046
1046
  Upload an ad video
1047
1047
 
1048
- Standalone ad-video upload (parallel to POST /v1/ads/images), so a video creative can be rendered via POST /v1/ads/preview or attached via `video.id` on POST /v1/ads/create before an ad exists. Accepts either an https `videoUrl` we download server-side (SSRF-guarded) or raw `videoBase64` bytes; exactly one is required. `videoBase64` is capped by Vercel's body limit — around 4.5 MB payload in practice, so larger videos must come via `videoUrl`. Returns the Meta `video.id` (reusable wherever `video.id` is accepted) plus Meta's auto-generated poster URL when available. The endpoint waits until Meta reports the video ready (chunked upload + transcode can take minutes; the handler runs up to 800 s).
1048
+ Standalone ad-video upload (parallel to POST /v1/ads/images), so a video creative can be rendered via POST /v1/ads/preview or attached via `video.id` on POST /v1/ads/create before an ad exists. Accepts either an https `videoUrl` we download server-side (SSRF-guarded) or raw `videoBase64` bytes; exactly one is required. `videoBase64` is capped by Vercel's body limit, around 4.5 MB payload in practice, so larger videos must come via `videoUrl`. Returns the Meta `video.id` (reusable wherever `video.id` is accepted) plus Meta's auto-generated poster URL when available. The endpoint waits until Meta reports the video ready (chunked upload + transcode can take minutes; the handler runs up to 800 s).
1049
1049
 
1050
1050
  ### Examples
1051
1051
 
@@ -15,10 +15,10 @@
15
15
  | **conversions** | **Float** | Count of conversion events over the requested date range. FRACTIONAL: attribution splits one conversion across touchpoints and Google additionally reports modeled conversions, so values like 0.347 are normal. Meta: events matching the campaign&#39;s promoted_object.custom_event_type (PURCHASE, LEAD, etc.). Google: the account&#39;s tracked conversions. X and LinkedIn: their reported website/lead conversions (added 2026-07). 0 for non-conversion campaigns or when no events have fired. | [optional] |
16
16
  | **all_conversions** | **Float** | All conversions, including actions excluded from the Conversions column (Google metrics.all_conversions). 0 on platforms without the concept. | [optional] |
17
17
  | **cost_per_conversion** | **Float** | Derived spend / conversions in the same currency as spend. 0 when conversions is 0. | [optional] |
18
- | **actions** | **Hash&lt;String, Integer&gt;** | Per-action-type counts summed over the date range, keyed by the platform&#39;s action-type names. Meta: raw Insights action_type keys (link_click, offsite_conversion.fb_pixel_purchase, onsite_conversion.lead_grouped, ...) — both engagement and conversion events. TikTok: pixel conversions (purchase, add_to_cart, initiate_checkout, view_content, complete_payment, lead) plus the paid-engagement family (follow, post_reaction for paid likes, comment, share) — follow is how FOLLOWERS-goal campaigns report their result. X: conversion types (purchase, sign_up, site_visit, download, custom). LinkedIn: conversion types (post_click, post_view, lead_gen). Google returns {} (its per-action names aren&#39;t synced per ad). Empty object when no actions are reported. NOTE: keys differ by platform, so branch on the ad&#39;s platform when interpreting them. | [optional] |
19
- | **action_values** | **Hash&lt;String, Float&gt;** | Monetary mirror of &#x60;actions&#x60;, from Meta&#39;s Insights &#x60;action_values[]&#x60; array. Same keying — values are the revenue attributed to each action_type, in ad-account native currency (same unit as &#x60;spend&#x60;; see the campaign node&#39;s &#x60;currency&#x60; field). Use this to compute revenue-per-event (e.g. avg purchase value). Meta-only; other platforms return {}. | [optional] |
20
- | **purchase_value** | **Float** | Convenience sum of purchase-type action values — picked from &#x60;actionValues&#x60; via the same priority list as &#x60;conversions&#x60; so both fields describe the same events. In ad-account native currency. 0 when the campaign has no purchase event configured. Meta-only. | [optional] |
21
- | **roas** | **Float** | Return on ad spend — derived as &#x60;purchaseValue / spend&#x60;. 0 when &#x60;spend&#x60; is 0. Equivalent to Meta&#39;s &#x60;purchase_roas&#x60; under default attribution. At ad-set and campaign levels this is recomputed from summed purchaseValue + spend (NOT averaged across children) so it&#39;s mathematically correct at every rollup level. | [optional] |
18
+ | **actions** | **Hash&lt;String, Integer&gt;** | Per-action-type counts summed over the date range, keyed by the platform&#39;s action-type names. Meta: raw Insights action_type keys (link_click, offsite_conversion.fb_pixel_purchase, onsite_conversion.lead_grouped, ...), covering both engagement and conversion events. TikTok: pixel conversions (purchase, add_to_cart, initiate_checkout, view_content, complete_payment, lead) plus the paid-engagement family (follow, post_reaction for paid likes, comment, share). Follow is how FOLLOWERS-goal campaigns report their result. X: conversion types (purchase, sign_up, site_visit, download, custom). LinkedIn: conversion types (post_click, post_view, lead_gen). Google returns {} (its per-action names aren&#39;t synced per ad). Empty object when no actions are reported. NOTE: keys differ by platform, so branch on the ad&#39;s platform when interpreting them. | [optional] |
19
+ | **action_values** | **Hash&lt;String, Float&gt;** | Monetary mirror of &#x60;actions&#x60;, from Meta&#39;s Insights &#x60;action_values[]&#x60; array. Same keying: values are the revenue attributed to each action_type, in ad-account native currency (same unit as &#x60;spend&#x60;; see the campaign node&#39;s &#x60;currency&#x60; field). Use this to compute revenue-per-event (e.g. avg purchase value). Meta-only; other platforms return {}. | [optional] |
20
+ | **purchase_value** | **Float** | Convenience sum of purchase-type action values, picked from &#x60;actionValues&#x60; via the same priority list as &#x60;conversions&#x60; so both fields describe the same events. In ad-account native currency. 0 when the campaign has no purchase event configured. Meta-only. | [optional] |
21
+ | **roas** | **Float** | Return on ad spend, derived as &#x60;purchaseValue / spend&#x60;. 0 when &#x60;spend&#x60; is 0. Equivalent to Meta&#39;s &#x60;purchase_roas&#x60; under default attribution. At ad-set and campaign levels this is recomputed from summed purchaseValue + spend (NOT averaged across children) so it&#39;s mathematically correct at every rollup level. | [optional] |
22
22
  | **cost_per_action** | **Hash&lt;String, Float&gt;** | Derived &#x60;spend / actions[type]&#x60; for every action type with a non-zero count, in ad-account native currency. Same keys as &#x60;actions&#x60;. Rounded to 4 decimals because cheap actions cost well under a cent. Recomputed from summed spend + counts at every rollup level. Empty object when spend is 0 or no actions are reported. | [optional] |
23
23
  | **outbound_clicks** | **Integer** | Clicks leading off Meta&#39;s surfaces to the advertiser&#39;s destination. Meta-only; other platforms report 0. | [optional] |
24
24
  | **outbound_clicks_ctr** | **Float** | Derived &#x60;outboundClicks / impressions * 100&#x60;, recomputed from sums at every rollup level. | [optional] |
@@ -4,7 +4,7 @@
4
4
 
5
5
  | Name | Type | Description | Notes |
6
6
  | ---- | ---- | ----------- | ----- |
7
- | **landing_page_views** | **Integer** | Landing page views — the visitor actually loaded the destination, unlike a link click. Meta &#x60;landing_page_view&#x60;. | [optional] |
7
+ | **landing_page_views** | **Integer** | Landing page views: the visitor actually loaded the destination, unlike a link click. Meta &#x60;landing_page_view&#x60;. | [optional] |
8
8
  | **content_views** | **Integer** | Content views (Meta &#x60;ViewContent&#x60; pixel event). | [optional] |
9
9
  | **searches** | **Integer** | On-site searches (Meta &#x60;Search&#x60; pixel event). | [optional] |
10
10
  | **wishlist_adds** | **Integer** | Adds to wishlist (Meta &#x60;AddToWishlist&#x60; pixel event). | [optional] |
@@ -12,10 +12,10 @@
12
12
  | **checkouts_initiated** | **Integer** | Checkouts started (Meta &#x60;InitiateCheckout&#x60; pixel event). | [optional] |
13
13
  | **payment_info_adds** | **Integer** | Payment details added at checkout (Meta &#x60;AddPaymentInfo&#x60; pixel event). | [optional] |
14
14
  | **purchases** | **Integer** | Purchases (Meta &#x60;Purchase&#x60; pixel event). Pair with &#x60;purchaseValue&#x60; for revenue. | [optional] |
15
- | **leads** | **Integer** | Leads, from either the website pixel or an instant form — whichever the ad uses. | [optional] |
15
+ | **leads** | **Integer** | Leads, from either the website pixel or an instant form, whichever the ad uses. | [optional] |
16
16
  | **registrations_completed** | **Integer** | Completed registrations (Meta &#x60;CompleteRegistration&#x60; pixel event). | [optional] |
17
17
  | **app_installs** | **Integer** | Mobile app installs attributed to the ad. | [optional] |
18
- | **messaging_conversations_started** | **Integer** | Messaging conversations started within 7 days — the headline metric for click-to-WhatsApp and click-to-Messenger ads. | [optional] |
18
+ | **messaging_conversations_started** | **Integer** | Messaging conversations started within 7 days, the headline metric for click-to-WhatsApp and click-to-Messenger ads. | [optional] |
19
19
  | **messaging_first_replies** | **Integer** | Messaging threads where the person sent a first reply. | [optional] |
20
20
 
21
21
  ## Example
@@ -383,7 +383,7 @@ end
383
383
 
384
384
  Google Ads search terms report
385
385
 
386
- The actual search queries that triggered your ads, with matched-keyword status and spend metrics — the raw material for wasted-spend analysis and negative-keyword lists. Reads Google's `search_term_view`, cached for the quota window; defaults to the last 30 days. Rows are ordered by cost, descending. Draws on the shared Google Ads operations budget. The response carries `cachedAt` and `stale`, set when a quota-exhausted call falls back to the last-good copy instead of a live read.
386
+ The actual search queries that triggered your ads, with matched-keyword status and spend metrics, the raw material for wasted-spend analysis and negative-keyword lists. Reads Google's `search_term_view`, cached for the quota window; defaults to the last 30 days. Rows are ordered by cost, descending. Draws on the shared Google Ads operations budget. The response carries `cachedAt` and `stale`, set when a quota-exhausted call falls back to the last-good copy instead of a live read.
387
387
 
388
388
  ### Examples
389
389
 
@@ -723,7 +723,7 @@ end
723
723
  api_instance = Zernio::AdInsightsApi.new
724
724
  account_id = 'account_id_example' # String | Zernio SocialAccount id (posting or ads variant); its platform selects the Meta or Google contract.
725
725
  opts = {
726
- object_id: 'object_id_example', # String | Meta only (required there): insights node — act_<n>, campaign id, ad set id or ad id.
726
+ object_id: 'object_id_example', # String | Meta only (required there): insights node (act_<n>, campaign id, ad set id or ad id).
727
727
  query: 'query_example', # String | Google only (required there): the GAQL SELECT statement to run.
728
728
  customer_id: 'customer_id_example', # String | Google only: numeric customer id (no dashes) when the connection has several Google Ads accounts.
729
729
  page_token: 'page_token_example', # String | Google only: cursor from paging.nextPageToken of the previous page.
@@ -775,7 +775,7 @@ end
775
775
  | Name | Type | Description | Notes |
776
776
  | ---- | ---- | ----------- | ----- |
777
777
  | **account_id** | **String** | Zernio SocialAccount id (posting or ads variant); its platform selects the Meta or Google contract. | |
778
- | **object_id** | **String** | Meta only (required there): insights node — act_&lt;n&gt;, campaign id, ad set id or ad id. | [optional] |
778
+ | **object_id** | **String** | Meta only (required there): insights node (act_&lt;n&gt;, campaign id, ad set id or ad id). | [optional] |
779
779
  | **query** | **String** | Google only (required there): the GAQL SELECT statement to run. | [optional] |
780
780
  | **customer_id** | **String** | Google only: numeric customer id (no dashes) when the connection has several Google Ads accounts. | [optional] |
781
781
  | **page_token** | **String** | Google only: cursor from paging.nextPageToken of the previous page. | [optional] |