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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 57e3c2f1f18945d62ff023b9abeb04ef10c3285fe967a755d0fbd79e4c89b5c3
4
- data.tar.gz: aa7c03739dbc8acd62392fe1357dabd786853e58a8d0fb80dfeb72260233234e
3
+ metadata.gz: 12b710f8813b9ca3a5a29b168723120d8212f3b07ac56c06e2836d766b50df9b
4
+ data.tar.gz: f7e1b77da631495fa6a0f596364de933fa990b7e7756e23b7b3997b94c15715e
5
5
  SHA512:
6
- metadata.gz: 5aed40fc73d2a78fc6e2d306ca0bfbadc97909273e3ef3e37524ccb1e69b8815e865900b91ac9ae6d71151e754022547f2a8cad83e1d1b63c0f60fe498f5dbac
7
- data.tar.gz: 2538f33495e294ef73d4a3513c7b7490eda58df086b2179967a0dd9ce7d7c45a286eef01424c343df865e6eeebbca26feb37ab0dfeac58f7d57c56c1f51cfa18
6
+ metadata.gz: e3d38f14db38cc93bf8dc8661f07b8afe3c5ada9472c093ba53a563b4de287577463aa52525ebe7de58fce9802e6ad56ef53fed0540a7b43b5273250d76ee89d
7
+ data.tar.gz: 2969423a05bf2d61779942dd19739251acf2f0df56afbec098ee17dcd0c1c358f9f67d6724776da645c3a9981a19191ea0e4bfdd13ed05d578d780d5adcbe5b0
@@ -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 (first 20). | [optional] |
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, webhook disabled at 10) | [optional] |
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 (first 20).
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, webhook disabled at 10)
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
@@ -11,5 +11,5 @@ Generator version: 7.19.0
11
11
  =end
12
12
 
13
13
  module Zernio
14
- VERSION = '0.0.839'
14
+ VERSION = '0.0.841'
15
15
  end
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: Consecutive delivery failures (resets on success, webhook disabled at 10)
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`). LinkedIn creates the
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 (first 20)." }
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 &#x60;accountId&#x60;. Ad sets join it later via &#x60;existingCampaignId&#x60; 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 &#x60;specialAdCategories&#x60; / &#x60;bidStrategy&#x60; are Meta-only (400 elsewhere). Google, X and OpenAI require a budget (422 without one; OpenAI accepts only &#x60;budgetType: lifetime&#x60;). LinkedIn creates the campaign GROUP (our campaign level) and rejects a budget, which lives on the campaign (ad set) level there; it comes back &#x60;status: DRAFT&#x60;. TikTok campaigns are created without a status and report &#x60;ENABLE&#x60;. Created &#x60;PAUSED&#x60; unless &#x60;status: ACTIVE&#x60; where the platform supports it. **Idempotency:** send an &#x60;Idempotency-Key&#x60; header to make retries safe.
75
+ # Creates a campaign WITHOUT its first ad set / ad, on the platform of the given &#x60;accountId&#x60;. Ad sets join it later via &#x60;existingCampaignId&#x60; 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 &#x60;specialAdCategories&#x60; / &#x60;bidStrategy&#x60; are Meta-only (400 elsewhere). Google, X and OpenAI require a budget (422 without one; OpenAI accepts only &#x60;budgetType: lifetime&#x60;, Google only &#x60;budgetType: daily&#x60;). LinkedIn creates the campaign GROUP (our campaign level) and rejects a budget, which lives on the campaign (ad set) level there; it comes back &#x60;status: DRAFT&#x60;. TikTok campaigns are created without a status and report &#x60;ENABLE&#x60;. Created &#x60;PAUSED&#x60; unless &#x60;status: ACTIVE&#x60; where the platform supports it. **Idempotency:** send an &#x60;Idempotency-Key&#x60; 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.