late-sdk 0.0.899 → 0.0.900

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 (84) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +21 -2
  3. data/docs/AdAccountsApi.md +463 -3
  4. data/docs/AdCampaignsApi.md +4 -4
  5. data/docs/AdTracking.md +20 -0
  6. data/docs/CreateAdCampaign200Response.md +26 -0
  7. data/docs/CreateAdCampaignRequest.md +8 -0
  8. data/docs/CreateCallAdRequest.md +2 -0
  9. data/docs/CreateMessagingAdRequest.md +2 -0
  10. data/docs/CreateStandaloneAdRequest.md +11 -3
  11. data/docs/CtwaAdRequestBody.md +2 -0
  12. data/docs/GetAdComments200ResponseMeta.md +10 -4
  13. data/docs/GetIosFourteenCampaignLimits200Response.md +18 -0
  14. data/docs/GetIosFourteenCampaignLimits200ResponseLimits.md +22 -0
  15. data/docs/HideAdComment200Response.md +22 -0
  16. data/docs/HideAdCommentRequest.md +18 -0
  17. data/docs/ListAdsInstagramAccounts200Response.md +22 -0
  18. data/docs/ListAdsInstagramAccounts200ResponseAccountsInner.md +26 -0
  19. data/docs/ListAdsInstagramAccounts200ResponsePagesInner.md +24 -0
  20. data/docs/ListAdsInstagramAccounts200ResponseResolved.md +22 -0
  21. data/docs/ListAdvertisableApplications200Response.md +18 -0
  22. data/docs/ListAdvertisableApplications200ResponseApplicationsInner.md +24 -0
  23. data/docs/MetaInstagramIdentityRef.md +22 -0
  24. data/docs/ReplyToAdComment200Response.md +20 -0
  25. data/docs/ReplyToAdCommentRequest.md +18 -0
  26. data/docs/TargetingSpec.md +4 -0
  27. data/lib/zernio-sdk/api/ad_accounts_api.rb +512 -4
  28. data/lib/zernio-sdk/api/ad_campaigns_api.rb +3 -3
  29. data/lib/zernio-sdk/models/{create_standalone_ad_request_tracking.rb → ad_tracking.rb} +5 -5
  30. data/lib/zernio-sdk/models/create_ad_campaign200_response.rb +231 -0
  31. data/lib/zernio-sdk/models/create_ad_campaign_request.rb +52 -1
  32. data/lib/zernio-sdk/models/create_call_ad_request.rb +10 -1
  33. data/lib/zernio-sdk/models/create_messaging_ad_request.rb +10 -1
  34. data/lib/zernio-sdk/models/create_standalone_ad_request.rb +98 -4
  35. data/lib/zernio-sdk/models/ctwa_ad_request_body.rb +10 -1
  36. data/lib/zernio-sdk/models/get_ad_comments200_response_meta.rb +36 -46
  37. data/lib/zernio-sdk/models/get_ios_fourteen_campaign_limits200_response.rb +164 -0
  38. data/lib/zernio-sdk/models/get_ios_fourteen_campaign_limits200_response_limits.rb +172 -0
  39. data/lib/zernio-sdk/models/hide_ad_comment200_response.rb +225 -0
  40. data/lib/zernio-sdk/models/hide_ad_comment_request.rb +165 -0
  41. data/lib/zernio-sdk/models/list_ads_instagram_accounts200_response.rb +220 -0
  42. data/lib/zernio-sdk/models/list_ads_instagram_accounts200_response_accounts_inner.rb +287 -0
  43. data/lib/zernio-sdk/models/list_ads_instagram_accounts200_response_pages_inner.rb +210 -0
  44. data/lib/zernio-sdk/models/list_ads_instagram_accounts200_response_resolved.rb +211 -0
  45. data/lib/zernio-sdk/models/list_advertisable_applications200_response.rb +166 -0
  46. data/lib/zernio-sdk/models/list_advertisable_applications200_response_applications_inner.rb +250 -0
  47. data/lib/zernio-sdk/models/meta_instagram_identity_ref.rb +202 -0
  48. data/lib/zernio-sdk/models/reply_to_ad_comment200_response.rb +215 -0
  49. data/lib/zernio-sdk/models/reply_to_ad_comment_request.rb +174 -0
  50. data/lib/zernio-sdk/models/targeting_spec.rb +63 -1
  51. data/lib/zernio-sdk/version.rb +1 -1
  52. data/lib/zernio-sdk.rb +15 -2
  53. data/openapi.yaml +618 -143
  54. data/spec/api/ad_accounts_api_spec.rb +91 -2
  55. data/spec/api/ad_campaigns_api_spec.rb +1 -1
  56. data/spec/models/{create_standalone_ad_request_tracking_spec.rb → ad_tracking_spec.rb} +6 -6
  57. data/spec/models/create_ad_campaign200_response_spec.rb +68 -0
  58. data/spec/models/create_ad_campaign_request_spec.rb +28 -0
  59. data/spec/models/create_call_ad_request_spec.rb +6 -0
  60. data/spec/models/create_messaging_ad_request_spec.rb +6 -0
  61. data/spec/models/create_standalone_ad_request_spec.rb +28 -0
  62. data/spec/models/ctwa_ad_request_body_spec.rb +6 -0
  63. data/spec/models/get_ad_comments200_response_meta_spec.rb +19 -1
  64. data/spec/models/get_ios_fourteen_campaign_limits200_response_limits_spec.rb +48 -0
  65. data/spec/models/get_ios_fourteen_campaign_limits200_response_spec.rb +36 -0
  66. data/spec/models/hide_ad_comment200_response_spec.rb +52 -0
  67. data/spec/models/hide_ad_comment_request_spec.rb +36 -0
  68. data/spec/models/list_ads_instagram_accounts200_response_accounts_inner_spec.rb +64 -0
  69. data/spec/models/list_ads_instagram_accounts200_response_pages_inner_spec.rb +54 -0
  70. data/spec/models/list_ads_instagram_accounts200_response_resolved_spec.rb +52 -0
  71. data/spec/models/list_ads_instagram_accounts200_response_spec.rb +48 -0
  72. data/spec/models/list_advertisable_applications200_response_applications_inner_spec.rb +54 -0
  73. data/spec/models/list_advertisable_applications200_response_spec.rb +36 -0
  74. data/spec/models/meta_instagram_identity_ref_spec.rb +48 -0
  75. data/spec/models/reply_to_ad_comment200_response_spec.rb +46 -0
  76. data/spec/models/reply_to_ad_comment_request_spec.rb +36 -0
  77. data/spec/models/targeting_spec_spec.rb +12 -0
  78. data/zernio-sdk-0.0.900.gem +0 -0
  79. metadata +62 -10
  80. data/docs/CreateStandaloneAdRequestPromotedObject.md +0 -38
  81. data/docs/CreateStandaloneAdRequestTracking.md +0 -20
  82. data/lib/zernio-sdk/models/create_standalone_ad_request_promoted_object.rb +0 -249
  83. data/spec/models/create_standalone_ad_request_promoted_object_spec.rb +0 -96
  84. data/zernio-sdk-0.0.899.gem +0 -0
