late-sdk 0.0.707 → 0.0.708

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 (33) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -0
  3. data/docs/AdInsightsApi.md +84 -0
  4. data/docs/BoostPostRequest.md +4 -4
  5. data/docs/BoostPostRequestPlatformSpecificData.md +49 -0
  6. data/docs/CreateStandaloneAdRequest.md +4 -4
  7. data/docs/GetAdsSearchTerms200Response.md +22 -0
  8. data/docs/GetAdsSearchTerms200ResponseDataInner.md +40 -0
  9. data/docs/GetAdsSearchTerms200ResponsePaging.md +18 -0
  10. data/docs/MetaAdsPlatformData.md +22 -0
  11. data/docs/WebhookPayloadCommentPost.md +7 -1
  12. data/lib/zernio-sdk/api/ad_insights_api.rb +82 -0
  13. data/lib/zernio-sdk/models/boost_post_request.rb +4 -4
  14. data/lib/zernio-sdk/models/boost_post_request_platform_specific_data.rb +105 -0
  15. data/lib/zernio-sdk/models/create_standalone_ad_request.rb +4 -4
  16. data/lib/zernio-sdk/models/get_ads_search_terms200_response.rb +167 -0
  17. data/lib/zernio-sdk/models/get_ads_search_terms200_response_data_inner.rb +256 -0
  18. data/lib/zernio-sdk/models/get_ads_search_terms200_response_paging.rb +149 -0
  19. data/lib/zernio-sdk/models/meta_ads_platform_data.rb +190 -0
  20. data/lib/zernio-sdk/models/webhook_payload_comment_post.rb +43 -4
  21. data/lib/zernio-sdk/version.rb +1 -1
  22. data/lib/zernio-sdk.rb +5 -0
  23. data/openapi.yaml +112 -6
  24. data/spec/api/ad_insights_api_spec.rb +18 -0
  25. data/spec/models/boost_post_request_platform_specific_data_spec.rb +32 -0
  26. data/spec/models/get_ads_search_terms200_response_data_inner_spec.rb +102 -0
  27. data/spec/models/get_ads_search_terms200_response_paging_spec.rb +36 -0
  28. data/spec/models/get_ads_search_terms200_response_spec.rb +48 -0
  29. data/spec/models/meta_ads_platform_data_spec.rb +48 -0
  30. data/spec/models/webhook_payload_comment_post_spec.rb +18 -0
  31. data/zernio-sdk-0.0.708.gem +0 -0
  32. metadata +22 -2
  33. data/zernio-sdk-0.0.707.gem +0 -0
