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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -0
  3. data/docs/AdCampaignsApi.md +1 -1
  4. data/docs/AdInsightsApi.md +84 -0
  5. data/docs/BoostPostRequest.md +4 -4
  6. data/docs/BoostPostRequestPlatformSpecificData.md +49 -0
  7. data/docs/CreateAdCampaignRequest.md +1 -1
  8. data/docs/CreateStandaloneAdRequest.md +4 -4
  9. data/docs/CreateStandaloneAdRequestPlatformSpecificData.md +49 -0
  10. data/docs/GetAdsSearchTerms200Response.md +22 -0
  11. data/docs/GetAdsSearchTerms200ResponseDataInner.md +40 -0
  12. data/docs/GetAdsSearchTerms200ResponsePaging.md +18 -0
  13. data/docs/MetaAdsPlatformData.md +22 -0
  14. data/docs/UpdateAdSetRequest.md +1 -1
  15. data/docs/WebhookPayloadCommentPost.md +7 -1
  16. data/lib/zernio-sdk/api/ad_campaigns_api.rb +2 -2
  17. data/lib/zernio-sdk/api/ad_insights_api.rb +82 -0
  18. data/lib/zernio-sdk/models/boost_post_request.rb +4 -4
  19. data/lib/zernio-sdk/models/boost_post_request_platform_specific_data.rb +105 -0
  20. data/lib/zernio-sdk/models/create_ad_campaign_request.rb +1 -1
  21. data/lib/zernio-sdk/models/create_standalone_ad_request.rb +4 -4
  22. data/lib/zernio-sdk/models/create_standalone_ad_request_platform_specific_data.rb +105 -0
  23. data/lib/zernio-sdk/models/get_ads_search_terms200_response.rb +167 -0
  24. data/lib/zernio-sdk/models/get_ads_search_terms200_response_data_inner.rb +256 -0
  25. data/lib/zernio-sdk/models/get_ads_search_terms200_response_paging.rb +149 -0
  26. data/lib/zernio-sdk/models/meta_ads_platform_data.rb +190 -0
  27. data/lib/zernio-sdk/models/update_ad_set_request.rb +1 -1
  28. data/lib/zernio-sdk/models/webhook_payload_comment_post.rb +43 -4
  29. data/lib/zernio-sdk/version.rb +1 -1
  30. data/lib/zernio-sdk.rb +6 -0
  31. data/openapi.yaml +135 -11
  32. data/spec/api/ad_campaigns_api_spec.rb +1 -1
  33. data/spec/api/ad_insights_api_spec.rb +18 -0
  34. data/spec/models/boost_post_request_platform_specific_data_spec.rb +32 -0
  35. data/spec/models/create_standalone_ad_request_platform_specific_data_spec.rb +32 -0
  36. data/spec/models/get_ads_search_terms200_response_data_inner_spec.rb +102 -0
  37. data/spec/models/get_ads_search_terms200_response_paging_spec.rb +36 -0
  38. data/spec/models/get_ads_search_terms200_response_spec.rb +48 -0
  39. data/spec/models/meta_ads_platform_data_spec.rb +48 -0
  40. data/spec/models/webhook_payload_comment_post_spec.rb +18 -0
  41. data/zernio-sdk-0.0.709.gem +0 -0
  42. metadata +26 -2
  43. 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) is the only platform with
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
- description: "Meta bid strategy applied to the ad set."
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`. Sent to Meta as
40813
- `bid_constraints.roas_average_floor` × 10000.
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) is the only platform with
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