late-sdk 0.0.99 → 0.0.101

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a1655e49aa699d9248d3c001a089a68cb8a8995571c3e6e373c40adf777baf73
4
- data.tar.gz: eea03528a8a368850d3f3b4fdc2aeeb1cd48cbed4e2850bf3b57f1c6901a3a25
3
+ metadata.gz: a847f69cb2b467867d2f931144fff5e3d2c15f923805560b27ab880ea1b0473e
4
+ data.tar.gz: 51f6d0e6befc41de0b6e97a23d85004565ab492905e70038a843a301490c0d1a
5
5
  SHA512:
6
- metadata.gz: 1536fd1380e4ea60a94a87beedc76e746966e2d5d8fbfad9d4826d8dd0a747821326cd421b8e22a69e842098239fe216cb8d471436d5ccbe91970c284c57ce42
7
- data.tar.gz: c4a227860070ef4c47e044b1f18e83c21702354b9736eca4ecce0f437a60c65cb219d8d7da9a46fe4a7323cb4cd271236a70ec2c6f89884eb8d2708deaffe0b3
6
+ metadata.gz: a0d60e68e176ebf8e93acb005251b3a6ad08691e52f65162e19551a41329a01d990150a81f391a2f9a634c407e8d8349de51d96e9e4cc85837b297c767e821e2
7
+ data.tar.gz: 55cefca6fc8be8ce33f5f0ca3ad847ace550574994a88645958d51e3b2471cbe2cfdee9a65aa95dedeb1769d23eb359a5c9336d090101035ce3c5f6bd3be219a
data/README.md CHANGED
@@ -366,6 +366,7 @@ Class | Method | HTTP request | Description
366
366
  - [Late::BoostPostRequestBudget](docs/BoostPostRequestBudget.md)
367
367
  - [Late::BoostPostRequestSchedule](docs/BoostPostRequestSchedule.md)
368
368
  - [Late::BoostPostRequestTargeting](docs/BoostPostRequestTargeting.md)
369
+ - [Late::BoostPostRequestTracking](docs/BoostPostRequestTracking.md)
369
370
  - [Late::BulkCreateContacts200Response](docs/BulkCreateContacts200Response.md)
370
371
  - [Late::BulkCreateContactsRequest](docs/BulkCreateContactsRequest.md)
371
372
  - [Late::BulkCreateContactsRequestContactsInner](docs/BulkCreateContactsRequestContactsInner.md)
data/docs/AdMetrics.md CHANGED
@@ -12,7 +12,7 @@
12
12
  | **cpc** | **Float** | Cost per click | [optional] |
13
13
  | **cpm** | **Float** | Cost per 1000 impressions | [optional] |
14
14
  | **engagement** | **Integer** | | [optional] |
15
- | **last_synced_at** | **Time** | | [optional] |
15
+ | **last_synced_at** | **Time** | Present on individual ads only, not on campaign aggregations | [optional] |
16
16
 
17
17
  ## Example
18
18
 
data/docs/AdsApi.md CHANGED
@@ -105,7 +105,7 @@ Late.configure do |config|
105
105
  end
106
106
 
107
107
  api_instance = Late::AdsApi.new
108
- create_standalone_ad_request = Late::CreateStandaloneAdRequest.new({account_id: 'account_id_example', ad_account_id: 'ad_account_id_example', name: 'name_example', goal: 'engagement', budget_amount: 3.56, budget_type: 'daily', body: 'body_example', image_url: 'image_url_example'}) # CreateStandaloneAdRequest |
108
+ create_standalone_ad_request = Late::CreateStandaloneAdRequest.new({account_id: 'account_id_example', ad_account_id: 'ad_account_id_example', name: 'name_example', goal: 'engagement', budget_amount: 3.56, budget_type: 'daily', body: 'body_example'}) # CreateStandaloneAdRequest |
109
109
 
110
110
  begin
111
111
  # Create a standalone ad with custom creative
@@ -14,6 +14,9 @@
14
14
  | **currency** | **String** | | [optional] |
15
15
  | **schedule** | [**BoostPostRequestSchedule**](BoostPostRequestSchedule.md) | | [optional] |
16
16
  | **targeting** | [**BoostPostRequestTargeting**](BoostPostRequestTargeting.md) | | [optional] |
17
+ | **bid_amount** | **Float** | Max bid cap (Meta only) | [optional] |
18
+ | **tracking** | [**BoostPostRequestTracking**](BoostPostRequestTracking.md) | | [optional] |
19
+ | **special_ad_categories** | **Array<String>** | Meta only. Required for housing, employment, credit, or political ads. | [optional] |
17
20
 
18
21
  ## Example
19
22
 
@@ -30,7 +33,10 @@ instance = Late::BoostPostRequest.new(
30
33
  budget: null,
31
34
  currency: USD,
32
35
  schedule: null,
33
- targeting: null
36
+ targeting: null,
37
+ bid_amount: null,
38
+ tracking: null,
39
+ special_ad_categories: null
34
40
  )
35
41
  ```
36
42
 
@@ -0,0 +1,20 @@
1
+ # Late::BoostPostRequestTracking
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **pixel_id** | **String** | | [optional] |
8
+ | **url_tags** | **String** | | [optional] |
9
+
10
+ ## Example
11
+
12
+ ```ruby
13
+ require 'late-sdk'
14
+
15
+ instance = Late::BoostPostRequestTracking.new(
16
+ pixel_id: null,
17
+ url_tags: null
18
+ )
19
+ ```
20
+
@@ -14,6 +14,8 @@
14
14
  | **source_audience_id** | **String** | Required for lookalike audiences | [optional] |
15
15
  | **country** | **String** | 2-letter code, required for lookalike audiences | [optional] |
16
16
  | **ratio** | **Float** | Required for lookalike audiences | [optional] |
17
+ | **rule** | **Object** | Pixel event rule for website audiences (optional) | [optional] |
18
+ | **customer_file_source** | **String** | Data source declaration for GDPR compliance (customer_list only) | [optional] |
17
19
 
18
20
  ## Example
19
21
 
@@ -30,7 +32,9 @@ instance = Late::CreateAdAudienceRequest.new(
30
32
  retention_days: null,
31
33
  source_audience_id: null,
32
34
  country: null,
33
- ratio: null
35
+ ratio: null,
36
+ rule: null,
37
+ customer_file_source: null
34
38
  )
35
39
  ```
