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 +4 -4
- data/README.md +1 -0
- data/docs/AdMetrics.md +1 -1
- data/docs/AdsApi.md +1 -1
- data/docs/BoostPostRequest.md +7 -1
- data/docs/BoostPostRequestTracking.md +20 -0
- data/docs/CreateAdAudienceRequest.md +5 -1
- data/docs/CreateStandaloneAdRequest.md +12 -2
- data/docs/GetAdAnalytics200ResponseAnalyticsDailyInner.md +1 -1
- data/docs/SyncExternalAds200Response.md +1 -1
- data/docs/UpdateAdCampaignStatus200Response.md +3 -1
- data/lib/late-sdk/models/ad_metrics.rb +1 -0
- data/lib/late-sdk/models/boost_post_request.rb +35 -4
- data/lib/late-sdk/models/boost_post_request_tracking.rb +157 -0
- data/lib/late-sdk/models/create_ad_audience_request.rb +24 -4
- data/lib/late-sdk/models/create_standalone_ad_request.rb +90 -15
- data/lib/late-sdk/models/get_ad_analytics200_response_analytics_daily_inner.rb +1 -0
- data/lib/late-sdk/models/sync_external_ads200_response.rb +1 -1
- data/lib/late-sdk/models/update_ad_campaign_status200_response.rb +14 -4
- data/lib/late-sdk/version.rb +1 -1
- data/lib/late-sdk.rb +1 -0
- data/openapi.yaml +38 -5
- data/spec/models/boost_post_request_spec.rb +22 -0
- data/spec/models/boost_post_request_tracking_spec.rb +42 -0
- data/spec/models/create_ad_audience_request_spec.rb +12 -0
- data/spec/models/create_standalone_ad_request_spec.rb +30 -0
- data/spec/models/update_ad_campaign_status200_response_spec.rb +6 -0
- data/zernio-sdk-0.0.101.gem +0 -0
- metadata +6 -2
- data/zernio-sdk-0.0.99.gem +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a847f69cb2b467867d2f931144fff5e3d2c15f923805560b27ab880ea1b0473e
|
|
4
|
+
data.tar.gz: 51f6d0e6befc41de0b6e97a23d85004565ab492905e70038a843a301490c0d1a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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** |
|
|
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'
|
|
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
|
data/docs/BoostPostRequest.md
CHANGED
|
@@ -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** |
|
|
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-
|
|
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
|
|
|
@@ -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
|
-
|
|
233
|
-
|
|
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
|
|
315
|
-
invalid_properties.push('invalid value for "
|
|
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
|
|
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]
|
|
451
|
-
def
|
|
452
|
-
if
|
|
453
|
-
fail ArgumentError, '
|
|
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
|
-
@
|
|
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
|
|
@@ -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
|
data/lib/late-sdk/version.rb
CHANGED
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
|
|
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-
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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
|
data/zernio-sdk-0.0.99.gem
DELETED
|
Binary file
|