@@ -0,0 +1,190 @@
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 'date'
14
+ require 'time'
15
+
16
+ module Zernio
17
+ # Meta (facebook/instagram) options for platformSpecificData on POST /v1/ads/boost and /v1/ads/create. Unknown keys are rejected, not dropped.
18
+ class MetaAdsPlatformData < ApiModelBase
19
+ attr_accessor :bid_strategy
20
+
21
+ # Whole currency units (USD: 5 = $5.00). Required when bidStrategy is LOWEST_COST_WITH_BID_CAP or COST_CAP.
22
+ attr_accessor :bid_amount
23
+
24
+ # Decimal ROAS multiplier (2.0 = 2.0x). Required when bidStrategy is LOWEST_COST_WITH_MIN_ROAS.
25
+ attr_accessor :roas_average_floor
26
+
27
+ class EnumAttributeValidator
28
+ attr_reader :datatype
29
+ attr_reader :allowable_values
30
+
31
+ def initialize(datatype, allowable_values)
32
+ @allowable_values = allowable_values.map do |value|
33
+ case datatype.to_s
34
+ when /Integer/i
35
+ value.to_i
36
+ when /Float/i
37
+ value.to_f
38
+ else
39
+ value
40
+ end
41
+ end
42
+ end
43
+
44
+ def valid?(value)
45
+ !value || allowable_values.include?(value)
46
+ end
47
+ end
48
+
49
+ # Attribute mapping from ruby-style variable name to JSON key.
50
+ def self.attribute_map
51
+ {
52
+ :'bid_strategy' => :'bidStrategy',
53
+ :'bid_amount' => :'bidAmount',
54
+ :'roas_average_floor' => :'roasAverageFloor'
55
+ }
56
+ end
57
+
58
+ # Returns attribute mapping this model knows about
59
+ def self.acceptable_attribute_map
60
+ attribute_map
61
+ end
62
+
63
+ # Returns all the JSON keys this model knows about
64
+ def self.acceptable_attributes
65
+ acceptable_attribute_map.values
66
+ end
67
+
68
+ # Attribute type mapping.
69
+ def self.openapi_types
70
+ {
71
+ :'bid_strategy' => :'BidStrategy',
72
+ :'bid_amount' => :'Float',
73
+ :'roas_average_floor' => :'Float'
74
+ }
75
+ end
76
+
77
+ # List of attributes with nullable: true
78
+ def self.openapi_nullable
79
+ Set.new([
80
+ ])
81
+ end
82
+
83
+ # Initializes the object
84
+ # @param [Hash] attributes Model attributes in the form of hash
85
+ def initialize(attributes = {})
86
+ if (!attributes.is_a?(Hash))
87
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Zernio::MetaAdsPlatformData` initialize method"
88
+ end
89
+
90
+ # check to see if the attribute exists and convert string to symbol for hash key
91
+ acceptable_attribute_map = self.class.acceptable_attribute_map
92
+ attributes = attributes.each_with_object({}) { |(k, v), h|
93
+ if (!acceptable_attribute_map.key?(k.to_sym))
94
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Zernio::MetaAdsPlatformData`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
95
+ end
96
+ h[k.to_sym] = v
97
+ }
98
+
99
+ if attributes.key?(:'bid_strategy')
100
+ self.bid_strategy = attributes[:'bid_strategy']
101
+ end
102
+
103
+ if attributes.key?(:'bid_amount')
104
+ self.bid_amount = attributes[:'bid_amount']
105
+ end
106
+
107
+ if attributes.key?(:'roas_average_floor')
108
+ self.roas_average_floor = attributes[:'roas_average_floor']
109
+ end
110
+ end
111
+
112
+ # Show invalid properties with the reasons. Usually used together with valid?
113
+ # @return Array for valid properties with the reasons
114
+ def list_invalid_properties
115
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
116
+ invalid_properties = Array.new
117
+ invalid_properties
118
+ end
119
+
120
+ # Check to see if the all the properties in the model are valid
121
+ # @return true if the model is valid
122
+ def valid?
123
+ warn '[DEPRECATED] the `valid?` method is obsolete'
124
+ true
125
+ end
126
+
127
+ # Checks equality by comparing each attribute.
128
+ # @param [Object] Object to be compared
129
+ def ==(o)
130
+ return true if self.equal?(o)
131
+ self.class == o.class &&
132
+ bid_strategy == o.bid_strategy &&
133
+ bid_amount == o.bid_amount &&
134
+ roas_average_floor == o.roas_average_floor
135
+ end
136
+
137
+ # @see the `==` method
138
+ # @param [Object] Object to be compared
139
+ def eql?(o)
140
+ self == o
141
+ end
142
+
143
+ # Calculates hash code according to all attributes.
144
+ # @return [Integer] Hash code
145
+ def hash
146
+ [bid_strategy, bid_amount, roas_average_floor].hash
147
+ end
148
+
149
+ # Builds the object from hash
150
+ # @param [Hash] attributes Model attributes in the form of hash
151
+ # @return [Object] Returns the model itself
152
+ def self.build_from_hash(attributes)
153
+ return nil unless attributes.is_a?(Hash)
154
+ attributes = attributes.transform_keys(&:to_sym)
155
+ transformed_hash = {}
156
+ openapi_types.each_pair do |key, type|
157
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
158
+ transformed_hash["#{key}"] = nil
159
+ elsif type =~ /\AArray<(.*)>/i
160
+ # check to ensure the input is an array given that the attribute
161
+ # is documented as an array but the input is not
162
+ if attributes[attribute_map[key]].is_a?(Array)
163
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
164
+ end
165
+ elsif !attributes[attribute_map[key]].nil?
166
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
167
+ end
168
+ end
169
+ new(transformed_hash)
170
+ end
171
+
172
+ # Returns the object in the form of hash
173
+ # @return [Hash] Returns the object in the form of hash
174
+ def to_hash
175
+ hash = {}
176
+ self.class.attribute_map.each_pair do |attr, param|
177
+ value = self.send(attr)
178
+ if value.nil?
179
+ is_nullable = self.class.openapi_nullable.include?(attr)
180
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
181
+ end
182
+
183
+ hash[param] = _to_hash(value)
184
+ end
185
+ hash
186
+ end
187
+
188
+ end
189
+
190
+ end
@@ -21,11 +21,23 @@ module Zernio
21
21
  # Platform's post ID