36
40
 
@@ -12,10 +12,13 @@
12
12
  | **budget_type** | **String** | | |
13
13
  | **currency** | **String** | | [optional] |
14
14
  | **headline** | **String** | Required for most platforms. Max: Meta=255, Google=30, Pinterest=100 | [optional] |
15
+ | **long_headline** | **String** | Google Display only | [optional] |
15
16
  | **body** | **String** | Max: Google=90, Pinterest=500 | |
16
17
  | **call_to_action** | **String** | Meta only | [optional] |
17
18
  | **link_url** | **String** | | [optional] |
18
- | **image_url** | **String** | Image URL (or video URL for TikTok) | |
19
+ | **image_url** | **String** | Image URL (or video URL for TikTok). Not required for Google Search campaigns. | [optional] |
20
+ | **business_name** | **String** | Google Display only | [optional] |
21
+ | **board_id** | **String** | Pinterest only. Board ID (auto-creates if not provided). | [optional] |
19
22
  | **countries** | **Array<String>** | | [optional] |
20
23
  | **age_min** | **Integer** | | [optional] |
21
24
  | **age_max** | **Integer** | | [optional] |
@@ -24,6 +27,8 @@
24
27
  | **audience_id** | **String** | Custom audience ID for targeting | [optional] |
25
28
  | **campaign_type** | **String** | Google only | [optional][default to 'display'] |
26
29
  | **keywords** | **Array<String>** | Google Search only | [optional] |
30
+ | **additional_headlines** | **Array<String>** | Google Search RSA only. Extra headlines. | [optional] |
31
+ | **additional_descriptions** | **Array<String>** | Google Search RSA only. Extra descriptions. | [optional] |
27
32
 
28
33
  ## Example
29
34
 
@@ -39,10 +44,13 @@ instance = Late::CreateStandaloneAdRequest.new(
39
44
  budget_type: null,
40
45
  currency: null,
41
46
  headline: null,
47
+ long_headline: null,
42
48
  body: null,
43
49
  call_to_action: null,
44
50
  link_url: null,
45
51
  image_url: null,
52
+ business_name: null,
53
+ board_id: null,
46
54
  countries: null,
47
55
  age_min: null,
48
56
  age_max: null,
@@ -50,7 +58,9 @@ instance = Late::CreateStandaloneAdRequest.new(
50
58
  end_date: null,
51
59
  audience_id: null,
52
60
  campaign_type: null,
53
- keywords: null
61
+ keywords: null,
62
+ additional_headlines: null,
63
+ additional_descriptions: null
54
64
  )
55
65
  ```
56
66
 
@@ -12,7 +12,7 @@
12
12
  | **cpc** | **Float** | Cost per click | [optional] |
13
13
  | **cpm** | **Float** | Cost per 1000 impressions | [optional] |
14
14
  | **engagement** | **Integer** | | [optional] |
15
- | **last_synced_at** | **Time** | | [optional] |
15
+ | **last_synced_at** | **Time** | Present on individual ads only, not on campaign aggregations | [optional] |
16
16
  | **date** | **Date** | | [optional] |
17
17
 
18
18
  ## Example
@@ -6,7 +6,7 @@
6
6
  | ---- | ---- | ----------- | ----- |
7
7
  | **success** | **Boolean** | | [optional] |
8
8
  | **synced** | **Integer** | New ads imported | [optional] |
9
- | **skipped** | **Integer** | Already-synced ads updated | [optional] |
9
+ | **skipped** | **Integer** | Already-known ads (skipped import | [optional] |
10
10
  | **errors** | **Integer** | Failed ad imports | [optional] |
11
11
 
12
12
  ## Example
@@ -7,6 +7,7 @@
7
7
  | **updated** | **Integer** | Number of ads updated | [optional] |
8
8
  | **skipped** | **Integer** | Number of ads skipped | [optional] |
9
9
  | **skipped_reasons** | **Array<String>** | | [optional] |
10
+ | **message** | **String** | Human-readable summary (present when no ads were actionable) | [optional] |
10
11
 
11
12
  ## Example
12
13
 
@@ -16,7 +17,8 @@ require 'late-sdk'
16
17
  instance = Late::UpdateAdCampaignStatus200Response.new(
17
18
  updated: null,
18
19
  skipped: null,
19
- skipped_reasons: null
20
+ skipped_reasons: null,
21
+ message: null
20
22
  )
21
23
  ```
22
24
 
@@ -34,6 +34,7 @@ module Late
34
34
 
35
35
  attr_accessor :engagement
36
36
 
37
+ # Present on individual ads only, not on campaign aggregations
37
38
  attr_accessor :last_synced_at
38
39
 
39
40
  # Attribute mapping from ruby-style variable name to JSON key.
@@ -39,6 +39,14 @@ module Late
39
39
 
40
40
  attr_accessor :targeting
41
41
 
42
+ # Max bid cap (Meta only)
43
+ attr_accessor :bid_amount
44
+
45
+ attr_accessor :tracking
46
+
47
+ # Meta only. Required for housing, employment, credit, or political ads.
48
+ attr_accessor :special_ad_categories
49
+
42
50
  class EnumAttributeValidator
43
51
  attr_reader :datatype
44
52
  attr_reader :allowable_values
@@ -73,7 +81,10 @@ module Late
73
81
  :'budget' => :'budget',
74
82
  :'currency' => :'currency',
75
83
  :'schedule' => :'schedule',
76
- :'targeting' => :'targeting'
84
+ :'targeting' => :'targeting',
85
+ :'bid_amount' => :'bidAmount',
86
+ :'tracking' => :'tracking',
87
+ :'special_ad_categories' => :'specialAdCategories'
77
88
  }
78
89
  end
79
90
 
@@ -99,7 +110,10 @@ module Late
99
110
  :'budget' => :'BoostPostRequestBudget',
100
111
  :'currency' => :'String',
101
112
  :'schedule' => :'BoostPostRequestSchedule',
102
- :'targeting' => :'BoostPostRequestTargeting'
113
+ :'targeting' => :'BoostPostRequestTargeting',
114
+ :'bid_amount' => :'Float',
115
+ :'tracking' => :'BoostPostRequestTracking',
116
+ :'special_ad_categories' => :'Array<String>'
103
117
  }
104
118
  end
105
119
 
@@ -174,6 +188,20 @@ module Late
174
188
  if attributes.key?(:'targeting')
