zernio-sdk 0.0.839 → 0.0.841
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/AdCampaignsApi.md +1 -1
- data/docs/CreateStandaloneAdRequest.md +1 -1
- data/docs/Webhook.md +1 -1
- data/lib/zernio-sdk/api/ad_campaigns_api.rb +2 -2
- data/lib/zernio-sdk/models/create_standalone_ad_request.rb +20 -1
- data/lib/zernio-sdk/models/webhook.rb +1 -1
- data/lib/zernio-sdk/version.rb +1 -1
- data/openapi.yaml +10 -3
- data/spec/api/ad_campaigns_api_spec.rb +1 -1
- metadata +1753 -1753
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 12b710f8813b9ca3a5a29b168723120d8212f3b07ac56c06e2836d766b50df9b
|
|
4
|
+
data.tar.gz: f7e1b77da631495fa6a0f596364de933fa990b7e7756e23b7b3997b94c15715e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e3d38f14db38cc93bf8dc8661f07b8afe3c5ada9472c093ba53a563b4de287577463aa52525ebe7de58fce9802e6ad56ef53fed0540a7b43b5273250d76ee89d
|
|
7
|
+
data.tar.gz: 2969423a05bf2d61779942dd19739251acf2f0df56afbec098ee17dcd0c1c358f9f67d6724776da645c3a9981a19191ea0e4bfdd13ed05d578d780d5adcbe5b0
|
data/docs/AdCampaignsApi.md
CHANGED
|
@@ -249,7 +249,7 @@ end
|
|
|
249
249
|
|
|
250
250
|
Create a standalone campaign
|
|
251
251
|
|
|
252
|
-
Creates a campaign WITHOUT its first ad set / ad, on the platform of the given `accountId`. Ad sets join it later via `existingCampaignId` on the create endpoints. Platform notes: on Meta a budget here is campaign-level (CBO) by definition; omit it for ABO (each ad set carries its own budget), and `specialAdCategories` / `bidStrategy` are Meta-only (400 elsewhere). Google, X and OpenAI require a budget (422 without one; OpenAI accepts only `budgetType: lifetime`). LinkedIn creates the campaign GROUP (our campaign level) and rejects a budget, which lives on the campaign (ad set) level there; it comes back `status: DRAFT`. TikTok campaigns are created without a status and report `ENABLE`. Created `PAUSED` unless `status: ACTIVE` where the platform supports it. **Idempotency:** send an `Idempotency-Key` header to make retries safe.
|
|
252
|
+
Creates a campaign WITHOUT its first ad set / ad, on the platform of the given `accountId`. Ad sets join it later via `existingCampaignId` on the create endpoints. Platform notes: on Meta a budget here is campaign-level (CBO) by definition; omit it for ABO (each ad set carries its own budget), and `specialAdCategories` / `bidStrategy` are Meta-only (400 elsewhere). Google, X and OpenAI require a budget (422 without one; OpenAI accepts only `budgetType: lifetime`, Google only `budgetType: daily`). LinkedIn creates the campaign GROUP (our campaign level) and rejects a budget, which lives on the campaign (ad set) level there; it comes back `status: DRAFT`. TikTok campaigns are created without a status and report `ENABLE`. Created `PAUSED` unless `status: ACTIVE` where the platform supports it. **Idempotency:** send an `Idempotency-Key` header to make retries safe.
|
|
253
253
|
|
|
254
254
|
### Examples
|
|
255
255
|
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
| **placement_assets** | [**CreateStandaloneAdRequestPlacementAssets**](CreateStandaloneAdRequestPlacementAssets.md) | | [optional] |
|
|
79
79
|
| **audience_id** | **String** | Custom audience ID for targeting | [optional] |
|
|
80
80
|
| **campaign_type** | **String** | Google only | [optional][default to 'display'] |
|
|
81
|
-
| **keywords** | **Array<String>** | Google Search only. BROAD-match keywords on the new ad group
|
|
81
|
+
| **keywords** | **Array<String>** | Google Search only. BROAD-match keywords on the new ad group. Editable later via PUT /v1/ads/{adId} targeting.keywords, which also sets match types. | [optional] |
|
|
82
82
|
| **negative_keywords** | **Array<String>** | Google Search only; other platforms return 400. BROAD-match negative keywords on the new ad group. Editable later via PUT /v1/ads/{adId} targeting.negativeKeywords. | [optional] |
|
|
83
83
|
| **additional_headlines** | **Array<String>** | Google Search RSA only. Extra headlines. | [optional] |
|
|
84
84
|
| **additional_descriptions** | **Array<String>** | Google Search RSA only. Extra descriptions. | [optional] |
|
data/docs/Webhook.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
| **events** | **Array<String>** | Events subscribed to | [optional] |
|
|
12
12
|
| **is_active** | **Boolean** | Whether webhook delivery is enabled | [optional] |
|
|
13
13
|
| **last_fired_at** | **Time** | Timestamp of last successful webhook delivery | [optional] |
|
|
14
|
-
| **failure_count** | **Integer** | Consecutive delivery failures (resets on success
|
|
14
|
+
| **failure_count** | **Integer** | Consecutive terminal delivery failures (resets to 0 on any successful delivery). Auto-disable only triggers when the endpoint has had no successful delivery within a 3-day window AND either reaches 20 consecutive terminal failures or has been failing continuously for 3 days; any success within that window keeps the endpoint enabled regardless of the count. | [optional] |
|
|
15
15
|
| **custom_headers** | **Hash<String, String>** | Custom headers included in webhook requests | [optional] |
|
|
16
16
|
| **disabled_resource_groups** | **Array<String>** | Resource groups this subscription does not receive (opt-out denylist, same vocabulary and same semantics as the field on API keys). Absent or empty means the subscription receives every event listed in `events`, which is how every subscription created before this field existed behaves. An event whose group is listed here is dropped before delivery even when it is still present in `events`, and the same check runs on every replay path (test fire, redelivery, dead-letter requeue). Editing the denylist applies to every event emitted afterwards; events already queued when the edit landed can still be delivered for up to five minutes after they were enqueued. | [optional] |
|
|
17
17
|
|
|
@@ -237,7 +237,7 @@ module Zernio
|
|
|
237
237
|
end
|
|
238
238
|
|
|
239
239
|
# Create a standalone campaign
|
|
240
|
-
# Creates a campaign WITHOUT its first ad set / ad, on the platform of the given `accountId`. Ad sets join it later via `existingCampaignId` on the create endpoints. Platform notes: on Meta a budget here is campaign-level (CBO) by definition; omit it for ABO (each ad set carries its own budget), and `specialAdCategories` / `bidStrategy` are Meta-only (400 elsewhere). Google, X and OpenAI require a budget (422 without one; OpenAI accepts only `budgetType: lifetime`). LinkedIn creates the campaign GROUP (our campaign level) and rejects a budget, which lives on the campaign (ad set) level there; it comes back `status: DRAFT`. TikTok campaigns are created without a status and report `ENABLE`. Created `PAUSED` unless `status: ACTIVE` where the platform supports it. **Idempotency:** send an `Idempotency-Key` header to make retries safe.
|
|
240
|
+
# Creates a campaign WITHOUT its first ad set / ad, on the platform of the given `accountId`. Ad sets join it later via `existingCampaignId` on the create endpoints. Platform notes: on Meta a budget here is campaign-level (CBO) by definition; omit it for ABO (each ad set carries its own budget), and `specialAdCategories` / `bidStrategy` are Meta-only (400 elsewhere). Google, X and OpenAI require a budget (422 without one; OpenAI accepts only `budgetType: lifetime`, Google only `budgetType: daily`). LinkedIn creates the campaign GROUP (our campaign level) and rejects a budget, which lives on the campaign (ad set) level there; it comes back `status: DRAFT`. TikTok campaigns are created without a status and report `ENABLE`. Created `PAUSED` unless `status: ACTIVE` where the platform supports it. **Idempotency:** send an `Idempotency-Key` header to make retries safe.
|
|
241
241
|
# @param create_ad_campaign_request [CreateAdCampaignRequest]
|
|
242
242
|
# @param [Hash] opts the optional parameters
|
|
243
243
|
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. Only 2xx responses are stored, so a request that failed with a 4xx can be retried with a corrected body under the SAME key.
|
|
@@ -248,7 +248,7 @@ module Zernio
|
|
|
248
248
|
end
|
|
249
249
|
|
|
250
250
|
# Create a standalone campaign
|
|
251
|
-
# Creates a campaign WITHOUT its first ad set / ad, on the platform of the given `accountId`. Ad sets join it later via `existingCampaignId` on the create endpoints. Platform notes: on Meta a budget here is campaign-level (CBO) by definition; omit it for ABO (each ad set carries its own budget), and `specialAdCategories` / `bidStrategy` are Meta-only (400 elsewhere). Google, X and OpenAI require a budget (422 without one; OpenAI accepts only `budgetType: lifetime`). LinkedIn creates the campaign GROUP (our campaign level) and rejects a budget, which lives on the campaign (ad set) level there; it comes back `status: DRAFT`. TikTok campaigns are created without a status and report `ENABLE`. Created `PAUSED` unless `status: ACTIVE` where the platform supports it. **Idempotency:** send an `Idempotency-Key` header to make retries safe.
|
|
251
|
+
# Creates a campaign WITHOUT its first ad set / ad, on the platform of the given `accountId`. Ad sets join it later via `existingCampaignId` on the create endpoints. Platform notes: on Meta a budget here is campaign-level (CBO) by definition; omit it for ABO (each ad set carries its own budget), and `specialAdCategories` / `bidStrategy` are Meta-only (400 elsewhere). Google, X and OpenAI require a budget (422 without one; OpenAI accepts only `budgetType: lifetime`, Google only `budgetType: daily`). LinkedIn creates the campaign GROUP (our campaign level) and rejects a budget, which lives on the campaign (ad set) level there; it comes back `status: DRAFT`. TikTok campaigns are created without a status and report `ENABLE`. Created `PAUSED` unless `status: ACTIVE` where the platform supports it. **Idempotency:** send an `Idempotency-Key` header to make retries safe.
|
|
252
252
|
# @param create_ad_campaign_request [CreateAdCampaignRequest]
|
|
253
253
|
# @param [Hash] opts the optional parameters
|
|
254
254
|
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. Only 2xx responses are stored, so a request that failed with a 4xx can be retried with a corrected body under the SAME key.
|
|
@@ -226,7 +226,7 @@ module Zernio
|
|
|
226
226
|
# Google only
|
|
227
227
|
attr_accessor :campaign_type
|
|
228
228
|
|
|
229
|
-
# Google Search only. BROAD-match keywords on the new ad group
|
|
229
|
+
# Google Search only. BROAD-match keywords on the new ad group. Editable later via PUT /v1/ads/{adId} targeting.keywords, which also sets match types.
|
|
230
230
|
attr_accessor :keywords
|
|
231
231
|
|
|
232
232
|
# Google Search only; other platforms return 400. BROAD-match negative keywords on the new ad group. Editable later via PUT /v1/ads/{adId} targeting.negativeKeywords.
|
|
@@ -1121,6 +1121,10 @@ module Zernio
|
|
|
1121
1121
|
invalid_properties.push('invalid value for "translations", number of items must be greater than or equal to 1.')
|
|
1122
1122
|
end
|
|
1123
1123
|
|
|
1124
|
+
if !@keywords.nil? && @keywords.length > 1000
|
|
1125
|
+
invalid_properties.push('invalid value for "keywords", number of items must be less than or equal to 1000.')
|
|
1126
|
+
end
|
|
1127
|
+
|
|
1124
1128
|
if !@sitelinks.nil? && @sitelinks.length > 20
|
|
1125
1129
|
invalid_properties.push('invalid value for "sitelinks", number of items must be less than or equal to 20.')
|
|
1126
1130
|
end
|
|
@@ -1220,6 +1224,7 @@ module Zernio
|
|
|
1220
1224
|
return false if !@translations.nil? && @translations.length < 1
|
|
1221
1225
|
campaign_type_validator = EnumAttributeValidator.new('String', ["display", "search"])
|
|
1222
1226
|
return false unless campaign_type_validator.valid?(@campaign_type)
|
|
1227
|
+
return false if !@keywords.nil? && @keywords.length > 1000
|
|
1223
1228
|
return false if !@sitelinks.nil? && @sitelinks.length > 20
|
|
1224
1229
|
return false if !@sitelinks.nil? && @sitelinks.length < 2
|
|
1225
1230
|
return false if !@callouts.nil? && @callouts.length > 20
|
|
@@ -1616,6 +1621,20 @@ module Zernio
|
|
|
1616
1621
|
@campaign_type = campaign_type
|
|
1617
1622
|
end
|
|
1618
1623
|
|
|
1624
|
+
# Custom attribute writer method with validation
|
|
1625
|
+
# @param [Object] keywords Value to be assigned
|
|
1626
|
+
def keywords=(keywords)
|
|
1627
|
+
if keywords.nil?
|
|
1628
|
+
fail ArgumentError, 'keywords cannot be nil'
|
|
1629
|
+
end
|
|
1630
|
+
|
|
1631
|
+
if keywords.length > 1000
|
|
1632
|
+
fail ArgumentError, 'invalid value for "keywords", number of items must be less than or equal to 1000.'
|
|
1633
|
+
end
|
|
1634
|
+
|
|
1635
|
+
@keywords = keywords
|
|
1636
|
+
end
|
|
1637
|
+
|
|
1619
1638
|
# Custom attribute writer method with validation
|
|
1620
1639
|
# @param [Object] sitelinks Value to be assigned
|
|
1621
1640
|
def sitelinks=(sitelinks)
|
|
@@ -37,7 +37,7 @@ module Zernio
|
|
|
37
37
|
# Timestamp of last successful webhook delivery
|
|
38
38
|
attr_accessor :last_fired_at
|
|
39
39
|
|
|
40
|
-
# Consecutive delivery failures (resets on success
|
|
40
|
+
# Consecutive terminal delivery failures (resets to 0 on any successful delivery). Auto-disable only triggers when the endpoint has had no successful delivery within a 3-day window AND either reaches 20 consecutive terminal failures or has been failing continuously for 3 days; any success within that window keeps the endpoint enabled regardless of the count.
|
|
41
41
|
attr_accessor :failure_count
|
|
42
42
|
|
|
43
43
|
# Custom headers included in webhook requests
|
data/lib/zernio-sdk/version.rb
CHANGED
data/openapi.yaml
CHANGED
|
@@ -2465,7 +2465,13 @@ components:
|
|
|
2465
2465
|
description: Timestamp of last successful webhook delivery
|
|
2466
2466
|
failureCount:
|
|
2467
2467
|
type: integer
|
|
2468
|
-
description:
|
|
2468
|
+
description: >-
|
|
2469
|
+
Consecutive terminal delivery failures (resets to 0 on any
|
|
2470
|
+
successful delivery). Auto-disable only triggers when the endpoint
|
|
2471
|
+
has had no successful delivery within a 3-day window AND either
|
|
2472
|
+
reaches 20 consecutive terminal failures or has been failing
|
|
2473
|
+
continuously for 3 days; any success within that window keeps the
|
|
2474
|
+
endpoint enabled regardless of the count.
|
|
2469
2475
|
customHeaders:
|
|
2470
2476
|
type: object
|
|
2471
2477
|
additionalProperties:
|
|
@@ -41171,7 +41177,8 @@ paths:
|
|
|
41171
41177
|
Platform notes: on Meta a budget here is campaign-level (CBO) by definition; omit it
|
|
41172
41178
|
for ABO (each ad set carries its own budget), and `specialAdCategories` /
|
|
41173
41179
|
`bidStrategy` are Meta-only (400 elsewhere). Google, X and OpenAI require a budget
|
|
41174
|
-
(422 without one; OpenAI accepts only `budgetType: lifetime
|
|
41180
|
+
(422 without one; OpenAI accepts only `budgetType: lifetime`, Google only
|
|
41181
|
+
`budgetType: daily`). LinkedIn creates the
|
|
41175
41182
|
campaign GROUP (our campaign level) and rejects a budget, which lives on the
|
|
41176
41183
|
campaign (ad set) level there; it comes back `status: DRAFT`. TikTok campaigns are
|
|
41177
41184
|
created without a status and report `ENABLE`. Created `PAUSED` unless
|
|
@@ -45353,7 +45360,7 @@ paths:
|
|
|
45353
45360
|
items: { type: string, enum: [mobile, desktop] }
|
|
45354
45361
|
audienceId: { type: string, description: Custom audience ID for targeting }
|
|
45355
45362
|
campaignType: { type: string, enum: [display, search], default: display, description: Google only }
|
|
45356
|
-
keywords: { type: array, items: { type: string }, description: "Google Search only. BROAD-match keywords on the new ad group
|
|
45363
|
+
keywords: { type: array, maxItems: 1000, items: { type: string, maxLength: 80 }, description: "Google Search only. BROAD-match keywords on the new ad group. Editable later via PUT /v1/ads/{adId} targeting.keywords, which also sets match types." }
|
|
45357
45364
|
negativeKeywords: { type: array, items: { type: string, maxLength: 80 }, description: "Google Search only; other platforms return 400. BROAD-match negative keywords on the new ad group. Editable later via PUT /v1/ads/{adId} targeting.negativeKeywords." }
|
|
45358
45365
|
additionalHeadlines: { type: array, items: { type: string }, description: "Google Search RSA only. Extra headlines." }
|
|
45359
45366
|
additionalDescriptions: { type: array, items: { type: string }, description: "Google Search RSA only. Extra descriptions." }
|
|
@@ -72,7 +72,7 @@ describe 'AdCampaignsApi' do
|
|
|
72
72
|
|
|
73
73
|
# unit tests for create_ad_campaign
|
|
74
74
|
# Create a standalone campaign
|
|
75
|
-
# Creates a campaign WITHOUT its first ad set / ad, on the platform of the given `accountId`. Ad sets join it later via `existingCampaignId` on the create endpoints. Platform notes: on Meta a budget here is campaign-level (CBO) by definition; omit it for ABO (each ad set carries its own budget), and `specialAdCategories` / `bidStrategy` are Meta-only (400 elsewhere). Google, X and OpenAI require a budget (422 without one; OpenAI accepts only `budgetType: lifetime`). LinkedIn creates the campaign GROUP (our campaign level) and rejects a budget, which lives on the campaign (ad set) level there; it comes back `status: DRAFT`. TikTok campaigns are created without a status and report `ENABLE`. Created `PAUSED` unless `status: ACTIVE` where the platform supports it. **Idempotency:** send an `Idempotency-Key` header to make retries safe.
|
|
75
|
+
# Creates a campaign WITHOUT its first ad set / ad, on the platform of the given `accountId`. Ad sets join it later via `existingCampaignId` on the create endpoints. Platform notes: on Meta a budget here is campaign-level (CBO) by definition; omit it for ABO (each ad set carries its own budget), and `specialAdCategories` / `bidStrategy` are Meta-only (400 elsewhere). Google, X and OpenAI require a budget (422 without one; OpenAI accepts only `budgetType: lifetime`, Google only `budgetType: daily`). LinkedIn creates the campaign GROUP (our campaign level) and rejects a budget, which lives on the campaign (ad set) level there; it comes back `status: DRAFT`. TikTok campaigns are created without a status and report `ENABLE`. Created `PAUSED` unless `status: ACTIVE` where the platform supports it. **Idempotency:** send an `Idempotency-Key` header to make retries safe.
|
|
76
76
|
# @param create_ad_campaign_request
|
|
77
77
|
# @param [Hash] opts the optional parameters
|
|
78
78
|
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. Only 2xx responses are stored, so a request that failed with a 4xx can be retried with a corrected body under the SAME key.
|