22
22
  attr_accessor :platform_post_id
23
23
 
24
+ # Post text, from our synced copy — no platform call is made on the comment path, so null when the post was never synced.
25
+ attr_accessor :content
26
+
27
+ # Post thumbnail or first media item URL. Platform CDN URLs expire, fetch promptly.
28
+ attr_accessor :image_url
29
+
30
+ # Public URL of the post. Null for posts published through Zernio that were never re-synced.
31
+ attr_accessor :permalink
32
+
24
33
  # Attribute mapping from ruby-style variable name to JSON key.
25
34
  def self.attribute_map
26
35
  {
27
36
  :'id' => :'id',
28
- :'platform_post_id' => :'platformPostId'
37
+ :'platform_post_id' => :'platformPostId',
38
+ :'content' => :'content',
39
+ :'image_url' => :'imageUrl',
40
+ :'permalink' => :'permalink'
29
41
  }
30
42
  end
31
43
 
@@ -43,7 +55,10 @@ module Zernio
43
55
  def self.openapi_types
44
56
  {
45
57
  :'id' => :'String',
46
- :'platform_post_id' => :'String'
58
+ :'platform_post_id' => :'String',
59
+ :'content' => :'String',
60
+ :'image_url' => :'String',
61
+ :'permalink' => :'String'
47
62
  }
48
63
  end
49
64
 
@@ -51,6 +66,9 @@ module Zernio
51
66
  def self.openapi_nullable
52
67
  Set.new([
53
68
  :'id',
69
+ :'content',
70
+ :'image_url',
71
+ :'permalink'
54
72
  ])
55
73
  end
56
74
 
@@ -81,6 +99,24 @@ module Zernio
81
99
  else
82
100
  self.platform_post_id = nil
83
101
  end
102
+
103
+ if attributes.key?(:'content')
104
+ self.content = attributes[:'content']
105
+ else
106
+ self.content = nil
107
+ end
108
+
109
+ if attributes.key?(:'image_url')
110
+ self.image_url = attributes[:'image_url']
111
+ else
112
+ self.image_url = nil
113
+ end
114
+
115
+ if attributes.key?(:'permalink')
116
+ self.permalink = attributes[:'permalink']
117
+ else
118
+ self.permalink = nil
119
+ end
84
120
  end
85
121
 
86
122
  # Show invalid properties with the reasons. Usually used together with valid?
@@ -119,7 +155,10 @@ module Zernio
119
155
  return true if self.equal?(o)
120
156
  self.class == o.class &&
121
157
  id == o.id &&
122
- platform_post_id == o.platform_post_id
158
+ platform_post_id == o.platform_post_id &&
159
+ content == o.content &&
160
+ image_url == o.image_url &&
161
+ permalink == o.permalink
123
162
  end
124
163
 
125
164
  # @see the `==` method
