late-sdk 0.0.707 → 0.0.709
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.
- checksums.yaml +4 -4
- data/README.md +7 -0
- data/docs/AdCampaignsApi.md +1 -1
- data/docs/AdInsightsApi.md +84 -0
- data/docs/BoostPostRequest.md +4 -4
- data/docs/BoostPostRequestPlatformSpecificData.md +49 -0
- data/docs/CreateAdCampaignRequest.md +1 -1
- data/docs/CreateStandaloneAdRequest.md +4 -4
- data/docs/CreateStandaloneAdRequestPlatformSpecificData.md +49 -0
- data/docs/GetAdsSearchTerms200Response.md +22 -0
- data/docs/GetAdsSearchTerms200ResponseDataInner.md +40 -0
- data/docs/GetAdsSearchTerms200ResponsePaging.md +18 -0
- data/docs/MetaAdsPlatformData.md +22 -0
- data/docs/UpdateAdSetRequest.md +1 -1
- data/docs/WebhookPayloadCommentPost.md +7 -1
- data/lib/zernio-sdk/api/ad_campaigns_api.rb +2 -2
- data/lib/zernio-sdk/api/ad_insights_api.rb +82 -0
- data/lib/zernio-sdk/models/boost_post_request.rb +4 -4
- data/lib/zernio-sdk/models/boost_post_request_platform_specific_data.rb +105 -0
- data/lib/zernio-sdk/models/create_ad_campaign_request.rb +1 -1
- data/lib/zernio-sdk/models/create_standalone_ad_request.rb +4 -4
- data/lib/zernio-sdk/models/create_standalone_ad_request_platform_specific_data.rb +105 -0
- data/lib/zernio-sdk/models/get_ads_search_terms200_response.rb +167 -0
- data/lib/zernio-sdk/models/get_ads_search_terms200_response_data_inner.rb +256 -0
- data/lib/zernio-sdk/models/get_ads_search_terms200_response_paging.rb +149 -0
- data/lib/zernio-sdk/models/meta_ads_platform_data.rb +190 -0
- data/lib/zernio-sdk/models/update_ad_set_request.rb +1 -1
- data/lib/zernio-sdk/models/webhook_payload_comment_post.rb +43 -4
- data/lib/zernio-sdk/version.rb +1 -1
- data/lib/zernio-sdk.rb +6 -0
- data/openapi.yaml +135 -11
- data/spec/api/ad_campaigns_api_spec.rb +1 -1
- data/spec/api/ad_insights_api_spec.rb +18 -0
- data/spec/models/boost_post_request_platform_specific_data_spec.rb +32 -0
- data/spec/models/create_standalone_ad_request_platform_specific_data_spec.rb +32 -0
- data/spec/models/get_ads_search_terms200_response_data_inner_spec.rb +102 -0
- data/spec/models/get_ads_search_terms200_response_paging_spec.rb +36 -0
- data/spec/models/get_ads_search_terms200_response_spec.rb +48 -0
- data/spec/models/meta_ads_platform_data_spec.rb +48 -0
- data/spec/models/webhook_payload_comment_post_spec.rb +18 -0
- data/zernio-sdk-0.0.709.gem +0 -0
- metadata +26 -2
- data/zernio-sdk-0.0.707.gem +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 59bd413e033c97b2c115c11e40d78fdd59810470a8a0f1775a6187d0c8cc577e
|
|
4
|
+
data.tar.gz: d517d348fe05e5dad30fd9dfc646afd0092218e46916c1508fab2d8810e3fc9d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5eb5d3c2f85e60eae3856b1c2fea12e6015fea70f8398fa3639a7abc9bf121a087ed21bbf5e20a897434ed5e807747f25ef84c50ab9e26e85b7758b7c32ef44f
|
|
7
|
+
data.tar.gz: a46ba4e41cf53dd1839427b2456e66745f5becf5ae49a411b507643032036457d86d5c27ac976fc299211ceec03815fa9c8d3763106825a83c36eaedca286b2d
|
data/README.md
CHANGED
|
@@ -158,6 +158,7 @@ Class | Method | HTTP request | Description
|
|
|
158
158
|
*Zernio::AdInsightsApi* | [**generate_keyword_ideas**](docs/AdInsightsApi.md#generate_keyword_ideas) | **POST** /v1/ads/keywords/ideas | Generate keyword ideas (Google Keyword Planner)
|
|
159
159
|
*Zernio::AdInsightsApi* | [**get_ad_analytics**](docs/AdInsightsApi.md#get_ad_analytics) | **GET** /v1/ads/{adId}/analytics | Get ad analytics
|
|
160
160
|
*Zernio::AdInsightsApi* | [**get_ad_insights_report**](docs/AdInsightsApi.md#get_ad_insights_report) | **GET** /v1/ads/insights/reports/{reportRunId} | Poll an async insights report run
|
|
161
|
+
*Zernio::AdInsightsApi* | [**get_ads_search_terms**](docs/AdInsightsApi.md#get_ads_search_terms) | **GET** /v1/ads/search-terms | Google Ads search terms report
|
|
161
162
|
*Zernio::AdInsightsApi* | [**get_campaign_analytics**](docs/AdInsightsApi.md#get_campaign_analytics) | **GET** /v1/ads/campaigns/{campaignId}/analytics | Get campaign analytics
|
|
162
163
|
*Zernio::AdInsightsApi* | [**query_ad_insights**](docs/AdInsightsApi.md#query_ad_insights) | **GET** /v1/ads/insights | Flexible live insights query
|
|
163
164
|
*Zernio::AdTargetingApi* | [**estimate_ad_reach**](docs/AdTargetingApi.md#estimate_ad_reach) | **POST** /v1/ads/targeting/reach-estimate | Estimate audience reach
|
|
@@ -703,6 +704,7 @@ Class | Method | HTTP request | Description
|
|
|
703
704
|
- [Zernio::BookmarkPostRequest](docs/BookmarkPostRequest.md)
|
|
704
705
|
- [Zernio::BoostPostRequest](docs/BoostPostRequest.md)
|
|
705
706
|
- [Zernio::BoostPostRequestBudget](docs/BoostPostRequestBudget.md)
|
|
707
|
+
- [Zernio::BoostPostRequestPlatformSpecificData](docs/BoostPostRequestPlatformSpecificData.md)
|
|
706
708
|
- [Zernio::BoostPostRequestSchedule](docs/BoostPostRequestSchedule.md)
|
|
707
709
|
- [Zernio::BoostPostRequestTargeting](docs/BoostPostRequestTargeting.md)
|
|
708
710
|
- [Zernio::BoostPostRequestTargetingCitiesInner](docs/BoostPostRequestTargetingCitiesInner.md)
|
|
@@ -886,6 +888,7 @@ Class | Method | HTTP request | Description
|
|
|
886
888
|
- [Zernio::CreateStandaloneAdRequestPlacementAssetsRulesInner](docs/CreateStandaloneAdRequestPlacementAssetsRulesInner.md)
|
|
887
889
|
- [Zernio::CreateStandaloneAdRequestPlacementAssetsRulesInnerPlacements](docs/CreateStandaloneAdRequestPlacementAssetsRulesInnerPlacements.md)
|
|
888
890
|
- [Zernio::CreateStandaloneAdRequestPlacements](docs/CreateStandaloneAdRequestPlacements.md)
|
|
891
|
+
- [Zernio::CreateStandaloneAdRequestPlatformSpecificData](docs/CreateStandaloneAdRequestPlatformSpecificData.md)
|
|
889
892
|
- [Zernio::CreateStandaloneAdRequestPromotedObject](docs/CreateStandaloneAdRequestPromotedObject.md)
|
|
890
893
|
- [Zernio::CreateStandaloneAdRequestRegionsInner](docs/CreateStandaloneAdRequestRegionsInner.md)
|
|
891
894
|
- [Zernio::CreateStandaloneAdRequestTracking](docs/CreateStandaloneAdRequestTracking.md)
|
|
@@ -1065,6 +1068,9 @@ Class | Method | HTTP request | Description
|
|
|
1065
1068
|
- [Zernio::GetAdTree200Response](docs/GetAdTree200Response.md)
|
|
1066
1069
|
- [Zernio::GetAdsActivityLog200Response](docs/GetAdsActivityLog200Response.md)
|
|
1067
1070
|
- [Zernio::GetAdsActivityLog200ResponsePaging](docs/GetAdsActivityLog200ResponsePaging.md)
|
|
1071
|
+
- [Zernio::GetAdsSearchTerms200Response](docs/GetAdsSearchTerms200Response.md)
|
|
1072
|
+
- [Zernio::GetAdsSearchTerms200ResponseDataInner](docs/GetAdsSearchTerms200ResponseDataInner.md)
|
|
1073
|
+
- [Zernio::GetAdsSearchTerms200ResponsePaging](docs/GetAdsSearchTerms200ResponsePaging.md)
|
|
1068
1074
|
- [Zernio::GetAdsTimeline200Response](docs/GetAdsTimeline200Response.md)
|
|
1069
1075
|
- [Zernio::GetAdsTimeline200ResponseRowsInner](docs/GetAdsTimeline200ResponseRowsInner.md)
|
|
1070
1076
|
- [Zernio::GetAllAccountsHealth200Response](docs/GetAllAccountsHealth200Response.md)
|
|
@@ -1602,6 +1608,7 @@ Class | Method | HTTP request | Description
|
|
|
1602
1608
|
- [Zernio::MarkConversationRead200Response](docs/MarkConversationRead200Response.md)
|
|
1603
1609
|
- [Zernio::MediaItem](docs/MediaItem.md)
|
|
1604
1610
|
- [Zernio::MediaUploadResponse](docs/MediaUploadResponse.md)
|
|
1611
|
+
- [Zernio::MetaAdsPlatformData](docs/MetaAdsPlatformData.md)
|
|
1605
1612
|
- [Zernio::MetaLeadFormPlatformData](docs/MetaLeadFormPlatformData.md)
|
|
1606
1613
|
- [Zernio::MetaLeadFormPlatformDataContextCard](docs/MetaLeadFormPlatformDataContextCard.md)
|
|
1607
1614
|
- [Zernio::Money](docs/Money.md)
|
data/docs/AdCampaignsApi.md
CHANGED
|
@@ -1501,7 +1501,7 @@ end
|
|
|
1501
1501
|
|
|
1502
1502
|
Update an ad set
|
|
1503
1503
|
|
|
1504
|
-
Ad-set-level writes. Use this for ABO budget updates, ad-set-scoped pause/resume, bid-strategy edits, Meta value-rule-set attach/detach, and Meta-only post-launch delivery settings via `platformSpecificData`. At least one updatable field is required. Value rule sets (Meta only, see `/v1/ads/value-rule-sets`): - ATTACH or REPLACE: send `valueRuleSetId`. Attachment is driven by the id's presence, so `valueRulesApplied: true` is optional. Sending a different id replaces the previous association; there is no separate replace call. - DETACH: send `valueRulesApplied: false` and OMIT `valueRuleSetId`. - Sending `valueRulesApplied: false` TOGETHER with `valueRuleSetId` returns 400 `mutually_exclusive_fields`. This is deliberate: Meta attaches the rule set whenever `value_rule_set_id` is present, even with `value_rules_applied` false, so echoing stored state while asking to detach would silently keep the bid adjustments live. - Eligibility: only ad sets on `LOWEST_COST_WITHOUT_CAP` or `COST_CAP`. Meta rejects the rest server-side. - Read back with `GET /v1/ads/ad-sets/{adSetId}?fields=value_rule_set_id`. Meta does not document `value_rules_applied` as a readable ad-set field, so the boolean cannot be read back. Bid strategy compatibility (per Meta's spec): - `LOWEST_COST_WITHOUT_CAP`: no `bidAmount`, no `roasAverageFloor`. - `LOWEST_COST_WITH_BID_CAP` / `COST_CAP`: `bidAmount` REQUIRED (whole currency units). - `LOWEST_COST_WITH_MIN_ROAS`: `roasAverageFloor` REQUIRED (decimal multiplier, e.g. 2.0 = 2.0x ROAS). Delivery settings are validated by Meta against the campaign objective; incompatible combinations (e.g. a billingEvent the optimization goal doesn't allow) surface as 400s from Meta. When updating `budget` on an ABO campaign: if the parent campaign is CBO, the response is 409 with code BUDGET_LEVEL_MISMATCH — route to PUT /v1/ads/campaigns/{campaignId} instead.
|
|
1504
|
+
Ad-set-level writes. Use this for ABO budget updates, ad-set-scoped pause/resume, bid-strategy edits, Meta value-rule-set attach/detach, and Meta-only post-launch delivery settings via `platformSpecificData`. At least one updatable field is required. Value rule sets (Meta only, see `/v1/ads/value-rule-sets`): - ATTACH or REPLACE: send `valueRuleSetId`. Attachment is driven by the id's presence, so `valueRulesApplied: true` is optional. Sending a different id replaces the previous association; there is no separate replace call. - DETACH: send `valueRulesApplied: false` and OMIT `valueRuleSetId`. - Sending `valueRulesApplied: false` TOGETHER with `valueRuleSetId` returns 400 `mutually_exclusive_fields`. This is deliberate: Meta attaches the rule set whenever `value_rule_set_id` is present, even with `value_rules_applied` false, so echoing stored state while asking to detach would silently keep the bid adjustments live. - Eligibility: only ad sets on `LOWEST_COST_WITHOUT_CAP` or `COST_CAP`. Meta rejects the rest server-side. - Read back with `GET /v1/ads/ad-sets/{adSetId}?fields=value_rule_set_id`. Meta does not document `value_rules_applied` as a readable ad-set field, so the boolean cannot be read back. Bid strategy compatibility (per Meta's spec): - `LOWEST_COST_WITHOUT_CAP`: no `bidAmount`, no `roasAverageFloor`. - `LOWEST_COST_WITH_BID_CAP` / `COST_CAP`: `bidAmount` REQUIRED (whole currency units). - `LOWEST_COST_WITH_MIN_ROAS`: `roasAverageFloor` REQUIRED (decimal multiplier, e.g. 2.0 = 2.0x ROAS). - Meta only: send `bidAmount` WITHOUT `bidStrategy` to change the cap amount on an ad set under a COST_CAP / LOWEST_COST_WITH_BID_CAP parent campaign, leaving the strategy itself (inherited from the campaign) untouched. `roasAverageFloor` without `bidStrategy` is rejected (it has no meaning outside LOWEST_COST_WITH_MIN_ROAS). Delivery settings are validated by Meta against the campaign objective; incompatible combinations (e.g. a billingEvent the optimization goal doesn't allow) surface as 400s from Meta. When updating `budget` on an ABO campaign: if the parent campaign is CBO, the response is 409 with code BUDGET_LEVEL_MISMATCH — route to PUT /v1/ads/campaigns/{campaignId} instead.
|
|
1505
1505
|
|
|
1506
1506
|
### Examples
|
|
1507
1507
|
|
data/docs/AdInsightsApi.md
CHANGED
|
@@ -9,6 +9,7 @@ All URIs are relative to *https://zernio.com/api*
|
|
|
9
9
|
| [**generate_keyword_ideas**](AdInsightsApi.md#generate_keyword_ideas) | **POST** /v1/ads/keywords/ideas | Generate keyword ideas (Google Keyword Planner) |
|
|
10
10
|
| [**get_ad_analytics**](AdInsightsApi.md#get_ad_analytics) | **GET** /v1/ads/{adId}/analytics | Get ad analytics |
|
|
11
11
|
| [**get_ad_insights_report**](AdInsightsApi.md#get_ad_insights_report) | **GET** /v1/ads/insights/reports/{reportRunId} | Poll an async insights report run |
|
|
12
|
+
| [**get_ads_search_terms**](AdInsightsApi.md#get_ads_search_terms) | **GET** /v1/ads/search-terms | Google Ads search terms report |
|
|
12
13
|
| [**get_campaign_analytics**](AdInsightsApi.md#get_campaign_analytics) | **GET** /v1/ads/campaigns/{campaignId}/analytics | Get campaign analytics |
|
|
13
14
|
| [**query_ad_insights**](AdInsightsApi.md#query_ad_insights) | **GET** /v1/ads/insights | Flexible live insights query |
|
|
14
15
|
|
|
@@ -374,6 +375,89 @@ end
|
|
|
374
375
|
- **Accept**: application/json
|
|
375
376
|
|
|
376
377
|
|
|
378
|
+
## get_ads_search_terms
|
|
379
|
+
|
|
380
|
+
> <GetAdsSearchTerms200Response> get_ads_search_terms(account_id, opts)
|
|
381
|
+
|
|
382
|
+
Google Ads search terms report
|
|
383
|
+
|
|
384
|
+
The actual search queries that triggered your ads, with matched-keyword status and spend metrics — the raw material for wasted-spend analysis and negative-keyword lists. Reads Google's `search_term_view` live; defaults to the last 30 days. Rows are ordered by cost, descending. Draws on the shared Google Ads operations budget.
|
|
385
|
+
|
|
386
|
+
### Examples
|
|
387
|
+
|
|
388
|
+
```ruby
|
|
389
|
+
require 'time'
|
|
390
|
+
require 'zernio-sdk'
|
|
391
|
+
# setup authorization
|
|
392
|
+
Zernio.configure do |config|
|
|
393
|
+
# Configure Bearer authorization (JWT): bearerAuth
|
|
394
|
+
config.access_token = 'YOUR_BEARER_TOKEN'
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
api_instance = Zernio::AdInsightsApi.new
|
|
398
|
+
account_id = 'account_id_example' # String | Google ads SocialAccount id.
|
|
399
|
+
opts = {
|
|
400
|
+
customer_id: 'customer_id_example', # String | Numeric Google Ads customer id (no dashes). Defaults to the account's connected customer.
|
|
401
|
+
from_date: Date.parse('2013-10-20'), # Date | Defaults to 30 days ago.
|
|
402
|
+
to_date: Date.parse('2013-10-20'), # Date | Defaults to today.
|
|
403
|
+
campaign_id: 'campaign_id_example', # String | Numeric Google campaign id filter.
|
|
404
|
+
ad_group_id: 'ad_group_id_example', # String | Numeric Google ad group id filter.
|
|
405
|
+
page_token: 'page_token_example' # String | Cursor from paging.nextPageToken of the previous page.
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
begin
|
|
409
|
+
# Google Ads search terms report
|
|
410
|
+
result = api_instance.get_ads_search_terms(account_id, opts)
|
|
411
|
+
p result
|
|
412
|
+
rescue Zernio::ApiError => e
|
|
413
|
+
puts "Error when calling AdInsightsApi->get_ads_search_terms: #{e}"
|
|
414
|
+
end
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
#### Using the get_ads_search_terms_with_http_info variant
|
|
418
|
+
|
|
419
|
+
This returns an Array which contains the response data, status code and headers.
|
|
420
|
+
|
|
421
|
+
> <Array(<GetAdsSearchTerms200Response>, Integer, Hash)> get_ads_search_terms_with_http_info(account_id, opts)
|
|
422
|
+
|
|
423
|
+
```ruby
|
|
424
|
+
begin
|
|
425
|
+
# Google Ads search terms report
|
|
426
|
+
data, status_code, headers = api_instance.get_ads_search_terms_with_http_info(account_id, opts)
|
|
427
|
+
p status_code # => 2xx
|
|
428
|
+
p headers # => { ... }
|
|
429
|
+
p data # => <GetAdsSearchTerms200Response>
|
|
430
|
+
rescue Zernio::ApiError => e
|
|
431
|
+
puts "Error when calling AdInsightsApi->get_ads_search_terms_with_http_info: #{e}"
|
|
432
|
+
end
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
### Parameters
|
|
436
|
+
|
|
437
|
+
| Name | Type | Description | Notes |
|
|
438
|
+
| ---- | ---- | ----------- | ----- |
|
|
439
|
+
| **account_id** | **String** | Google ads SocialAccount id. | |
|
|
440
|
+
| **customer_id** | **String** | Numeric Google Ads customer id (no dashes). Defaults to the account's connected customer. | [optional] |
|
|
441
|
+
| **from_date** | **Date** | Defaults to 30 days ago. | [optional] |
|
|
442
|
+
| **to_date** | **Date** | Defaults to today. | [optional] |
|
|
443
|
+
| **campaign_id** | **String** | Numeric Google campaign id filter. | [optional] |
|
|
444
|
+
| **ad_group_id** | **String** | Numeric Google ad group id filter. | [optional] |
|
|
445
|
+
| **page_token** | **String** | Cursor from paging.nextPageToken of the previous page. | [optional] |
|
|
446
|
+
|
|
447
|
+
### Return type
|
|
448
|
+
|
|
449
|
+
[**GetAdsSearchTerms200Response**](GetAdsSearchTerms200Response.md)
|
|
450
|
+
|
|
451
|
+
### Authorization
|
|
452
|
+
|
|
453
|
+
[bearerAuth](../README.md#bearerAuth)
|
|
454
|
+
|
|
455
|
+
### HTTP request headers
|
|
456
|
+
|
|
457
|
+
- **Content-Type**: Not defined
|
|
458
|
+
- **Accept**: application/json
|
|
459
|
+
|
|
460
|
+
|
|
377
461
|
## get_campaign_analytics
|
|
378
462
|
|
|
379
463
|
> <GetCampaignAnalytics200Response> get_campaign_analytics(campaign_id, opts)
|
data/docs/BoostPostRequest.md
CHANGED
|
@@ -18,10 +18,10 @@
|
|
|
18
18
|
| **schedule** | [**BoostPostRequestSchedule**](BoostPostRequestSchedule.md) | | [optional] |
|
|
19
19
|
| **targeting** | [**BoostPostRequestTargeting**](BoostPostRequestTargeting.md) | | [optional] |
|
|
20
20
|
| **raw_targeting** | **Hash<String, Object>** | Meta only. A Meta-native targeting spec (e.g. `{ \"geo_locations\": { \"cities\": [{ \"key\": \"...\", \"radius\": 15, \"distance_unit\": \"kilometer\" }] } }`). Sent alone it is forwarded unchanged. Use for advanced fields the structured object does not expose (flexible_spec, excluded audiences, business places, user_os, wireless_carrier). Can be combined with `targeting`: rawTargeting is the BASE layer and the built camelCase spec is merged on top, key by key (camelCase wins on collision). The merge goes one level deep inside `geo_locations` and `excluded_geo_locations` (built sub-keys win; raw-only sub-keys such as `location_types` survive). Array values (`flexible_spec`, ...) are replaced as a whole key, never element-merged. When `rawTargeting` is present the `advantage_audience: 0` default that Zernio normally applies is no longer emitted, so it cannot clobber a `targeting_automation` sent in the raw spec. Meta requires `targeting_automation` on ad set creation, so include it in the raw spec, or send `targeting.advantage_audience` (0 or 1), which is merged over raw as `targeting_automation`. | [optional] |
|
|
21
|
-
| **bid_strategy** | [**BidStrategy**](BidStrategy.md) | Meta bid strategy applied to the ad set. On TikTok, mapped to `bid_type` / `bid_price` / `deep_bid_type` automatically. | [optional] |
|
|
22
|
-
| **bid_amount** | **Float** | Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when `bidStrategy` is `LOWEST_COST_WITH_BID_CAP` or `COST_CAP`. Backward-compat: providing `bidAmount` without `bidStrategy` is treated as `LOWEST_COST_WITH_BID_CAP`. | [optional] |
|
|
23
|
-
| **roas_average_floor** | **Float** | Minimum ROAS as a decimal multiplier (e.g. 2.0 = 2.0x ROAS). Required when `bidStrategy` is `LOWEST_COST_WITH_MIN_ROAS`. Sent to Meta as `bid_constraints.roas_average_floor` × 10000 (Meta uses fixed-point integers). | [optional] |
|
|
24
|
-
| **platform_specific_data** | [**
|
|
21
|
+
| **bid_strategy** | [**BidStrategy**](BidStrategy.md) | Deprecated: send it inside `platformSpecificData` instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400. Meta bid strategy applied to the ad set. On TikTok, mapped to `bid_type` / `bid_price` / `deep_bid_type` automatically. | [optional] |
|
|
22
|
+
| **bid_amount** | **Float** | Deprecated: send it inside `platformSpecificData` instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400. Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when `bidStrategy` is `LOWEST_COST_WITH_BID_CAP` or `COST_CAP`. Backward-compat: providing `bidAmount` without `bidStrategy` is treated as `LOWEST_COST_WITH_BID_CAP`. | [optional] |
|
|
23
|
+
| **roas_average_floor** | **Float** | Deprecated: send it inside `platformSpecificData` instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400. Minimum ROAS as a decimal multiplier (e.g. 2.0 = 2.0x ROAS). Required when `bidStrategy` is `LOWEST_COST_WITH_MIN_ROAS`. Sent to Meta as `bid_constraints.roas_average_floor` × 10000 (Meta uses fixed-point integers). | [optional] |
|
|
24
|
+
| **platform_specific_data** | [**BoostPostRequestPlatformSpecificData**](BoostPostRequestPlatformSpecificData.md) | | [optional] |
|
|
25
25
|
| **tracking** | [**BoostPostRequestTracking**](BoostPostRequestTracking.md) | | [optional] |
|
|
26
26
|
| **special_ad_categories** | **Array<String>** | Meta only. Required for housing, employment, credit, or political ads. | [optional] |
|
|
27
27
|
| **special_ad_category_country** | **Array<String>** | Meta (metaads) only. 2-letter ISO country codes the special ad category applies to. Requires specialAdCategories to be set (400 otherwise). | [optional] |
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Zernio::BoostPostRequestPlatformSpecificData
|
|
2
|
+
|
|
3
|
+
## Class instance methods
|
|
4
|
+
|
|
5
|
+
### `openapi_one_of`
|
|
6
|
+
|
|
7
|
+
Returns the list of classes defined in oneOf.
|
|
8
|
+
|
|
9
|
+
#### Example
|
|
10
|
+
|
|
11
|
+
```ruby
|
|
12
|
+
require 'zernio-sdk'
|
|
13
|
+
|
|
14
|
+
Zernio::BoostPostRequestPlatformSpecificData.openapi_one_of
|
|
15
|
+
# =>
|
|
16
|
+
# [
|
|
17
|
+
# :'LinkedInAdsPlatformData',
|
|
18
|
+
# :'MetaAdsPlatformData'
|
|
19
|
+
# ]
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### build
|
|
23
|
+
|
|
24
|
+
Find the appropriate object from the `openapi_one_of` list and casts the data into it.
|
|
25
|
+
|
|
26
|
+
#### Example
|
|
27
|
+
|
|
28
|
+
```ruby
|
|
29
|
+
require 'zernio-sdk'
|
|
30
|
+
|
|
31
|
+
Zernio::BoostPostRequestPlatformSpecificData.build(data)
|
|
32
|
+
# => #<LinkedInAdsPlatformData:0x00007fdd4aab02a0>
|
|
33
|
+
|
|
34
|
+
Zernio::BoostPostRequestPlatformSpecificData.build(data_that_doesnt_match)
|
|
35
|
+
# => nil
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
#### Parameters
|
|
39
|
+
|
|
40
|
+
| Name | Type | Description |
|
|
41
|
+
| ---- | ---- | ----------- |
|
|
42
|
+
| **data** | **Mixed** | data to be matched against the list of oneOf items |
|
|
43
|
+
|
|
44
|
+
#### Return type
|
|
45
|
+
|
|
46
|
+
- `LinkedInAdsPlatformData`
|
|
47
|
+
- `MetaAdsPlatformData`
|
|
48
|
+
- `nil` (if no type matches)
|
|
49
|
+
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
| **budget_type** | **String** | | [optional] |
|
|
14
14
|
| **status** | **String** | | [optional][default to 'PAUSED'] |
|
|
15
15
|
| **bid_strategy** | **String** | Campaign bid strategy. Meta stores `bid_strategy` alongside the budget, so this REQUIRES `budgetAmount` + `budgetType` on the same request; sending it without a campaign budget is a 400. A campaign carrying a strategy without its `bid_amount` makes every ad set created under it fail with an error that names the ad set (code 100, subcode 1815857), so the bad state is rejected up front rather than accepted. To bid at ad-set level, set the strategy there instead. | [optional] |
|
|
16
|
-
| **bid_amount** | **Float** | Whole currency units (USD: 5 = $5.00). Required for LOWEST_COST_WITH_BID_CAP and COST_CAP; ignored otherwise. | [optional] |
|
|
16
|
+
| **bid_amount** | **Float** | Whole currency units (USD: 5 = $5.00). Required for LOWEST_COST_WITH_BID_CAP and COST_CAP; ignored otherwise. Validated here but NOT stored by Meta: the campaign object has no bid_amount field, only bid_strategy lives on it. The amount takes effect once an ad set joins this campaign (existingCampaignId on POST /v1/ads/create) and supplies its own bidAmount there. | [optional] |
|
|
17
17
|
| **roas_average_floor** | **Float** | Decimal ROAS multiplier (2.0 = 2.0x). Required for LOWEST_COST_WITH_MIN_ROAS. | [optional] |
|
|
18
18
|
|
|
19
19
|
## Example
|
|
@@ -75,12 +75,12 @@
|
|
|
75
75
|
| **advantage_audience** | **Integer** | Meta only. Controls the Advantage audience feature (targeting_automation). 0 = disabled (default), 1 = enabled. Meta Marketing API requires this field on all ad set creation requests. | [optional] |
|
|
76
76
|
| **attribution_spec** | [**Array<CreateStandaloneAdRequestAttributionSpecInner>**](CreateStandaloneAdRequestAttributionSpecInner.md) | Meta only. Conversion attribution window for the ad set — maps 1:1 to Meta's ad-set `attribution_spec`. Only honored for conversion goals (`conversions`, `lead_generation`, `app_promotion`); ignored for awareness/traffic/engagement. Omit to use Meta's default (`7-day click` + `1-day view`). Meta enforces the valid combinations: `VIEW_THROUGH` only allows `windowDays: 1` (7d/28d view windows were removed Jan 2026); `ENGAGED_VIDEO_VIEW` only `1` and only alongside `VIEW_THROUGH: 1`; `CLICK_THROUGH: 28` only on certain objectives. Invalid combos surface as a Meta 400. Example: `[{ \"eventType\": \"CLICK_THROUGH\", \"windowDays\": 7 }, { \"eventType\": \"VIEW_THROUGH\", \"windowDays\": 1 }]` | [optional] |
|
|
77
77
|
| **gender** | **String** | Restrict the audience by gender. 'male' targets men only, 'female' targets women only, 'all' (default) targets everyone. Applied on Meta, TikTok and Pinterest. Ignored on Google, LinkedIn and X. | [optional][default to 'all'] |
|
|
78
|
-
| **bid_strategy** | [**BidStrategy**](BidStrategy.md) | Meta bid strategy applied to the ad set.
|
|
79
|
-
| **bid_amount** | **Float** | Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when `bidStrategy` is `LOWEST_COST_WITH_BID_CAP` or `COST_CAP`. | [optional] |
|
|
80
|
-
| **roas_average_floor** | **Float** | Minimum ROAS as a decimal multiplier (e.g. 2.0 = 2.0x ROAS). Required when `bidStrategy` is `LOWEST_COST_WITH_MIN_ROAS`. Sent to Meta as `bid_constraints.roas_average_floor` × 10000. | [optional] |
|
|
78
|
+
| **bid_strategy** | [**BidStrategy**](BidStrategy.md) | Deprecated: send it inside `platformSpecificData` instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400. Meta bid strategy applied to the ad set. | [optional] |
|
|
79
|
+
| **bid_amount** | **Float** | Deprecated: send it inside `platformSpecificData` instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400. Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when `bidStrategy` is `LOWEST_COST_WITH_BID_CAP` or `COST_CAP`. Meta only: sending `bidAmount` WITHOUT `bidStrategy` requires `existingCampaignId` (400 otherwise), and sets the new ad set's cap under the joined campaign's COST_CAP / LOWEST_COST_WITH_BID_CAP parent. The strategy itself is inherited from the campaign. Restating bidStrategy here is accepted but has no effect on the ad set. Rejected with 400 in `adSetId` attach mode: that shape inherits its cap from the platform. Use `PUT /v1/ads/ad-sets/{adSetId}` there instead. | [optional] |
|
|
80
|
+
| **roas_average_floor** | **Float** | Deprecated: send it inside `platformSpecificData` instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400. Minimum ROAS as a decimal multiplier (e.g. 2.0 = 2.0x ROAS). Required when `bidStrategy` is `LOWEST_COST_WITH_MIN_ROAS`. Sending it without `bidStrategy` is a 400. Sent to Meta as `bid_constraints.roas_average_floor` × 10000. Known gap: a CBO campaign's ROAS floor lives on the campaign only (set via `POST /v1/ads/campaigns`); there is no supported way to set it while joining a CBO campaign here. | [optional] |
|
|
81
81
|
| **value_rule_set_id** | **String** | Meta only (facebook, instagram; other platforms return 400). Value rule set to attach to the new ad set, from `/v1/ads/value-rule-sets`. Attachment is driven by this id, so `valueRulesApplied` is optional alongside it. Rejected with 400 in `adSetId` attach mode: that shape inherits the existing ad set's attachment, so the field would be silently ignored. Use `PUT /v1/ads/ad-sets/{adSetId}` there instead. Ignored (stripped before the ad-set create) when `buyingType` is `RESERVED`: value rules only apply to auction ad sets on `LOWEST_COST_WITHOUT_CAP` or `COST_CAP`, and a Reach & Frequency reservation has no auction bid strategy. Read back with `GET /v1/ads/ad-sets/{adSetId}?fields=value_rule_set_id`; the attachment is not mirrored onto Zernio's ad documents. | [optional] |
|
|
82
82
|
| **value_rules_applied** | **Boolean** | Meta only (facebook, instagram; other platforms return 400). Optional when attaching, and requires `valueRuleSetId`. `false` is REJECTED here with 400: a newly created ad set has nothing to detach, so detaching lives on `PUT /v1/ads/ad-sets/{adSetId}`. | [optional] |
|
|
83
|
-
| **platform_specific_data** | [**
|
|
83
|
+
| **platform_specific_data** | [**CreateStandaloneAdRequestPlatformSpecificData**](CreateStandaloneAdRequestPlatformSpecificData.md) | | [optional] |
|
|
84
84
|
| **dsa_beneficiary** | **String** | Legal entity that benefits from the ad. Required when targeting EU users (EU DSA, Article 26). Optional if the ad account has a default beneficiary: set it once via `PATCH /v1/ads/accounts` or in Meta Ads Manager, and Meta fills it in whenever the field is omitted. | [optional] |
|
|
85
85
|
| **dsa_payor** | **String** | Legal entity that pays for the ad. Can differ from `dsaBeneficiary` (for example, an agency paying for a client's ads). Same rules as `dsaBeneficiary`: required for EU targeting unless the ad account has a default payor. | [optional] |
|
|
86
86
|
| **brand_identity** | [**CreateStandaloneAdRequestBrandIdentity**](CreateStandaloneAdRequestBrandIdentity.md) | | [optional] |
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Zernio::CreateStandaloneAdRequestPlatformSpecificData
|
|
2
|
+
|
|
3
|
+
## Class instance methods
|
|
4
|
+
|
|
5
|
+
### `openapi_one_of`
|
|
6
|
+
|
|
7
|
+
Returns the list of classes defined in oneOf.
|
|
8
|
+
|
|
9
|
+
#### Example
|
|
10
|
+
|
|
11
|
+
```ruby
|
|
12
|
+
require 'zernio-sdk'
|
|
13
|
+
|
|
14
|
+
Zernio::CreateStandaloneAdRequestPlatformSpecificData.openapi_one_of
|
|
15
|
+
# =>
|
|
16
|
+
# [
|
|
17
|
+
# :'LinkedInAdsPlatformData',
|
|
18
|
+
# :'MetaAdsPlatformData'
|
|
19
|
+
# ]
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### build
|
|
23
|
+
|
|
24
|
+
Find the appropriate object from the `openapi_one_of` list and casts the data into it.
|
|
25
|
+
|
|
26
|
+
#### Example
|
|
27
|
+
|
|
28
|
+
```ruby
|
|
29
|
+
require 'zernio-sdk'
|
|
30
|
+
|
|
31
|
+
Zernio::CreateStandaloneAdRequestPlatformSpecificData.build(data)
|
|
32
|
+
# => #<LinkedInAdsPlatformData:0x00007fdd4aab02a0>
|
|
33
|
+
|
|
34
|
+
Zernio::CreateStandaloneAdRequestPlatformSpecificData.build(data_that_doesnt_match)
|
|
35
|
+
# => nil
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
#### Parameters
|
|
39
|
+
|
|
40
|
+
| Name | Type | Description |
|
|
41
|
+
| ---- | ---- | ----------- |
|
|
42
|
+
| **data** | **Mixed** | data to be matched against the list of oneOf items |
|
|
43
|
+
|
|
44
|
+
#### Return type
|
|
45
|
+
|
|
46
|
+
- `LinkedInAdsPlatformData`
|
|
47
|
+
- `MetaAdsPlatformData`
|
|
48
|
+
- `nil` (if no type matches)
|
|
49
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Zernio::GetAdsSearchTerms200Response
|
|
2
|
+
|
|
3
|
+
## Properties
|
|
4
|
+
|
|
5
|
+
| Name | Type | Description | Notes |
|
|
6
|
+
| ---- | ---- | ----------- | ----- |
|
|
7
|
+
| **customer_id** | **String** | | [optional] |
|
|
8
|
+
| **data** | [**Array<GetAdsSearchTerms200ResponseDataInner>**](GetAdsSearchTerms200ResponseDataInner.md) | | [optional] |
|
|
9
|
+
| **paging** | [**GetAdsSearchTerms200ResponsePaging**](GetAdsSearchTerms200ResponsePaging.md) | | [optional] |
|
|
10
|
+
|
|
11
|
+
## Example
|
|
12
|
+
|
|
13
|
+
```ruby
|
|
14
|
+
require 'zernio-sdk'
|
|
15
|
+
|
|
16
|
+
instance = Zernio::GetAdsSearchTerms200Response.new(
|
|
17
|
+
customer_id: null,
|
|
18
|
+
data: null,
|
|
19
|
+
paging: null
|
|
20
|
+
)
|
|
21
|
+
```
|
|
22
|
+
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Zernio::GetAdsSearchTerms200ResponseDataInner
|
|
2
|
+
|
|
3
|
+
## Properties
|
|
4
|
+
|
|
5
|
+
| Name | Type | Description | Notes |
|
|
6
|
+
| ---- | ---- | ----------- | ----- |
|
|
7
|
+
| **search_term** | **String** | | [optional] |
|
|
8
|
+
| **status** | **String** | ADDED / EXCLUDED / ADDED_EXCLUDED / NONE — whether the term is already a keyword or a negative. | [optional] |
|
|
9
|
+
| **match_type** | **String** | How the term matched (BROAD, PHRASE, EXACT, NEAR_PHRASE, NEAR_EXACT). | [optional] |
|
|
10
|
+
| **campaign_id** | **String** | | [optional] |
|
|
11
|
+
| **campaign_name** | **String** | | [optional] |
|
|
12
|
+
| **ad_group_id** | **String** | | [optional] |
|
|
13
|
+
| **ad_group_name** | **String** | | [optional] |
|
|
14
|
+
| **impressions** | **Integer** | | [optional] |
|
|
15
|
+
| **clicks** | **Integer** | | [optional] |
|
|
16
|
+
| **cost_micros** | **Integer** | Cost in micros of the account currency (divide by 1,000,000). | [optional] |
|
|
17
|
+
| **conversions** | **Float** | | [optional] |
|
|
18
|
+
| **conversions_value** | **Float** | | [optional] |
|
|
19
|
+
|
|
20
|
+
## Example
|
|
21
|
+
|
|
22
|
+
```ruby
|
|
23
|
+
require 'zernio-sdk'
|
|
24
|
+
|
|
25
|
+
instance = Zernio::GetAdsSearchTerms200ResponseDataInner.new(
|
|
26
|
+
search_term: null,
|
|
27
|
+
status: null,
|
|
28
|
+
match_type: null,
|
|
29
|
+
campaign_id: null,
|
|
30
|
+
campaign_name: null,
|
|
31
|
+
ad_group_id: null,
|
|
32
|
+
ad_group_name: null,
|
|
33
|
+
impressions: null,
|
|
34
|
+
clicks: null,
|
|
35
|
+
cost_micros: null,
|
|
36
|
+
conversions: null,
|
|
37
|
+
conversions_value: null
|
|
38
|
+
)
|
|
39
|
+
```
|
|
40
|
+
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Zernio::GetAdsSearchTerms200ResponsePaging
|
|
2
|
+
|
|
3
|
+
## Properties
|
|
4
|
+
|
|
5
|
+
| Name | Type | Description | Notes |
|
|
6
|
+
| ---- | ---- | ----------- | ----- |
|
|
7
|
+
| **next_page_token** | **String** | Null when the last page was returned. | [optional] |
|
|
8
|
+
|
|
9
|
+
## Example
|
|
10
|
+
|
|
11
|
+
```ruby
|
|
12
|
+
require 'zernio-sdk'
|
|
13
|
+
|
|
14
|
+
instance = Zernio::GetAdsSearchTerms200ResponsePaging.new(
|
|
15
|
+
next_page_token: null
|
|
16
|
+
)
|
|
17
|
+
```
|
|
18
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Zernio::MetaAdsPlatformData
|
|
2
|
+
|
|
3
|
+
## Properties
|
|
4
|
+
|
|
5
|
+
| Name | Type | Description | Notes |
|
|
6
|
+
| ---- | ---- | ----------- | ----- |
|
|
7
|
+
| **bid_strategy** | [**BidStrategy**](BidStrategy.md) | | [optional] |
|
|
8
|
+
| **bid_amount** | **Float** | Whole currency units (USD: 5 = $5.00). Required when bidStrategy is LOWEST_COST_WITH_BID_CAP or COST_CAP. May also be sent alone, WITHOUT bidStrategy, to set the cap on an ad set joining a COST_CAP / LOWEST_COST_WITH_BID_CAP campaign (the strategy is inherited from the campaign). On POST /v1/ads/create that shape requires existingCampaignId and is a 400 otherwise; on POST /v1/ads/boost it is promoted to LOWEST_COST_WITH_BID_CAP. | [optional] |
|
|
9
|
+
| **roas_average_floor** | **Float** | Decimal ROAS multiplier (2.0 = 2.0x). Required when bidStrategy is LOWEST_COST_WITH_MIN_ROAS; sending it without bidStrategy is a 400. | [optional] |
|
|
10
|
+
|
|
11
|
+
## Example
|
|
12
|
+
|
|
13
|
+
```ruby
|
|
14
|
+
require 'zernio-sdk'
|
|
15
|
+
|
|
16
|
+
instance = Zernio::MetaAdsPlatformData.new(
|
|
17
|
+
bid_strategy: null,
|
|
18
|
+
bid_amount: null,
|
|
19
|
+
roas_average_floor: null
|
|
20
|
+
)
|
|
21
|
+
```
|
|
22
|
+
|
data/docs/UpdateAdSetRequest.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
| **status** | **String** | Omit if not toggling delivery state | [optional] |
|
|
10
10
|
| **name** | **String** | Rename the ad set (Meta only; other platforms return 501). At least one of budget/status/bidStrategy/name is required. | [optional] |
|
|
11
11
|
| **bid_strategy** | [**BidStrategy**](BidStrategy.md) | Ad-set-level bid strategy. Overrides the campaign-level default. Supported on Meta (facebook, instagram), TikTok, and OpenAI. On TikTok the Meta-style enum is mapped to bid_type / bid_price / deep_bid_type automatically. On OpenAI, LOWEST_COST_WITH_BID_CAP and COST_CAP both map to the ad group's `bidding_config.max_bid_micros` (one knob covers both); LOWEST_COST_WITH_MIN_ROAS is rejected with 422 (OpenAI has no ROAS-based bidding). Other platforms (linkedin, pinterest, google, twitter) return 501 Not Implemented when bidStrategy is set. | [optional] |
|
|
12
|
-
| **bid_amount** | **Float** | Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when bidStrategy is LOWEST_COST_WITH_BID_CAP or COST_CAP. Internally converted to Meta's smallest-denomination integer, or (on OpenAI) to micros (× 1,000,000). | [optional] |
|
|
12
|
+
| **bid_amount** | **Float** | Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when bidStrategy is LOWEST_COST_WITH_BID_CAP or COST_CAP. Internally converted to Meta's smallest-denomination integer, or (on OpenAI) to micros (× 1,000,000). Meta only: may be sent alone, WITHOUT bidStrategy, to update the cap amount on an ad set whose parent campaign is COST_CAP or LOWEST_COST_WITH_BID_CAP (the strategy is inherited from the campaign and is left untouched). | [optional] |
|
|
13
13
|
| **roas_average_floor** | **Float** | Minimum ROAS as a decimal multiplier (2.0 = 2.0x). Required when bidStrategy is LOWEST_COST_WITH_MIN_ROAS. Sent to Meta as `bid_constraints.roas_average_floor` × 10000. Not supported on OpenAI (422). | [optional] |
|
|
14
14
|
| **value_rule_set_id** | **String** | Meta only (other platforms return 501). Value rule set to attach to this ad set, from `/v1/ads/value-rule-sets`. Sending a different id replaces the current association. To DETACH, send `valueRulesApplied: false` and omit this field. | [optional] |
|
|
15
15
|
| **value_rules_applied** | **Boolean** | Meta only (other platforms return 501). `false` DETACHES the ad set's value rule set and must be sent WITHOUT `valueRuleSetId`; the combination returns 400. `true` is optional when attaching, since attachment is driven by `valueRuleSetId`, and requires it to be present. | [optional] |
|
|
@@ -6,6 +6,9 @@
|
|
|
6
6
|
| ---- | ---- | ----------- | ----- |
|
|
7
7
|
| **id** | **String** | Internal post ID (null for posts not published through Zernio) | |
|
|
8
8
|
| **platform_post_id** | **String** | Platform's post ID | |
|
|
9
|
+
| **content** | **String** | Post text, from our synced copy — no platform call is made on the comment path, so null when the post was never synced. | |
|
|
10
|
+
| **image_url** | **String** | Post thumbnail or first media item URL. Platform CDN URLs expire, fetch promptly. | |
|
|
11
|
+
| **permalink** | **String** | Public URL of the post. Null for posts published through Zernio that were never re-synced. | |
|
|
9
12
|
|
|
10
13
|
## Example
|
|
11
14
|
|
|
@@ -14,7 +17,10 @@ require 'zernio-sdk'
|
|
|
14
17
|
|
|
15
18
|
instance = Zernio::WebhookPayloadCommentPost.new(
|
|
16
19
|
id: null,
|
|
17
|
-
platform_post_id: null
|
|
20
|
+
platform_post_id: null,
|
|
21
|
+
content: null,
|
|
22
|
+
image_url: null,
|
|
23
|
+
permalink: null
|
|
18
24
|
)
|
|
19
25
|
```
|
|
20
26
|
|
|
@@ -1603,7 +1603,7 @@ module Zernio
|
|
|
1603
1603
|
end
|
|
1604
1604
|
|
|
1605
1605
|
# Update an ad set
|
|
1606
|
-
# Ad-set-level writes. Use this for ABO budget updates, ad-set-scoped pause/resume, bid-strategy edits, Meta value-rule-set attach/detach, and Meta-only post-launch delivery settings via `platformSpecificData`. At least one updatable field is required. Value rule sets (Meta only, see `/v1/ads/value-rule-sets`): - ATTACH or REPLACE: send `valueRuleSetId`. Attachment is driven by the id's presence, so `valueRulesApplied: true` is optional. Sending a different id replaces the previous association; there is no separate replace call. - DETACH: send `valueRulesApplied: false` and OMIT `valueRuleSetId`. - Sending `valueRulesApplied: false` TOGETHER with `valueRuleSetId` returns 400 `mutually_exclusive_fields`. This is deliberate: Meta attaches the rule set whenever `value_rule_set_id` is present, even with `value_rules_applied` false, so echoing stored state while asking to detach would silently keep the bid adjustments live. - Eligibility: only ad sets on `LOWEST_COST_WITHOUT_CAP` or `COST_CAP`. Meta rejects the rest server-side. - Read back with `GET /v1/ads/ad-sets/{adSetId}?fields=value_rule_set_id`. Meta does not document `value_rules_applied` as a readable ad-set field, so the boolean cannot be read back. Bid strategy compatibility (per Meta's spec): - `LOWEST_COST_WITHOUT_CAP`: no `bidAmount`, no `roasAverageFloor`. - `LOWEST_COST_WITH_BID_CAP` / `COST_CAP`: `bidAmount` REQUIRED (whole currency units). - `LOWEST_COST_WITH_MIN_ROAS`: `roasAverageFloor` REQUIRED (decimal multiplier, e.g. 2.0 = 2.0x ROAS). Delivery settings are validated by Meta against the campaign objective; incompatible combinations (e.g. a billingEvent the optimization goal doesn't allow) surface as 400s from Meta. When updating `budget` on an ABO campaign: if the parent campaign is CBO, the response is 409 with code BUDGET_LEVEL_MISMATCH — route to PUT /v1/ads/campaigns/{campaignId} instead.
|
|
1606
|
+
# Ad-set-level writes. Use this for ABO budget updates, ad-set-scoped pause/resume, bid-strategy edits, Meta value-rule-set attach/detach, and Meta-only post-launch delivery settings via `platformSpecificData`. At least one updatable field is required. Value rule sets (Meta only, see `/v1/ads/value-rule-sets`): - ATTACH or REPLACE: send `valueRuleSetId`. Attachment is driven by the id's presence, so `valueRulesApplied: true` is optional. Sending a different id replaces the previous association; there is no separate replace call. - DETACH: send `valueRulesApplied: false` and OMIT `valueRuleSetId`. - Sending `valueRulesApplied: false` TOGETHER with `valueRuleSetId` returns 400 `mutually_exclusive_fields`. This is deliberate: Meta attaches the rule set whenever `value_rule_set_id` is present, even with `value_rules_applied` false, so echoing stored state while asking to detach would silently keep the bid adjustments live. - Eligibility: only ad sets on `LOWEST_COST_WITHOUT_CAP` or `COST_CAP`. Meta rejects the rest server-side. - Read back with `GET /v1/ads/ad-sets/{adSetId}?fields=value_rule_set_id`. Meta does not document `value_rules_applied` as a readable ad-set field, so the boolean cannot be read back. Bid strategy compatibility (per Meta's spec): - `LOWEST_COST_WITHOUT_CAP`: no `bidAmount`, no `roasAverageFloor`. - `LOWEST_COST_WITH_BID_CAP` / `COST_CAP`: `bidAmount` REQUIRED (whole currency units). - `LOWEST_COST_WITH_MIN_ROAS`: `roasAverageFloor` REQUIRED (decimal multiplier, e.g. 2.0 = 2.0x ROAS). - Meta only: send `bidAmount` WITHOUT `bidStrategy` to change the cap amount on an ad set under a COST_CAP / LOWEST_COST_WITH_BID_CAP parent campaign, leaving the strategy itself (inherited from the campaign) untouched. `roasAverageFloor` without `bidStrategy` is rejected (it has no meaning outside LOWEST_COST_WITH_MIN_ROAS). Delivery settings are validated by Meta against the campaign objective; incompatible combinations (e.g. a billingEvent the optimization goal doesn't allow) surface as 400s from Meta. When updating `budget` on an ABO campaign: if the parent campaign is CBO, the response is 409 with code BUDGET_LEVEL_MISMATCH — route to PUT /v1/ads/campaigns/{campaignId} instead.
|
|
1607
1607
|
# @param ad_set_id [String] Platform ad set ID
|
|
1608
1608
|
# @param update_ad_set_request [UpdateAdSetRequest]
|
|
1609
1609
|
# @param [Hash] opts the optional parameters
|
|
@@ -1614,7 +1614,7 @@ module Zernio
|
|
|
1614
1614
|
end
|
|
1615
1615
|
|
|
1616
1616
|
# Update an ad set
|
|
1617
|
-
# Ad-set-level writes. Use this for ABO budget updates, ad-set-scoped pause/resume, bid-strategy edits, Meta value-rule-set attach/detach, and Meta-only post-launch delivery settings via `platformSpecificData`. At least one updatable field is required. Value rule sets (Meta only, see `/v1/ads/value-rule-sets`): - ATTACH or REPLACE: send `valueRuleSetId`. Attachment is driven by the id's presence, so `valueRulesApplied: true` is optional. Sending a different id replaces the previous association; there is no separate replace call. - DETACH: send `valueRulesApplied: false` and OMIT `valueRuleSetId`. - Sending `valueRulesApplied: false` TOGETHER with `valueRuleSetId` returns 400 `mutually_exclusive_fields`. This is deliberate: Meta attaches the rule set whenever `value_rule_set_id` is present, even with `value_rules_applied` false, so echoing stored state while asking to detach would silently keep the bid adjustments live. - Eligibility: only ad sets on `LOWEST_COST_WITHOUT_CAP` or `COST_CAP`. Meta rejects the rest server-side. - Read back with `GET /v1/ads/ad-sets/{adSetId}?fields=value_rule_set_id`. Meta does not document `value_rules_applied` as a readable ad-set field, so the boolean cannot be read back. Bid strategy compatibility (per Meta's spec): - `LOWEST_COST_WITHOUT_CAP`: no `bidAmount`, no `roasAverageFloor`. - `LOWEST_COST_WITH_BID_CAP` / `COST_CAP`: `bidAmount` REQUIRED (whole currency units). - `LOWEST_COST_WITH_MIN_ROAS`: `roasAverageFloor` REQUIRED (decimal multiplier, e.g. 2.0 = 2.0x ROAS). Delivery settings are validated by Meta against the campaign objective; incompatible combinations (e.g. a billingEvent the optimization goal doesn't allow) surface as 400s from Meta. When updating `budget` on an ABO campaign: if the parent campaign is CBO, the response is 409 with code BUDGET_LEVEL_MISMATCH — route to PUT /v1/ads/campaigns/{campaignId} instead.
|
|
1617
|
+
# Ad-set-level writes. Use this for ABO budget updates, ad-set-scoped pause/resume, bid-strategy edits, Meta value-rule-set attach/detach, and Meta-only post-launch delivery settings via `platformSpecificData`. At least one updatable field is required. Value rule sets (Meta only, see `/v1/ads/value-rule-sets`): - ATTACH or REPLACE: send `valueRuleSetId`. Attachment is driven by the id's presence, so `valueRulesApplied: true` is optional. Sending a different id replaces the previous association; there is no separate replace call. - DETACH: send `valueRulesApplied: false` and OMIT `valueRuleSetId`. - Sending `valueRulesApplied: false` TOGETHER with `valueRuleSetId` returns 400 `mutually_exclusive_fields`. This is deliberate: Meta attaches the rule set whenever `value_rule_set_id` is present, even with `value_rules_applied` false, so echoing stored state while asking to detach would silently keep the bid adjustments live. - Eligibility: only ad sets on `LOWEST_COST_WITHOUT_CAP` or `COST_CAP`. Meta rejects the rest server-side. - Read back with `GET /v1/ads/ad-sets/{adSetId}?fields=value_rule_set_id`. Meta does not document `value_rules_applied` as a readable ad-set field, so the boolean cannot be read back. Bid strategy compatibility (per Meta's spec): - `LOWEST_COST_WITHOUT_CAP`: no `bidAmount`, no `roasAverageFloor`. - `LOWEST_COST_WITH_BID_CAP` / `COST_CAP`: `bidAmount` REQUIRED (whole currency units). - `LOWEST_COST_WITH_MIN_ROAS`: `roasAverageFloor` REQUIRED (decimal multiplier, e.g. 2.0 = 2.0x ROAS). - Meta only: send `bidAmount` WITHOUT `bidStrategy` to change the cap amount on an ad set under a COST_CAP / LOWEST_COST_WITH_BID_CAP parent campaign, leaving the strategy itself (inherited from the campaign) untouched. `roasAverageFloor` without `bidStrategy` is rejected (it has no meaning outside LOWEST_COST_WITH_MIN_ROAS). Delivery settings are validated by Meta against the campaign objective; incompatible combinations (e.g. a billingEvent the optimization goal doesn't allow) surface as 400s from Meta. When updating `budget` on an ABO campaign: if the parent campaign is CBO, the response is 409 with code BUDGET_LEVEL_MISMATCH — route to PUT /v1/ads/campaigns/{campaignId} instead.
|
|
1618
1618
|
# @param ad_set_id [String] Platform ad set ID
|
|
1619
1619
|
# @param update_ad_set_request [UpdateAdSetRequest]
|
|
1620
1620
|
# @param [Hash] opts the optional parameters
|
|
@@ -379,6 +379,88 @@ module Zernio
|
|
|
379
379
|
return data, status_code, headers
|
|
380
380
|
end
|
|
381
381
|
|
|
382
|
+
# Google Ads search terms report
|
|
383
|
+
# The actual search queries that triggered your ads, with matched-keyword status and spend metrics — the raw material for wasted-spend analysis and negative-keyword lists. Reads Google's `search_term_view` live; defaults to the last 30 days. Rows are ordered by cost, descending. Draws on the shared Google Ads operations budget.
|
|
384
|
+
# @param account_id [String] Google ads SocialAccount id.
|
|
385
|
+
# @param [Hash] opts the optional parameters
|
|
386
|
+
# @option opts [String] :customer_id Numeric Google Ads customer id (no dashes). Defaults to the account's connected customer.
|
|
387
|
+
# @option opts [Date] :from_date Defaults to 30 days ago.
|
|
388
|
+
# @option opts [Date] :to_date Defaults to today.
|
|
389
|
+
# @option opts [String] :campaign_id Numeric Google campaign id filter.
|
|
390
|
+
# @option opts [String] :ad_group_id Numeric Google ad group id filter.
|
|
391
|
+
# @option opts [String] :page_token Cursor from paging.nextPageToken of the previous page.
|
|
392
|
+
# @return [GetAdsSearchTerms200Response]
|
|
393
|
+
def get_ads_search_terms(account_id, opts = {})
|
|
394
|
+
data, _status_code, _headers = get_ads_search_terms_with_http_info(account_id, opts)
|
|
395
|
+
data
|
|
396
|
+
end
|
|
397
|
+
|
|
398
|
+
# Google Ads search terms report
|
|
399
|
+
# The actual search queries that triggered your ads, with matched-keyword status and spend metrics — the raw material for wasted-spend analysis and negative-keyword lists. Reads Google's `search_term_view` live; defaults to the last 30 days. Rows are ordered by cost, descending. Draws on the shared Google Ads operations budget.
|
|
400
|
+
# @param account_id [String] Google ads SocialAccount id.
|
|
401
|
+
# @param [Hash] opts the optional parameters
|
|
402
|
+
# @option opts [String] :customer_id Numeric Google Ads customer id (no dashes). Defaults to the account's connected customer.
|
|
403
|
+
# @option opts [Date] :from_date Defaults to 30 days ago.
|
|
404
|
+
# @option opts [Date] :to_date Defaults to today.
|
|
405
|
+
# @option opts [String] :campaign_id Numeric Google campaign id filter.
|
|
406
|
+
# @option opts [String] :ad_group_id Numeric Google ad group id filter.
|
|
407
|
+
# @option opts [String] :page_token Cursor from paging.nextPageToken of the previous page.
|
|
408
|
+
# @return [Array<(GetAdsSearchTerms200Response, Integer, Hash)>] GetAdsSearchTerms200Response data, response status code and response headers
|
|
409
|
+
def get_ads_search_terms_with_http_info(account_id, opts = {})
|
|
410
|
+
if @api_client.config.debugging
|
|
411
|
+
@api_client.config.logger.debug 'Calling API: AdInsightsApi.get_ads_search_terms ...'
|
|
412
|
+
end
|
|
413
|
+
# verify the required parameter 'account_id' is set
|
|
414
|
+
if @api_client.config.client_side_validation && account_id.nil?
|
|
415
|
+
fail ArgumentError, "Missing the required parameter 'account_id' when calling AdInsightsApi.get_ads_search_terms"
|
|
416
|
+
end
|
|
417
|
+
# resource path
|
|
418
|
+
local_var_path = '/v1/ads/search-terms'
|
|
419
|
+
|
|
420
|
+
# query parameters
|
|
421
|
+
query_params = opts[:query_params] || {}
|
|
422
|
+
query_params[:'accountId'] = account_id
|
|
423
|
+
query_params[:'customerId'] = opts[:'customer_id'] if !opts[:'customer_id'].nil?
|
|
424
|
+
query_params[:'fromDate'] = opts[:'from_date'] if !opts[:'from_date'].nil?
|
|
425
|
+
query_params[:'toDate'] = opts[:'to_date'] if !opts[:'to_date'].nil?
|
|
426
|
+
query_params[:'campaignId'] = opts[:'campaign_id'] if !opts[:'campaign_id'].nil?
|
|
427
|
+
query_params[:'adGroupId'] = opts[:'ad_group_id'] if !opts[:'ad_group_id'].nil?
|
|
428
|
+
query_params[:'pageToken'] = opts[:'page_token'] if !opts[:'page_token'].nil?
|
|
429
|
+
|
|
430
|
+
# header parameters
|
|
431
|
+
header_params = opts[:header_params] || {}
|
|
432
|
+
# HTTP header 'Accept' (if needed)
|
|
433
|
+
header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
|
|
434
|
+
|
|
435
|
+
# form parameters
|
|
436
|
+
form_params = opts[:form_params] || {}
|
|
437
|
+
|
|
438
|
+
# http body (model)
|
|
439
|
+
post_body = opts[:debug_body]
|
|
440
|
+
|
|
441
|
+
# return_type
|
|
442
|
+
return_type = opts[:debug_return_type] || 'GetAdsSearchTerms200Response'
|
|
443
|
+
|
|
444
|
+
# auth_names
|
|
445
|
+
auth_names = opts[:debug_auth_names] || ['bearerAuth']
|
|
446
|
+
|
|
447
|
+
new_options = opts.merge(
|
|
448
|
+
:operation => :"AdInsightsApi.get_ads_search_terms",
|
|
449
|
+
:header_params => header_params,
|
|
450
|
+
:query_params => query_params,
|
|
451
|
+
:form_params => form_params,
|
|
452
|
+
:body => post_body,
|
|
453
|
+
:auth_names => auth_names,
|
|
454
|
+
:return_type => return_type
|
|
455
|
+
)
|
|
456
|
+
|
|
457
|
+
data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
|
|
458
|
+
if @api_client.config.debugging
|
|
459
|
+
@api_client.config.logger.debug "API called: AdInsightsApi#get_ads_search_terms\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
|
|
460
|
+
end
|
|
461
|
+
return data, status_code, headers
|
|
462
|
+
end
|
|
463
|
+
|
|
382
464
|
# Get campaign analytics
|
|
383
465
|
# Returns performance analytics for a whole campaign in one call: summary metrics, a daily timeline over the requested date range (summed across the campaign's ads), and optional demographic breakdowns. Breakdowns are fetched live from Meta at the campaign level (one call per dimension, no per-ad fan-out), so an agency dashboard gets campaign-level age/gender/etc. without summing thousands of per-ad reads. `campaignId` is the platform campaign id; pass `platform` when a campaign id could be ambiguous across platforms. If no date range is provided, defaults to the last 90 days. Date range is capped at 730 days max.
|
|
384
466
|
# @param campaign_id [String] Platform campaign id (platformCampaignId).
|
|
@@ -52,13 +52,13 @@ module Zernio
|
|
|
52
52
|
# Meta only. A Meta-native targeting spec (e.g. `{ \"geo_locations\": { \"cities\": [{ \"key\": \"...\", \"radius\": 15, \"distance_unit\": \"kilometer\" }] } }`). Sent alone it is forwarded unchanged. Use for advanced fields the structured object does not expose (flexible_spec, excluded audiences, business places, user_os, wireless_carrier). Can be combined with `targeting`: rawTargeting is the BASE layer and the built camelCase spec is merged on top, key by key (camelCase wins on collision). The merge goes one level deep inside `geo_locations` and `excluded_geo_locations` (built sub-keys win; raw-only sub-keys such as `location_types` survive). Array values (`flexible_spec`, ...) are replaced as a whole key, never element-merged. When `rawTargeting` is present the `advantage_audience: 0` default that Zernio normally applies is no longer emitted, so it cannot clobber a `targeting_automation` sent in the raw spec. Meta requires `targeting_automation` on ad set creation, so include it in the raw spec, or send `targeting.advantage_audience` (0 or 1), which is merged over raw as `targeting_automation`.
|
|
53
53
|
attr_accessor :raw_targeting
|
|
54
54
|
|
|
55
|
-
# Meta bid strategy applied to the ad set. On TikTok, mapped to `bid_type` / `bid_price` / `deep_bid_type` automatically.
|
|
55
|
+
# Deprecated: send it inside `platformSpecificData` instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400. Meta bid strategy applied to the ad set. On TikTok, mapped to `bid_type` / `bid_price` / `deep_bid_type` automatically.
|
|
56
56
|
attr_accessor :bid_strategy
|
|
57
57
|
|
|
58
|
-
# Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when `bidStrategy` is `LOWEST_COST_WITH_BID_CAP` or `COST_CAP`. Backward-compat: providing `bidAmount` without `bidStrategy` is treated as `LOWEST_COST_WITH_BID_CAP`.
|
|
58
|
+
# Deprecated: send it inside `platformSpecificData` instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400. Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when `bidStrategy` is `LOWEST_COST_WITH_BID_CAP` or `COST_CAP`. Backward-compat: providing `bidAmount` without `bidStrategy` is treated as `LOWEST_COST_WITH_BID_CAP`.
|
|
59
59
|
attr_accessor :bid_amount
|
|
60
60
|
|
|
61
|
-
# Minimum ROAS as a decimal multiplier (e.g. 2.0 = 2.0x ROAS). Required when `bidStrategy` is `LOWEST_COST_WITH_MIN_ROAS`. Sent to Meta as `bid_constraints.roas_average_floor` × 10000 (Meta uses fixed-point integers).
|
|
61
|
+
# Deprecated: send it inside `platformSpecificData` instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400. Minimum ROAS as a decimal multiplier (e.g. 2.0 = 2.0x ROAS). Required when `bidStrategy` is `LOWEST_COST_WITH_MIN_ROAS`. Sent to Meta as `bid_constraints.roas_average_floor` × 10000 (Meta uses fixed-point integers).
|
|
62
62
|
attr_accessor :roas_average_floor
|
|
63
63
|
|
|
64
64
|
attr_accessor :platform_specific_data
|
|
@@ -174,7 +174,7 @@ module Zernio
|
|
|
174
174
|
:'bid_strategy' => :'BidStrategy',
|
|
175
175
|
:'bid_amount' => :'Float',
|
|
176
176
|
:'roas_average_floor' => :'Float',
|
|
177
|
-
:'platform_specific_data' => :'
|
|
177
|
+
:'platform_specific_data' => :'BoostPostRequestPlatformSpecificData',
|
|
178
178
|
:'tracking' => :'BoostPostRequestTracking',
|
|
179
179
|
:'special_ad_categories' => :'Array<String>',
|
|
180
180
|
:'special_ad_category_country' => :'Array<String>',
|