late-sdk 0.0.908 → 0.0.910

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 (64) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +32 -19
  3. data/docs/AdAccountsApi.md +92 -16
  4. data/docs/AdCampaignsApi.md +20 -20
  5. data/docs/AdCreativesApi.md +222 -0
  6. data/docs/AdInsightsApi.md +16 -16
  7. data/docs/AdTargetingApi.md +4 -4
  8. data/docs/CheckPhoneNumberAvailability200Response.md +1 -1
  9. data/docs/ConversionsApi.md +8 -8
  10. data/docs/GetAdComments200ResponseMeta.md +1 -1
  11. data/docs/ListPartnershipAdContent200Response.md +18 -0
  12. data/docs/ListPartnershipAdContent200ResponseMediaInner.md +30 -0
  13. data/docs/ListPartnershipAdPermissions200Response.md +18 -0
  14. data/docs/ListPartnershipAdPermissions200ResponsePermissionsInner.md +22 -0
  15. data/docs/ListPhoneNumberCountries200ResponseCountriesInnerTypesInner.md +1 -1
  16. data/docs/ListTikTokAdPixels200Response.md +20 -0
  17. data/docs/ListTikTokAdPixels200ResponsePixelsInner.md +26 -0
  18. data/docs/ListTikTokAdPixels200ResponsePixelsInnerEventDetailsInner.md +22 -0
  19. data/docs/ReachAndFrequencyApi.md +16 -16
  20. data/docs/SetPartnershipAdPermission200Response.md +18 -0
  21. data/docs/SetPartnershipAdPermissionRequest.md +22 -0
  22. data/docs/SubmitPhoneNumberKyc200Response.md +1 -1
  23. data/lib/zernio-sdk/api/ad_accounts_api.rb +89 -14
  24. data/lib/zernio-sdk/api/ad_campaigns_api.rb +10 -10
  25. data/lib/zernio-sdk/api/ad_creatives_api.rb +218 -0
  26. data/lib/zernio-sdk/api/ad_insights_api.rb +8 -8
  27. data/lib/zernio-sdk/api/ad_targeting_api.rb +2 -2
  28. data/lib/zernio-sdk/api/conversions_api.rb +4 -4
  29. data/lib/zernio-sdk/api/reach_and_frequency_api.rb +8 -8
  30. data/lib/zernio-sdk/models/check_phone_number_availability200_response.rb +1 -1
  31. data/lib/zernio-sdk/models/get_ad_comments200_response_meta.rb +1 -1
  32. data/lib/zernio-sdk/models/list_partnership_ad_content200_response.rb +149 -0
  33. data/lib/zernio-sdk/models/list_partnership_ad_content200_response_media_inner.rb +205 -0
  34. data/lib/zernio-sdk/models/list_partnership_ad_permissions200_response.rb +149 -0
  35. data/lib/zernio-sdk/models/list_partnership_ad_permissions200_response_permissions_inner.rb +165 -0
  36. data/lib/zernio-sdk/models/list_phone_number_countries200_response_countries_inner_types_inner.rb +1 -1
  37. data/lib/zernio-sdk/models/list_tik_tok_ad_pixels200_response.rb +158 -0
  38. data/lib/zernio-sdk/models/list_tik_tok_ad_pixels200_response_pixels_inner.rb +187 -0
  39. data/lib/zernio-sdk/models/list_tik_tok_ad_pixels200_response_pixels_inner_event_details_inner.rb +166 -0
  40. data/lib/zernio-sdk/models/set_partnership_ad_permission200_response.rb +147 -0
  41. data/lib/zernio-sdk/models/set_partnership_ad_permission_request.rb +219 -0
  42. data/lib/zernio-sdk/models/submit_phone_number_kyc200_response.rb +1 -1
  43. data/lib/zernio-sdk/version.rb +1 -1
  44. data/lib/zernio-sdk.rb +9 -0
  45. data/openapi.yaml +675 -171
  46. data/spec/api/ad_accounts_api_spec.rb +21 -7
  47. data/spec/api/ad_campaigns_api_spec.rb +5 -5
  48. data/spec/api/ad_creatives_api_spec.rb +40 -0
  49. data/spec/api/ad_insights_api_spec.rb +4 -4
  50. data/spec/api/ad_targeting_api_spec.rb +1 -1
  51. data/spec/api/conversions_api_spec.rb +2 -2
  52. data/spec/api/reach_and_frequency_api_spec.rb +4 -4
  53. data/spec/models/list_partnership_ad_content200_response_media_inner_spec.rb +72 -0
  54. data/spec/models/list_partnership_ad_content200_response_spec.rb +36 -0
  55. data/spec/models/list_partnership_ad_permissions200_response_permissions_inner_spec.rb +48 -0
  56. data/spec/models/list_partnership_ad_permissions200_response_spec.rb +36 -0
  57. data/spec/models/list_tik_tok_ad_pixels200_response_pixels_inner_event_details_inner_spec.rb +48 -0
  58. data/spec/models/list_tik_tok_ad_pixels200_response_pixels_inner_spec.rb +60 -0
  59. data/spec/models/list_tik_tok_ad_pixels200_response_spec.rb +42 -0
  60. data/spec/models/set_partnership_ad_permission200_response_spec.rb +36 -0
  61. data/spec/models/set_partnership_ad_permission_request_spec.rb +48 -0
  62. data/zernio-sdk-0.0.910.gem +0 -0
  63. metadata +38 -2
  64. data/zernio-sdk-0.0.908.gem +0 -0
@@ -4,17 +4,17 @@ All URIs are relative to *https://zernio.com/api*
4
4
 
5
5
  | Method | HTTP request | Description |
6
6
  | ------ | ------------ | ----------- |
