late-sdk 0.0.706 → 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.
- checksums.yaml +4 -4
- data/README.md +6 -0
- data/docs/AdInsightsApi.md +84 -0
- data/docs/BoostPostRequest.md +4 -4
- data/docs/BoostPostRequestPlatformSpecificData.md +49 -0
- data/docs/CreateStandaloneAdRequest.md +4 -4
- data/docs/GetAdsSearchTerms200Response.md +22 -0
- data/docs/GetAdsSearchTerms200ResponseDataInner.md +40 -0
- data/docs/GetAdsSearchTerms200ResponsePaging.md +18 -0
- data/docs/InstagramApi.md +1 -1
- data/docs/MetaAdsPlatformData.md +22 -0
- data/docs/WebhookPayloadCommentPost.md +7 -1
- data/lib/zernio-sdk/api/ad_insights_api.rb +82 -0
- data/lib/zernio-sdk/api/instagram_api.rb +2 -2
- 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_standalone_ad_request.rb +4 -4
- 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/webhook_payload_comment_post.rb +43 -4
- data/lib/zernio-sdk/version.rb +1 -1
- data/lib/zernio-sdk.rb +5 -0
- data/openapi.yaml +117 -6
- data/spec/api/ad_insights_api_spec.rb +18 -0
- data/spec/api/instagram_api_spec.rb +1 -1
- data/spec/models/boost_post_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.708.gem +0 -0
- metadata +22 -2
- data/zernio-sdk-0.0.706.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
|
data/lib/zernio-sdk/version.rb
CHANGED
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
|
|
@@ -20590,6 +20607,10 @@ paths:
|
|
|
20590
20607
|
- `unavailable` — story has expired and we never received its webhook
|
|
20591
20608
|
payload (for example, the account connected after the story expired)
|
|
20592
20609
|
|
|
20610
|
+
Meta can report an expired story as an empty successful result rather
|
|
20611
|
+
than an error, so an expired story resolves to `cached` or `unavailable`
|
|
20612
|
+
even though the upstream request itself succeeded.
|
|
20613
|
+
|
|
20593
20614
|
Field semantics follow Meta's API. Counts below 5 may be returned as 0
|
|
20594
20615
|
due to Meta's privacy floor on small audiences. The `navigation` field
|
|
20595
20616
|
is the sum of `tapsForward + tapsBack + exits + swipesForward`.
|
|
@@ -20643,6 +20664,7 @@ paths:
|
|
|
20643
20664
|
'400': { description: Invalid request. }
|
|
20644
20665
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
20645
20666
|
'404': { description: Instagram account not found. }
|
|
20667
|
+
'502': { description: 'Instagram rejected the request.' }
|
|
20646
20668
|
|
|
20647
20669
|
/v1/accounts/{accountId}/pinterest-boards:
|
|
20648
20670
|
get:
|
|
@@ -36818,6 +36840,64 @@ paths:
|
|
|
36818
36840
|
'403':
|
|
36819
36841
|
description: Ads access required. Legacy plans need the Ads add-on; included by default on usage-based plans.
|
|
36820
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
|
+
|
|
36821
36901
|
/v1/ads/keywords:
|
|
36822
36902
|
get:
|
|
36823
36903
|
x-resource-group: "ads"
|
|
@@ -40003,18 +40083,27 @@ paths:
|
|
|
40003
40083
|
as `targeting_automation`.
|
|
40004
40084
|
bidStrategy:
|
|
40005
40085
|
allOf: [{ $ref: '#/components/schemas/BidStrategy' }]
|
|
40086
|
+
deprecated: true
|
|
40006
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
|
+
|
|
40007
40090
|
Meta bid strategy applied to the ad set. On TikTok, mapped to
|
|
40008
40091
|
`bid_type` / `bid_price` / `deep_bid_type` automatically.
|
|
40009
40092
|
bidAmount:
|
|
40010
40093
|
type: number
|
|
40094
|
+
deprecated: true
|
|
40011
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
|
+
|
|
40012
40098
|
Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when
|
|
40013
40099
|
`bidStrategy` is `LOWEST_COST_WITH_BID_CAP` or `COST_CAP`. Backward-compat: providing
|
|
40014
40100
|
`bidAmount` without `bidStrategy` is treated as `LOWEST_COST_WITH_BID_CAP`.
|
|
40015
40101
|
roasAverageFloor:
|
|
40016
40102
|
type: number
|
|
40103
|
+
deprecated: true
|
|
40017
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
|
+
|
|
40018
40107
|
Minimum ROAS as a decimal multiplier (e.g. 2.0 = 2.0x ROAS). Required when
|
|
40019
40108
|
`bidStrategy` is `LOWEST_COST_WITH_MIN_ROAS`. Sent to Meta as
|
|
40020
40109
|
`bid_constraints.roas_average_floor` × 10000 (Meta uses fixed-point integers).
|
|
@@ -40022,10 +40111,16 @@ paths:
|
|
|
40022
40111
|
description: |
|
|
40023
40112
|
Platform-specific options. The platform is derived from `accountId`;
|
|
40024
40113
|
sending options for a different platform returns a 400. LinkedIn
|
|
40025
|
-
(campaign bidding and delivery controls)
|
|
40026
|
-
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`).
|
|
40027
40121
|
oneOf:
|
|
40028
40122
|
- $ref: '#/components/schemas/LinkedInAdsPlatformData'
|
|
40123
|
+
- $ref: '#/components/schemas/MetaAdsPlatformData'
|
|
40029
40124
|
tracking:
|
|
40030
40125
|
type: object
|
|
40031
40126
|
description: "Meta only. Tracking specs (pixel, URL tags)."
|
|
@@ -40794,15 +40889,25 @@ paths:
|
|
|
40794
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." }
|
|
40795
40890
|
bidStrategy:
|
|
40796
40891
|
allOf: [{ $ref: '#/components/schemas/BidStrategy' }]
|
|
40797
|
-
|
|
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.
|
|
40798
40897
|
bidAmount:
|
|
40799
40898
|
type: number
|
|
40899
|
+
deprecated: true
|
|
40800
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
|
+
|
|
40801
40903
|
Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when
|
|
40802
40904
|
`bidStrategy` is `LOWEST_COST_WITH_BID_CAP` or `COST_CAP`.
|
|
40803
40905
|
roasAverageFloor:
|
|
40804
40906
|
type: number
|
|
40907
|
+
deprecated: true
|
|
40805
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
|
+
|
|
40806
40911
|
Minimum ROAS as a decimal multiplier (e.g. 2.0 = 2.0x ROAS). Required when
|
|
40807
40912
|
`bidStrategy` is `LOWEST_COST_WITH_MIN_ROAS`. Sent to Meta as
|
|
40808
40913
|
`bid_constraints.roas_average_floor` × 10000.
|
|
@@ -40835,10 +40940,16 @@ paths:
|
|
|
40835
40940
|
description: |
|
|
40836
40941
|
Platform-specific options. The platform is derived from `accountId`;
|
|
40837
40942
|
sending options for a different platform returns a 400. LinkedIn
|
|
40838
|
-
(campaign bidding and delivery controls)
|
|
40839
|
-
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`).
|
|
40840
40950
|
oneOf:
|
|
40841
40951
|
- $ref: '#/components/schemas/LinkedInAdsPlatformData'
|
|
40952
|
+
- $ref: '#/components/schemas/MetaAdsPlatformData'
|
|
40842
40953
|
dsaBeneficiary:
|
|
40843
40954
|
type: string
|
|
40844
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'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.
|
|
@@ -46,7 +46,7 @@ describe 'InstagramApi' do
|
|
|
46
46
|
|
|
47
47
|
# unit tests for get_instagram_story_insights
|
|
48
48
|
# Get Instagram story insights
|
|
49
|
-
# Returns metrics for a single story. The `source` field discriminates between three states: - `live` — fetched from Meta in real time (story is still active) - `cached` — fetched from a persisted `story_insights` webhook payload (story has expired but we received its final-state metrics from Meta) - `unavailable` — story has expired and we never received its webhook payload (for example, the account connected after the story expired) Field semantics follow Meta's API. Counts below 5 may be returned as 0 due to Meta's privacy floor on small audiences. The `navigation` field is the sum of `tapsForward + tapsBack + exits + swipesForward`.
|
|
49
|
+
# Returns metrics for a single story. The `source` field discriminates between three states: - `live` — fetched from Meta in real time (story is still active) - `cached` — fetched from a persisted `story_insights` webhook payload (story has expired but we received its final-state metrics from Meta) - `unavailable` — story has expired and we never received its webhook payload (for example, the account connected after the story expired) Meta can report an expired story as an empty successful result rather than an error, so an expired story resolves to `cached` or `unavailable` even though the upstream request itself succeeded. Field semantics follow Meta's API. Counts below 5 may be returned as 0 due to Meta's privacy floor on small audiences. The `navigation` field is the sum of `tapsForward + tapsBack + exits + swipesForward`.
|
|
50
50
|
# @param account_id The Instagram account ID
|
|
51
51
|
# @param story_id The Instagram media ID of the story.
|
|
52
52
|
# @param [Hash] opts the optional parameters
|
|
@@ -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
|