175
189
  self.targeting = attributes[:'targeting']
176
190
  end
191
+
192
+ if attributes.key?(:'bid_amount')
193
+ self.bid_amount = attributes[:'bid_amount']
194
+ end
195
+
196
+ if attributes.key?(:'tracking')
197
+ self.tracking = attributes[:'tracking']
198
+ end
199
+
200
+ if attributes.key?(:'special_ad_categories')
201
+ if (value = attributes[:'special_ad_categories']).is_a?(Array)
202
+ self.special_ad_categories = value
203
+ end
204
+ end
177
205
  end
178
206
 
179
207
  # Show invalid properties with the reasons. Usually used together with valid?
@@ -291,7 +319,10 @@ module Late
291
319
  budget == o.budget &&
292
320
  currency == o.currency &&
293
321
  schedule == o.schedule &&
294
- targeting == o.targeting
322
+ targeting == o.targeting &&
323
+ bid_amount == o.bid_amount &&
324
+ tracking == o.tracking &&
325
+ special_ad_categories == o.special_ad_categories
295
326
  end
296
327
 
297
328
  # @see the `==` method
@@ -303,7 +334,7 @@ module Late
303
334
  # Calculates hash code according to all attributes.
304
335
  # @return [Integer] Hash code
305
336
  def hash
306
- [post_id, platform_post_id, account_id, ad_account_id, name, goal, budget, currency, schedule, targeting].hash
337
+ [post_id, platform_post_id, account_id, ad_account_id, name, goal, budget, currency, schedule, targeting, bid_amount, tracking, special_ad_categories].hash
307
338
  end
308
339
 
309
340
  # Builds the object from hash
@@ -0,0 +1,157 @@
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.1
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 Late
17
+ # Meta only. Tracking specs (pixel, URL tags).
18
+ class BoostPostRequestTracking < ApiModelBase
19
+ attr_accessor :pixel_id
20
+
21
+ attr_accessor :url_tags
22
+
23
+ # Attribute mapping from ruby-style variable name to JSON key.
24
+ def self.attribute_map
25
+ {
26
+ :'pixel_id' => :'pixelId',
27
+ :'url_tags' => :'urlTags'
28
+ }
29
+ end
30
+
31
+ # Returns attribute mapping this model knows about
32
+ def self.acceptable_attribute_map
33
+ attribute_map
34
+ end
35
+
36
+ # Returns all the JSON keys this model knows about
37
+ def self.acceptable_attributes
38
+ acceptable_attribute_map.values
39
+ end
40
+
41
+ # Attribute type mapping.
42
+ def self.openapi_types
43
+ {
44
+ :'pixel_id' => :'String',
45
+ :'url_tags' => :'String'
46
+ }
47
+ end
48
+
49
+ # List of attributes with nullable: true
50
+ def self.openapi_nullable
51
+ Set.new([
52
+ ])
53
+ end
54
+
55
+ # Initializes the object
56
+ # @param [Hash] attributes Model attributes in the form of hash
57
+ def initialize(attributes = {})
58
+ if (!attributes.is_a?(Hash))
59
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Late::BoostPostRequestTracking` initialize method"
60
+ end
61
+
62
+ # check to see if the attribute exists and convert string to symbol for hash key
63
+ acceptable_attribute_map = self.class.acceptable_attribute_map
64
+ attributes = attributes.each_with_object({}) { |(k, v), h|
65
+ if (!acceptable_attribute_map.key?(k.to_sym))
66
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Late::BoostPostRequestTracking`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
67
+ end
68
+ h[k.to_sym] = v
69
+ }
70
+
71
+ if attributes.key?(:'pixel_id')
72
+ self.pixel_id = attributes[:'pixel_id']
73
+ end
74
+
75
+ if attributes.key?(:'url_tags')
76
+ self.url_tags = attributes[:'url_tags']
77
+ end
78
+ end
79
+
80
+ # Show invalid properties with the reasons. Usually used together with valid?
81
+ # @return Array for valid properties with the reasons
82
+ def list_invalid_properties
83
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
84
+ invalid_properties = Array.new
85
+ invalid_properties
86
+ end
87
+
88
+ # Check to see if the all the properties in the model are valid
89
+ # @return true if the model is valid
90
+ def valid?
91
+ warn '[DEPRECATED] the `valid?` method is obsolete'
92
+ true
93
+ end
94
+
95
+ # Checks equality by comparing each attribute.
96
+ # @param [Object] Object to be compared
97
+ def ==(o)
98
+ return true if self.equal?(o)
99
+ self.class == o.class &&
100
+ pixel_id == o.pixel_id &&
101
+ url_tags == o.url_tags
102
+ end
103
+
104
+ # @see the `==` method
105
+ # @param [Object] Object to be compared
106
+ def eql?(o)
107
+ self == o
108
+ end
109
+
110
+ # Calculates hash code according to all attributes.
111
+ # @return [Integer] Hash code
112
+ def hash
113
+ [pixel_id, url_tags].hash
114
+ end
115
+
116
+ # Builds the object from hash
117
+ # @param [Hash] attributes Model attributes in the form of hash
118
+ # @return [Object] Returns the model itself
119
+ def self.build_from_hash(attributes)
120
+ return nil unless attributes.is_a?(Hash)
121
+ attributes = attributes.transform_keys(&:to_sym)
122
+ transformed_hash = {}
123
+ openapi_types.each_pair do |key, type|
124
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
125
+ transformed_hash["#{key}"] = nil
126
+ elsif type =~ /\AArray<(.*)>/i
127
+ # check to ensure the input is an array given that the attribute
128
+ # is documented as an array but the input is not
129
+ if attributes[attribute_map[key]].is_a?(Array)
130
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
131
+ end
132
+ elsif !attributes[attribute_map[key]].nil?
133
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
134
+ end
135
+ end
136
+ new(transformed_hash)
137
+ end
138
+
139
+ # Returns the object in the form of hash
140
+ # @return [Hash] Returns the object in the form of hash
141
+ def to_hash
142
+ hash = {}
143
+ self.class.attribute_map.each_pair do |attr, param|
144
+ value = self.send(attr)
145
+ if value.nil?
146
+ is_nullable = self.class.openapi_nullable.include?(attr)
147
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
148
+ end
149
+
150
+ hash[param] = _to_hash(value)
151
+ end
152
+ hash
153
+ end
154
+
155
+ end
156
+
157
+ end
@@ -41,6 +41,12 @@ module Late
41
41
  # Required for lookalike audiences
