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
data/openapi.yaml
CHANGED
|
@@ -2829,7 +2829,7 @@ components:
|
|
|
2829
2829
|
description: 'Source URL (from attachment.url). For GIFs this is an l.facebook.com redirect.'
|
|
2830
2830
|
post:
|
|
2831
2831
|
type: object
|
|
2832
|
-
required: [id, platformPostId]
|
|
2832
|
+
required: [id, platformPostId, content, imageUrl, permalink]
|
|
2833
2833
|
properties:
|
|
2834
2834
|
id:
|
|
2835
2835
|
type: [string, "null"]
|
|
@@ -2837,6 +2837,15 @@ components:
|
|
|
2837
2837
|
platformPostId:
|
|
2838
2838
|
type: string
|
|
2839
2839
|
description: Platform's post ID
|
|
2840
|
+
content:
|
|
2841
|
+
type: [string, "null"]
|
|
2842
|
+
description: 'Post text, from our synced copy — no platform call is made on the comment path, so null when the post was never synced.'
|
|
2843
|
+
imageUrl:
|
|
2844
|
+
type: [string, "null"]
|
|
2845
|
+
description: 'Post thumbnail or first media item URL. Platform CDN URLs expire, fetch promptly.'
|
|
2846
|
+
permalink:
|
|
2847
|
+
type: [string, "null"]
|
|
2848
|
+
description: 'Public URL of the post. Null for posts published through Zernio that were never re-synced.'
|
|
2840
2849
|
account:
|
|
2841
2850
|
type: object
|
|
2842
2851
|
required: [id, platform, username]
|
|
@@ -4917,6 +4926,14 @@ components:
|
|
|
4917
4926
|
amount: { type: string, description: "Amount as a decimal string, e.g. \"88.59\"." }
|
|
4918
4927
|
currencyCode: { type: string, description: "ISO 4217 currency code, e.g. \"USD\"." }
|
|
4919
4928
|
|
|
4929
|
+
MetaAdsPlatformData:
|
|
4930
|
+
type: object
|
|
4931
|
+
additionalProperties: false
|
|
4932
|
+
description: 'Meta (facebook/instagram) options for platformSpecificData on POST /v1/ads/boost and /v1/ads/create. Unknown keys are rejected, not dropped.'
|
|
4933
|
+
properties:
|
|
4934
|
+
bidStrategy: { $ref: '#/components/schemas/BidStrategy' }
|
|
4935
|
+
bidAmount: { type: number, description: "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." }
|
|
4936
|
+
roasAverageFloor: { type: number, description: "Decimal ROAS multiplier (2.0 = 2.0x). Required when bidStrategy is LOWEST_COST_WITH_MIN_ROAS; sending it without bidStrategy is a 400." }
|
|
4920
4937
|
LinkedInAdsPlatformData:
|
|
4921
4938
|
type: object
|
|
4922
4939
|
additionalProperties: false
|
|
@@ -36823,6 +36840,64 @@ paths:
|
|
|
36823
36840
|
'403':
|
|
36824
36841
|
description: Ads access required. Legacy plans need the Ads add-on; included by default on usage-based plans.
|
|
36825
36842
|
|
|
36843
|
+
/v1/ads/search-terms:
|
|
36844
|
+
get:
|
|
36845
|
+
x-resource-group: "ads"
|
|
36846
|
+
operationId: getAdsSearchTerms
|
|
36847
|
+
tags: ["Ad Insights"]
|
|
36848
|
+
x-platforms: ["google"]
|
|
36849
|
+
summary: Google Ads search terms report
|
|
36850
|
+
description: |-
|
|
36851
|
+
The actual search queries that triggered your ads, with matched-keyword
|
|
36852
|
+
status and spend metrics — the raw material for wasted-spend analysis and
|
|
36853
|
+
negative-keyword lists. Reads Google's `search_term_view` live; defaults
|
|
36854
|
+
to the last 30 days. Rows are ordered by cost, descending. Draws on the
|
|
36855
|
+
shared Google Ads operations budget.
|
|
36856
|
+
security:
|
|
36857
|
+
- bearerAuth: []
|
|
36858
|
+
parameters:
|
|
36859
|
+
- { name: accountId, in: query, required: true, schema: { type: string }, description: "Google ads SocialAccount id." }
|
|
36860
|
+
- { name: customerId, in: query, schema: { type: string }, description: "Numeric Google Ads customer id (no dashes). Defaults to the account's connected customer." }
|
|
36861
|
+
- { name: fromDate, in: query, schema: { type: string, format: date }, description: "Defaults to 30 days ago." }
|
|
36862
|
+
- { name: toDate, in: query, schema: { type: string, format: date }, description: "Defaults to today." }
|
|
36863
|
+
- { name: campaignId, in: query, schema: { type: string }, description: "Numeric Google campaign id filter." }
|
|
36864
|
+
- { name: adGroupId, in: query, schema: { type: string }, description: "Numeric Google ad group id filter." }
|
|
36865
|
+
- { name: pageToken, in: query, schema: { type: string }, description: "Cursor from paging.nextPageToken of the previous page." }
|
|
36866
|
+
responses:
|
|
36867
|
+
'200':
|
|
36868
|
+
description: Search terms
|
|
36869
|
+
content:
|
|
36870
|
+
application/json:
|
|
36871
|
+
schema:
|
|
36872
|
+
type: object
|
|
36873
|
+
properties:
|
|
36874
|
+
customerId: { type: string }
|
|
36875
|
+
data:
|
|
36876
|
+
type: array
|
|
36877
|
+
items:
|
|
36878
|
+
type: object
|
|
36879
|
+
properties:
|
|
36880
|
+
searchTerm: { type: [string, "null"] }
|
|
36881
|
+
status: { type: [string, "null"], description: "ADDED / EXCLUDED / ADDED_EXCLUDED / NONE — whether the term is already a keyword or a negative." }
|
|
36882
|
+
matchType: { type: [string, "null"], description: "How the term matched (BROAD, PHRASE, EXACT, NEAR_PHRASE, NEAR_EXACT)." }
|
|
36883
|
+
campaignId: { type: [string, "null"] }
|
|
36884
|
+
campaignName: { type: [string, "null"] }
|
|
36885
|
+
adGroupId: { type: [string, "null"] }
|
|
36886
|
+
adGroupName: { type: [string, "null"] }
|
|
36887
|
+
impressions: { type: integer }
|
|
36888
|
+
clicks: { type: integer }
|
|
36889
|
+
costMicros: { type: integer, description: "Cost in micros of the account currency (divide by 1,000,000)." }
|
|
36890
|
+
conversions: { type: number }
|
|
36891
|
+
conversionsValue: { type: number }
|
|
36892
|
+
paging:
|
|
36893
|
+
type: object
|
|
36894
|
+
properties:
|
|
36895
|
+
nextPageToken: { type: [string, "null"], description: "Null when the last page was returned." }
|
|
36896
|
+
'400': { $ref: '#/components/responses/BadRequest' }
|
|
36897
|
+
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
36898
|
+
'429': { description: "Google Ads operations budget exhausted; retry later." }
|
|
36899
|
+
'501': { description: Only available on Google Ads accounts }
|
|
36900
|
+
|
|
36826
36901
|
/v1/ads/keywords:
|
|
36827
36902
|
get:
|
|
36828
36903
|
x-resource-group: "ads"
|
|
@@ -36996,7 +37071,7 @@ paths:
|
|
|
36996
37071
|
type: string
|
|
36997
37072
|
enum: [LOWEST_COST_WITHOUT_CAP, LOWEST_COST_WITH_BID_CAP, COST_CAP, LOWEST_COST_WITH_MIN_ROAS]
|
|
36998
37073
|
description: "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."
|
|
36999
|
-
bidAmount: { type: number, description: "Whole currency units (USD: 5 = $5.00). Required for LOWEST_COST_WITH_BID_CAP and COST_CAP; ignored otherwise." }
|
|
37074
|
+
bidAmount: { type: number, description: "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." }
|
|
37000
37075
|
roasAverageFloor: { type: number, description: "Decimal ROAS multiplier (2.0 = 2.0x). Required for LOWEST_COST_WITH_MIN_ROAS." }
|
|
37001
37076
|
responses:
|
|
37002
37077
|
'201':
|
|
@@ -37521,6 +37596,10 @@ paths:
|
|
|
37521
37596
|
- `LOWEST_COST_WITHOUT_CAP`: no `bidAmount`, no `roasAverageFloor`.
|
|
37522
37597
|
- `LOWEST_COST_WITH_BID_CAP` / `COST_CAP`: `bidAmount` REQUIRED (whole currency units).
|
|
37523
37598
|
- `LOWEST_COST_WITH_MIN_ROAS`: `roasAverageFloor` REQUIRED (decimal multiplier, e.g. 2.0 = 2.0x ROAS).
|
|
37599
|
+
- Meta only: send `bidAmount` WITHOUT `bidStrategy` to change the cap amount on an ad set
|
|
37600
|
+
under a COST_CAP / LOWEST_COST_WITH_BID_CAP parent campaign, leaving the strategy itself
|
|
37601
|
+
(inherited from the campaign) untouched. `roasAverageFloor` without `bidStrategy` is
|
|
37602
|
+
rejected (it has no meaning outside LOWEST_COST_WITH_MIN_ROAS).
|
|
37524
37603
|
|
|
37525
37604
|
Delivery settings are validated by Meta against the campaign objective;
|
|
37526
37605
|
incompatible combinations (e.g. a billingEvent the optimization goal
|
|
@@ -37566,7 +37645,10 @@ paths:
|
|
|
37566
37645
|
description: |
|
|
37567
37646
|
Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when
|
|
37568
37647
|
bidStrategy is LOWEST_COST_WITH_BID_CAP or COST_CAP. Internally converted to Meta's
|
|
37569
|
-
smallest-denomination integer, or (on OpenAI) to micros (× 1,000,000).
|
|
37648
|
+
smallest-denomination integer, or (on OpenAI) to micros (× 1,000,000). Meta only:
|
|
37649
|
+
may be sent alone, WITHOUT bidStrategy, to update the cap amount on an ad set whose
|
|
37650
|
+
parent campaign is COST_CAP or LOWEST_COST_WITH_BID_CAP (the strategy is inherited
|
|
37651
|
+
from the campaign and is left untouched).
|
|
37570
37652
|
roasAverageFloor:
|
|
37571
37653
|
type: number
|
|
37572
37654
|
description: |
|
|
@@ -40008,18 +40090,27 @@ paths:
|
|
|
40008
40090
|
as `targeting_automation`.
|
|
40009
40091
|
bidStrategy:
|
|
40010
40092
|
allOf: [{ $ref: '#/components/schemas/BidStrategy' }]
|
|
40093
|
+
deprecated: true
|
|
40011
40094
|
description: |
|
|
40095
|
+
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.
|
|
40096
|
+
|
|
40012
40097
|
Meta bid strategy applied to the ad set. On TikTok, mapped to
|
|
40013
40098
|
`bid_type` / `bid_price` / `deep_bid_type` automatically.
|
|
40014
40099
|
bidAmount:
|
|
40015
40100
|
type: number
|
|
40101
|
+
deprecated: true
|
|
40016
40102
|
description: |
|
|
40103
|
+
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.
|
|
40104
|
+
|
|
40017
40105
|
Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when
|
|
40018
40106
|
`bidStrategy` is `LOWEST_COST_WITH_BID_CAP` or `COST_CAP`. Backward-compat: providing
|
|
40019
40107
|
`bidAmount` without `bidStrategy` is treated as `LOWEST_COST_WITH_BID_CAP`.
|
|
40020
40108
|
roasAverageFloor:
|
|
40021
40109
|
type: number
|
|
40110
|
+
deprecated: true
|
|
40022
40111
|
description: |
|
|
40112
|
+
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.
|
|
40113
|
+
|
|
40023
40114
|
Minimum ROAS as a decimal multiplier (e.g. 2.0 = 2.0x ROAS). Required when
|
|
40024
40115
|
`bidStrategy` is `LOWEST_COST_WITH_MIN_ROAS`. Sent to Meta as
|
|
40025
40116
|
`bid_constraints.roas_average_floor` × 10000 (Meta uses fixed-point integers).
|
|
@@ -40027,10 +40118,16 @@ paths:
|
|
|
40027
40118
|
description: |
|
|
40028
40119
|
Platform-specific options. The platform is derived from `accountId`;
|
|
40029
40120
|
sending options for a different platform returns a 400. LinkedIn
|
|
40030
|
-
(campaign bidding and delivery controls)
|
|
40031
|
-
options today.
|
|
40121
|
+
(campaign bidding and delivery controls) and Meta (the bid trio)
|
|
40122
|
+
have options today.
|
|
40123
|
+
|
|
40124
|
+
**Meta**: `bidStrategy`, `bidAmount` and `roasAverageFloor` may be
|
|
40125
|
+
sent here instead of at the root — the preferred home going forward.
|
|
40126
|
+
Sending the bid fields in BOTH places returns a 400
|
|
40127
|
+
(`mutually_exclusive_fields`).
|
|
40032
40128
|
oneOf:
|
|
40033
40129
|
- $ref: '#/components/schemas/LinkedInAdsPlatformData'
|
|
40130
|
+
- $ref: '#/components/schemas/MetaAdsPlatformData'
|
|
40034
40131
|
tracking:
|
|
40035
40132
|
type: object
|
|
40036
40133
|
description: "Meta only. Tracking specs (pixel, URL tags)."
|
|
@@ -40799,18 +40896,38 @@ paths:
|
|
|
40799
40896
|
gender: { type: string, enum: [all, male, female], default: all, description: "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." }
|
|
40800
40897
|
bidStrategy:
|
|
40801
40898
|
allOf: [{ $ref: '#/components/schemas/BidStrategy' }]
|
|
40802
|
-
|
|
40899
|
+
deprecated: true
|
|
40900
|
+
description: |
|
|
40901
|
+
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.
|
|
40902
|
+
|
|
40903
|
+
Meta bid strategy applied to the ad set.
|
|
40803
40904
|
bidAmount:
|
|
40804
40905
|
type: number
|
|
40906
|
+
deprecated: true
|
|
40805
40907
|
description: |
|
|
40908
|
+
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.
|
|
40909
|
+
|
|
40806
40910
|
Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when
|
|
40807
|
-
`bidStrategy` is `LOWEST_COST_WITH_BID_CAP` or `COST_CAP`.
|
|
40911
|
+
`bidStrategy` is `LOWEST_COST_WITH_BID_CAP` or `COST_CAP`. Meta only: sending
|
|
40912
|
+
`bidAmount` WITHOUT `bidStrategy` requires `existingCampaignId` (400 otherwise),
|
|
40913
|
+
and sets the new ad set's cap under the joined campaign's COST_CAP /
|
|
40914
|
+
LOWEST_COST_WITH_BID_CAP parent. The strategy itself is inherited from the
|
|
40915
|
+
campaign. Restating bidStrategy here is accepted but has no effect on the ad set.
|
|
40916
|
+
|
|
40917
|
+
Rejected with 400 in `adSetId` attach mode: that shape inherits its cap from
|
|
40918
|
+
the platform. Use `PUT /v1/ads/ad-sets/{adSetId}` there instead.
|
|
40808
40919
|
roasAverageFloor:
|
|
40809
40920
|
type: number
|
|
40921
|
+
deprecated: true
|
|
40810
40922
|
description: |
|
|
40923
|
+
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.
|
|
40924
|
+
|
|
40811
40925
|
Minimum ROAS as a decimal multiplier (e.g. 2.0 = 2.0x ROAS). Required when
|
|
40812
|
-
`bidStrategy` is `LOWEST_COST_WITH_MIN_ROAS`.
|
|
40813
|
-
|
|
40926
|
+
`bidStrategy` is `LOWEST_COST_WITH_MIN_ROAS`. Sending it without `bidStrategy`
|
|
40927
|
+
is a 400. Sent to Meta as
|
|
40928
|
+
`bid_constraints.roas_average_floor` × 10000. Known gap: a CBO campaign's
|
|
40929
|
+
ROAS floor lives on the campaign only (set via `POST /v1/ads/campaigns`);
|
|
40930
|
+
there is no supported way to set it while joining a CBO campaign here.
|
|
40814
40931
|
valueRuleSetId:
|
|
40815
40932
|
type: string
|
|
40816
40933
|
pattern: '^\d+$'
|
|
@@ -40840,10 +40957,17 @@ paths:
|
|
|
40840
40957
|
description: |
|
|
40841
40958
|
Platform-specific options. The platform is derived from `accountId`;
|
|
40842
40959
|
sending options for a different platform returns a 400. LinkedIn
|
|
40843
|
-
(campaign bidding and delivery controls)
|
|
40844
|
-
options today.
|
|
40960
|
+
(campaign bidding and delivery controls) and Meta (the bid trio)
|
|
40961
|
+
have options today.
|
|
40962
|
+
|
|
40963
|
+
**Meta**: `bidStrategy`, `bidAmount` and `roasAverageFloor` may be
|
|
40964
|
+
sent here instead of at the root — the preferred home going forward.
|
|
40965
|
+
Sending the bid fields in BOTH places returns a 400
|
|
40966
|
+
(`mutually_exclusive_fields`), and sending any of them in
|
|
40967
|
+
`adSetId` attach mode is a 400 too (the ad set already has its bid).
|
|
40845
40968
|
oneOf:
|
|
40846
40969
|
- $ref: '#/components/schemas/LinkedInAdsPlatformData'
|
|
40970
|
+
- $ref: '#/components/schemas/MetaAdsPlatformData'
|
|
40847
40971
|
dsaBeneficiary:
|
|
40848
40972
|
type: string
|
|
40849
40973
|
maxLength: 100
|
|
@@ -329,7 +329,7 @@ describe 'AdCampaignsApi' do
|
|
|
329
329
|
|
|
330
330
|
# unit tests for update_ad_set
|
|
331
331
|
# Update an ad set
|
|
332
|
-
# 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.
|
|
332
|
+
# 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.
|
|
333
333
|
# @param ad_set_id Platform ad set ID
|
|
334
334
|
# @param update_ad_set_request
|
|
335
335
|
# @param [Hash] opts the optional parameters
|
|
@@ -98,6 +98,24 @@ describe 'AdInsightsApi' do
|
|
|
98
98
|
end
|
|
99
99
|
end
|
|
100
100
|
|
|
101
|
+
# unit tests for get_ads_search_terms
|
|
102
|
+
# Google Ads search terms report
|
|
103
|
+
# 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.
|
|
104
|
+
# @param account_id Google ads SocialAccount id.
|
|
105
|
+
# @param [Hash] opts the optional parameters
|
|
106
|
+
# @option opts [String] :customer_id Numeric Google Ads customer id (no dashes). Defaults to the account's connected customer.
|
|
107
|
+
# @option opts [Date] :from_date Defaults to 30 days ago.
|
|
108
|
+
# @option opts [Date] :to_date Defaults to today.
|
|
109
|
+
# @option opts [String] :campaign_id Numeric Google campaign id filter.
|
|
110
|
+
# @option opts [String] :ad_group_id Numeric Google ad group id filter.
|
|
111
|
+
# @option opts [String] :page_token Cursor from paging.nextPageToken of the previous page.
|
|
112
|
+
# @return [GetAdsSearchTerms200Response]
|
|
113
|
+
describe 'get_ads_search_terms test' do
|
|
114
|
+
it 'should work' do
|
|
115
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
101
119
|
# unit tests for get_campaign_analytics
|
|
102
120
|
# Get campaign analytics
|
|
103
121
|
# 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.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
#Zernio API
|
|
3
|
+
|
|
4
|
+
#API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api
|
|
5
|
+
|
|
6
|
+
The version of the OpenAPI document: 1.0.4
|
|
7
|
+
Contact: support@zernio.com
|
|
8
|
+
Generated by: https://openapi-generator.tech
|
|
9
|
+
Generator version: 7.19.0
|
|
10
|
+
|
|
11
|
+
=end
|
|
12
|
+
|
|
13
|
+
require 'spec_helper'
|
|
14
|
+
require 'json'
|
|
15
|
+
require 'date'
|
|
16
|
+
|
|
17
|
+
# Unit tests for Zernio::BoostPostRequestPlatformSpecificData
|
|
18
|
+
# Automatically generated by openapi-generator (https://openapi-generator.tech)
|
|
19
|
+
# Please update as you see appropriate
|
|
20
|
+
describe Zernio::BoostPostRequestPlatformSpecificData do
|
|
21
|
+
describe '.openapi_one_of' do
|
|
22
|
+
it 'lists the items referenced in the oneOf array' do
|
|
23
|
+
expect(described_class.openapi_one_of).to_not be_empty
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe '.build' do
|
|
28
|
+
it 'returns the correct model' do
|
|
29
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
#Zernio API
|
|
3
|
+
|
|
4
|
+
#API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api
|
|
5
|
+
|
|
6
|
+
The version of the OpenAPI document: 1.0.4
|
|
7
|
+
Contact: support@zernio.com
|
|
8
|
+
Generated by: https://openapi-generator.tech
|
|
9
|
+
Generator version: 7.19.0
|
|
10
|
+
|
|
11
|
+
=end
|
|
12
|
+
|
|
13
|
+
require 'spec_helper'
|
|
14
|
+
require 'json'
|
|
15
|
+
require 'date'
|
|
16
|
+
|
|
17
|
+
# Unit tests for Zernio::CreateStandaloneAdRequestPlatformSpecificData
|
|
18
|
+
# Automatically generated by openapi-generator (https://openapi-generator.tech)
|
|
19
|
+
# Please update as you see appropriate
|
|
20
|
+
describe Zernio::CreateStandaloneAdRequestPlatformSpecificData do
|
|
21
|
+
describe '.openapi_one_of' do
|
|
22
|
+
it 'lists the items referenced in the oneOf array' do
|
|
23
|
+
expect(described_class.openapi_one_of).to_not be_empty
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe '.build' do
|
|
28
|
+
it 'returns the correct model' do
|
|
29
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
#Zernio API
|
|
3
|
+
|
|
4
|
+
#API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api
|
|
5
|
+
|
|
6
|
+
The version of the OpenAPI document: 1.0.4
|
|
7
|
+
Contact: support@zernio.com
|
|
8
|
+
Generated by: https://openapi-generator.tech
|
|
9
|
+
Generator version: 7.19.0
|
|
10
|
+
|
|
11
|
+
=end
|
|
12
|
+
|
|
13
|
+
require 'spec_helper'
|
|
14
|
+
require 'json'
|
|
15
|
+
require 'date'
|
|
16
|
+
|
|
17
|
+
# Unit tests for Zernio::GetAdsSearchTerms200ResponseDataInner
|
|
18
|
+
# Automatically generated by openapi-generator (https://openapi-generator.tech)
|
|
19
|
+
# Please update as you see appropriate
|
|
20
|
+
describe Zernio::GetAdsSearchTerms200ResponseDataInner do
|
|
21
|
+
#let(:instance) { Zernio::GetAdsSearchTerms200ResponseDataInner.new }
|
|
22
|
+
|
|
23
|
+
describe 'test an instance of GetAdsSearchTerms200ResponseDataInner' do
|
|
24
|
+
it 'should create an instance of GetAdsSearchTerms200ResponseDataInner' do
|
|
25
|
+
# uncomment below to test the instance creation
|
|
26
|
+
#expect(instance).to be_instance_of(Zernio::GetAdsSearchTerms200ResponseDataInner)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe 'test attribute "search_term"' do
|
|
31
|
+
it 'should work' do
|
|
32
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe 'test attribute "status"' do
|
|
37
|
+
it 'should work' do
|
|
38
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
describe 'test attribute "match_type"' do
|
|
43
|
+
it 'should work' do
|
|
44
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
describe 'test attribute "campaign_id"' do
|
|
49
|
+
it 'should work' do
|
|
50
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
describe 'test attribute "campaign_name"' do
|
|
55
|
+
it 'should work' do
|
|
56
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe 'test attribute "ad_group_id"' do
|
|
61
|
+
it 'should work' do
|
|
62
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
describe 'test attribute "ad_group_name"' do
|
|
67
|
+
it 'should work' do
|
|
68
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
describe 'test attribute "impressions"' do
|
|
73
|
+
it 'should work' do
|
|
74
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
describe 'test attribute "clicks"' do
|
|
79
|
+
it 'should work' do
|
|
80
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
describe 'test attribute "cost_micros"' do
|
|
85
|
+
it 'should work' do
|
|
86
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
describe 'test attribute "conversions"' do
|
|
91
|
+
it 'should work' do
|
|
92
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
describe 'test attribute "conversions_value"' do
|
|
97
|
+
it 'should work' do
|
|
98
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
#Zernio API
|
|
3
|
+
|
|
4
|
+
#API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api
|
|
5
|
+
|
|
6
|
+
The version of the OpenAPI document: 1.0.4
|
|
7
|
+
Contact: support@zernio.com
|
|
8
|
+
Generated by: https://openapi-generator.tech
|
|
9
|
+
Generator version: 7.19.0
|
|
10
|
+
|
|
11
|
+
=end
|
|
12
|
+
|
|
13
|
+
require 'spec_helper'
|
|
14
|
+
require 'json'
|
|
15
|
+
require 'date'
|
|
16
|
+
|
|
17
|
+
# Unit tests for Zernio::GetAdsSearchTerms200ResponsePaging
|
|
18
|
+
# Automatically generated by openapi-generator (https://openapi-generator.tech)
|
|
19
|
+
# Please update as you see appropriate
|
|
20
|
+
describe Zernio::GetAdsSearchTerms200ResponsePaging do
|
|
21
|
+
#let(:instance) { Zernio::GetAdsSearchTerms200ResponsePaging.new }
|
|
22
|
+
|
|
23
|
+
describe 'test an instance of GetAdsSearchTerms200ResponsePaging' do
|
|
24
|
+
it 'should create an instance of GetAdsSearchTerms200ResponsePaging' do
|
|
25
|
+
# uncomment below to test the instance creation
|
|
26
|
+
#expect(instance).to be_instance_of(Zernio::GetAdsSearchTerms200ResponsePaging)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe 'test attribute "next_page_token"' do
|
|
31
|
+
it 'should work' do
|
|
32
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
#Zernio API
|
|
3
|
+
|
|
4
|
+
#API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api
|
|
5
|
+
|
|
6
|
+
The version of the OpenAPI document: 1.0.4
|
|
7
|
+
Contact: support@zernio.com
|
|
8
|
+
Generated by: https://openapi-generator.tech
|
|
9
|
+
Generator version: 7.19.0
|
|
10
|
+
|
|
11
|
+
=end
|
|
12
|
+
|
|
13
|
+
require 'spec_helper'
|
|
14
|
+
require 'json'
|
|
15
|
+
require 'date'
|
|
16
|
+
|
|
17
|
+
# Unit tests for Zernio::GetAdsSearchTerms200Response
|
|
18
|
+
# Automatically generated by openapi-generator (https://openapi-generator.tech)
|
|
19
|
+
# Please update as you see appropriate
|
|
20
|
+
describe Zernio::GetAdsSearchTerms200Response do
|
|
21
|
+
#let(:instance) { Zernio::GetAdsSearchTerms200Response.new }
|
|
22
|
+
|
|
23
|
+
describe 'test an instance of GetAdsSearchTerms200Response' do
|
|
24
|
+
it 'should create an instance of GetAdsSearchTerms200Response' do
|
|
25
|
+
# uncomment below to test the instance creation
|
|
26
|
+
#expect(instance).to be_instance_of(Zernio::GetAdsSearchTerms200Response)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe 'test attribute "customer_id"' do
|
|
31
|
+
it 'should work' do
|
|
32
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe 'test attribute "data"' do
|
|
37
|
+
it 'should work' do
|
|
38
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
describe 'test attribute "paging"' do
|
|
43
|
+
it 'should work' do
|
|
44
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
#Zernio API
|
|
3
|
+
|
|
4
|
+
#API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api
|
|
5
|
+
|
|
6
|
+
The version of the OpenAPI document: 1.0.4
|
|
7
|
+
Contact: support@zernio.com
|
|
8
|
+
Generated by: https://openapi-generator.tech
|
|
9
|
+
Generator version: 7.19.0
|
|
10
|
+
|
|
11
|
+
=end
|
|
12
|
+
|
|
13
|
+
require 'spec_helper'
|
|
14
|
+
require 'json'
|
|
15
|
+
require 'date'
|
|
16
|
+
|
|
17
|
+
# Unit tests for Zernio::MetaAdsPlatformData
|
|
18
|
+
# Automatically generated by openapi-generator (https://openapi-generator.tech)
|
|
19
|
+
# Please update as you see appropriate
|
|
20
|
+
describe Zernio::MetaAdsPlatformData do
|
|
21
|
+
#let(:instance) { Zernio::MetaAdsPlatformData.new }
|
|
22
|
+
|
|
23
|
+
describe 'test an instance of MetaAdsPlatformData' do
|
|
24
|
+
it 'should create an instance of MetaAdsPlatformData' do
|
|
25
|
+
# uncomment below to test the instance creation
|
|
26
|
+
#expect(instance).to be_instance_of(Zernio::MetaAdsPlatformData)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe 'test attribute "bid_strategy"' do
|
|
31
|
+
it 'should work' do
|
|
32
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe 'test attribute "bid_amount"' do
|
|
37
|
+
it 'should work' do
|
|
38
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
describe 'test attribute "roas_average_floor"' do
|
|
43
|
+
it 'should work' do
|
|
44
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
|
@@ -39,4 +39,22 @@ describe Zernio::WebhookPayloadCommentPost do
|
|
|
39
39
|
end
|
|
40
40
|
end
|
|
41
41
|
|
|
42
|
+
describe 'test attribute "content"' do
|
|
43
|
+
it 'should work' do
|
|
44
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
describe 'test attribute "image_url"' do
|
|
49
|
+
it 'should work' do
|
|
50
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
describe 'test attribute "permalink"' do
|
|
55
|
+
it 'should work' do
|
|
56
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
42
60
|
end
|
|
Binary file
|