@@ -131,7 +170,7 @@ module Zernio
131
170
  # Calculates hash code according to all attributes.
132
171
  # @return [Integer] Hash code
133
172
  def hash
134
- [id, platform_post_id].hash
173
+ [id, platform_post_id, content, image_url, permalink].hash
135
174
  end
136
175
 
137
176
  # Builds the object from hash
@@ -11,5 +11,5 @@ Generator version: 7.19.0
11
11
  =end
12
12
 
13
13
  module Zernio
14
- VERSION = '0.0.707'
14
+ VERSION = '0.0.708'
15
15
  end
data/lib/zernio-sdk.rb CHANGED
@@ -100,6 +100,7 @@ require 'zernio-sdk/models/bookmark_post200_response'
100
100
  require 'zernio-sdk/models/bookmark_post_request'
101
101
  require 'zernio-sdk/models/boost_post_request'
102
102
  require 'zernio-sdk/models/boost_post_request_budget'
103
+ require 'zernio-sdk/models/boost_post_request_platform_specific_data'
103
104
  require 'zernio-sdk/models/boost_post_request_schedule'
104
105
  require 'zernio-sdk/models/boost_post_request_targeting'
105
106
  require 'zernio-sdk/models/boost_post_request_targeting_cities_inner'
@@ -462,6 +463,9 @@ require 'zernio-sdk/models/get_ad_tracking_tags200_response'
462
463
  require 'zernio-sdk/models/get_ad_tree200_response'
463
464
  require 'zernio-sdk/models/get_ads_activity_log200_response'
464
465
  require 'zernio-sdk/models/get_ads_activity_log200_response_paging'
466
+ require 'zernio-sdk/models/get_ads_search_terms200_response'
467
+ require 'zernio-sdk/models/get_ads_search_terms200_response_data_inner'
468
+ require 'zernio-sdk/models/get_ads_search_terms200_response_paging'
465
469
  require 'zernio-sdk/models/get_ads_timeline200_response'
466
470
  require 'zernio-sdk/models/get_ads_timeline200_response_rows_inner'
467
471
  require 'zernio-sdk/models/get_all_accounts_health200_response'
@@ -999,6 +1003,7 @@ require 'zernio-sdk/models/lookup_sms_number200_response'
999
1003
  require 'zernio-sdk/models/mark_conversation_read200_response'
1000
1004
  require 'zernio-sdk/models/media_item'
1001
1005
  require 'zernio-sdk/models/media_upload_response'
1006
+ require 'zernio-sdk/models/meta_ads_platform_data'
1002
1007
  require 'zernio-sdk/models/meta_lead_form_platform_data'
1003
1008
  require 'zernio-sdk/models/meta_lead_form_platform_data_context_card'
1004
1009
  require 'zernio-sdk/models/money'
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." }
4936
+ roasAverageFloor: { type: number, description: "Decimal ROAS multiplier (2.0 = 2.0x). Required when bidStrategy is LOWEST_COST_WITH_MIN_ROAS." }
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"
@@ -40008,18 +40083,27 @@ paths:
40008
40083
  as `targeting_automation`.
40009
40084
  bidStrategy:
40010
40085
  allOf: [{ $ref: '#/components/schemas/BidStrategy' }]
40086
+ deprecated: true
40011
40087
  description: |
40088
+ 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.
40089
+
40012
40090
  Meta bid strategy applied to the ad set. On TikTok, mapped to
40013
40091
  `bid_type` / `bid_price` / `deep_bid_type` automatically.
40014
40092
  bidAmount:
40015
40093
  type: number
40094
+ deprecated: true
40016
40095
  description: |
40096
+ 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.
40097
+
40017
40098
  Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when
40018
40099
  `bidStrategy` is `LOWEST_COST_WITH_BID_CAP` or `COST_CAP`. Backward-compat: providing
40019
40100
  `bidAmount` without `bidStrategy` is treated as `LOWEST_COST_WITH_BID_CAP`.