42
42
  attr_accessor :ratio
43
43
 
44
+ # Pixel event rule for website audiences (optional)
45
+ attr_accessor :rule
46
+
47
+ # Data source declaration for GDPR compliance (customer_list only)
48
+ attr_accessor :customer_file_source
49
+
44
50
  class EnumAttributeValidator
45
51
  attr_reader :datatype
46
52
  attr_reader :allowable_values
@@ -75,7 +81,9 @@ module Late
75
81
  :'retention_days' => :'retentionDays',
76
82
  :'source_audience_id' => :'sourceAudienceId',
77
83
  :'country' => :'country',
78
- :'ratio' => :'ratio'
84
+ :'ratio' => :'ratio',
85
+ :'rule' => :'rule',
86
+ :'customer_file_source' => :'customerFileSource'
79
87
  }
80
88
  end
81
89
 
@@ -101,7 +109,9 @@ module Late
101
109
  :'retention_days' => :'Integer',
102
110
  :'source_audience_id' => :'String',
103
111
  :'country' => :'String',
104
- :'ratio' => :'Float'
112
+ :'ratio' => :'Float',
113
+ :'rule' => :'Object',
114
+ :'customer_file_source' => :'String'
105
115
  }
106
116
  end
107
117
 
@@ -174,6 +184,14 @@ module Late
174
184
  if attributes.key?(:'ratio')
175
185
  self.ratio = attributes[:'ratio']
176
186
  end
187
+
188
+ if attributes.key?(:'rule')
189
+ self.rule = attributes[:'rule']
190
+ end
191
+
192
+ if attributes.key?(:'customer_file_source')
193
+ self.customer_file_source = attributes[:'customer_file_source']
194
+ end
177
195
  end
178
196
 
179
197
  # Show invalid properties with the reasons. Usually used together with valid?
@@ -332,7 +350,9 @@ module Late
332
350
  retention_days == o.retention_days &&
333
351
  source_audience_id == o.source_audience_id &&
334
352
  country == o.country &&
335
- ratio == o.ratio
353
+ ratio == o.ratio &&
354
+ rule == o.rule &&
355
+ customer_file_source == o.customer_file_source
336
356
  end
337
357
 
338
358
  # @see the `==` method
@@ -344,7 +364,7 @@ module Late
344
364
  # Calculates hash code according to all attributes.
345
365
  # @return [Integer] Hash code
346
366
  def hash
347
- [account_id, ad_account_id, name, description, type, pixel_id, retention_days, source_audience_id, country, ratio].hash
367
+ [account_id, ad_account_id, name, description, type, pixel_id, retention_days, source_audience_id, country, ratio, rule, customer_file_source].hash
348
368
  end
349
369
 
350
370
  # Builds the object from hash
@@ -32,6 +32,9 @@ module Late
32
32
  # Required for most platforms. Max: Meta=255, Google=30, Pinterest=100
33
33
  attr_accessor :headline
34
34
 
35
+ # Google Display only
36
+ attr_accessor :long_headline
37
+
35
38
  # Max: Google=90, Pinterest=500
36
39
  attr_accessor :body
37
40
 
@@ -40,9 +43,15 @@ module Late
40
43
 
41
44
  attr_accessor :link_url
42
45
 
43
- # Image URL (or video URL for TikTok)
46
+ # Image URL (or video URL for TikTok). Not required for Google Search campaigns.
44
47
  attr_accessor :image_url
45
48
 
49
+ # Google Display only
50
+ attr_accessor :business_name
51
+
52
+ # Pinterest only. Board ID (auto-creates if not provided).
53
+ attr_accessor :board_id
54
+
46
55
  attr_accessor :countries
47
56
 
48
57
  attr_accessor :age_min
@@ -63,6 +72,12 @@ module Late
63
72
  # Google Search only
64
73
  attr_accessor :keywords
65
74
 
75
+ # Google Search RSA only. Extra headlines.
76
+ attr_accessor :additional_headlines
77
+
78
+ # Google Search RSA only. Extra descriptions.
79
+ attr_accessor :additional_descriptions
80
+
66
81
  class EnumAttributeValidator
67
82
  attr_reader :datatype
68
83
  attr_reader :allowable_values
@@ -96,10 +111,13 @@ module Late
96
111
  :'budget_type' => :'budgetType',
97
112
  :'currency' => :'currency',
98
113
  :'headline' => :'headline',
114
+ :'long_headline' => :'longHeadline',
99
115
  :'body' => :'body',
100
116
  :'call_to_action' => :'callToAction',
101
117
  :'link_url' => :'linkUrl',
102
118
  :'image_url' => :'imageUrl',
119
+ :'business_name' => :'businessName',
120
+ :'board_id' => :'boardId',
103
121
  :'countries' => :'countries',
104
122
  :'age_min' => :'ageMin',
105
123
  :'age_max' => :'ageMax',
@@ -107,7 +125,9 @@ module Late
107
125
  :'end_date' => :'endDate',
108
126
  :'audience_id' => :'audienceId',
109
127
  :'campaign_type' => :'campaignType',
110
- :'keywords' => :'keywords'
128
+ :'keywords' => :'keywords',
129
+ :'additional_headlines' => :'additionalHeadlines',
130
+ :'additional_descriptions' => :'additionalDescriptions'
111
131
  }
112
132
  end
113
133
 
@@ -132,10 +152,13 @@ module Late
132
152
  :'budget_type' => :'String',
133
153
  :'currency' => :'String',
134
154
  :'headline' => :'String',
155
+ :'long_headline' => :'String',
135
156
  :'body' => :'String',
136
157
  :'call_to_action' => :'String',
137
158
  :'link_url' => :'String',
138
159
  :'image_url' => :'String',
160
+ :'business_name' => :'String',
161
+ :'board_id' => :'String',
139
162
  :'countries' => :'Array<String>',
140
163
  :'age_min' => :'Integer',
141
164
  :'age_max' => :'Integer',
@@ -143,7 +166,9 @@ module Late
143
166
  :'end_date' => :'Time',
144
167
  :'audience_id' => :'String',
145
168
  :'campaign_type' => :'String',
146
- :'keywords' => :'Array<String>'
169
+ :'keywords' => :'Array<String>',
170
+ :'additional_headlines' => :'Array<String>',
171
+ :'additional_descriptions' => :'Array<String>'
147
172
  }