7
- | [**cancel_rf_reservation**](ReachAndFrequencyApi.md#cancel_rf_reservation) | **DELETE** /v1/ads/rf-predictions/{predictionId} | Cancel a Reach & Frequency reservation |
8
- | [**create_rf_prediction**](ReachAndFrequencyApi.md#create_rf_prediction) | **POST** /v1/ads/rf-predictions | Create a Reach & Frequency prediction |
9
- | [**get_rf_prediction**](ReachAndFrequencyApi.md#get_rf_prediction) | **GET** /v1/ads/rf-predictions/{predictionId} | Read a Reach & Frequency prediction |
10
- | [**reserve_rf_prediction**](ReachAndFrequencyApi.md#reserve_rf_prediction) | **POST** /v1/ads/rf-predictions/{predictionId}/reserve | Reserve a Reach & Frequency prediction |
7
+ | [**cancel_rf_reservation**](ReachAndFrequencyApi.md#cancel_rf_reservation) | **DELETE** /v1/ads/rf-predictions/{predictionId} | Cancel reach-frequency booking |
8
+ | [**create_rf_prediction**](ReachAndFrequencyApi.md#create_rf_prediction) | **POST** /v1/ads/rf-predictions | Create reach-frequency prediction |
9
+ | [**get_rf_prediction**](ReachAndFrequencyApi.md#get_rf_prediction) | **GET** /v1/ads/rf-predictions/{predictionId} | Get reach-frequency prediction |
10
+ | [**reserve_rf_prediction**](ReachAndFrequencyApi.md#reserve_rf_prediction) | **POST** /v1/ads/rf-predictions/{predictionId}/reserve | Reserve reach-frequency inventory |
11
11
 
12
12
 
13
13
  ## cancel_rf_reservation
14
14
 
15
15
  > cancel_rf_reservation(prediction_id, account_id, ad_account_id)
16
16
 
17
- Cancel a Reach & Frequency reservation
17
+ Cancel reach-frequency booking
18
18
 
19
19
  Releases a RESERVATION's locked price and inventory. Unreserved predictions expire on their own.
20
20
 
@@ -35,7 +35,7 @@ account_id = 'account_id_example' # String |
35
35
  ad_account_id = 'ad_account_id_example' # String |
36
36
 
37
37
  begin
38
- # Cancel a Reach & Frequency reservation
38
+ # Cancel reach-frequency booking
39
39
  api_instance.cancel_rf_reservation(prediction_id, account_id, ad_account_id)
40
40
  rescue Zernio::ApiError => e
41
41
  puts "Error when calling ReachAndFrequencyApi->cancel_rf_reservation: #{e}"
@@ -50,7 +50,7 @@ This returns an Array which contains the response data (`nil` in this case), sta
50
50
 
51
51
  ```ruby
52
52
  begin
53
- # Cancel a Reach & Frequency reservation
53
+ # Cancel reach-frequency booking
54
54
  data, status_code, headers = api_instance.cancel_rf_reservation_with_http_info(prediction_id, account_id, ad_account_id)
55
55
  p status_code # => 2xx
56
56
  p headers # => { ... }
@@ -86,7 +86,7 @@ nil (empty response body)
86
86
 
87
87
  > <CreateRfPrediction201Response> create_rf_prediction(create_rf_prediction_request)
88
88
 
89
- Create a Reach & Frequency prediction
89
+ Create reach-frequency prediction
90
90
 
91
91
  Creates an R&F prediction. This is a QUOTE, nothing is bought and no ad entities are created. Provide a date range plus exactly one of `budgetAmount` (Meta predicts reach) or `reach` (Meta predicts the budget). The response carries the estimate and its allowed bounds (min/max budget and reach). Predictions expire on their own; to buy, reserve one via POST /v1/ads/rf-predictions/{predictionId}/reserve and pass the RESERVED id to POST /v1/ads/create with `buyingType: \"RESERVED\"`. Reservation campaigns reject automatic placements. Top-level `placements` wins; when it is omitted, `targeting.placements` is used; when neither is set, placements default to Facebook feed (+ Instagram stream when a linked IG professional account resolves). Instagram placements require that IG account.
92
92
 
@@ -105,7 +105,7 @@ api_instance = Zernio::ReachAndFrequencyApi.new
105
105
  create_rf_prediction_request = Zernio::CreateRfPredictionRequest.new({account_id: 'account_id_example', ad_account_id: 'ad_account_id_example', start_date: Time.now, end_date: Time.now}) # CreateRfPredictionRequest |
106
106
 
107
107
  begin
108
- # Create a Reach & Frequency prediction
108
+ # Create reach-frequency prediction
109
109
  result = api_instance.create_rf_prediction(create_rf_prediction_request)
110
110
  p result
111
111
  rescue Zernio::ApiError => e
@@ -121,7 +121,7 @@ This returns an Array which contains the response data, status code and headers.
121
121
 
122
122
  ```ruby
123
123
  begin
124
- # Create a Reach & Frequency prediction
124
+ # Create reach-frequency prediction
125
125
  data, status_code, headers = api_instance.create_rf_prediction_with_http_info(create_rf_prediction_request)
126
126
  p status_code # => 2xx
127
127
  p headers # => { ... }
@@ -155,7 +155,7 @@ end
155
155
 
156
156
  > <CreateRfPrediction201Response> get_rf_prediction(prediction_id, account_id, ad_account_id)
157
157
 
158
- Read a Reach & Frequency prediction
158
+ Get reach-frequency prediction
159
159
 
160
160
  ### Examples
161
161
 
@@ -174,7 +174,7 @@ account_id = 'account_id_example' # String |
174
174
  ad_account_id = 'ad_account_id_example' # String |
175
175
 
176
176
  begin
177
- # Read a Reach & Frequency prediction
177
+ # Get reach-frequency prediction
178
178
  result = api_instance.get_rf_prediction(prediction_id, account_id, ad_account_id)
179
179
  p result
180
180
  rescue Zernio::ApiError => e
@@ -190,7 +190,7 @@ This returns an Array which contains the response data, status code and headers.
190
190
 
191
191
  ```ruby
192
192
  begin
193
- # Read a Reach & Frequency prediction
193
+ # Get reach-frequency prediction
194
194
  data, status_code, headers = api_instance.get_rf_prediction_with_http_info(prediction_id, account_id, ad_account_id)
195
195
  p status_code # => 2xx
196
196
  p headers # => { ... }
@@ -226,7 +226,7 @@ end
226
226
 
227
227
  > <ReserveRfPrediction201Response> reserve_rf_prediction(prediction_id, reserve_rf_prediction_request)
228
228
 
229
- Reserve a Reach & Frequency prediction
229
+ Reserve reach-frequency inventory
230
230
 
231
231
  Locks the quoted price + inventory until the returned `expiresAt` and mints a NEW prediction id. Pass that RESERVED id (not the original) as `rfPredictionId` on POST /v1/ads/create. Release an unused reservation via DELETE.
232
232
 
@@ -246,7 +246,7 @@ prediction_id = 'prediction_id_example' # String |
246
246
  reserve_rf_prediction_request = Zernio::ReserveRfPredictionRequest.new({account_id: 'account_id_example', ad_account_id: 'ad_account_id_example'}) # ReserveRfPredictionRequest |
247
247
 
248
248
  begin
249
- # Reserve a Reach & Frequency prediction
249
+ # Reserve reach-frequency inventory
250
250
  result = api_instance.reserve_rf_prediction(prediction_id, reserve_rf_prediction_request)
251
251
  p result
252
252
  rescue Zernio::ApiError => e
@@ -262,7 +262,7 @@ This returns an Array which contains the response data, status code and headers.
262
262
 
263
263
  ```ruby
264
264
  begin
265
- # Reserve a Reach & Frequency prediction
265
+ # Reserve reach-frequency inventory
266
266
  data, status_code, headers = api_instance.reserve_rf_prediction_with_http_info(prediction_id, reserve_rf_prediction_request)
267
267
  p status_code # => 2xx
268
268
  p headers # => { ... }
@@ -0,0 +1,18 @@
1
+ # Zernio::SetPartnershipAdPermission200Response
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **permission** | [**ListPartnershipAdPermissions200ResponsePermissionsInner**](ListPartnershipAdPermissions200ResponsePermissionsInner.md) | | [optional] |
8
+
9
+ ## Example
10
+
11
+ ```ruby
12
+ require 'zernio-sdk'
13
+
14
+ instance = Zernio::SetPartnershipAdPermission200Response.new(
15
+ permission: null
16
+ )
17
+ ```
18
+
@@ -0,0 +1,22 @@
1
+ # Zernio::SetPartnershipAdPermissionRequest
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **account_id** | **String** | | |
8
+ | **creator_username** | **String** | | |
9
+ | **revoke** | **Boolean** | | [optional] |
10
+
11
+ ## Example
12
+
13
+ ```ruby
14
+ require 'zernio-sdk'
15
+
16
+ instance = Zernio::SetPartnershipAdPermissionRequest.new(
17
+ account_id: null,
18
+ creator_username: null,
19
+ revoke: null
20
+ )
21
+ ```
22
+
@@ -5,7 +5,7 @@
5
5
  | Name | Type | Description | Notes |
6
6
  | ---- | ---- | ----------- | ----- |
7
7
  | **status** | **String** | | [optional] |
8
- | **pre_order** | **Boolean** | True when nothing was in stock and this submission placed a pre-order. The number stays &#x60;pending_regulatory&#x60; until the carrier sources it (usually about 3 weeks) and is not billed until active. A pre-order is one number: &#x60;quantity&#x60; above 1 is rejected with 400. | [optional] |
8
+ | **pre_order** | **Boolean** | True when nothing was in stock and this submission placed a pre-order. The number stays &#x60;pending_regulatory&#x60; until we get it, from regular stock the moment it returns or sourced by the carrier (usually 2 to 4 weeks), and is not billed until active. Releasing it (DELETE /v1/phone-numbers/{id}) cancels the pre-order. A pre-order is one number: &#x60;quantity&#x60; above 1 is rejected with 400. | [optional] |
9
9
  | **phone_number** | [**SubmitPhoneNumberKyc200ResponsePhoneNumber**](SubmitPhoneNumberKyc200ResponsePhoneNumber.md) | | [optional] |
10
10
  | **numbers** | [**Array&lt;SubmitPhoneNumberKyc200ResponseNumbersInner&gt;**](SubmitPhoneNumberKyc200ResponseNumbersInner.md) | Every number provisioned from this submission. Length equals the requested &#x60;quantity&#x60; on full success (fewer if some orders failed; best-effort). The first element mirrors &#x60;phoneNumber&#x60;. | [optional] |
11
11
 
@@ -359,7 +359,7 @@ module Zernio
359
359
  return data, status_code, headers
360
360
  end
361
361
 
362
- # Create or reuse a custom conversion
362
+ # Create custom conversion
363
363
  # Provision the Meta custom conversion an ads flow optimises toward, and hand back the `customConversionId` for `promotedObject.customConversionId` on POST /v1/ads/create. Removes the manual \"create it in Ads Manager first\" step. **Reuse is ours, not Meta's.** Meta's create is not idempotent, so a retried request would otherwise mint a duplicate carrying none of the original's optimisation history. A non-archived conversion with the same `name` on the same `pixelId` is returned instead of created, with `reused: true` and a 200 rather than a 201. `rule` is forwarded verbatim in Meta's own grammar (e.g. `{\"url\": {\"i_contains\": \"thank-you\"}}`); Meta validates it and rejects a malformed one with \"A conversion rule is required at creation time\".
364
364
  # @param account_id [String] Meta ads SocialAccount id.
365
365
  # @param create_custom_conversion_request [CreateCustomConversionRequest]
@@ -370,7 +370,7 @@ module Zernio
370
370
  data
371
371
  end
372
372
 
373
- # Create or reuse a custom conversion
373
+ # Create custom conversion
374
374
  # Provision the Meta custom conversion an ads flow optimises toward, and hand back the &#x60;customConversionId&#x60; for &#x60;promotedObject.customConversionId&#x60; on POST /v1/ads/create. Removes the manual \&quot;create it in Ads Manager first\&quot; step. **Reuse is ours, not Meta&#39;s.** Meta&#39;s create is not idempotent, so a retried request would otherwise mint a duplicate carrying none of the original&#39;s optimisation history. A non-archived conversion with the same &#x60;name&#x60; on the same &#x60;pixelId&#x60; is returned instead of created, with &#x60;reused: true&#x60; and a 200 rather than a 201. &#x60;rule&#x60; is forwarded verbatim in Meta&#39;s own grammar (e.g. &#x60;{\&quot;url\&quot;: {\&quot;i_contains\&quot;: \&quot;thank-you\&quot;}}&#x60;); Meta validates it and rejects a malformed one with \&quot;A conversion rule is required at creation time\&quot;.
375
375
  # @param account_id [String] Meta ads SocialAccount id.
376
376
  # @param create_custom_conversion_request [CreateCustomConversionRequest]
@@ -570,7 +570,7 @@ module Zernio
570
570
  end
571
571
 
572
572
  # Delete an ad comment
573
- # Delete your own TikTok ad comment or reply. TikTok must return can_delete=true for the comment. Other users' comments can be hidden instead. Requires Ads access. The ad is resolved within the caller's accessible profiles. Before moderation, Zernio verifies that the comment belongs to this ad using TikTok's ad-group comment listing. The default search window is the last 30 days. Use since/until for older comments, with at most 30 days between the dates. Lookups scan at most 2,000 ad-group comments; narrow the date window if exceeded. Meta returns 501 feature_not_available with guidance to use the existing inbox comment endpoints and the account/post IDs from GET /v1/ads/{adId}/comments.
573
+ # Delete your own TikTok ad comment or reply. TikTok must return can_delete=true for the comment. Other users' comments can be hidden instead. Unknown identity and video item fields are resolved only when needed for this action, then persisted for reuse. Comment-specific fields take precedence. If TikTok no longer returns the ad needed to resolve identity, 404 ad_not_found directs you to check deletion or archival in TikTok Ads Manager. Listing can still succeed. Unsupported or unavailable identity returns 403 feature_not_available. Denied access to ad details returns 403 insufficient_permissions with reconnect guidance and the upstream platformError. Requires Ads access. The ad is resolved within the caller's accessible profiles. Before moderation, Zernio verifies that the comment belongs to this ad using TikTok's ad-group comment listing. The default search window is the last 30 days. Use since/until for older comments, with at most 30 days between the dates. Lookups scan at most 2,000 ad-group comments; narrow the date window if exceeded. Meta returns 501 feature_not_available with guidance to use the existing inbox comment endpoints and the account/post IDs from GET /v1/ads/{adId}/comments.
574
574
  # @param ad_id [String] Internal Zernio ad ID or indexed platform ad ID.
575
575
  # @param comment_id [String] TikTok comment ID from the ad comment listing.
576
576
  # @param [Hash] opts the optional parameters
@@ -583,7 +583,7 @@ module Zernio
583
583
  end
584
584
 
585
585
  # Delete an ad comment
586
- # Delete your own TikTok ad comment or reply. TikTok must return can_delete&#x3D;true for the comment. Other users&#39; comments can be hidden instead. Requires Ads access. The ad is resolved within the caller&#39;s accessible profiles. Before moderation, Zernio verifies that the comment belongs to this ad using TikTok&#39;s ad-group comment listing. The default search window is the last 30 days. Use since/until for older comments, with at most 30 days between the dates. Lookups scan at most 2,000 ad-group comments; narrow the date window if exceeded. Meta returns 501 feature_not_available with guidance to use the existing inbox comment endpoints and the account/post IDs from GET /v1/ads/{adId}/comments.
586
+ # Delete your own TikTok ad comment or reply. TikTok must return can_delete&#x3D;true for the comment. Other users&#39; comments can be hidden instead. Unknown identity and video item fields are resolved only when needed for this action, then persisted for reuse. Comment-specific fields take precedence. If TikTok no longer returns the ad needed to resolve identity, 404 ad_not_found directs you to check deletion or archival in TikTok Ads Manager. Listing can still succeed. Unsupported or unavailable identity returns 403 feature_not_available. Denied access to ad details returns 403 insufficient_permissions with reconnect guidance and the upstream platformError. Requires Ads access. The ad is resolved within the caller&#39;s accessible profiles. Before moderation, Zernio verifies that the comment belongs to this ad using TikTok&#39;s ad-group comment listing. The default search window is the last 30 days. Use since/until for older comments, with at most 30 days between the dates. Lookups scan at most 2,000 ad-group comments; narrow the date window if exceeded. Meta returns 501 feature_not_available with guidance to use the existing inbox comment endpoints and the account/post IDs from GET /v1/ads/{adId}/comments.
587
587
  # @param ad_id [String] Internal Zernio ad ID or indexed platform ad ID.
588
588
  # @param comment_id [String] TikTok comment ID from the ad comment listing.
589
589
  # @param [Hash] opts the optional parameters
@@ -886,7 +886,7 @@ module Zernio
886
886
  end
887
887
 
888
888
  # List comments on an ad
889
- # Returns comments on an ad's underlying creative post. Useful for moderating or analyzing engagement on dark posts (ad creatives that never went live organically), which the regular GET /v1/inbox/comments/{postId} endpoint cannot serve because dark posts are not in Zernio's post database. An ad that runs on both Facebook feed and Instagram feed has two separate underlying posts with separate comment threads (the creative's effective_object_story_id and effective_instagram_media_id). Use the `placement` query param to pick one; with no param the Instagram side is returned when it exists, otherwise Facebook. The identifiers are read from the ad record (persisted during sync) with a Marketing-API fallback for ads that predate the field. For Instagram-placed comments, the Instagram account that runs the ad must be connected to Zernio, because those comments are read through that account's token. If no connected Instagram account on the profile can read the ad's media, the call returns ads_connection_required (the Facebook side, if any, is still readable via ?placement=facebook). TikTok uses the connected TikTok Ads advertiser token and supports both paid video ads and Spark Ads. `since` and `until` select a date window of at most 30 days; the default is the last 30 days. TikTok searches by ad group, so Zernio filters each page to this ad. A page can be empty while `pagination.hasMore` is true. Reuse `pagination.cursor` with the same `limit`; the cursor retains the date window. `placement` is Meta-only and returns a 400 for TikTok. TikTok returns replies as separate comments with `parentId`; nested reply fetching is not supported. `canReply` requires a first-level comment and an identity with comment-management permission. `canDelete` reflects TikTok's own-comment deletion capability. `canHide` is supported and `canLike` is false. Use the ad comment reply, hide and delete operations below to moderate TikTok comments. Other platforms return feature_not_available. Requires the Ads add-on. Response shape matches GET /v1/inbox/comments/{postId}. The `{adId}` path segment accepts any identifier dialect Zernio indexes for the ad: Zernio internal `_id` (24-char hex), the numeric `platformAdId` (the value shipped in `comment.received` webhooks as `comment.ad.id`), or the creative's `effective_object_story_id` / `effective_instagram_media_id`. Caller doesn't need a translation step.
889
+ # Returns comments on an ad's underlying creative post. Useful for moderating or analyzing engagement on dark posts (ad creatives that never went live organically), which the regular GET /v1/inbox/comments/{postId} endpoint cannot serve because dark posts are not in Zernio's post database. An ad that runs on both Facebook feed and Instagram feed has two separate underlying posts with separate comment threads (the creative's effective_object_story_id and effective_instagram_media_id). Use the `placement` query param to pick one; with no param the Instagram side is returned when it exists, otherwise Facebook. The identifiers are read from the ad record (persisted during sync) with a Marketing-API fallback for ads that predate the field. For Instagram-placed comments, the Instagram account that runs the ad must be connected to Zernio, because those comments are read through that account's token. If no connected Instagram account on the profile can read the ad's media, the call returns ads_connection_required (the Facebook side, if any, is still readable via ?placement=facebook). TikTok uses the connected TikTok Ads advertiser token and supports both paid video ads and Spark Ads. `since` and `until` select a date window of at most 30 days; the default is the last 30 days. TikTok searches by ad group, so Zernio filters each page to this ad. A page can be empty while `pagination.hasMore` is true. Reuse `pagination.cursor` with the same `limit`; the cursor retains the date window. `placement` is Meta-only and returns a 400 for TikTok. Listing needs no identity or video item ID. When the ad group is stored, each page makes one comment-list call and no ad-detail lookup, including for external ads that TikTok no longer returns from ad details. `meta.tiktokItemId: null` does not prevent listing. If the ad group is missing, Zernio fetches ad details; unavailable details return 404 ad_not_found, and no ad group returns 400 ad_not_commentable. TikTok returns replies as separate comments with `parentId`; nested reply fetching is not supported. `canReply` requires a first-level comment, comment-management permission, a video item ID and a supported TT_USER or CUSTOMIZED_USER identity. `canDelete` requires TikTok's own-comment deletion capability, a video item ID and a supported identity. Both flags are false when identity or item is unknown. Listing uses stored and comment-specific fields without fetching identity. A direct reply or delete request can lazily resolve missing fields and succeed even after a false flag. `canHide` is true because visibility changes need only advertiser and comment IDs. `canLike` is false. Use the ad comment reply, hide and delete operations below to moderate TikTok comments. Other platforms return feature_not_available. Requires the Ads add-on. Response shape matches GET /v1/inbox/comments/{postId}. The `{adId}` path segment accepts any identifier dialect Zernio indexes for the ad: Zernio internal `_id` (24-char hex), the numeric `platformAdId` (the value shipped in `comment.received` webhooks as `comment.ad.id`), or the creative's `effective_object_story_id` / `effective_instagram_media_id`. Caller doesn't need a translation step.
890
890
  # @param ad_id [String] Internal Zernio ad ID or indexed platform ad/post ID.
891
891
  # @param [Hash] opts the optional parameters
892
892
  # @option opts [String] :placement Which side of the ad to return comments for. Omit to default to the Instagram side when present, else Facebook. Returns ad_not_commentable if the ad has no such placement.
@@ -901,7 +901,7 @@ module Zernio
901
901
  end
902
902
 
903
903
  # List comments on an ad
904
- # Returns comments on an ad&#39;s underlying creative post. Useful for moderating or analyzing engagement on dark posts (ad creatives that never went live organically), which the regular GET /v1/inbox/comments/{postId} endpoint cannot serve because dark posts are not in Zernio&#39;s post database. An ad that runs on both Facebook feed and Instagram feed has two separate underlying posts with separate comment threads (the creative&#39;s effective_object_story_id and effective_instagram_media_id). Use the &#x60;placement&#x60; query param to pick one; with no param the Instagram side is returned when it exists, otherwise Facebook. The identifiers are read from the ad record (persisted during sync) with a Marketing-API fallback for ads that predate the field. For Instagram-placed comments, the Instagram account that runs the ad must be connected to Zernio, because those comments are read through that account&#39;s token. If no connected Instagram account on the profile can read the ad&#39;s media, the call returns ads_connection_required (the Facebook side, if any, is still readable via ?placement&#x3D;facebook). TikTok uses the connected TikTok Ads advertiser token and supports both paid video ads and Spark Ads. &#x60;since&#x60; and &#x60;until&#x60; select a date window of at most 30 days; the default is the last 30 days. TikTok searches by ad group, so Zernio filters each page to this ad. A page can be empty while &#x60;pagination.hasMore&#x60; is true. Reuse &#x60;pagination.cursor&#x60; with the same &#x60;limit&#x60;; the cursor retains the date window. &#x60;placement&#x60; is Meta-only and returns a 400 for TikTok. TikTok returns replies as separate comments with &#x60;parentId&#x60;; nested reply fetching is not supported. &#x60;canReply&#x60; requires a first-level comment and an identity with comment-management permission. &#x60;canDelete&#x60; reflects TikTok&#39;s own-comment deletion capability. &#x60;canHide&#x60; is supported and &#x60;canLike&#x60; is false. Use the ad comment reply, hide and delete operations below to moderate TikTok comments. Other platforms return feature_not_available. Requires the Ads add-on. Response shape matches GET /v1/inbox/comments/{postId}. The &#x60;{adId}&#x60; path segment accepts any identifier dialect Zernio indexes for the ad: Zernio internal &#x60;_id&#x60; (24-char hex), the numeric &#x60;platformAdId&#x60; (the value shipped in &#x60;comment.received&#x60; webhooks as &#x60;comment.ad.id&#x60;), or the creative&#39;s &#x60;effective_object_story_id&#x60; / &#x60;effective_instagram_media_id&#x60;. Caller doesn&#39;t need a translation step.
904
+ # Returns comments on an ad&#39;s underlying creative post. Useful for moderating or analyzing engagement on dark posts (ad creatives that never went live organically), which the regular GET /v1/inbox/comments/{postId} endpoint cannot serve because dark posts are not in Zernio&#39;s post database. An ad that runs on both Facebook feed and Instagram feed has two separate underlying posts with separate comment threads (the creative&#39;s effective_object_story_id and effective_instagram_media_id). Use the &#x60;placement&#x60; query param to pick one; with no param the Instagram side is returned when it exists, otherwise Facebook. The identifiers are read from the ad record (persisted during sync) with a Marketing-API fallback for ads that predate the field. For Instagram-placed comments, the Instagram account that runs the ad must be connected to Zernio, because those comments are read through that account&#39;s token. If no connected Instagram account on the profile can read the ad&#39;s media, the call returns ads_connection_required (the Facebook side, if any, is still readable via ?placement&#x3D;facebook). TikTok uses the connected TikTok Ads advertiser token and supports both paid video ads and Spark Ads. &#x60;since&#x60; and &#x60;until&#x60; select a date window of at most 30 days; the default is the last 30 days. TikTok searches by ad group, so Zernio filters each page to this ad. A page can be empty while &#x60;pagination.hasMore&#x60; is true. Reuse &#x60;pagination.cursor&#x60; with the same &#x60;limit&#x60;; the cursor retains the date window. &#x60;placement&#x60; is Meta-only and returns a 400 for TikTok. Listing needs no identity or video item ID. When the ad group is stored, each page makes one comment-list call and no ad-detail lookup, including for external ads that TikTok no longer returns from ad details. &#x60;meta.tiktokItemId: null&#x60; does not prevent listing. If the ad group is missing, Zernio fetches ad details; unavailable details return 404 ad_not_found, and no ad group returns 400 ad_not_commentable. TikTok returns replies as separate comments with &#x60;parentId&#x60;; nested reply fetching is not supported. &#x60;canReply&#x60; requires a first-level comment, comment-management permission, a video item ID and a supported TT_USER or CUSTOMIZED_USER identity. &#x60;canDelete&#x60; requires TikTok&#39;s own-comment deletion capability, a video item ID and a supported identity. Both flags are false when identity or item is unknown. Listing uses stored and comment-specific fields without fetching identity. A direct reply or delete request can lazily resolve missing fields and succeed even after a false flag. &#x60;canHide&#x60; is true because visibility changes need only advertiser and comment IDs. &#x60;canLike&#x60; is false. Use the ad comment reply, hide and delete operations below to moderate TikTok comments. Other platforms return feature_not_available. Requires the Ads add-on. Response shape matches GET /v1/inbox/comments/{postId}. The &#x60;{adId}&#x60; path segment accepts any identifier dialect Zernio indexes for the ad: Zernio internal &#x60;_id&#x60; (24-char hex), the numeric &#x60;platformAdId&#x60; (the value shipped in &#x60;comment.received&#x60; webhooks as &#x60;comment.ad.id&#x60;), or the creative&#39;s &#x60;effective_object_story_id&#x60; / &#x60;effective_instagram_media_id&#x60;. Caller doesn&#39;t need a translation step.
905
905
  # @param ad_id [String] Internal Zernio ad ID or indexed platform ad/post ID.
906
906
  # @param [Hash] opts the optional parameters
907
907
  # @option opts [String] :placement Which side of the ad to return comments for. Omit to default to the Instagram side when present, else Facebook. Returns ad_not_commentable if the ad has no such placement.
@@ -1235,7 +1235,7 @@ module Zernio
1235
1235
  return data, status_code, headers
1236
1236
  end
1237
1237
 
1238
- # List DSA beneficiary/payor suggestions
1238
+ # Get DSA recommendations
1239
1239
  # Returns Meta's suggested beneficiary/payor names for an ad account, derived by Meta from the account's recent activity. Useful for prefilling `dsaBeneficiary`/`dsaPayor` inputs, or the defaults sent to `PATCH /v1/ads/accounts`, in your own UI. Meta returns a single flat list. Entries are not labeled as beneficiary or payor, and since these are legal disclosures Zernio never applies them automatically: let your user pick the right entity. The list may be empty for accounts with little activity. Meta accounts only.
1240
1240
  # @param account_id [String] Account ID (metaads, or a facebook/instagram posting account)
1241
1241
  # @param ad_account_id [String] Meta ad account ID (act_...)
@@ -1246,7 +1246,7 @@ module Zernio
1246
1246
  data
1247
1247
  end
1248
1248
 
1249
- # List DSA beneficiary/payor suggestions
1249
+ # Get DSA recommendations
1250
1250
  # Returns Meta&#39;s suggested beneficiary/payor names for an ad account, derived by Meta from the account&#39;s recent activity. Useful for prefilling &#x60;dsaBeneficiary&#x60;/&#x60;dsaPayor&#x60; inputs, or the defaults sent to &#x60;PATCH /v1/ads/accounts&#x60;, in your own UI. Meta returns a single flat list. Entries are not labeled as beneficiary or payor, and since these are legal disclosures Zernio never applies them automatically: let your user pick the right entity. The list may be empty for accounts with little activity. Meta accounts only.
1251
1251
  # @param account_id [String] Account ID (metaads, or a facebook/instagram posting account)
1252
1252
  # @param ad_account_id [String] Meta ad account ID (act_...)
@@ -1465,7 +1465,7 @@ module Zernio
1465
1465
  end
1466
1466
 
1467
1467
  # Hide or unhide an ad comment
1468
- # Hide or restore a TikTok ad comment. Send hidden=true to hide it or hidden=false to make it public again. Requires Ads access. The ad is resolved within the caller's accessible profiles. Before moderation, Zernio verifies that the comment belongs to this ad using TikTok's ad-group comment listing. The default search window is the last 30 days. Use since/until for older comments, with at most 30 days between the dates. Lookups scan at most 2,000 ad-group comments; narrow the date window if exceeded. Meta returns 501 feature_not_available with guidance to use the existing inbox comment endpoints and the account/post IDs from GET /v1/ads/{adId}/comments.
1468
+ # Hide or restore a TikTok ad comment. Send hidden=true to hide it or hidden=false to make it public again. Identity and video item ID are not required; no identity lookup is performed. Requires Ads access. The ad is resolved within the caller's accessible profiles. Before moderation, Zernio verifies that the comment belongs to this ad using TikTok's ad-group comment listing. The default search window is the last 30 days. Use since/until for older comments, with at most 30 days between the dates. Lookups scan at most 2,000 ad-group comments; narrow the date window if exceeded. Meta returns 501 feature_not_available with guidance to use the existing inbox comment endpoints and the account/post IDs from GET /v1/ads/{adId}/comments.
1469
1469
  # @param ad_id [String] Internal Zernio ad ID or indexed platform ad ID.
1470
1470
  # @param comment_id [String] TikTok comment ID from the ad comment listing.
1471
1471
  # @param hide_ad_comment_request [HideAdCommentRequest]
@@ -1479,7 +1479,7 @@ module Zernio
1479
1479
  end
1480
1480
 
1481
1481
  # Hide or unhide an ad comment
1482
- # Hide or restore a TikTok ad comment. Send hidden&#x3D;true to hide it or hidden&#x3D;false to make it public again. Requires Ads access. The ad is resolved within the caller&#39;s accessible profiles. Before moderation, Zernio verifies that the comment belongs to this ad using TikTok&#39;s ad-group comment listing. The default search window is the last 30 days. Use since/until for older comments, with at most 30 days between the dates. Lookups scan at most 2,000 ad-group comments; narrow the date window if exceeded. Meta returns 501 feature_not_available with guidance to use the existing inbox comment endpoints and the account/post IDs from GET /v1/ads/{adId}/comments.
1482
+ # Hide or restore a TikTok ad comment. Send hidden&#x3D;true to hide it or hidden&#x3D;false to make it public again. Identity and video item ID are not required; no identity lookup is performed. Requires Ads access. The ad is resolved within the caller&#39;s accessible profiles. Before moderation, Zernio verifies that the comment belongs to this ad using TikTok&#39;s ad-group comment listing. The default search window is the last 30 days. Use since/until for older comments, with at most 30 days between the dates. Lookups scan at most 2,000 ad-group comments; narrow the date window if exceeded. Meta returns 501 feature_not_available with guidance to use the existing inbox comment endpoints and the account/post IDs from GET /v1/ads/{adId}/comments.
1483
1483
  # @param ad_id [String] Internal Zernio ad ID or indexed platform ad ID.
1484
1484
  # @param comment_id [String] TikTok comment ID from the ad comment listing.
1485
1485
  # @param hide_ad_comment_request [HideAdCommentRequest]
@@ -2407,7 +2407,7 @@ module Zernio
2407
2407
  return data, status_code, headers
2408
2408
  end
2409
2409
 
2410
- # High demand periods / budget schedules
2410
+ # List high-demand periods
2411
2411
  # Scheduled budget increases (Meta's budget-scheduling API). The Graph edge lives on the campaign and ad-set nodes only, so exactly one of `campaignId` / `adSetId` (platform ids) is required. Rows returned verbatim (budget_value, budget_value_type, time window, recurrence).
2412
2412
  # @param account_id [String] Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token.
2413
2413
  # @param [Hash] opts the optional parameters
@@ -2421,7 +2421,7 @@ module Zernio
2421
2421
  data
2422
2422
  end
2423
2423
 
2424
- # High demand periods / budget schedules
2424
+ # List high-demand periods
2425
2425
  # Scheduled budget increases (Meta&#39;s budget-scheduling API). The Graph edge lives on the campaign and ad-set nodes only, so exactly one of &#x60;campaignId&#x60; / &#x60;adSetId&#x60; (platform ids) is required. Rows returned verbatim (budget_value, budget_value_type, time window, recurrence).
2426
2426
  # @param account_id [String] Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token.
2427
2427
  # @param [Hash] opts the optional parameters
@@ -2569,6 +2569,81 @@ module Zernio
2569
2569
  return data, status_code, headers
2570
2570
  end
2571
2571
 
2572
+ # List TikTok ad pixels
2573
+ # Lists pixels and their supported optimization events for a connected TikTok Ads account. The advertiser defaults to the first advertiser on the connection. Reconnect if Pixel Management permission has not been granted.
2574
+ # @param account_id [String] Zernio SocialAccount ID.
2575
+ # @param [Hash] opts the optional parameters
2576
+ # @option opts [String] :advertiser_id Advertiser belonging to this connection.
2577
+ # @option opts [String] :code Filter by a Pixel Code.
2578
+ # @return [ListTikTokAdPixels200Response]
2579
+ def list_tik_tok_ad_pixels(account_id, opts = {})
2580
+ data, _status_code, _headers = list_tik_tok_ad_pixels_with_http_info(account_id, opts)
2581
+ data
2582
+ end
2583
+
2584
+ # List TikTok ad pixels
2585
+ # Lists pixels and their supported optimization events for a connected TikTok Ads account. The advertiser defaults to the first advertiser on the connection. Reconnect if Pixel Management permission has not been granted.
2586
+ # @param account_id [String] Zernio SocialAccount ID.
2587
+ # @param [Hash] opts the optional parameters
2588
+ # @option opts [String] :advertiser_id Advertiser belonging to this connection.
2589
+ # @option opts [String] :code Filter by a Pixel Code.
2590
+ # @return [Array<(ListTikTokAdPixels200Response, Integer, Hash)>] ListTikTokAdPixels200Response data, response status code and response headers
2591
+ def list_tik_tok_ad_pixels_with_http_info(account_id, opts = {})
2592
+ if @api_client.config.debugging
2593
+ @api_client.config.logger.debug 'Calling API: AdAccountsApi.list_tik_tok_ad_pixels ...'
2594
+ end
2595
+ # verify the required parameter 'account_id' is set
2596
+ if @api_client.config.client_side_validation && account_id.nil?
2597
+ fail ArgumentError, "Missing the required parameter 'account_id' when calling AdAccountsApi.list_tik_tok_ad_pixels"
2598
+ end
2599
+ pattern = Regexp.new(/^[a-fA-F0-9]{24}$/)
2600
+ if @api_client.config.client_side_validation && account_id !~ pattern
2601
+ fail ArgumentError, "invalid value for 'account_id' when calling AdAccountsApi.list_tik_tok_ad_pixels, must conform to the pattern #{pattern}."
2602
+ end
2603
+
2604
+ # resource path
2605
+ local_var_path = '/v1/ads/pixels'
2606
+
2607
+ # query parameters
2608
+ query_params = opts[:query_params] || {}
2609
+ query_params[:'accountId'] = account_id
2610
+ query_params[:'advertiserId'] = opts[:'advertiser_id'] if !opts[:'advertiser_id'].nil?
2611
+ query_params[:'code'] = opts[:'code'] if !opts[:'code'].nil?
2612
+
2613
+ # header parameters
2614
+ header_params = opts[:header_params] || {}
2615
+ # HTTP header 'Accept' (if needed)
2616
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
2617
+
2618
+ # form parameters
2619
+ form_params = opts[:form_params] || {}
2620
+
2621
+ # http body (model)
2622
+ post_body = opts[:debug_body]
2623
+
2624
+ # return_type
2625
+ return_type = opts[:debug_return_type] || 'ListTikTokAdPixels200Response'
2626
+
2627
+ # auth_names
2628
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
2629
+
2630
+ new_options = opts.merge(
2631
+ :operation => :"AdAccountsApi.list_tik_tok_ad_pixels",
2632
+ :header_params => header_params,
2633
+ :query_params => query_params,
2634
+ :form_params => form_params,
2635
+ :body => post_body,
2636
+ :auth_names => auth_names,
2637
+ :return_type => return_type
2638
+ )
2639
+
2640
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
2641
+ if @api_client.config.debugging
2642
+ @api_client.config.logger.debug "API called: AdAccountsApi#list_tik_tok_ad_pixels\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
2643
+ end
2644
+ return data, status_code, headers
2645
+ end
2646
+
2572
2647
  # List value rule sets
2573
2648
  # Lists the ad account's value rule sets (Meta's `/act_X/value_rule_set`). A value rule set adjusts the auction bid up or down for audience segments you value differently; attach one to an ad set with `valueRuleSetId` on `POST /v1/ads/create` or `PUT /v1/ads/ad-sets/{adSetId}`. Rows are returned in the same camelCase shape the `PUT` body takes, ids included, so a set round-trips 1:1: **the update is a full replace, not a patch**, so you GET, mutate and send the whole thing back. Limits: 6 rule sets per ad account, 10 rules per set, 4 criteria per rule. **Rule order is semantic.** Rules are evaluated in array order and only the FIRST matching rule adjusts the bid for an overlapping audience. The order you send is the order that is stored and returned. Eligibility: value rule sets apply only to ad sets on the `LOWEST_COST_WITHOUT_CAP` (auto-bid) or `COST_CAP` bid strategies. Meta rejects the rest server-side.
2574
2649
  # @param account_id [String] Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token.
@@ -2938,7 +3013,7 @@ module Zernio
2938
3013
  end
2939
3014
 
2940
3015
  # Reply to an ad comment
2941
- # Reply to a first-level TikTok ad comment. Requires a TT_USER or CUSTOMIZED_USER identity with comment-management permission. Replies to replies are rejected. The response commentId identifies the new reply. This operation is not idempotent; do not blindly retry an uncertain response. Requires Ads access. The ad is resolved within the caller's accessible profiles. Before moderation, Zernio verifies that the comment belongs to this ad using TikTok's ad-group comment listing. The default search window is the last 30 days. Use since/until for older comments, with at most 30 days between the dates. Lookups scan at most 2,000 ad-group comments; narrow the date window if exceeded. Meta returns 501 feature_not_available with guidance to use the existing inbox comment endpoints and the account/post IDs from GET /v1/ads/{adId}/comments.
3016
+ # Reply to a first-level TikTok ad comment. Requires a TT_USER or CUSTOMIZED_USER identity with comment-management permission. Replies to replies are rejected. The response commentId identifies the new reply. This operation is not idempotent; do not blindly retry an uncertain response. Unknown identity and video item fields are resolved only when needed for this action, then persisted for reuse. Comment-specific fields take precedence. If TikTok no longer returns the ad needed to resolve identity, 404 ad_not_found directs you to check deletion or archival in TikTok Ads Manager. Listing can still succeed. Unsupported or unavailable identity returns 403 feature_not_available. Denied access to ad details returns 403 insufficient_permissions with reconnect guidance and the upstream platformError. Requires Ads access. The ad is resolved within the caller's accessible profiles. Before moderation, Zernio verifies that the comment belongs to this ad using TikTok's ad-group comment listing. The default search window is the last 30 days. Use since/until for older comments, with at most 30 days between the dates. Lookups scan at most 2,000 ad-group comments; narrow the date window if exceeded. Meta returns 501 feature_not_available with guidance to use the existing inbox comment endpoints and the account/post IDs from GET /v1/ads/{adId}/comments.
2942
3017
  # @param ad_id [String] Internal Zernio ad ID or indexed platform ad ID.
2943
3018
  # @param comment_id [String] TikTok comment ID from the ad comment listing.
2944
3019
  # @param reply_to_ad_comment_request [ReplyToAdCommentRequest]
@@ -2952,7 +3027,7 @@ module Zernio
2952
3027
  end
2953
3028
 
2954
3029
  # Reply to an ad comment
2955
- # Reply to a first-level TikTok ad comment. Requires a TT_USER or CUSTOMIZED_USER identity with comment-management permission. Replies to replies are rejected. The response commentId identifies the new reply. This operation is not idempotent; do not blindly retry an uncertain response. Requires Ads access. The ad is resolved within the caller&#39;s accessible profiles. Before moderation, Zernio verifies that the comment belongs to this ad using TikTok&#39;s ad-group comment listing. The default search window is the last 30 days. Use since/until for older comments, with at most 30 days between the dates. Lookups scan at most 2,000 ad-group comments; narrow the date window if exceeded. Meta returns 501 feature_not_available with guidance to use the existing inbox comment endpoints and the account/post IDs from GET /v1/ads/{adId}/comments.
3030
+ # Reply to a first-level TikTok ad comment. Requires a TT_USER or CUSTOMIZED_USER identity with comment-management permission. Replies to replies are rejected. The response commentId identifies the new reply. This operation is not idempotent; do not blindly retry an uncertain response. Unknown identity and video item fields are resolved only when needed for this action, then persisted for reuse. Comment-specific fields take precedence. If TikTok no longer returns the ad needed to resolve identity, 404 ad_not_found directs you to check deletion or archival in TikTok Ads Manager. Listing can still succeed. Unsupported or unavailable identity returns 403 feature_not_available. Denied access to ad details returns 403 insufficient_permissions with reconnect guidance and the upstream platformError. Requires Ads access. The ad is resolved within the caller&#39;s accessible profiles. Before moderation, Zernio verifies that the comment belongs to this ad using TikTok&#39;s ad-group comment listing. The default search window is the last 30 days. Use since/until for older comments, with at most 30 days between the dates. Lookups scan at most 2,000 ad-group comments; narrow the date window if exceeded. Meta returns 501 feature_not_available with guidance to use the existing inbox comment endpoints and the account/post IDs from GET /v1/ads/{adId}/comments.
2956
3031
  # @param ad_id [String] Internal Zernio ad ID or indexed platform ad ID.
2957
3032
  # @param comment_id [String] TikTok comment ID from the ad comment listing.
2958
3033
  # @param reply_to_ad_comment_request [ReplyToAdCommentRequest]
@@ -19,7 +19,7 @@ module Zernio
19
19
  def initialize(api_client = ApiClient.default)
20
20
  @api_client = api_client
21
21
  end
22
- # Add Search keywords to an ad group
22
+ # Add Search ad-group keywords
23
23
  # Adds one or more keyword criteria to an existing Google Search ad group, without touching the keywords already there (unlike the whole-set diff on `PUT /v1/ads/{adId}`, `keywords`/`negativeKeywords` in `platformSpecificData`, which replaces the set). Set `negative: true` to add ad-group-level negatives instead of positive keywords.
24
24
  # @param add_ad_keywords_request [AddAdKeywordsRequest]
25
25
  # @param [Hash] opts the optional parameters
@@ -29,7 +29,7 @@ module Zernio
29
29
  data
30
30
  end
31
31
 
32
- # Add Search keywords to an ad group
32
+ # Add Search ad-group keywords
33
33
  # Adds one or more keyword criteria to an existing Google Search ad group, without touching the keywords already there (unlike the whole-set diff on &#x60;PUT /v1/ads/{adId}&#x60;, &#x60;keywords&#x60;/&#x60;negativeKeywords&#x60; in &#x60;platformSpecificData&#x60;, which replaces the set). Set &#x60;negative: true&#x60; to add ad-group-level negatives instead of positive keywords.
34
34
  # @param add_ad_keywords_request [AddAdKeywordsRequest]
35
35
  # @param [Hash] opts the optional parameters
@@ -538,7 +538,7 @@ module Zernio
538
538
  return data, status_code, headers
539
539
  end
540
540
 
541
- # Create a Google Ads portfolio bid strategy
541
+ # Create portfolio bid strategy
542
542
  # Creates a standalone bid strategy shared across campaigns. Attach it to a campaign with `portfolioBidStrategyId` on POST /v1/ads/create, PUT /v1/ads/campaigns/{campaignId}, or PUT /v1/ads/ad-sets/{adSetId}. Attaching a strategy aligned to a shared budget fails there with a 400 (Google's `BIDDING_STRATEGY_AND_BUDGET_MUST_BE_ALIGNED`); this is not retryable.
543
543
  # @param create_bid_strategy_request [CreateBidStrategyRequest]
544
544
  # @param [Hash] opts the optional parameters
@@ -548,7 +548,7 @@ module Zernio
548
548
  data
549
549
  end
550
550
 
551
- # Create a Google Ads portfolio bid strategy
551
+ # Create portfolio bid strategy
552
552
  # Creates a standalone bid strategy shared across campaigns. Attach it to a campaign with &#x60;portfolioBidStrategyId&#x60; on POST /v1/ads/create, PUT /v1/ads/campaigns/{campaignId}, or PUT /v1/ads/ad-sets/{adSetId}. Attaching a strategy aligned to a shared budget fails there with a 400 (Google&#39;s &#x60;BIDDING_STRATEGY_AND_BUDGET_MUST_BE_ALIGNED&#x60;); this is not retryable.
553
553
  # @param create_bid_strategy_request [CreateBidStrategyRequest]
554
554
  # @param [Hash] opts the optional parameters
@@ -1186,7 +1186,7 @@ module Zernio
1186
1186
  return data, status_code, headers
1187
1187
  end
1188
1188
 
1189
- # Live ad-set details incl. learning phase
1189
+ # Get live ad-set details
1190
1190
  # 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.
1191
1191
  # @param ad_set_id [String] Meta ad set id (platformAdSetId).
1192
1192
  # @param account_id [String] Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token.
@@ -1198,7 +1198,7 @@ module Zernio
1198
1198
  data
1199
1199
  end
1200
1200
 
1201
- # Live ad-set details incl. learning phase
1201
+ # Get live ad-set details
1202
1202
  # Reads the ad set live from Meta, returned verbatim. The default projection includes &#x60;learning_stage_info&#x60; (learning-phase status: LEARNING / SUCCESS / FAIL / WAIVING; Meta omits its &#x60;status&#x60; key on paused ad sets), delivery settings, budgets, schedule and targeting. &#x60;fields&#x60; is a raw-passthrough override; unknown fields return Meta&#39;s 400 verbatim.
1203
1203
  # @param ad_set_id [String] Meta ad set id (platformAdSetId).
1204
1204
  # @param account_id [String] Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token.
@@ -2158,7 +2158,7 @@ module Zernio
2158
2158
  return data, status_code, headers
2159
2159
  end
2160
2160
 
2161
- # List Google Ads portfolio bid strategies
2161
+ # List portfolio bid strategies
2162
2162
  # Bidding strategy report: type, status, campaign count, clicks, cost, cost per conversion, impressions, average CPC and conversions over the date range (default last 30 days). Reads Google's `bidding_strategy` resource, cached for the quota window. 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.
2163
2163
  # @param account_id [String] Google ads SocialAccount id.
2164
2164
  # @param [Hash] opts the optional parameters
@@ -2171,7 +2171,7 @@ module Zernio
2171
2171
  data
2172
2172
  end
2173
2173
 
2174
- # List Google Ads portfolio bid strategies
2174
+ # List portfolio bid strategies
2175
2175
  # Bidding strategy report: type, status, campaign count, clicks, cost, cost per conversion, impressions, average CPC and conversions over the date range (default last 30 days). Reads Google&#39;s &#x60;bidding_strategy&#x60; resource, cached for the quota window. Draws on the shared Google Ads operations budget. The response carries &#x60;cachedAt&#x60; and &#x60;stale&#x60;, set when a quota-exhausted call falls back to the last-good copy instead of a live read.
2176
2176
  # @param account_id [String] Google ads SocialAccount id.
2177
2177
  # @param [Hash] opts the optional parameters
@@ -3503,7 +3503,7 @@ module Zernio
3503
3503
  return data, status_code, headers
3504
3504
  end
3505
3505
 
3506
- # Update a Google Ads portfolio bid strategy
3506
+ # Update portfolio bid strategy
3507
3507
  # Renames or retargets a portfolio bid strategy. The strategy's status is output only on Google's side, so it cannot be changed here; remove a strategy in Google Ads. `type` is only needed alongside `targetCpa`/`targetRoas` to disambiguate the field Google writes to (TARGET_CPA and MAXIMIZE_CONVERSIONS both take a target CPA; TARGET_ROAS and MAXIMIZE_CONVERSION_VALUE both take a target ROAS); the strategy's family is otherwise immutable once created.
3508
3508
  # @param strategy_id [String] Numeric Google Ads bid strategy id.
3509
3509
  # @param update_bid_strategy_request [UpdateBidStrategyRequest]
@@ -3514,7 +3514,7 @@ module Zernio
3514
3514
  data
3515
3515
  end
3516
3516
 
3517
- # Update a Google Ads portfolio bid strategy
3517
+ # Update portfolio bid strategy
3518
3518
  # Renames or retargets a portfolio bid strategy. The strategy&#39;s status is output only on Google&#39;s side, so it cannot be changed here; remove a strategy in Google Ads. &#x60;type&#x60; is only needed alongside &#x60;targetCpa&#x60;/&#x60;targetRoas&#x60; to disambiguate the field Google writes to (TARGET_CPA and MAXIMIZE_CONVERSIONS both take a target CPA; TARGET_ROAS and MAXIMIZE_CONVERSION_VALUE both take a target ROAS); the strategy&#39;s family is otherwise immutable once created.
3519
3519
  # @param strategy_id [String] Numeric Google Ads bid strategy id.
3520
3520
  # @param update_bid_strategy_request [UpdateBidStrategyRequest]