40020
40101
  roasAverageFloor:
40021
40102
  type: number
40103
+ deprecated: true
40022
40104
  description: |
40105
+ 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.
40106
+
40023
40107
  Minimum ROAS as a decimal multiplier (e.g. 2.0 = 2.0x ROAS). Required when
40024
40108
  `bidStrategy` is `LOWEST_COST_WITH_MIN_ROAS`. Sent to Meta as
40025
40109
  `bid_constraints.roas_average_floor` × 10000 (Meta uses fixed-point integers).
@@ -40027,10 +40111,16 @@ paths:
40027
40111
  description: |
40028
40112
  Platform-specific options. The platform is derived from `accountId`;
40029
40113
  sending options for a different platform returns a 400. LinkedIn
40030
- (campaign bidding and delivery controls) is the only platform with
40031
- options today.
40114
+ (campaign bidding and delivery controls) and Meta (the bid trio)
40115
+ have options today.
40116
+
40117
+ **Meta**: `bidStrategy`, `bidAmount` and `roasAverageFloor` may be
40118
+ sent here instead of at the root — the preferred home going forward.
40119
+ Sending the bid fields in BOTH places returns a 400
40120
+ (`mutually_exclusive_fields`).
40032
40121
  oneOf:
40033
40122
  - $ref: '#/components/schemas/LinkedInAdsPlatformData'
40123
+ - $ref: '#/components/schemas/MetaAdsPlatformData'
40034
40124
  tracking:
40035
40125
  type: object
40036
40126
  description: "Meta only. Tracking specs (pixel, URL tags)."
@@ -40799,15 +40889,25 @@ paths:
40799
40889
  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
40890
  bidStrategy:
40801
40891
  allOf: [{ $ref: '#/components/schemas/BidStrategy' }]
40802
- description: "Meta bid strategy applied to the ad set."
40892
+ deprecated: true
40893
+ description: |
40894
+ 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.
40895
+
40896
+ Meta bid strategy applied to the ad set.
40803
40897
  bidAmount:
40804
40898
  type: number
40899
+ deprecated: true
40805
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
+
40806
40903
  Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when
40807
40904
  `bidStrategy` is `LOWEST_COST_WITH_BID_CAP` or `COST_CAP`.
40808
40905
  roasAverageFloor:
40809
40906
  type: number
40907
+ deprecated: true
40810
40908
  description: |
40909
+ 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.
40910
+
40811
40911
  Minimum ROAS as a decimal multiplier (e.g. 2.0 = 2.0x ROAS). Required when
40812
40912
  `bidStrategy` is `LOWEST_COST_WITH_MIN_ROAS`. Sent to Meta as
40813
40913
  `bid_constraints.roas_average_floor` × 10000.
@@ -40840,10 +40940,16 @@ paths:
40840
40940
  description: |
40841
40941
  Platform-specific options. The platform is derived from `accountId`;
40842
40942
  sending options for a different platform returns a 400. LinkedIn
40843
- (campaign bidding and delivery controls) is the only platform with
40844
- options today.
40943
+ (campaign bidding and delivery controls) and Meta (the bid trio)
40944
+ have options today.
40945
+
40946
+ **Meta**: `bidStrategy`, `bidAmount` and `roasAverageFloor` may be
40947
+ sent here instead of at the root — the preferred home going forward.
40948
+ Sending the bid fields in BOTH places returns a 400
40949
+ (`mutually_exclusive_fields`).
40845
40950
  oneOf:
40846
40951
  - $ref: '#/components/schemas/LinkedInAdsPlatformData'
40952
+ - $ref: '#/components/schemas/MetaAdsPlatformData'
40847
40953
  dsaBeneficiary:
40848
40954
  type: string
40849
40955
  maxLength: 100
@@ -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&#39;s &#x60;search_term_view&#x60; 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&#39;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&#39;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. &#x60;campaignId&#x60; is the platform campaign id; pass &#x60;platform&#x60; 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,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