148
173
  end
149
174
 
@@ -213,6 +238,10 @@ module Late
213
238
  self.headline = attributes[:'headline']
214
239
  end
215
240
 
241
+ if attributes.key?(:'long_headline')
242
+ self.long_headline = attributes[:'long_headline']
243
+ end
244
+
216
245
  if attributes.key?(:'body')
217
246
  self.body = attributes[:'body']
218
247
  else
@@ -229,8 +258,14 @@ module Late
229
258
 
230
259
  if attributes.key?(:'image_url')
231
260
  self.image_url = attributes[:'image_url']
232
- else
233
- self.image_url = nil
261
+ end
262
+
263
+ if attributes.key?(:'business_name')
264
+ self.business_name = attributes[:'business_name']
265
+ end
266
+
267
+ if attributes.key?(:'board_id')
268
+ self.board_id = attributes[:'board_id']
234
269
  end
235
270
 
236
271
  if attributes.key?(:'countries')
@@ -272,6 +307,18 @@ module Late
272
307
  self.keywords = value
273
308
  end
274
309
  end
310
+
311
+ if attributes.key?(:'additional_headlines')
312
+ if (value = attributes[:'additional_headlines']).is_a?(Array)
313
+ self.additional_headlines = value
314
+ end
315
+ end
316
+
317
+ if attributes.key?(:'additional_descriptions')
318
+ if (value = attributes[:'additional_descriptions']).is_a?(Array)
319
+ self.additional_descriptions = value
320
+ end
321
+ end
275
322
  end
276
323
 
277
324
  # Show invalid properties with the reasons. Usually used together with valid?
@@ -307,12 +354,16 @@ module Late
307
354
  invalid_properties.push('invalid value for "budget_type", budget_type cannot be nil.')
308
355
  end
309
356
 
357
+ if !@long_headline.nil? && @long_headline.to_s.length > 90
358
+ invalid_properties.push('invalid value for "long_headline", the character length must be smaller than or equal to 90.')
359
+ end
360
+
310
361
  if @body.nil?
311
362
  invalid_properties.push('invalid value for "body", body cannot be nil.')
312
363
  end
313
364
 
314
- if @image_url.nil?
315
- invalid_properties.push('invalid value for "image_url", image_url cannot be nil.')
365
+ if !@business_name.nil? && @business_name.to_s.length > 25
366
+ invalid_properties.push('invalid value for "business_name", the character length must be smaller than or equal to 25.')
316
367
  end
317
368
 
318
369
  if !@age_min.nil? && @age_min > 65
@@ -349,10 +400,11 @@ module Late
349
400
  return false if @budget_type.nil?
350
401
  budget_type_validator = EnumAttributeValidator.new('String', ["daily", "lifetime"])
351
402
  return false unless budget_type_validator.valid?(@budget_type)
403
+ return false if !@long_headline.nil? && @long_headline.to_s.length > 90
352
404
  return false if @body.nil?
353
405
  call_to_action_validator = EnumAttributeValidator.new('String', ["LEARN_MORE", "SHOP_NOW", "SIGN_UP", "BOOK_TRAVEL", "CONTACT_US", "DOWNLOAD", "GET_OFFER", "GET_QUOTE", "SUBSCRIBE", "WATCH_MORE"])
354
406
  return false unless call_to_action_validator.valid?(@call_to_action)
355
- return false if @image_url.nil?
407
+ return false if !@business_name.nil? && @business_name.to_s.length > 25
356
408
  return false if !@age_min.nil? && @age_min > 65
357
409
  return false if !@age_min.nil? && @age_min < 13
358
410
  return false if !@age_max.nil? && @age_max > 65
@@ -426,6 +478,20 @@ module Late
426
478
  @budget_type = budget_type
427
479
  end
428
480
 
481
+ # Custom attribute writer method with validation
482
+ # @param [Object] long_headline Value to be assigned
483
+ def long_headline=(long_headline)
484
+ if long_headline.nil?
485
+ fail ArgumentError, 'long_headline cannot be nil'
486
+ end
487
+
488
+ if long_headline.to_s.length > 90
489
+ fail ArgumentError, 'invalid value for "long_headline", the character length must be smaller than or equal to 90.'
490
+ end
491
+
492
+ @long_headline = long_headline
493
+ end
494
+
429
495
  # Custom attribute writer method with validation
430
496
  # @param [Object] body Value to be assigned
431
497
  def body=(body)
@@ -447,13 +513,17 @@ module Late
447
513
  end
448
514
 
449
515
  # Custom attribute writer method with validation
450
- # @param [Object] image_url Value to be assigned
451
- def image_url=(image_url)
452
- if image_url.nil?
453
- fail ArgumentError, 'image_url cannot be nil'
516
+ # @param [Object] business_name Value to be assigned
517
+ def business_name=(business_name)
518
+ if business_name.nil?
519
+ fail ArgumentError, 'business_name cannot be nil'
520
+ end
521
+
522
+ if business_name.to_s.length > 25
523
+ fail ArgumentError, 'invalid value for "business_name", the character length must be smaller than or equal to 25.'
454
524
  end
455
525
 
456
- @image_url = image_url
526
+ @business_name = business_name
457
527
  end
458
528
 
459
529
  # Custom attribute writer method with validation
@@ -515,10 +585,13 @@ module Late
515
585
  budget_type == o.budget_type &&
516
586
  currency == o.currency &&
517
587
  headline == o.headline &&
588
+ long_headline == o.long_headline &&
518
589
  body == o.body &&
519
590
  call_to_action == o.call_to_action &&
520
591
  link_url == o.link_url &&
521
592
  image_url == o.image_url &&
593
+ business_name == o.business_name &&
594
+ board_id == o.board_id &&
522
595
  countries == o.countries &&
523
596
  age_min == o.age_min &&
524
597
  age_max == o.age_max &&
@@ -526,7 +599,9 @@ module Late
526
599
  end_date == o.end_date &&
527
600
  audience_id == o.audience_id &&
528
601
  campaign_type == o.campaign_type &&
529
- keywords == o.keywords
602
+ keywords == o.keywords &&
603
+ additional_headlines == o.additional_headlines &&
604
+ additional_descriptions == o.additional_descriptions
530
605
  end
531
606
 
532
607
  # @see the `==` method
@@ -538,7 +613,7 @@ module Late
538
613
  # Calculates hash code according to all attributes.
