late-sdk 0.0.920 → 0.0.921
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/docs/CreateStandaloneAdRequest.md +2 -2
- data/docs/CreateStandaloneAdRequestPlacementAssetsRulesInner.md +6 -0
- data/lib/zernio-sdk/models/create_standalone_ad_request.rb +2 -2
- data/lib/zernio-sdk/models/create_standalone_ad_request_placement_assets.rb +1 -1
- data/lib/zernio-sdk/models/create_standalone_ad_request_placement_assets_rules_inner.rb +106 -1
- data/lib/zernio-sdk/version.rb +1 -1
- data/openapi.yaml +39 -9
- data/spec/models/create_standalone_ad_request_placement_assets_rules_inner_spec.rb +18 -0
- data/zernio-sdk-0.0.921.gem +0 -0
- metadata +2 -2
- data/zernio-sdk-0.0.920.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: c2aaedfa75a4c777d9f738f8214bb3a852fe60b62381d90f472c94ac56b9682d
|
|
4
|
+
data.tar.gz: 0cc02bb3b55e4270ccace14ead86a773152db32e9bc107e5a03ad477a369a8b7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 10bfc0b0fe29d20fc5c61ead22103f23b978ae65afa4707494d2bb31ed77e484c570542a7c4b67c0e76e01b67d872b05093ced1c1a709229c7e73371e06012ac
|
|
7
|
+
data.tar.gz: ae57e75a81673466581c38ca7a6357673d1e1af810c22e243ac1a156a9fd76c0baec8fce4a75a723d1b3854de3a7b3b7462a261d482b6f80d2400d6611a0603e
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
| **promotion** | [**MetaPromotion**](MetaPromotion.md) | | [optional] |
|
|
20
20
|
| **creative_features** | **Hash<String, String>** | Meta only. Applied to each new creative, including standalone and attach shapes. With creatives[], these are defaults; an item replaces the whole feature map, including an empty map. auto_promotion_tag is an enhancement; an explicit offer uses promotion. | [optional] |
|
|
21
21
|
| **multi_advertiser** | **String** | Meta only. Multi-advertiser ads: whether Meta may show this ad alongside other advertisers' in one unit. Meta auto-enrols since Aug 2024, so send OPT_OUT to leave. It is a top-level creative field, NOT a `creativeFeatures` key, and Meta rejects it there. | [optional] |
|
|
22
|
-
| **validate_only** | **Boolean** | Google Performance Max validates the complete atomic campaign and asset group with no resource creation or local persistence. Google validation still downloads image URLs and consumes quota. On Meta, validates the complete inline campaign, ad set, creative and ad with execution_options validate_only. Nothing is uploaded or created, and validation bypasses Idempotency-Key storage. Supports a single image, existing video.id or existingCreativeId; media pools, new video uploads, creatives[], adSetId and RESERVED buying return 400. Existing campaign or creative nodes are marked skipped. Success returns 200 with per-node results; Meta rejection returns an error. | [optional] |
|
|
22
|
+
| **validate_only** | **Boolean** | Google Performance Max validates the complete atomic campaign and asset group with no resource creation or local persistence. Google validation still downloads image URLs and consumes quota. On Meta, validates the complete inline campaign, ad set, creative and ad with execution_options validate_only. Nothing is uploaded or created, and validation bypasses Idempotency-Key storage. Supports a single image, all-image placementAssets with per-rule copy, existing video.id or existingCreativeId; other media pools, new video uploads, creatives[], adSetId and RESERVED buying return 400. Placement validation uses existing Instagram identities only. Existing campaign or creative nodes are marked skipped. Success returns 200 with per-node results; Meta rejection returns an error. | [optional] |
|
|
23
23
|
| **budget_amount** | **Float** | Budget in WHOLE currency units (USD: 50 = $50.00), NOT cents. Meta's own Marketing API takes this same number in minor units, so it is an easy and expensive mix-up. Required on legacy, multi-creative and Performance Max shapes. Inherited on attach. OpenAI Ads requires a $1 minimum (its budget is lifetime-only, see budgetType). | [optional] |
|
|
24
24
|
| **budget_type** | **String** | Required on legacy, multi-creative and Performance Max shapes. Inherited on attach. OpenAI Ads accepts lifetime only (no daily-budget concept on the platform); sending daily returns 422. OpenAI Ads lifetime budgets require `endDate` to give the lifetime cap a spend window. | [optional] |
|
|
25
25
|
| **status** | **String** | Google Performance Max accepts PAUSED only and always creates a paused campaign. Meta, TikTok, and LinkedIn: publish state of the created entities. Omitted or ACTIVE publishes live (default, back-compat); PAUSED creates them paused so you can review before they spend. On Meta the pause is held on the campaign this call creates, leaving the ad set and ad switched on, so a single PUT /v1/ads/campaigns/{campaignId}/status with `active` brings the whole thing live. It is held at every level instead when the pause cannot rely on the campaign: `existingCampaignId` (that campaign may be running and is never touched) or `campaignStatus: ACTIVE`. On TikTok the whole campaign > ad group > ad hierarchy stays paused. On LinkedIn the whole campaign group, campaign, and creative hierarchy stays PAUSED (intendedStatus PAUSED on each). | [optional] |
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
| **long_headline** | **String** | Google Display only. Defaults to `headline` if omitted. On LinkedIn, reused as the optional secondary description text on traffic (link) ads; omitted if not provided. | [optional] |
|
|
31
31
|
| **body** | **String** | Required on legacy + attach shapes. For X this is the tweet text (max 280 chars including a ~24-char URL when `linkUrl` is set). On LinkedIn this is the post commentary (the intro text shown above the ad). On OpenAI Ads this is the chat card's body text. Max: Google=90, Pinterest=500, OpenAI=100. | [optional] |
|
|
32
32
|
| **description** | **String** | Meta only (facebook/instagram). Link description: the secondary text shown below the headline (Meta's link_data.description; on video creatives mapped to video_data.link_description). When omitted, Meta auto-pulls the destination URL's OpenGraph description. Applies on legacy, attach, and placementAssets shapes; for multi-creative use creatives[].description (this field is the shared fallback). For multi-text variations use `descriptions` (array) instead. | [optional] |
|
|
33
|
-
| **bodies** | **Array<String>** | Meta only. Multiple Text Options (Advantage+ Flexible Format): supply 1-5 primary-text variations and Meta optimises delivery across them, WITHOUT enabling full Dynamic Creative (`dynamicCreative`). Uses `optimization_type: DEGREES_OF_FREEDOM` on the asset feed, so multiple ads per ad set are allowed (unlike `dynamicCreative` which is limited to one). Requires `imageUrl` or `video`, `linkUrl`, and `callToAction`. When set, the top-level `body` field is used as the `object_story_spec.link_data.message` (the preview text) and `headlines` must also be present. On a video creative the copy lands in `video_data.message` / `video_data.title` instead of `link_data`. Mutually exclusive with `dynamicCreative`, `placementAssets`, `carouselCards`, and `creatives[]`. | [optional] |
|
|
33
|
+
| **bodies** | **Array<String>** | Meta only. Multiple Text Options (Advantage+ Flexible Format): supply 1-5 primary-text variations and Meta optimises delivery across them, WITHOUT enabling full Dynamic Creative (`dynamicCreative`). Uses `optimization_type: DEGREES_OF_FREEDOM` on the asset feed, so multiple ads per ad set are allowed (unlike `dynamicCreative` which is limited to one). Requires `imageUrl` or `video`, `linkUrl`, and `callToAction`. When set, the top-level `body` field is used as the `object_story_spec.link_data.message` (the preview text) and `headlines` must also be present. On a video creative the copy lands in `video_data.message` / `video_data.title` instead of `link_data`. Mutually exclusive with `dynamicCreative`, `placementAssets`, `carouselCards`, and `creatives[]`. For placement-specific copy, use the singular `placementAssets.rules[].body` and `headline` fields instead. | [optional] |
|
|
34
34
|
| **headlines** | **Array<String>** | Meta only. Headline variations for Multiple Text Options. Must be sent alongside `bodies`. The top-level `headline` field is used as the `object_story_spec.link_data.name` (`video_data.title` on a video creative). | [optional] |
|
|
35
35
|
| **descriptions** | **Array<String>** | Meta only. Optional description variations for Multiple Text Options. Sent alongside `bodies` and `headlines`. | [optional] |
|
|
36
36
|
| **call_to_action** | **String** | Required on legacy + attach shapes for Meta. Honoured on TikTok (passes through to the Spark Ad creative's `call_to_action`) and on LinkedIn (the CTA button on the ad; defaults to LEARN_MORE when `linkUrl` is set). LinkedIn accepts: LEARN_MORE, SIGN_UP, DOWNLOAD, SUBSCRIBE, REGISTER, JOIN, ATTEND, REQUEST_DEMO, VIEW_QUOTE, APPLY, SEE_MORE, SHOP_NOW, BUY_NOW. Ignored by Google, Pinterest, and X. | [optional] |
|
|
@@ -7,6 +7,9 @@
|
|
|
7
7
|
| **image_url** | **String** | Image mode. The image to deliver for this rule's placements. | [optional] |
|
|
8
8
|
| **video_url** | **String** | Video mode. The video to deliver for this rule's placements. | [optional] |
|
|
9
9
|
| **thumbnail_url** | **String** | Video mode (optional). Poster image for this rule's video; auto-generated when omitted. | [optional] |
|
|
10
|
+
| **headline** | **String** | One headline pinned to this rule. Omit to inherit the top-level headline. | [optional] |
|
|
11
|
+
| **body** | **String** | One primary text pinned to this rule. Omit to inherit the top-level body. | [optional] |
|
|
12
|
+
| **description** | **String** | One link description pinned to this rule. Omit to inherit the top-level description. | [optional] |
|
|
10
13
|
| **placements** | [**CreateStandaloneAdRequestPlacementAssetsRulesInnerPlacements**](CreateStandaloneAdRequestPlacementAssetsRulesInnerPlacements.md) | | |
|
|
11
14
|
|
|
12
15
|
## Example
|
|
@@ -18,6 +21,9 @@ instance = Zernio::CreateStandaloneAdRequestPlacementAssetsRulesInner.new(
|
|
|
18
21
|
image_url: null,
|
|
19
22
|
video_url: null,
|
|
20
23
|
thumbnail_url: null,
|
|
24
|
+
headline: null,
|
|
25
|
+
body: null,
|
|
26
|
+
description: null,
|
|
21
27
|
placements: null
|
|
22
28
|
)
|
|
23
29
|
```
|
|
@@ -55,7 +55,7 @@ module Zernio
|
|
|
55
55
|
# Meta only. Multi-advertiser ads: whether Meta may show this ad alongside other advertisers' in one unit. Meta auto-enrols since Aug 2024, so send OPT_OUT to leave. It is a top-level creative field, NOT a `creativeFeatures` key, and Meta rejects it there.
|
|
56
56
|
attr_accessor :multi_advertiser
|
|
57
57
|
|
|
58
|
-
# Google Performance Max validates the complete atomic campaign and asset group with no resource creation or local persistence. Google validation still downloads image URLs and consumes quota. On Meta, validates the complete inline campaign, ad set, creative and ad with execution_options validate_only. Nothing is uploaded or created, and validation bypasses Idempotency-Key storage. Supports a single image, existing video.id or existingCreativeId; media pools, new video uploads, creatives[], adSetId and RESERVED buying return 400. Existing campaign or creative nodes are marked skipped. Success returns 200 with per-node results; Meta rejection returns an error.
|
|
58
|
+
# Google Performance Max validates the complete atomic campaign and asset group with no resource creation or local persistence. Google validation still downloads image URLs and consumes quota. On Meta, validates the complete inline campaign, ad set, creative and ad with execution_options validate_only. Nothing is uploaded or created, and validation bypasses Idempotency-Key storage. Supports a single image, all-image placementAssets with per-rule copy, existing video.id or existingCreativeId; other media pools, new video uploads, creatives[], adSetId and RESERVED buying return 400. Placement validation uses existing Instagram identities only. Existing campaign or creative nodes are marked skipped. Success returns 200 with per-node results; Meta rejection returns an error.
|
|
59
59
|
attr_accessor :validate_only
|
|
60
60
|
|
|
61
61
|
# Budget in WHOLE currency units (USD: 50 = $50.00), NOT cents. Meta's own Marketing API takes this same number in minor units, so it is an easy and expensive mix-up. Required on legacy, multi-creative and Performance Max shapes. Inherited on attach. OpenAI Ads requires a $1 minimum (its budget is lifetime-only, see budgetType).
|
|
@@ -88,7 +88,7 @@ module Zernio
|
|
|
88
88
|
# Meta only (facebook/instagram). Link description: the secondary text shown below the headline (Meta's link_data.description; on video creatives mapped to video_data.link_description). When omitted, Meta auto-pulls the destination URL's OpenGraph description. Applies on legacy, attach, and placementAssets shapes; for multi-creative use creatives[].description (this field is the shared fallback). For multi-text variations use `descriptions` (array) instead.
|
|
89
89
|
attr_accessor :description
|
|
90
90
|
|
|
91
|
-
# Meta only. Multiple Text Options (Advantage+ Flexible Format): supply 1-5 primary-text variations and Meta optimises delivery across them, WITHOUT enabling full Dynamic Creative (`dynamicCreative`). Uses `optimization_type: DEGREES_OF_FREEDOM` on the asset feed, so multiple ads per ad set are allowed (unlike `dynamicCreative` which is limited to one). Requires `imageUrl` or `video`, `linkUrl`, and `callToAction`. When set, the top-level `body` field is used as the `object_story_spec.link_data.message` (the preview text) and `headlines` must also be present. On a video creative the copy lands in `video_data.message` / `video_data.title` instead of `link_data`. Mutually exclusive with `dynamicCreative`, `placementAssets`, `carouselCards`, and `creatives[]`.
|
|
91
|
+
# Meta only. Multiple Text Options (Advantage+ Flexible Format): supply 1-5 primary-text variations and Meta optimises delivery across them, WITHOUT enabling full Dynamic Creative (`dynamicCreative`). Uses `optimization_type: DEGREES_OF_FREEDOM` on the asset feed, so multiple ads per ad set are allowed (unlike `dynamicCreative` which is limited to one). Requires `imageUrl` or `video`, `linkUrl`, and `callToAction`. When set, the top-level `body` field is used as the `object_story_spec.link_data.message` (the preview text) and `headlines` must also be present. On a video creative the copy lands in `video_data.message` / `video_data.title` instead of `link_data`. Mutually exclusive with `dynamicCreative`, `placementAssets`, `carouselCards`, and `creatives[]`. For placement-specific copy, use the singular `placementAssets.rules[].body` and `headline` fields instead.
|
|
92
92
|
attr_accessor :bodies
|
|
93
93
|
|
|
94
94
|
# Meta only. Headline variations for Multiple Text Options. Must be sent alongside `bodies`. The top-level `headline` field is used as the `object_story_spec.link_data.name` (`video_data.title` on a video creative).
|
|
@@ -14,7 +14,7 @@ require 'date'
|
|
|
14
14
|
require 'time'
|
|
15
15
|
|
|
16
16
|
module Zernio
|
|
17
|
-
# Meta only. Placement asset customization: pin a SPECIFIC asset (image OR video) to each placement group on a SINGLE ad (e.g. a 9:16 on Stories/Reels and a 4:5 on Feed). The same thing Meta Ads Manager produces with \"different creative per placement\", mapped to the creative's `asset_feed_spec` + `asset_customization_rules`. Deterministic pinning, NOT the auto-optimizing pool of `dynamicCreative` (mutually exclusive). Works on the legacy single shape AND the attach shape (`adSetId` + placementAssets adds one placement-customized ad to an existing ad set, the way to build N per-placement ads sharing one ad set: create the first normally, attach the rest). Cannot be combined with `creatives[]
|
|
17
|
+
# Meta only. Placement asset customization: pin a SPECIFIC asset (image OR video) to each placement group on a SINGLE ad (e.g. a 9:16 on Stories/Reels and a 4:5 on Feed). The same thing Meta Ads Manager produces with \"different creative per placement\", mapped to the creative's `asset_feed_spec` + `asset_customization_rules`. Deterministic pinning, NOT the auto-optimizing pool of `dynamicCreative` (mutually exclusive). Works on the legacy single shape AND the attach shape (`adSetId` + placementAssets adds one placement-customized ad to an existing ad set, the way to build N per-placement ads sharing one ad set: create the first normally, attach the rest). Cannot be combined with `creatives[]` or top-level `bodies`/`headlines`/`descriptions` arrays. Each rule can override `headline`, `body` and `description` with one string per field. Omitted fields and unmatched placements use the top-level copy; `linkUrl` and `callToAction` remain shared. Zernio emits labelled text with `optimization_type: PLACEMENT`. Multiple text options rotating within a placement are not supported by this input. Each rule's `placements` accepts the same fields as the top-level `placements` object; Meta enforces co-selection rules and returns an actionable error. Meta controls text rendering by placement and format. Validation accepts these fields but does not prove that every field appears in delivery. Preview the ad; put copy that must always be visible into the image or video itself. `validateOnly: true` supports all-image placementAssets without uploading or creating anything. Video placement validation remains unsupported because it requires uploads. A block is all-image OR all-video, never mixed (Meta's asset_feed_spec carries one ad format). Image mode: `defaultImageUrl` + `rules[].imageUrl`. Video mode: `defaultVideoUrl` + `rules[].videoUrl` (optional `thumbnailUrl`/`defaultThumbnailUrl` posters; Meta auto-generates when omitted). Exactly one catch-all default is required.
|
|
18
18
|
class CreateStandaloneAdRequestPlacementAssets < ApiModelBase
|
|
19
19
|
# Image mode. Catch-all image for any placement no rule matches. Required in image mode (Meta mandates a default rule).
|
|
20
20
|
attr_accessor :default_image_url
|
|
@@ -24,6 +24,15 @@ module Zernio
|
|
|
24
24
|
# Video mode (optional). Poster image for this rule's video; auto-generated when omitted.
|
|
25
25
|
attr_accessor :thumbnail_url
|
|
26
26
|
|
|
27
|
+
# One headline pinned to this rule. Omit to inherit the top-level headline.
|
|
28
|
+
attr_accessor :headline
|
|
29
|
+
|
|
30
|
+
# One primary text pinned to this rule. Omit to inherit the top-level body.
|
|
31
|
+
attr_accessor :body
|
|
32
|
+
|
|
33
|
+
# One link description pinned to this rule. Omit to inherit the top-level description.
|
|
34
|
+
attr_accessor :description
|
|
35
|
+
|
|
27
36
|
attr_accessor :placements
|
|
28
37
|
|
|
29
38
|
# Attribute mapping from ruby-style variable name to JSON key.
|
|
@@ -32,6 +41,9 @@ module Zernio
|
|
|
32
41
|
:'image_url' => :'imageUrl',
|
|
33
42
|
:'video_url' => :'videoUrl',
|
|
34
43
|
:'thumbnail_url' => :'thumbnailUrl',
|
|
44
|
+
:'headline' => :'headline',
|
|
45
|
+
:'body' => :'body',
|
|
46
|
+
:'description' => :'description',
|
|
35
47
|
:'placements' => :'placements'
|
|
36
48
|
}
|
|
37
49
|
end
|
|
@@ -52,6 +64,9 @@ module Zernio
|
|
|
52
64
|
:'image_url' => :'String',
|
|
53
65
|
:'video_url' => :'String',
|
|
54
66
|
:'thumbnail_url' => :'String',
|
|
67
|
+
:'headline' => :'String',
|
|
68
|
+
:'body' => :'String',
|
|
69
|
+
:'description' => :'String',
|
|
55
70
|
:'placements' => :'CreateStandaloneAdRequestPlacementAssetsRulesInnerPlacements'
|
|
56
71
|
}
|
|
57
72
|
end
|
|
@@ -90,6 +105,18 @@ module Zernio
|
|
|
90
105
|
self.thumbnail_url = attributes[:'thumbnail_url']
|
|
91
106
|
end
|
|
92
107
|
|
|
108
|
+
if attributes.key?(:'headline')
|
|
109
|
+
self.headline = attributes[:'headline']
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
if attributes.key?(:'body')
|
|
113
|
+
self.body = attributes[:'body']
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
if attributes.key?(:'description')
|
|
117
|
+
self.description = attributes[:'description']
|
|
118
|
+
end
|
|
119
|
+
|
|
93
120
|
if attributes.key?(:'placements')
|
|
94
121
|
self.placements = attributes[:'placements']
|
|
95
122
|
else
|
|
@@ -102,6 +129,26 @@ module Zernio
|
|
|
102
129
|
def list_invalid_properties
|
|
103
130
|
warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
|
|
104
131
|
invalid_properties = Array.new
|
|
132
|
+
if !@headline.nil? && @headline.to_s.length > 255
|
|
133
|
+
invalid_properties.push('invalid value for "headline", the character length must be smaller than or equal to 255.')
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
if !@headline.nil? && @headline.to_s.length < 1
|
|
137
|
+
invalid_properties.push('invalid value for "headline", the character length must be greater than or equal to 1.')
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
if !@body.nil? && @body.to_s.length < 1
|
|
141
|
+
invalid_properties.push('invalid value for "body", the character length must be greater than or equal to 1.')
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
if !@description.nil? && @description.to_s.length > 255
|
|
145
|
+
invalid_properties.push('invalid value for "description", the character length must be smaller than or equal to 255.')
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
if !@description.nil? && @description.to_s.length < 1
|
|
149
|
+
invalid_properties.push('invalid value for "description", the character length must be greater than or equal to 1.')
|
|
150
|
+
end
|
|
151
|
+
|
|
105
152
|
if @placements.nil?
|
|
106
153
|
invalid_properties.push('invalid value for "placements", placements cannot be nil.')
|
|
107
154
|
end
|
|
@@ -113,10 +160,65 @@ module Zernio
|
|
|
113
160
|
# @return true if the model is valid
|
|
114
161
|
def valid?
|
|
115
162
|
warn '[DEPRECATED] the `valid?` method is obsolete'
|
|
163
|
+
return false if !@headline.nil? && @headline.to_s.length > 255
|
|
164
|
+
return false if !@headline.nil? && @headline.to_s.length < 1
|
|
165
|
+
return false if !@body.nil? && @body.to_s.length < 1
|
|
166
|
+
return false if !@description.nil? && @description.to_s.length > 255
|
|
167
|
+
return false if !@description.nil? && @description.to_s.length < 1
|
|
116
168
|
return false if @placements.nil?
|
|
117
169
|
true
|
|
118
170
|
end
|
|
119
171
|
|
|
172
|
+
# Custom attribute writer method with validation
|
|
173
|
+
# @param [Object] headline Value to be assigned
|
|
174
|
+
def headline=(headline)
|
|
175
|
+
if headline.nil?
|
|
176
|
+
fail ArgumentError, 'headline cannot be nil'
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
if headline.to_s.length > 255
|
|
180
|
+
fail ArgumentError, 'invalid value for "headline", the character length must be smaller than or equal to 255.'
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
if headline.to_s.length < 1
|
|
184
|
+
fail ArgumentError, 'invalid value for "headline", the character length must be greater than or equal to 1.'
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
@headline = headline
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
# Custom attribute writer method with validation
|
|
191
|
+
# @param [Object] body Value to be assigned
|
|
192
|
+
def body=(body)
|
|
193
|
+
if body.nil?
|
|
194
|
+
fail ArgumentError, 'body cannot be nil'
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
if body.to_s.length < 1
|
|
198
|
+
fail ArgumentError, 'invalid value for "body", the character length must be greater than or equal to 1.'
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
@body = body
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
# Custom attribute writer method with validation
|
|
205
|
+
# @param [Object] description Value to be assigned
|
|
206
|
+
def description=(description)
|
|
207
|
+
if description.nil?
|
|
208
|
+
fail ArgumentError, 'description cannot be nil'
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
if description.to_s.length > 255
|
|
212
|
+
fail ArgumentError, 'invalid value for "description", the character length must be smaller than or equal to 255.'
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
if description.to_s.length < 1
|
|
216
|
+
fail ArgumentError, 'invalid value for "description", the character length must be greater than or equal to 1.'
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
@description = description
|
|
220
|
+
end
|
|
221
|
+
|
|
120
222
|
# Custom attribute writer method with validation
|
|
121
223
|
# @param [Object] placements Value to be assigned
|
|
122
224
|
def placements=(placements)
|
|
@@ -135,6 +237,9 @@ module Zernio
|
|
|
135
237
|
image_url == o.image_url &&
|
|
136
238
|
video_url == o.video_url &&
|
|
137
239
|
thumbnail_url == o.thumbnail_url &&
|
|
240
|
+
headline == o.headline &&
|
|
241
|
+
body == o.body &&
|
|
242
|
+
description == o.description &&
|
|
138
243
|
placements == o.placements
|
|
139
244
|
end
|
|
140
245
|
|
|
@@ -147,7 +252,7 @@ module Zernio
|
|
|
147
252
|
# Calculates hash code according to all attributes.
|
|
148
253
|
# @return [Integer] Hash code
|
|
149
254
|
def hash
|
|
150
|
-
[image_url, video_url, thumbnail_url, placements].hash
|
|
255
|
+
[image_url, video_url, thumbnail_url, headline, body, description, placements].hash
|
|
151
256
|
end
|
|
152
257
|
|
|
153
258
|
# Builds the object from hash
|
data/lib/zernio-sdk/version.rb
CHANGED
data/openapi.yaml
CHANGED
|
@@ -51037,7 +51037,7 @@ paths:
|
|
|
51037
51037
|
description: "Meta only. Multi-advertiser ads: whether Meta may show this ad alongside other advertisers' in one unit. Meta auto-enrols since Aug 2024, so send OPT_OUT to leave. It is a top-level creative field, NOT a `creativeFeatures` key, and Meta rejects it there."
|
|
51038
51038
|
validateOnly:
|
|
51039
51039
|
type: boolean
|
|
51040
|
-
description: 'Google Performance Max validates the complete atomic campaign and asset group with no resource creation or local persistence. Google validation still downloads image URLs and consumes quota. On Meta, validates the complete inline campaign, ad set, creative and ad with execution_options validate_only. Nothing is uploaded or created, and validation bypasses Idempotency-Key storage. Supports a single image, existing video.id or existingCreativeId; media pools, new video uploads, creatives[], adSetId and RESERVED buying return 400. Existing campaign or creative nodes are marked skipped. Success returns 200 with per-node results; Meta rejection returns an error.'
|
|
51040
|
+
description: 'Google Performance Max validates the complete atomic campaign and asset group with no resource creation or local persistence. Google validation still downloads image URLs and consumes quota. On Meta, validates the complete inline campaign, ad set, creative and ad with execution_options validate_only. Nothing is uploaded or created, and validation bypasses Idempotency-Key storage. Supports a single image, all-image placementAssets with per-rule copy, existing video.id or existingCreativeId; other media pools, new video uploads, creatives[], adSetId and RESERVED buying return 400. Placement validation uses existing Instagram identities only. Existing campaign or creative nodes are marked skipped. Success returns 200 with per-node results; Meta rejection returns an error.'
|
|
51041
51041
|
budgetAmount: { type: number, description: "Budget in WHOLE currency units (USD: 50 = $50.00), NOT cents. Meta's own Marketing API takes this same number in minor units, so it is an easy and expensive mix-up. Required on legacy, multi-creative and Performance Max shapes. Inherited on attach. OpenAI Ads requires a $1 minimum (its budget is lifetime-only, see budgetType)." }
|
|
51042
51042
|
budgetType: { type: string, enum: [daily, lifetime], description: "Required on legacy, multi-creative and Performance Max shapes. Inherited on attach. OpenAI Ads accepts lifetime only (no daily-budget concept on the platform); sending daily returns 422. OpenAI Ads lifetime budgets require `endDate` to give the lifetime cap a spend window." }
|
|
51043
51043
|
status:
|
|
@@ -51080,7 +51080,7 @@ paths:
|
|
|
51080
51080
|
`body` field is used as the `object_story_spec.link_data.message` (the preview text) and
|
|
51081
51081
|
`headlines` must also be present. On a video creative the copy lands in
|
|
51082
51082
|
`video_data.message` / `video_data.title` instead of `link_data`. Mutually exclusive
|
|
51083
|
-
with `dynamicCreative`, `placementAssets`, `carouselCards`, and `creatives[]`.
|
|
51083
|
+
with `dynamicCreative`, `placementAssets`, `carouselCards`, and `creatives[]`. For placement-specific copy, use the singular `placementAssets.rules[].body` and `headline` fields instead.
|
|
51084
51084
|
headlines:
|
|
51085
51085
|
type: array
|
|
51086
51086
|
minItems: 1
|
|
@@ -51596,20 +51596,36 @@ paths:
|
|
|
51596
51596
|
on the legacy single shape AND the attach shape (`adSetId` + placementAssets adds one
|
|
51597
51597
|
placement-customized ad to an existing ad set, the way to build N per-placement ads
|
|
51598
51598
|
sharing one ad set: create the first normally, attach the rest). Cannot be combined
|
|
51599
|
-
with `creatives[]
|
|
51600
|
-
|
|
51601
|
-
|
|
51599
|
+
with `creatives[]` or top-level `bodies`/`headlines`/`descriptions` arrays. Each rule
|
|
51600
|
+
can override `headline`, `body` and `description` with one string per field. Omitted
|
|
51601
|
+
fields and unmatched placements use the top-level copy; `linkUrl` and `callToAction`
|
|
51602
|
+
remain shared. Zernio emits labelled text with `optimization_type: PLACEMENT`.
|
|
51603
|
+
Multiple text options rotating within a placement are not supported by this input. Each rule's `placements` accepts the same fields as the top-level
|
|
51602
51604
|
`placements` object; Meta enforces co-selection rules and returns an actionable error.
|
|
51603
51605
|
|
|
51604
|
-
|
|
51605
|
-
|
|
51606
|
-
|
|
51607
|
-
|
|
51606
|
+
Meta controls text rendering by placement and format. Validation accepts these fields
|
|
51607
|
+
but does not prove that every field appears in delivery. Preview the ad; put copy that
|
|
51608
|
+
must always be visible into the image or video itself.
|
|
51609
|
+
|
|
51610
|
+
`validateOnly: true` supports all-image placementAssets without uploading or creating
|
|
51611
|
+
anything. Video placement validation remains unsupported because it requires uploads.
|
|
51608
51612
|
|
|
51609
51613
|
A block is all-image OR all-video, never mixed (Meta's asset_feed_spec carries one ad
|
|
51610
51614
|
format). Image mode: `defaultImageUrl` + `rules[].imageUrl`. Video mode:
|
|
51611
51615
|
`defaultVideoUrl` + `rules[].videoUrl` (optional `thumbnailUrl`/`defaultThumbnailUrl`
|
|
51612
51616
|
posters; Meta auto-generates when omitted). Exactly one catch-all default is required.
|
|
51617
|
+
example:
|
|
51618
|
+
defaultImageUrl: 'https://example.com/feed-4x5.jpg'
|
|
51619
|
+
rules:
|
|
51620
|
+
- imageUrl: 'https://example.com/feed-4x5.jpg'
|
|
51621
|
+
headline: 'Build with Zernio'
|
|
51622
|
+
body: 'Schedule social posts from your app.'
|
|
51623
|
+
description: 'One API for your social content.'
|
|
51624
|
+
placements: { publisherPlatforms: [facebook], facebookPositions: [feed] }
|
|
51625
|
+
- imageUrl: 'https://example.com/story-9x16.jpg'
|
|
51626
|
+
headline: 'Your next story'
|
|
51627
|
+
body: 'Bring your social workflow to Zernio.'
|
|
51628
|
+
placements: { publisherPlatforms: [facebook], facebookPositions: [story, facebook_reels] }
|
|
51613
51629
|
required: [rules]
|
|
51614
51630
|
properties:
|
|
51615
51631
|
defaultImageUrl:
|
|
@@ -51645,6 +51661,20 @@ paths:
|
|
|
51645
51661
|
type: string
|
|
51646
51662
|
format: uri
|
|
51647
51663
|
description: "Video mode (optional). Poster image for this rule's video; auto-generated when omitted."
|
|
51664
|
+
headline:
|
|
51665
|
+
type: string
|
|
51666
|
+
minLength: 1
|
|
51667
|
+
maxLength: 255
|
|
51668
|
+
description: "One headline pinned to this rule. Omit to inherit the top-level headline."
|
|
51669
|
+
body:
|
|
51670
|
+
type: string
|
|
51671
|
+
minLength: 1
|
|
51672
|
+
description: "One primary text pinned to this rule. Omit to inherit the top-level body."
|
|
51673
|
+
description:
|
|
51674
|
+
type: string
|
|
51675
|
+
minLength: 1
|
|
51676
|
+
maxLength: 255
|
|
51677
|
+
description: "One link description pinned to this rule. Omit to inherit the top-level description."
|
|
51648
51678
|
placements:
|
|
51649
51679
|
type: object
|
|
51650
51680
|
description: "Placements this asset is pinned to. At least one field must be set (an empty rule is invalid; that role is served by the default asset). Same enums as the top-level `placements` object."
|
|
@@ -45,6 +45,24 @@ describe Zernio::CreateStandaloneAdRequestPlacementAssetsRulesInner do
|
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
47
|
|
|
48
|
+
describe 'test attribute "headline"' do
|
|
49
|
+
it 'should work' do
|
|
50
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
describe 'test attribute "body"' do
|
|
55
|
+
it 'should work' do
|
|
56
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe 'test attribute "description"' do
|
|
61
|
+
it 'should work' do
|
|
62
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
48
66
|
describe 'test attribute "placements"' do
|
|
49
67
|
it 'should work' do
|
|
50
68
|
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
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.921
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- OpenAPI-Generator
|
|
@@ -6355,7 +6355,7 @@ files:
|
|
|
6355
6355
|
- spec/models/you_tube_video_retention_response_retention_curve_inner_spec.rb
|
|
6356
6356
|
- spec/models/you_tube_video_retention_response_spec.rb
|
|
6357
6357
|
- spec/spec_helper.rb
|
|
6358
|
-
- zernio-sdk-0.0.
|
|
6358
|
+
- zernio-sdk-0.0.921.gem
|
|
6359
6359
|
- zernio-sdk.gemspec
|
|
6360
6360
|
homepage: https://openapi-generator.tech
|
|
6361
6361
|
licenses:
|
data/zernio-sdk-0.0.920.gem
DELETED
|
Binary file
|