@@ -9,6 +9,7 @@ All URIs are relative to *https://zernio.com/api*
9
9
  | [**create_custom_conversion**](AdAccountsApi.md#create_custom_conversion) | **POST** /v1/accounts/{accountId}/custom-conversions | Create or reuse a custom conversion |
10
10
  | [**create_high_demand_period**](AdAccountsApi.md#create_high_demand_period) | **POST** /v1/ads/high-demand-periods | Schedule a budget increase |
11
11
  | [**create_value_rule_set**](AdAccountsApi.md#create_value_rule_set) | **POST** /v1/ads/value-rule-sets | Create a value rule set |
12
+ | [**delete_ad_comment**](AdAccountsApi.md#delete_ad_comment) | **DELETE** /v1/ads/{adId}/comments/{commentId} | Delete an ad comment |
12
13
  | [**delete_ad_negative_keyword_list**](AdAccountsApi.md#delete_ad_negative_keyword_list) | **DELETE** /v1/ads/accounts/negative-keyword-lists/{listId} | Delete a negative keyword list |
13
14
  | [**delete_value_rule_set**](AdAccountsApi.md#delete_value_rule_set) | **DELETE** /v1/ads/value-rule-sets/{valueRuleSetId} | Delete a value rule set |
14
15
  | [**get_ad_account_finance**](AdAccountsApi.md#get_ad_account_finance) | **GET** /v1/ads/accounts/finance | Ad account finances |
@@ -17,19 +18,24 @@ All URIs are relative to *https://zernio.com/api*
17
18
  | [**get_ads_activity_log**](AdAccountsApi.md#get_ads_activity_log) | **GET** /v1/ads/activity | Ad account change / audit log |
18
19
  | [**get_dsa_defaults**](AdAccountsApi.md#get_dsa_defaults) | **GET** /v1/ads/dsa-defaults | Get ad account DSA defaults |
19
20
  | [**get_dsa_recommendations**](AdAccountsApi.md#get_dsa_recommendations) | **GET** /v1/ads/dsa-recommendations | List DSA beneficiary/payor suggestions |
21
+ | [**get_ios_fourteen_campaign_limits**](AdAccountsApi.md#get_ios_fourteen_campaign_limits) | **GET** /v1/ads/ios-fourteen-campaign-limits | Get iOS 14 campaign limits |
20
22
  | [**get_value_rule_set**](AdAccountsApi.md#get_value_rule_set) | **GET** /v1/ads/value-rule-sets/{valueRuleSetId} | Read a value rule set |
23
+ | [**hide_ad_comment**](AdAccountsApi.md#hide_ad_comment) | **POST** /v1/ads/{adId}/comments/{commentId}/hide | Hide or unhide an ad comment |
21
24
  | [**list_account_callouts**](AdAccountsApi.md#list_account_callouts) | **GET** /v1/ads/accounts/callouts | List account-level callout extensions |
22
25
  | [**list_ad_accounts**](AdAccountsApi.md#list_ad_accounts) | **GET** /v1/ads/accounts | List ad accounts |
23
26
  | [**list_ad_labels**](AdAccountsApi.md#list_ad_labels) | **GET** /v1/ads/labels | Ad labels |
24
27
  | [**list_ad_negative_keyword_lists**](AdAccountsApi.md#list_ad_negative_keyword_lists) | **GET** /v1/ads/accounts/negative-keyword-lists | List negative keyword lists |
25
28
  | [**list_ad_studies**](AdAccountsApi.md#list_ad_studies) | **GET** /v1/ads/studies | A/B tests and lift studies |
26
29
  | [**list_ads_business_centers**](AdAccountsApi.md#list_ads_business_centers) | **GET** /v1/ads/business-centers | List TikTok Business Centers |
30
+ | [**list_ads_instagram_accounts**](AdAccountsApi.md#list_ads_instagram_accounts) | **GET** /v1/ads/instagram-accounts | List Instagram ad identities |
31
+ | [**list_advertisable_applications**](AdAccountsApi.md#list_advertisable_applications) | **GET** /v1/ads/advertisable-applications | List advertisable apps |
27
32
  | [**list_custom_conversions**](AdAccountsApi.md#list_custom_conversions) | **GET** /v1/accounts/{accountId}/custom-conversions | List custom conversions |
28
33
  | [**list_high_demand_periods**](AdAccountsApi.md#list_high_demand_periods) | **GET** /v1/ads/high-demand-periods | High demand periods / budget schedules |
29
34
  | [**list_meta_businesses**](AdAccountsApi.md#list_meta_businesses) | **GET** /v1/ads/businesses | Businesses list |
30
35
  | [**list_value_rule_sets**](AdAccountsApi.md#list_value_rule_sets) | **GET** /v1/ads/value-rule-sets | List value rule sets |
31
36
  | [**remove_account_callout**](AdAccountsApi.md#remove_account_callout) | **DELETE** /v1/ads/accounts/callouts | Remove an account-level callout extension |
32
37
  | [**replace_ad_negative_keyword_list_keywords**](AdAccountsApi.md#replace_ad_negative_keyword_list_keywords) | **PUT** /v1/ads/accounts/negative-keyword-lists/{listId}/keywords | Replace negative list keywords |
38
+ | [**reply_to_ad_comment**](AdAccountsApi.md#reply_to_ad_comment) | **POST** /v1/ads/{adId}/comments/{commentId}/reply | Reply to an ad comment |
33
39
  | [**update_ad_account**](AdAccountsApi.md#update_ad_account) | **PATCH** /v1/ads/accounts | Update ad account settings |
34
40
  | [**update_ad_negative_keyword_list**](AdAccountsApi.md#update_ad_negative_keyword_list) | **PUT** /v1/ads/accounts/negative-keyword-lists/{listId} | Rename a negative keyword list |
35
41
  | [**update_value_rule_set**](AdAccountsApi.md#update_value_rule_set) | **PUT** /v1/ads/value-rule-sets/{valueRuleSetId} | Replace a value rule set |
@@ -382,6 +388,83 @@ end
382
388
  - **Accept**: application/json
383
389
 
384
390
 
391
+ ## delete_ad_comment
392
+
393
+ > <ReplyToAdComment200Response> delete_ad_comment(ad_id, comment_id, opts)
394
+
395
+ Delete an ad comment
396
+
397
+ 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.
398
+
399
+ ### Examples
400
+
401
+ ```ruby
402
+ require 'time'
403
+ require 'zernio-sdk'
404
+ # setup authorization
405
+ Zernio.configure do |config|
406
+ # Configure Bearer authorization (JWT): bearerAuth
407
+ config.access_token = 'YOUR_BEARER_TOKEN'
408
+ end
409
+
410
+ api_instance = Zernio::AdAccountsApi.new
411
+ ad_id = 'ad_id_example' # String | Internal Zernio ad ID or indexed platform ad ID.
412
+ comment_id = 'comment_id_example' # String | TikTok comment ID from the ad comment listing.
413
+ opts = {
414
+ since: Date.parse('2013-10-20'), # Date | Start date of the comment lookup window. Defaults to 30 days before until.
415
+ _until: Date.parse('2013-10-20') # Date | End date of the comment lookup window. Defaults to today in UTC.
416
+ }
417
+
418
+ begin
419
+ # Delete an ad comment
420
+ result = api_instance.delete_ad_comment(ad_id, comment_id, opts)
421
+ p result
422
+ rescue Zernio::ApiError => e
423
+ puts "Error when calling AdAccountsApi->delete_ad_comment: #{e}"
424
+ end
425
+ ```
426
+
427
+ #### Using the delete_ad_comment_with_http_info variant
428
+
429
+ This returns an Array which contains the response data, status code and headers.
430
+
431
+ > <Array(<ReplyToAdComment200Response>, Integer, Hash)> delete_ad_comment_with_http_info(ad_id, comment_id, opts)
432
+
433
+ ```ruby
434
+ begin
435
+ # Delete an ad comment
436
+ data, status_code, headers = api_instance.delete_ad_comment_with_http_info(ad_id, comment_id, opts)
437
+ p status_code # => 2xx
438
+ p headers # => { ... }
439
+ p data # => <ReplyToAdComment200Response>
440
+ rescue Zernio::ApiError => e
441
+ puts "Error when calling AdAccountsApi->delete_ad_comment_with_http_info: #{e}"
442
+ end
443
+ ```
444
+
445
+ ### Parameters
446
+
447
+ | Name | Type | Description | Notes |
448
+ | ---- | ---- | ----------- | ----- |
449
+ | **ad_id** | **String** | Internal Zernio ad ID or indexed platform ad ID. | |
450
+ | **comment_id** | **String** | TikTok comment ID from the ad comment listing. | |
451
+ | **since** | **Date** | Start date of the comment lookup window. Defaults to 30 days before until. | [optional] |
452
+ | **_until** | **Date** | End date of the comment lookup window. Defaults to today in UTC. | [optional] |
453
+
454
+ ### Return type
455
+
456
+ [**ReplyToAdComment200Response**](ReplyToAdComment200Response.md)
457
+
458
+ ### Authorization
459
+
460
+ [bearerAuth](../README.md#bearerAuth)
461
+
462
+ ### HTTP request headers
463
+
464
+ - **Content-Type**: Not defined
465
+ - **Accept**: application/json
466
+
467
+
385
468
  ## delete_ad_negative_keyword_list
386
469
 
387
470
  > <DeleteAdNegativeKeywordList200Response> delete_ad_negative_keyword_list(list_id, account_id, opts)
@@ -607,7 +690,7 @@ end
607
690
 
608
691
  List comments on an ad
609
692
 
610
- 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). Meta-only for now. Other ad platforms (TikTok, LinkedIn, Pinterest, Google, X) are not wired to this endpoint and 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), Meta's 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.
693
+ 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.
611
694
 
612
695
  ### Examples
613
696
 
@@ -621,10 +704,12 @@ Zernio.configure do |config|
621
704
  end
622
705
 
623
706
  api_instance = Zernio::AdAccountsApi.new
624
- ad_id = 'ad_id_example' # String | Internal Zernio ad ID (ObjectId).
707
+ ad_id = 'ad_id_example' # String | Internal Zernio ad ID or indexed platform ad/post ID.
625
708
  opts = {
626
709
  placement: 'facebook', # String | 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.
627
710
  limit: 56, # Integer |
711
+ since: Date.parse('2013-10-20'), # Date | TikTok-only start date. Defaults to 30 days before until. Maximum window is 30 days.
712
+ _until: Date.parse('2013-10-20'), # Date | TikTok-only end date. Defaults to today in UTC.
628
713
  cursor: 'cursor_example' # String | Pagination cursor from a previous response.
629
714
  }
630
715
 
@@ -659,9 +744,11 @@ end
659
744
 
660
745
  | Name | Type | Description | Notes |
661
746
  | ---- | ---- | ----------- | ----- |
662
- | **ad_id** | **String** | Internal Zernio ad ID (ObjectId). | |
747
+ | **ad_id** | **String** | Internal Zernio ad ID or indexed platform ad/post ID. | |
663
748
  | **placement** | **String** | 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. | [optional] |
664
749
  | **limit** | **Integer** | | [optional][default to 25] |
750
+ | **since** | **Date** | TikTok-only start date. Defaults to 30 days before until. Maximum window is 30 days. | [optional] |
751
+ | **_until** | **Date** | TikTok-only end date. Defaults to today in UTC. | [optional] |
665
752
  | **cursor** | **String** | Pagination cursor from a previous response. | [optional] |
666
753
 
667
754
  ### Return type
@@ -980,6 +1067,79 @@ end
980
1067
  - **Accept**: application/json
981
1068
 
982
1069
 
1070
+ ## get_ios_fourteen_campaign_limits
1071
+
1072
+ > <GetIosFourteenCampaignLimits200Response> get_ios_fourteen_campaign_limits(account_id, ad_account_id, application_id)
1073
+
1074
+ Get iOS 14 campaign limits
1075
+
1076
+ Reads Meta iOS 14 campaign limits for an application on an ad account. applicationId is sent as Meta app_id. This read does not establish that the application is configured for iOS promotion.
1077
+
1078
+ ### Examples
1079
+
1080
+ ```ruby
1081
+ require 'time'
1082
+ require 'zernio-sdk'
1083
+ # setup authorization
1084
+ Zernio.configure do |config|
1085
+ # Configure Bearer authorization (JWT): bearerAuth
1086
+ config.access_token = 'YOUR_BEARER_TOKEN'
1087
+ end
1088
+
1089
+ api_instance = Zernio::AdAccountsApi.new
1090
+ account_id = 'account_id_example' # String | Zernio Meta Ads or Facebook SocialAccount ID.
1091
+ ad_account_id = 'ad_account_id_example' # String | Meta ad account ID including the act_ prefix.
1092
+ application_id = 'application_id_example' # String | Meta application ID from advertisable-applications.
1093
+
1094
+ begin
1095
+ # Get iOS 14 campaign limits
1096
+ result = api_instance.get_ios_fourteen_campaign_limits(account_id, ad_account_id, application_id)
1097
+ p result
1098
+ rescue Zernio::ApiError => e
1099
+ puts "Error when calling AdAccountsApi->get_ios_fourteen_campaign_limits: #{e}"
1100
+ end
1101
+ ```
1102
+
1103
+ #### Using the get_ios_fourteen_campaign_limits_with_http_info variant
1104
+
1105
+ This returns an Array which contains the response data, status code and headers.
1106
+
1107
+ > <Array(<GetIosFourteenCampaignLimits200Response>, Integer, Hash)> get_ios_fourteen_campaign_limits_with_http_info(account_id, ad_account_id, application_id)
1108
+
1109
+ ```ruby
1110
+ begin
1111
+ # Get iOS 14 campaign limits
1112
+ data, status_code, headers = api_instance.get_ios_fourteen_campaign_limits_with_http_info(account_id, ad_account_id, application_id)
1113
+ p status_code # => 2xx
1114
+ p headers # => { ... }
1115
+ p data # => <GetIosFourteenCampaignLimits200Response>
1116
+ rescue Zernio::ApiError => e
1117
+ puts "Error when calling AdAccountsApi->get_ios_fourteen_campaign_limits_with_http_info: #{e}"
1118
+ end
1119
+ ```
1120
+
1121
+ ### Parameters
1122
+
1123
+ | Name | Type | Description | Notes |
1124
+ | ---- | ---- | ----------- | ----- |
1125
+ | **account_id** | **String** | Zernio Meta Ads or Facebook SocialAccount ID. | |
1126
+ | **ad_account_id** | **String** | Meta ad account ID including the act_ prefix. | |
1127
+ | **application_id** | **String** | Meta application ID from advertisable-applications. | |
1128
+
1129
+ ### Return type
1130
+
1131
+ [**GetIosFourteenCampaignLimits200Response**](GetIosFourteenCampaignLimits200Response.md)
1132
+
1133
+ ### Authorization
1134
+
1135
+ [bearerAuth](../README.md#bearerAuth)
1136
+
1137
+ ### HTTP request headers
1138
+
1139
+ - **Content-Type**: Not defined
1140
+ - **Accept**: application/json
1141
+
1142
+
983
1143
  ## get_value_rule_set
984
1144
 
985
1145
  > <GetValueRuleSet200Response> get_value_rule_set(value_rule_set_id, account_id)
@@ -1051,6 +1211,85 @@ end
1051
1211
  - **Accept**: application/json
1052
1212
 
1053
1213
 
1214
+ ## hide_ad_comment
1215
+
1216
+ > <HideAdComment200Response> hide_ad_comment(ad_id, comment_id, hide_ad_comment_request, opts)
1217
+
1218
+ Hide or unhide an ad comment
1219
+
1220
+ 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.
1221
+
1222
+ ### Examples
1223
+
1224
+ ```ruby
1225
+ require 'time'
1226
+ require 'zernio-sdk'
1227
+ # setup authorization
1228
+ Zernio.configure do |config|
1229
+ # Configure Bearer authorization (JWT): bearerAuth
1230
+ config.access_token = 'YOUR_BEARER_TOKEN'
1231
+ end
1232
+
1233
+ api_instance = Zernio::AdAccountsApi.new
1234
+ ad_id = 'ad_id_example' # String | Internal Zernio ad ID or indexed platform ad ID.
1235
+ comment_id = 'comment_id_example' # String | TikTok comment ID from the ad comment listing.
1236
+ hide_ad_comment_request = Zernio::HideAdCommentRequest.new({hidden: false}) # HideAdCommentRequest |
1237
+ opts = {
1238
+ since: Date.parse('2013-10-20'), # Date | Start date of the comment lookup window. Defaults to 30 days before until.
1239
+ _until: Date.parse('2013-10-20') # Date | End date of the comment lookup window. Defaults to today in UTC.
1240
+ }
1241
+
1242
+ begin
1243
+ # Hide or unhide an ad comment
1244
+ result = api_instance.hide_ad_comment(ad_id, comment_id, hide_ad_comment_request, opts)
1245
+ p result
1246
+ rescue Zernio::ApiError => e
1247
+ puts "Error when calling AdAccountsApi->hide_ad_comment: #{e}"
1248
+ end
1249
+ ```
1250
+
1251
+ #### Using the hide_ad_comment_with_http_info variant
1252
+
1253
+ This returns an Array which contains the response data, status code and headers.
1254
+
1255
+ > <Array(<HideAdComment200Response>, Integer, Hash)> hide_ad_comment_with_http_info(ad_id, comment_id, hide_ad_comment_request, opts)
1256
+
1257
+ ```ruby
1258
+ begin
1259
+ # Hide or unhide an ad comment
1260
+ data, status_code, headers = api_instance.hide_ad_comment_with_http_info(ad_id, comment_id, hide_ad_comment_request, opts)
1261
+ p status_code # => 2xx
1262
+ p headers # => { ... }
1263
+ p data # => <HideAdComment200Response>
1264
+ rescue Zernio::ApiError => e
1265
+ puts "Error when calling AdAccountsApi->hide_ad_comment_with_http_info: #{e}"
1266
+ end
1267
+ ```
1268
+
1269
+ ### Parameters
1270
+
1271
+ | Name | Type | Description | Notes |
1272
+ | ---- | ---- | ----------- | ----- |
1273
+ | **ad_id** | **String** | Internal Zernio ad ID or indexed platform ad ID. | |
1274
+ | **comment_id** | **String** | TikTok comment ID from the ad comment listing. | |
1275
+ | **hide_ad_comment_request** | [**HideAdCommentRequest**](HideAdCommentRequest.md) | | |
1276
+ | **since** | **Date** | Start date of the comment lookup window. Defaults to 30 days before until. | [optional] |
1277
+ | **_until** | **Date** | End date of the comment lookup window. Defaults to today in UTC. | [optional] |
1278
+
1279
+ ### Return type
1280
+
1281
+ [**HideAdComment200Response**](HideAdComment200Response.md)
1282
+
1283
+ ### Authorization
1284
+
1285
+ [bearerAuth](../README.md#bearerAuth)
1286
+
1287
+ ### HTTP request headers
1288
+
1289
+ - **Content-Type**: application/json
1290
+ - **Accept**: application/json
1291
+
1292
+
1054
1293
  ## list_account_callouts
1055
1294
 
1056
1295
  > <ListAccountCallouts200Response> list_account_callouts(account_id, opts)
@@ -1499,6 +1738,148 @@ end
1499
1738
  - **Accept**: application/json
1500
1739
 
1501
1740
 
1741
+ ## list_ads_instagram_accounts
1742
+
1743
+ > <ListAdsInstagramAccounts200Response> list_ads_instagram_accounts(account_id, ad_account_id)
1744
+
1745
+ List Instagram ad identities
1746
+
1747
+ Discovers identities through connected_instagram_accounts, Page linkage and Page-backed identities, with a best-effort business fallback. Business permission errors do not fail discovery. The resolved object uses the same profile-scoped resolver as ad creation; null means no identity was resolved. Format-specific observed-actor fallbacks at creative creation are not predicted.
1748
+
1749
+ ### Examples
1750
+
1751
+ ```ruby
1752
+ require 'time'
1753
+ require 'zernio-sdk'
1754
+ # setup authorization
1755
+ Zernio.configure do |config|
1756
+ # Configure Bearer authorization (JWT): bearerAuth
1757
+ config.access_token = 'YOUR_BEARER_TOKEN'
1758
+ end
1759
+
1760
+ api_instance = Zernio::AdAccountsApi.new
1761
+ account_id = 'account_id_example' # String | Zernio Meta Ads or Facebook SocialAccount ID.
1762
+ ad_account_id = 'ad_account_id_example' # String | Meta ad account ID including the act_ prefix.
1763
+
1764
+ begin
1765
+ # List Instagram ad identities
1766
+ result = api_instance.list_ads_instagram_accounts(account_id, ad_account_id)
1767
+ p result
1768
+ rescue Zernio::ApiError => e
1769
+ puts "Error when calling AdAccountsApi->list_ads_instagram_accounts: #{e}"
1770
+ end
1771
+ ```
1772
+
1773
+ #### Using the list_ads_instagram_accounts_with_http_info variant
1774
+
1775
+ This returns an Array which contains the response data, status code and headers.
1776
+
1777
+ > <Array(<ListAdsInstagramAccounts200Response>, Integer, Hash)> list_ads_instagram_accounts_with_http_info(account_id, ad_account_id)
1778
+
1779
+ ```ruby
1780
+ begin
1781
+ # List Instagram ad identities
1782
+ data, status_code, headers = api_instance.list_ads_instagram_accounts_with_http_info(account_id, ad_account_id)
1783
+ p status_code # => 2xx
1784
+ p headers # => { ... }
1785
+ p data # => <ListAdsInstagramAccounts200Response>
1786
+ rescue Zernio::ApiError => e
1787
+ puts "Error when calling AdAccountsApi->list_ads_instagram_accounts_with_http_info: #{e}"
1788
+ end
1789
+ ```
1790
+
1791
+ ### Parameters
1792
+
1793
+ | Name | Type | Description | Notes |
1794
+ | ---- | ---- | ----------- | ----- |
1795
+ | **account_id** | **String** | Zernio Meta Ads or Facebook SocialAccount ID. | |
1796
+ | **ad_account_id** | **String** | Meta ad account ID including the act_ prefix. | |
1797
+
1798
+ ### Return type
1799
+
1800
+ [**ListAdsInstagramAccounts200Response**](ListAdsInstagramAccounts200Response.md)
1801
+
1802
+ ### Authorization
1803
+
1804
+ [bearerAuth](../README.md#bearerAuth)
1805
+
1806
+ ### HTTP request headers
1807
+
1808
+ - **Content-Type**: Not defined
1809
+ - **Accept**: application/json
1810
+
1811
+
1812
+ ## list_advertisable_applications
1813
+
1814
+ > <ListAdvertisableApplications200Response> list_advertisable_applications(account_id, ad_account_id)
1815
+
1816
+ List advertisable apps
1817
+
1818
+ Lists applications available to a Meta ad account, their supported platforms and unmodified object store URLs. A listed app still needs a configured mobile platform and store URL to run install promotion.
1819
+
1820
+ ### Examples
1821
+
1822
+ ```ruby
1823
+ require 'time'
1824
+ require 'zernio-sdk'
1825
+ # setup authorization
1826
+ Zernio.configure do |config|
1827
+ # Configure Bearer authorization (JWT): bearerAuth
1828
+ config.access_token = 'YOUR_BEARER_TOKEN'
1829
+ end
1830
+
1831
+ api_instance = Zernio::AdAccountsApi.new
1832
+ account_id = 'account_id_example' # String | Zernio Meta Ads or Facebook SocialAccount ID.
1833
+ ad_account_id = 'ad_account_id_example' # String | Meta ad account ID including the act_ prefix.
1834
+
1835
+ begin
1836
+ # List advertisable apps
1837
+ result = api_instance.list_advertisable_applications(account_id, ad_account_id)
1838
+ p result
1839
+ rescue Zernio::ApiError => e
1840
+ puts "Error when calling AdAccountsApi->list_advertisable_applications: #{e}"
1841
+ end
1842
+ ```
1843
+
1844
+ #### Using the list_advertisable_applications_with_http_info variant
1845
+
1846
+ This returns an Array which contains the response data, status code and headers.
1847
+
1848
+ > <Array(<ListAdvertisableApplications200Response>, Integer, Hash)> list_advertisable_applications_with_http_info(account_id, ad_account_id)
1849
+
1850
+ ```ruby
1851
+ begin
1852
+ # List advertisable apps
1853
+ data, status_code, headers = api_instance.list_advertisable_applications_with_http_info(account_id, ad_account_id)
1854
+ p status_code # => 2xx
1855
+ p headers # => { ... }
1856
+ p data # => <ListAdvertisableApplications200Response>
1857
+ rescue Zernio::ApiError => e
1858
+ puts "Error when calling AdAccountsApi->list_advertisable_applications_with_http_info: #{e}"
1859
+ end
1860
+ ```
1861
+
1862
+ ### Parameters
1863
+
1864
+ | Name | Type | Description | Notes |
1865
+ | ---- | ---- | ----------- | ----- |
1866
+ | **account_id** | **String** | Zernio Meta Ads or Facebook SocialAccount ID. | |
1867
+ | **ad_account_id** | **String** | Meta ad account ID including the act_ prefix. | |
1868
+
1869
+ ### Return type
1870
+
1871
+ [**ListAdvertisableApplications200Response**](ListAdvertisableApplications200Response.md)
1872
+
1873
+ ### Authorization
1874
+
1875
+ [bearerAuth](../README.md#bearerAuth)
1876
+
1877
+ ### HTTP request headers
1878
+
1879
+ - **Content-Type**: Not defined
1880
+ - **Accept**: application/json
1881
+
1882
+
1502
1883
  ## list_custom_conversions
1503
1884
 
1504
1885
  > <ListCustomConversions200Response> list_custom_conversions(account_id, ad_account_id)
@@ -1941,6 +2322,85 @@ end
1941
2322
  - **Accept**: application/json
1942
2323
 
1943
2324
 
2325
+ ## reply_to_ad_comment
2326
+
2327
+ > <ReplyToAdComment200Response> reply_to_ad_comment(ad_id, comment_id, reply_to_ad_comment_request, opts)
2328
+
2329
+ Reply to an ad comment
2330
+
2331
+ 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.
2332
+
2333
+ ### Examples
2334
+
2335
+ ```ruby
2336
+ require 'time'
2337
+ require 'zernio-sdk'
2338
+ # setup authorization
2339
+ Zernio.configure do |config|
2340
+ # Configure Bearer authorization (JWT): bearerAuth
2341
+ config.access_token = 'YOUR_BEARER_TOKEN'
2342
+ end
2343
+
2344
+ api_instance = Zernio::AdAccountsApi.new
2345
+ ad_id = 'ad_id_example' # String | Internal Zernio ad ID or indexed platform ad ID.
2346
+ comment_id = 'comment_id_example' # String | TikTok comment ID from the ad comment listing.
2347
+ reply_to_ad_comment_request = Zernio::ReplyToAdCommentRequest.new({text: 'text_example'}) # ReplyToAdCommentRequest |
2348
+ opts = {
2349
+ since: Date.parse('2013-10-20'), # Date | Start date of the comment lookup window. Defaults to 30 days before until.
2350
+ _until: Date.parse('2013-10-20') # Date | End date of the comment lookup window. Defaults to today in UTC.
2351
+ }
2352
+
2353
+ begin
2354
+ # Reply to an ad comment
2355
+ result = api_instance.reply_to_ad_comment(ad_id, comment_id, reply_to_ad_comment_request, opts)
2356
+ p result
2357
+ rescue Zernio::ApiError => e
2358
+ puts "Error when calling AdAccountsApi->reply_to_ad_comment: #{e}"
2359
+ end
2360
+ ```
2361
+
2362
+ #### Using the reply_to_ad_comment_with_http_info variant
2363
+
2364
+ This returns an Array which contains the response data, status code and headers.
2365
+
2366
+ > <Array(<ReplyToAdComment200Response>, Integer, Hash)> reply_to_ad_comment_with_http_info(ad_id, comment_id, reply_to_ad_comment_request, opts)
2367
+
2368
+ ```ruby
2369
+ begin
2370
+ # Reply to an ad comment
2371
+ data, status_code, headers = api_instance.reply_to_ad_comment_with_http_info(ad_id, comment_id, reply_to_ad_comment_request, opts)
2372
+ p status_code # => 2xx
2373
+ p headers # => { ... }
2374
+ p data # => <ReplyToAdComment200Response>
2375
+ rescue Zernio::ApiError => e
2376
+ puts "Error when calling AdAccountsApi->reply_to_ad_comment_with_http_info: #{e}"
2377
+ end
2378
+ ```
2379
+
2380
+ ### Parameters
2381
+
2382
+ | Name | Type | Description | Notes |
2383
+ | ---- | ---- | ----------- | ----- |
2384
+ | **ad_id** | **String** | Internal Zernio ad ID or indexed platform ad ID. | |
2385
+ | **comment_id** | **String** | TikTok comment ID from the ad comment listing. | |
2386
+ | **reply_to_ad_comment_request** | [**ReplyToAdCommentRequest**](ReplyToAdCommentRequest.md) | | |
2387
+ | **since** | **Date** | Start date of the comment lookup window. Defaults to 30 days before until. | [optional] |
2388
+ | **_until** | **Date** | End date of the comment lookup window. Defaults to today in UTC. | [optional] |
2389
+
2390
+ ### Return type
2391
+
2392
+ [**ReplyToAdComment200Response**](ReplyToAdComment200Response.md)
2393
+
2394
+ ### Authorization
2395
+
2396
+ [bearerAuth](../README.md#bearerAuth)
2397
+
2398
+ ### HTTP request headers
2399
+
2400
+ - **Content-Type**: application/json
2401
+ - **Accept**: application/json
2402
+
2403
+
1944
2404
  ## update_ad_account
1945
2405
 
1946
2406
  > <UpdateAdAccount200Response> update_ad_account(update_ad_account_request)
@@ -329,7 +329,7 @@ end
329
329
 
330
330
  ## create_ad_campaign
331
331
 
332
- > <CreateAdCampaign201Response> create_ad_campaign(create_ad_campaign_request, opts)
332
+ > <CreateAdCampaign200Response> create_ad_campaign(create_ad_campaign_request, opts)
333
333
 
334
334
  Create a standalone campaign
335
335
 
@@ -365,7 +365,7 @@ end
365
365
 
366
366
  This returns an Array which contains the response data, status code and headers.
367
367
 
368
- > <Array(<CreateAdCampaign201Response>, Integer, Hash)> create_ad_campaign_with_http_info(create_ad_campaign_request, opts)
368
+ > <Array(<CreateAdCampaign200Response>, Integer, Hash)> create_ad_campaign_with_http_info(create_ad_campaign_request, opts)
369
369
 
370
370
  ```ruby
371
371
  begin
@@ -373,7 +373,7 @@ begin
373
373
  data, status_code, headers = api_instance.create_ad_campaign_with_http_info(create_ad_campaign_request, opts)
374
374
  p status_code # => 2xx
375
375
  p headers # => { ... }
376
- p data # => <CreateAdCampaign201Response>
376
+ p data # => <CreateAdCampaign200Response>
377
377
  rescue Zernio::ApiError => e
378
378
  puts "Error when calling AdCampaignsApi->create_ad_campaign_with_http_info: #{e}"
379
379
  end
@@ -388,7 +388,7 @@ end
388
388
 
389
389
  ### Return type
390
390
 
391
- [**CreateAdCampaign201Response**](CreateAdCampaign201Response.md)
391
+ [**CreateAdCampaign200Response**](CreateAdCampaign200Response.md)
392
392
 
393
393
  ### Authorization
394
394
 
@@ -0,0 +1,20 @@
1
+ # Zernio::AdTracking
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **pixel_id** | **String** | Meta Pixel ID to attach for offsite-conversion measurement. | [optional] |
8
+ | **url_tags** | [**Array&lt;UpdateAdTrackingTagsRequestUrlTagsInner&gt;**](UpdateAdTrackingTagsRequestUrlTagsInner.md) | Click-URL params stored on the creative as &#x60;url_tags&#x60; and returned by GET /v1/ads/{adId}/tracking-tags. App-promotion linkUrl stays byte-identical to promotedObject.objectStoreUrl. Meta dynamic macros ({{ad.id}}, {{campaign.id}}, {{placement}}, ...) are sent through unescaped so Meta expands them; every other character is percent-encoded. | [optional] |
9
+
10
+ ## Example
11
+
12
+ ```ruby
13
+ require 'zernio-sdk'
14
+
15
+ instance = Zernio::AdTracking.new(
16
+ pixel_id: null,
17
+ url_tags: null
18
+ )
19
+ ```
20
+
@@ -0,0 +1,26 @@
1
+ # Zernio::CreateAdCampaign200Response
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **validate_only** | **Boolean** | Always true. | [optional] |
8
+ | **ad_account_id** | **String** | | [optional] |
9
+ | **campaign_id** | **String** | Empty because no campaign was created. | [optional] |
10
+ | **objective** | **String** | | [optional] |
11
+ | **status** | **String** | | [optional] |
12
+
13
+ ## Example
14
+
15
+ ```ruby
16
+ require 'zernio-sdk'
17
+
18
+ instance = Zernio::CreateAdCampaign200Response.new(
19
+ validate_only: null,
20
+ ad_account_id: null,
21
+ campaign_id: null,
22
+ objective: null,
23
+ status: null
24
+ )
25
+ ```
26
+
@@ -8,6 +8,10 @@
8
8
  | **ad_account_id** | **String** | Platform ad account id (Meta act_&lt;n&gt;, Google customer id, LinkedIn account id, ...). | |
9
9
  | **name** | **String** | | |
10
10
  | **goal** | **String** | Mapped to the ODAX objective (same mapping as POST /v1/ads/create). | |
11
+ | **is_skadnetwork_attribution** | **Boolean** | Meta app promotion only. Immutable campaign flag. Set true for iOS 14+ SKAdNetwork campaigns and supply promotedObject.applicationId plus promotedObject.objectStoreUrl. The campaign receives promotedObject only when this flag is true. Cannot be changed on an existing campaign. | [optional] |
12
+ | **promoted_object** | [**AdPromotedObject**](AdPromotedObject.md) | | [optional] |
13
+ | **buying_type** | **String** | Meta only. SKAdNetwork app promotion requires AUCTION. | [optional] |
14
+ | **validate_only** | **Boolean** | Meta only. Runs campaign validation without creating or persisting a campaign; Idempotency-Key storage is bypassed. Returns HTTP 200 with validateOnly true and status VALIDATED. | [optional] |
11
15
  | **special_ad_categories** | **Array&lt;String&gt;** | | [optional] |
12
16
  | **budget_amount** | **Float** | Campaign-level (CBO) budget in WHOLE currency units (USD: 50 &#x3D; $50.00), NOT cents. Meta&#39;s own Marketing API takes this same number in minor units, so it is an easy and expensive mix-up. Requires budgetType. | [optional] |
13
17
  | **budget_type** | **String** | | [optional] |
@@ -27,6 +31,10 @@ instance = Zernio::CreateAdCampaignRequest.new(
27
31
  ad_account_id: null,
28
32
  name: null,
29
33
  goal: null,
34
+ is_skadnetwork_attribution: null,
35
+ promoted_object: null,
36
+ buying_type: null,
37
+ validate_only: null,
30
38
  special_ad_categories: null,
31
39
  budget_amount: null,
32
40
  budget_type: null,