539
614
  # @return [Integer] Hash code
540
615
  def hash
541
- [account_id, ad_account_id, name, goal, budget_amount, budget_type, currency, headline, body, call_to_action, link_url, image_url, countries, age_min, age_max, interests, end_date, audience_id, campaign_type, keywords].hash
616
+ [account_id, ad_account_id, name, goal, budget_amount, budget_type, currency, headline, long_headline, body, call_to_action, link_url, image_url, business_name, board_id, countries, age_min, age_max, interests, end_date, audience_id, campaign_type, keywords, additional_headlines, additional_descriptions].hash
542
617
  end
543
618
 
544
619
  # Builds the object from hash
@@ -34,6 +34,7 @@ module Late
34
34
 
35
35
  attr_accessor :engagement
36
36
 
37
+ # Present on individual ads only, not on campaign aggregations
37
38
  attr_accessor :last_synced_at
38
39
 
39
40
  attr_accessor :date
@@ -20,7 +20,7 @@ module Late
20
20
  # New ads imported
21
21
  attr_accessor :synced
22
22
 
23
- # Already-synced ads updated
23
+ # Already-known ads (skipped import
24
24
  attr_accessor :skipped
25
25
 
26
26
  # Failed ad imports
@@ -23,12 +23,16 @@ module Late
23
23
 
24
24
  attr_accessor :skipped_reasons
25
25
 
26
+ # Human-readable summary (present when no ads were actionable)
27
+ attr_accessor :message
28
+
26
29
  # Attribute mapping from ruby-style variable name to JSON key.
27
30
  def self.attribute_map
28
31
  {
29
32
  :'updated' => :'updated',
30
33
  :'skipped' => :'skipped',
31
- :'skipped_reasons' => :'skippedReasons'
34
+ :'skipped_reasons' => :'skippedReasons',
35
+ :'message' => :'message'
32
36
  }
33
37
  end
34
38
 
@@ -47,7 +51,8 @@ module Late
47
51
  {
48
52
  :'updated' => :'Integer',
49
53
  :'skipped' => :'Integer',
50
- :'skipped_reasons' => :'Array<String>'
54
+ :'skipped_reasons' => :'Array<String>',
55
+ :'message' => :'String'
51
56
  }
52
57
  end
53
58
 
@@ -86,6 +91,10 @@ module Late
86
91
  self.skipped_reasons = value
87
92
  end
88
93
  end
94
+
95
+ if attributes.key?(:'message')
96
+ self.message = attributes[:'message']
97
+ end
89
98
  end
90
99
 
91
100
  # Show invalid properties with the reasons. Usually used together with valid?
@@ -110,7 +119,8 @@ module Late
110
119
  self.class == o.class &&
111
120
  updated == o.updated &&
112
121
  skipped == o.skipped &&
113
- skipped_reasons == o.skipped_reasons
122
+ skipped_reasons == o.skipped_reasons &&
123
+ message == o.message
114
124
  end
115
125
 
116
126
  # @see the `==` method
@@ -122,7 +132,7 @@ module Late
122
132
  # Calculates hash code according to all attributes.
123
133
  # @return [Integer] Hash code
124
134
  def hash
125
- [updated, skipped, skipped_reasons].hash
135
+ [updated, skipped, skipped_reasons, message].hash
126
136
  end
127
137
 
128
138
  # Builds the object from hash
@@ -11,5 +11,5 @@ Generator version: 7.19.0
11
11
  =end
12
12
 
13
13
  module Late
14
- VERSION = '0.0.99'
14
+ VERSION = '0.0.101'
15
15
  end
data/lib/late-sdk.rb CHANGED
@@ -54,6 +54,7 @@ require 'late-sdk/models/boost_post_request'
54
54
  require 'late-sdk/models/boost_post_request_budget'
55
55
  require 'late-sdk/models/boost_post_request_schedule'
56
56
  require 'late-sdk/models/boost_post_request_targeting'
57
+ require 'late-sdk/models/boost_post_request_tracking'
57
58
  require 'late-sdk/models/bulk_create_contacts200_response'
58
59
  require 'late-sdk/models/bulk_create_contacts_request'
59
60
  require 'late-sdk/models/bulk_create_contacts_request_contacts_inner'
data/openapi.yaml CHANGED
@@ -2642,7 +2642,7 @@ components:
2642
2642
  cpc: { type: number, description: Cost per click }
2643
2643
  cpm: { type: number, description: Cost per 1000 impressions }
2644
2644
  engagement: { type: integer }
2645
- lastSyncedAt: { type: string, format: date-time }
2645
+ lastSyncedAt: { type: string, format: date-time, description: "Present on individual ads only, not on campaign aggregations" }
2646
2646
  Ad:
2647
2647
  type: object
2648
2648
  properties:
@@ -17384,6 +17384,7 @@ paths:
17384
17384
  updated: { type: integer, description: Number of ads updated }
17385
17385
  skipped: { type: integer, description: Number of ads skipped }
17386
17386
  skippedReasons: { type: array, items: { type: string } }
17387
+ message: { type: string, description: Human-readable summary (present when no ads were actionable) }
17387
17388
  '400':
17388
17389
  description: Invalid input or campaign spans multiple social accounts
17389
17390
  '401': { $ref: '#/components/responses/Unauthorized' }
@@ -17525,6 +17526,8 @@ paths:
17525
17526
  type: array
17526
17527
  items: { type: object }
17527
17528
  '401': { $ref: '#/components/responses/Unauthorized' }
17529
+ '403':
17530
+ description: Ads add-on required
17528
17531
  '404': { $ref: '#/components/responses/NotFound' }
17529
17532
 
17530
17533
  /v1/ads/accounts:
@@ -17555,6 +17558,8 @@ paths:
17555
17558
  currency: { type: string }
17556
17559
  status: { type: string }
17557
17560
  '401': { $ref: '#/components/responses/Unauthorized' }
17561
+ '422':
17562
+ description: Platform ads connection required (TikTok Ads, X Ads) or Instagram missing linked Facebook account
17558
17563
 
17559
17564
  /v1/ads/boost:
17560
17565
  post:
@@ -17597,6 +17602,17 @@ paths:
17597
17602
  ageMax: { type: integer, minimum: 13, maximum: 65 }
17598
17603
  countries: { type: array, items: { type: string } }
17599
17604
  interests: { type: array, items: { type: string } }
17605
+ bidAmount: { type: number, description: "Max bid cap (Meta only)" }
17606
+ tracking:
17607
+ type: object
17608
+ description: "Meta only. Tracking specs (pixel, URL tags)."
17609
+ properties:
17610
+ pixelId: { type: string }
17611
+ urlTags: { type: string }
17612
+ specialAdCategories:
17613
+ type: array
17614
+ description: "Meta only. Required for housing, employment, credit, or political ads."
17615
+ items: { type: string, enum: [HOUSING, EMPLOYMENT, CREDIT, ISSUES_ELECTIONS_POLITICS] }
17600
17616
  responses:
17601
17617
  '201':
17602
17618
  description: Ad created
@@ -17627,7 +17643,7 @@ paths:
17627
17643
  application/json:
17628
17644
  schema:
17629
17645
  type: object
17630
- required: [accountId, adAccountId, name, goal, budgetAmount, budgetType, body, imageUrl]
17646
+ required: [accountId, adAccountId, name, goal, budgetAmount, budgetType, body]
17631
17647
  properties:
17632
17648
  accountId: { type: string }
17633
17649
  adAccountId: { type: string }
@@ -17637,10 +17653,13 @@ paths:
17637
17653
  budgetType: { type: string, enum: [daily, lifetime] }
17638
17654
  currency: { type: string }
17639
17655
  headline: { type: string, description: "Required for most platforms. Max: Meta=255, Google=30, Pinterest=100" }
17656
+ longHeadline: { type: string, maxLength: 90, description: "Google Display only" }
17640
17657
  body: { type: string, description: "Max: Google=90, Pinterest=500" }
17641
17658
  callToAction: { type: string, enum: [LEARN_MORE, SHOP_NOW, SIGN_UP, BOOK_TRAVEL, CONTACT_US, DOWNLOAD, GET_OFFER, GET_QUOTE, SUBSCRIBE, WATCH_MORE], description: Meta only }
17642
17659
  linkUrl: { type: string, format: uri }
17643
- imageUrl: { type: string, format: uri, description: Image URL (or video URL for TikTok) }
17660
+ imageUrl: { type: string, format: uri, description: "Image URL (or video URL for TikTok). Not required for Google Search campaigns." }
17661
+ businessName: { type: string, maxLength: 25, description: "Google Display only" }
17662
+ boardId: { type: string, description: "Pinterest only. Board ID (auto-creates if not provided)." }
17644
17663
  countries: { type: array, items: { type: string } }
17645
17664
  ageMin: { type: integer, minimum: 13, maximum: 65 }
17646
17665
  ageMax: { type: integer, minimum: 13, maximum: 65 }
@@ -17649,6 +17668,8 @@ paths:
17649
17668
  audienceId: { type: string, description: Custom audience ID for targeting }
17650
17669
  campaignType: { type: string, enum: [display, search], default: display, description: Google only }
17651
17670
  keywords: { type: array, items: { type: string }, description: Google Search only }
17671
+ additionalHeadlines: { type: array, items: { type: string }, description: "Google Search RSA only. Extra headlines." }
17672
+ additionalDescriptions: { type: array, items: { type: string }, description: "Google Search RSA only. Extra descriptions." }
17652
17673
  responses:
17653
17674
  '201':
17654
17675
  description: Ad created
@@ -17683,7 +17704,7 @@ paths:
17683
17704
  properties:
17684
17705
  success: { type: boolean }
17685
17706
  synced: { type: integer, description: New ads imported }
17686
- skipped: { type: integer, description: Already-synced ads updated }
17707
+ skipped: { type: integer, description: Already-known ads (skipped import, metrics still refreshed) }
17687
17708
  errors: { type: integer, description: Failed ad imports }
17688
17709
  '401': { $ref: '#/components/responses/Unauthorized' }
17689
17710
  '403':
@@ -17717,6 +17738,8 @@ paths:
17717
17738
  name: { type: string }
17718
17739
  category: { type: string }
17719
17740
  '401': { $ref: '#/components/responses/Unauthorized' }
17741
+ '403':
17742
+ description: Ads add-on required
17720
17743
 
17721
17744
  /v1/ads/audiences:
17722
17745
  get:
@@ -17777,6 +17800,8 @@ paths:
17777
17800
  sourceAudienceId: { type: string, description: Required for lookalike audiences }
17778
17801
  country: { type: string, description: "2-letter code, required for lookalike audiences" }
17779
17802
  ratio: { type: number, minimum: 0.01, maximum: 0.20, description: Required for lookalike audiences }
17803
+ rule: { type: object, description: "Pixel event rule for website audiences (optional)" }
17804
+ customerFileSource: { type: string, description: "Data source declaration for GDPR compliance (customer_list only)" }
17780
17805
  responses:
17781
17806
  '201':
17782
17807
  description: Audience created
@@ -17814,6 +17839,8 @@ paths:
17814
17839
  audience: { type: object }
17815
17840
  metaData: { type: object, nullable: true, description: Fresh data from Meta API }
17816
17841
  '401': { $ref: '#/components/responses/Unauthorized' }
17842
+ '403':
17843
+ description: Ads add-on required
17817
17844
  '404': { $ref: '#/components/responses/NotFound' }
17818
17845
  delete:
17819
17846
  operationId: deleteAdAudience
@@ -17834,6 +17861,8 @@ paths:
17834
17861
  properties:
17835
17862
  message: { type: string }
17836
17863
  '401': { $ref: '#/components/responses/Unauthorized' }
17864
+ '403':
17865
+ description: Ads add-on required
17837
17866
  '404': { $ref: '#/components/responses/NotFound' }
17838
17867
 
17839
17868
  /v1/ads/audiences/{audienceId}/users:
@@ -17875,6 +17904,10 @@ paths:
17875
17904
  numReceived: { type: integer }
17876
17905
  numInvalid: { type: integer }
17877
17906
  '400':
17878
- description: Invalid input or not a customer_list audience
17907
+ description: Invalid input (empty users array, missing email/phone)
17879
17908
  '401': { $ref: '#/components/responses/Unauthorized' }
17909
+ '403':
17910
+ description: Ads add-on required
17880
17911
  '404': { $ref: '#/components/responses/NotFound' }
17912
+ '422':
17913
+ description: Audience is not a customer_list type or has no platform ID yet
@@ -91,4 +91,26 @@ describe Late::BoostPostRequest do
91
91
  end
92
92
  end
93
93
 
94
+ describe 'test attribute "bid_amount"' do
95
+ it 'should work' do
96
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
97
+ end
98
+ end
99
+
100
+ describe 'test attribute "tracking"' do
101
+ it 'should work' do
102
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
103
+ end
104
+ end
105
+
106
+ describe 'test attribute "special_ad_categories"' do
107
+ it 'should work' do
108
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
109
+ # validator = Petstore::EnumTest::EnumAttributeValidator.new('Array<String>', ["HOUSING", "EMPLOYMENT", "CREDIT", "ISSUES_ELECTIONS_POLITICS"])
110
+ # validator.allowable_values.each do |value|
111
+ # expect { instance.special_ad_categories = value }.not_to raise_error
112
+ # end
113
+ end
114
+ end
115
+
94
116
  end
@@ -0,0 +1,42 @@
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.1
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 Late::BoostPostRequestTracking
18
+ # Automatically generated by openapi-generator (https://openapi-generator.tech)
19
+ # Please update as you see appropriate
20
+ describe Late::BoostPostRequestTracking do
21
+ #let(:instance) { Late::BoostPostRequestTracking.new }
22
+
23
+ describe 'test an instance of BoostPostRequestTracking' do
24
+ it 'should create an instance of BoostPostRequestTracking' do
25
+ # uncomment below to test the instance creation
26
+ #expect(instance).to be_instance_of(Late::BoostPostRequestTracking)
27
+ end
28
+ end
29
+
30
+ describe 'test attribute "pixel_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 "url_tags"' 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
+ end
@@ -91,4 +91,16 @@ describe Late::CreateAdAudienceRequest do
91
91
  end
92
92
  end
93
93
 
94
+ describe 'test attribute "rule"' do
95
+ it 'should work' do
96
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
97
+ end
98
+ end
99
+
100
+ describe 'test attribute "customer_file_source"' do
101
+ it 'should work' do
102
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
103
+ end
104
+ end
105
+
94
106
  end
@@ -83,6 +83,12 @@ describe Late::CreateStandaloneAdRequest do
83
83
  end
84
84
  end
85
85
 
86
+ describe 'test attribute "long_headline"' do
87
+ it 'should work' do
88
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
89
+ end
90
+ end
91
+
86
92
  describe 'test attribute "body"' do
87
93
  it 'should work' do
88
94
  # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
@@ -111,6 +117,18 @@ describe Late::CreateStandaloneAdRequest do
111
117
  end
112
118
  end
113
119
 
120
+ describe 'test attribute "business_name"' do
121
+ it 'should work' do
122
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
123
+ end
124
+ end
125
+
126
+ describe 'test attribute "board_id"' do
127
+ it 'should work' do
128
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
129
+ end
130
+ end
131
+
114
132
  describe 'test attribute "countries"' do
115
133
  it 'should work' do
116
134
  # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
@@ -163,4 +181,16 @@ describe Late::CreateStandaloneAdRequest do
163
181
  end
164
182
  end
165
183
 
184
+ describe 'test attribute "additional_headlines"' do
185
+ it 'should work' do
186
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
187
+ end
188
+ end
189
+
190
+ describe 'test attribute "additional_descriptions"' do
191
+ it 'should work' do
192
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
193
+ end
194
+ end
195
+
166
196
  end
@@ -45,4 +45,10 @@ describe Late::UpdateAdCampaignStatus200Response do
45
45
  end
46
46
  end
47
47
 
48
+ describe 'test attribute "message"' 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
+
48
54
  end
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: late-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.99
4
+ version: 0.0.101
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenAPI-Generator
@@ -107,6 +107,7 @@ files:
107
107
  - docs/BoostPostRequestBudget.md
108
108
  - docs/BoostPostRequestSchedule.md
109
109
  - docs/BoostPostRequestTargeting.md
110
+ - docs/BoostPostRequestTracking.md
110
111
  - docs/BroadcastsApi.md
111
112
  - docs/BulkCreateContacts200Response.md
112
113
  - docs/BulkCreateContactsRequest.md
@@ -910,6 +911,7 @@ files:
910
911
  - lib/late-sdk/models/boost_post_request_budget.rb
911
912
  - lib/late-sdk/models/boost_post_request_schedule.rb
912
913
  - lib/late-sdk/models/boost_post_request_targeting.rb
914
+ - lib/late-sdk/models/boost_post_request_tracking.rb
913
915
  - lib/late-sdk/models/bulk_create_contacts200_response.rb
914
916
  - lib/late-sdk/models/bulk_create_contacts_request.rb
915
917
  - lib/late-sdk/models/bulk_create_contacts_request_contacts_inner.rb
@@ -1676,6 +1678,7 @@ files:
1676
1678
  - spec/models/boost_post_request_schedule_spec.rb
1677
1679
  - spec/models/boost_post_request_spec.rb
1678
1680
  - spec/models/boost_post_request_targeting_spec.rb
1681
+ - spec/models/boost_post_request_tracking_spec.rb
1679
1682
  - spec/models/bulk_create_contacts200_response_spec.rb
1680
1683
  - spec/models/bulk_create_contacts_request_contacts_inner_spec.rb
1681
1684
  - spec/models/bulk_create_contacts_request_spec.rb
@@ -2364,7 +2367,7 @@ files:
2364
2367
  - spec/models/you_tube_scope_missing_response_scope_status_spec.rb
2365
2368
  - spec/models/you_tube_scope_missing_response_spec.rb
2366
2369
  - spec/spec_helper.rb
2367
- - zernio-sdk-0.0.99.gem
2370
+ - zernio-sdk-0.0.101.gem
2368
2371
  homepage: https://openapi-generator.tech
2369
2372
  licenses:
2370
2373
  - Unlicense
@@ -2725,6 +2728,7 @@ test_files:
2725
2728
  - spec/models/get_google_business_attributes200_response_spec.rb
2726
2729
  - spec/models/get_post_timeline400_response_spec.rb
2727
2730
  - spec/models/update_google_business_location_details_request_service_items_inner_structured_service_item_spec.rb
2731
+ - spec/models/boost_post_request_tracking_spec.rb
2728
2732
  - spec/models/webhook_payload_message_conversation_spec.rb
2729
2733
  - spec/models/create_post_request_platforms_inner_spec.rb
2730
2734
  - spec/models/instagram_demographics_response_demographics_value_inner_spec.rb
Binary file