late-sdk 0.0.675 → 0.0.677

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: 9d3fab4f0aa1d71eda448e6c04d53c7bfda8afb247d2441782c6e5d68a59ac2c
4
- data.tar.gz: c2f728487a95bf8c3876a8a748ad5d026879224d5660d72930cffb7535945257
3
+ metadata.gz: 695b268267005192f0cf9c667549e50a5959c52ce4df344150a03fdc1382ac59
4
+ data.tar.gz: 302e86c98e3b04209f23799b2d381ee5cb0502b5aba04612ffb72b155c7794d2
5
5
  SHA512:
6
- metadata.gz: 4fdfb57af747a61ea8f584c147a29d47c1cab8657e179c24ae5a7fa2c33d947308e2e6789fd10a2149b29af4effbbb8311578fa12db94f90e47b4e1181e73079
7
- data.tar.gz: d40ff434ceab7a2c78bb83d24bcc80a23e0ac74bba819692aeb1729f305393d8112045d825059e6ed9488ce4c1f23689c5993ab44ff8ba59f19cfdef08c99635
6
+ metadata.gz: 0abf8aecf033c3c67512f9c2f086071fc1bff834aa4b28e9af89f07900c3c282ca383a43d2d4ffe6bf1809b9d01870aec5b21e5c9d0926f24fcaca993b8b6e78
7
+ data.tar.gz: 41eb5ae78ea684b4b2596377d41da64ebbf627fc8d5b2e77dd80a18482ac0d42a60d9e51540ab7704a532fc36bfeb87ef8164f17e99ee3dce0348e6d95af6c45
data/docs/ApiKey.md CHANGED
@@ -13,7 +13,7 @@
13
13
  | **scope** | **String** | 'full' grants access to all profiles, 'profiles' restricts to specific profiles | [optional][default to 'full'] |
14
14
  | **profile_ids** | [**Array<ApiKeyProfileIdsInner>**](ApiKeyProfileIdsInner.md) | Profiles this key can access (populated with name and color). Only present when scope is 'profiles'. | [optional] |
15
15
  | **permission** | **String** | 'read-write' allows all operations, 'read' restricts to GET requests only | [optional][default to 'read-write'] |
16
- | **disabled_resource_groups** | **Array<String>** | Resource groups this key can NOT access (opt-out denylist). Absent or empty means legacy full access. A key with any group disabled is a restricted key (zrk_ prefix) and can never manage API keys, invites, or member identity. Each operation's group is published as x-resource-group. With 'messages' disabled, the KEY cannot access private messages; the ACCOUNT's pre-existing webhook subscriptions are a separate grant surface. | [optional] |
16
+ | **disabled_resource_groups** | **Array<String>** | Resource groups this key can NOT access (opt-out denylist). Absent or empty means legacy full access. A key with any group disabled is a restricted key (zrk_ prefix) and can never manage API keys, invites, or member identity. Each operation's group is published as x-resource-group. With 'messages' disabled, the key cannot read or send private messages through any API surface, and it cannot create or edit a webhook subscription broader than itself: it cannot subscribe to, test-fire, redeliver, or read delivery logs for message events. Subscriptions created earlier, from the dashboard, or with a full-access key keep delivering whatever their own `disabledResourceGroups` allows, so restricting an existing integration end to end means restricting the subscription too. OAuth connector tokens (AI assistants and MCP clients) resolve against the same registry, but their groups are not settable yet: treat an authorized connector as full access. | [optional] |
17
17
 
18
18
  ## Example
19
19
 
@@ -9,7 +9,7 @@
9
9
  | **scope** | **String** | 'full' grants access to all profiles (default), 'profiles' restricts to specific profiles | [optional][default to 'full'] |
10
10
  | **profile_ids** | **Array<String>** | Profile IDs this key can access. Required when scope is 'profiles'. | [optional] |
11
11
  | **permission** | **String** | 'read-write' allows all operations (default), 'read' restricts to GET requests only | [optional][default to 'read-write'] |
12
- | **disabled_resource_groups** | **Array<String>** | Resource groups to DISABLE on this key (opt-out denylist). Omit for a legacy full-access key. A key with any group disabled mints with the zrk_ prefix, gets 403 with code=insufficient_permissions and required_group on operations in disabled groups (each operation's group is published as x-resource-group), and can never manage API keys, invites, or member identity. With 'messages' disabled, the KEY cannot access private messages; the ACCOUNT's pre-existing webhook subscriptions are a separate grant surface. | [optional] |
12
+ | **disabled_resource_groups** | **Array<String>** | Resource groups to DISABLE on this key (opt-out denylist). Omit for a legacy full-access key. A key with any group disabled mints with the zrk_ prefix, gets 403 with code=insufficient_permissions and required_group on operations in disabled groups (each operation's group is published as x-resource-group), and can never manage API keys, invites, or member identity. With 'messages' disabled, the key cannot read or send private messages through any API surface and cannot create or edit a webhook subscription broader than itself. Subscriptions that already exist are governed by their own `disabledResourceGroups`, not by this key's. OAuth connector tokens resolve against the same registry, but their groups are not settable yet. | [optional] |
13
13
 
14
14
  ## Example
15
15
 
@@ -64,7 +64,7 @@
64
64
  | **dynamic_creative** | [**CreateStandaloneAdRequestDynamicCreative**](CreateStandaloneAdRequestDynamicCreative.md) | | [optional] |
65
65
  | **carousel_cards** | [**Array<CreateStandaloneAdRequestCarouselCardsInner>**](CreateStandaloneAdRequestCarouselCardsInner.md) | Meta only. Hand-built carousel: 2-10 authored cards in DETERMINISTIC order, mapped to the creative's `link_data.child_attachments`. Unlike `dynamicCreative`, you control the card order and per-card copy/link. Requires top-level `body`, `linkUrl` and `callToAction`. Mutually exclusive with `imageUrl`/`video`, `creatives[]`, `dynamicCreative`, `placementAssets`, `existingCreativeId`, `adSetId`, `leadGenFormId` and goal `catalog_sales`. | [optional] |
66
66
  | **default_locale** | **String** | Meta only. Language the top-level copy is written in (e.g. `en`, `pt_BR`), used by the `translations` default rule. Defaults to `en`. Meta rejects a language asset feed whose default rule carries no locales of its own. Must NOT also appear as an entry in `translations`. | [optional] |
67
- | **translations** | [**Array<CreateStandaloneAdRequestTranslationsInner>**](CreateStandaloneAdRequestTranslationsInner.md) | Meta only. Multi-language ads (Dynamic Language Optimization): ONE ad carrying per-locale copy and, optionally, per-locale media — the \"Languages\" toggle in Ads Manager. Keeps social proof (likes/comments/shares) on a SINGLE post instead of splitting it across one ad per language. The ad's top-level copy is the DEFAULT shown to every locale you do NOT list, and it counts as one of the language variants. IMPORTANT, and the opposite of what you might expect: text does NOT inherit. Every entry must carry its own `headline`, `body` AND `description`, and all of them must be DISTINCT from each other and from the ad's top-level copy. Meta deduplicates identical strings inside the asset feed, so two locales sharing a string collapse into one asset and the create fails with a misleading \"Too few ... texts provided in asset creation\" (subcode 1885817) that names a field which is actually present. We validate this before calling Meta and return a 400 naming the offending locale and field. `description` is therefore effectively required on the ad whenever `translations` is present, even though it is optional otherwise. Do NOT list `defaultLocale` inside `translations`: Meta rejects the duplicate with \"The language asset feed includes an unsupported targeting field\" (subcode 1885985). Media DOES inherit and is uploaded once when shared. Note that Meta enforces Dynamic Creative image dimensions on language feeds, so an `imageUrl` that works on a normal ad may be rejected with \"The following images have invalid dimensions for Dynamic Creative\" (subcode 1885558). Video is not affected. Mutually exclusive with `dynamicCreative`, `placementAssets`, `carouselCards` and `existingCreativeId` — Meta allows one `asset_feed_spec` shape per creative. | [optional] |
67
+ | **translations** | [**Array<CreateStandaloneAdRequestTranslationsInner>**](CreateStandaloneAdRequestTranslationsInner.md) | Meta only. Multi-language ads (Dynamic Language Optimization): ONE ad carrying per-locale copy and, optionally, per-locale media — the \"Languages\" toggle in Ads Manager. Keeps social proof (likes/comments/shares) on a SINGLE post instead of splitting it across one ad per language. The ad's top-level copy is the DEFAULT shown to every locale you do NOT list, and it counts as one of the language variants. IMPORTANT, and the opposite of what you might expect: text does NOT inherit. Every entry must carry its own `headline`, `body` AND `description`, and all of them must be DISTINCT from each other and from the ad's top-level copy. Meta deduplicates identical strings inside the asset feed, so two locales sharing a string collapse into one asset and the create fails with a misleading \"Too few ... texts provided in asset creation\" (subcode 1885817) that names a field which is actually present. We validate this before calling Meta and return a 400 naming the offending locale and field. `description` is therefore effectively required on the ad whenever `translations` is present, even though it is optional otherwise. Do NOT list `defaultLocale` inside `translations`: Meta rejects the duplicate with \"The language asset feed includes an unsupported targeting field\" (subcode 1885985). Media DOES inherit and is uploaded once when shared, and `linkUrl` inherits too: each locale may name its own landing page and unlisted locales fall back to the ad's top-level `linkUrl`. Note that Meta enforces Dynamic Creative image dimensions on language feeds, so an `imageUrl` that works on a normal ad may be rejected with \"The following images have invalid dimensions for Dynamic Creative\" (subcode 1885558). Video is not affected. Mutually exclusive with `dynamicCreative`, `placementAssets`, `carouselCards` and `existingCreativeId` — Meta allows one `asset_feed_spec` shape per creative. | [optional] |
68
68
  | **placement_assets** | [**CreateStandaloneAdRequestPlacementAssets**](CreateStandaloneAdRequestPlacementAssets.md) | | [optional] |
69
69
  | **audience_id** | **String** | Custom audience ID for targeting | [optional] |
70
70
  | **campaign_type** | **String** | Google only | [optional][default to 'display'] |
@@ -8,6 +8,7 @@
8
8
  | **headline** | **String** | Headline for this language. REQUIRED, and must differ from every other locale and from the ad's top-level headline. | |
9
9
  | **body** | **String** | Primary text for this language. REQUIRED, and must differ from every other locale and from the ad's top-level body. | |
10
10
  | **description** | **String** | Link description for this language. REQUIRED, and must differ from every other locale and from the ad's top-level description. | |
11
+ | **link_url** | **String** | Destination URL for this language. Inherits the ad's top-level `linkUrl` when omitted, and requires it to be present (400 otherwise): the top-level URL is the destination for every locale you did not override. Unlike text, identical URLs across locales are fine (they share one asset). | [optional] |
11
12
  | **image_url** | **String** | Image for this language. Inherits the ad's `imageUrl` when omitted. The feed is all-image OR all-video. | [optional] |
12
13
  | **video_url** | **String** | Video for this language. Inherits the ad's `video.url` when omitted. The feed is all-image OR all-video. | [optional] |
13
14
  | **thumbnail_url** | **String** | Poster frame for this language's video. | [optional] |
@@ -22,6 +23,7 @@ instance = Zernio::CreateStandaloneAdRequestTranslationsInner.new(
22
23
  headline: null,
23
24
  body: null,
24
25
  description: null,
26
+ link_url: null,
25
27
  image_url: null,
26
28
  video_url: null,
27
29
  thumbnail_url: null
@@ -10,6 +10,7 @@
10
10
  | **events** | **Array<String>** | Events to subscribe to (at least one required) | |
11
11
  | **is_active** | **Boolean** | Enable or disable webhook delivery. Defaults to `true` when omitted. | [optional][default to true] |
12
12
  | **custom_headers** | **Hash<String, String>** | Custom headers to include in webhook requests | [optional] |
13
+ | **disabled_resource_groups** | **Array<String>** | Resource groups this subscription does not receive (opt-out denylist). Omit or send an empty array to receive every event in `events`. Listing a group here drops its events before delivery and on every replay path. Set at creation it applies to everything this subscription ever receives; changed later via PUT it applies to events emitted after the change, with a five-minute tail for events already queued (see that operation). When the caller is a restricted (zrk_) key, that key's own disabled groups are unioned into whatever you send here, so a restricted key can never create a subscription wider than itself. | [optional] |
13
14
 
14
15
  ## Example
15
16
 
@@ -22,7 +23,8 @@ instance = Zernio::CreateWebhookSettingsRequest.new(
22
23
  secret: null,
23
24
  events: null,
24
25
  is_active: null,
25
- custom_headers: null
26
+ custom_headers: null,
27
+ disabled_resource_groups: null
26
28
  )
27
29
  ```
28
30
 
@@ -11,6 +11,7 @@
11
11
  | **events** | **Array<String>** | Events to subscribe to. Must contain at least one event if provided. | [optional] |
12
12
  | **is_active** | **Boolean** | Enable or disable webhook delivery | [optional] |
13
13
  | **custom_headers** | **Hash<String, String>** | Custom headers to include in webhook requests | [optional] |
14
+ | **disabled_resource_groups** | **Array<String>** | Replaces the subscription's denylist. Send an empty array to clear it and receive every event in `events` again. Omitting the field leaves the current denylist untouched. Applies to events emitted after the update; already-queued events can still deliver for up to five minutes after they were enqueued. When the caller is a restricted (zrk_) key, that key's own disabled groups are unioned back in either way, so a restricted key can neither clear nor widen a subscription past its own groups. | [optional] |
14
15
 
15
16
  ## Example
16
17
 
@@ -24,7 +25,8 @@ instance = Zernio::UpdateWebhookSettingsRequest.new(
24
25
  secret: null,
25
26
  events: null,
26
27
  is_active: null,
27
- custom_headers: null
28
+ custom_headers: null,
29
+ disabled_resource_groups: null
28
30
  )
29
31
  ```
30
32
 
data/docs/Webhook.md CHANGED
@@ -13,6 +13,7 @@
13
13
  | **last_fired_at** | **Time** | Timestamp of last successful webhook delivery | [optional] |
14
14
  | **failure_count** | **Integer** | Consecutive delivery failures (resets on success, webhook disabled at 10) | [optional] |
15
15
  | **custom_headers** | **Hash<String, String>** | Custom headers included in webhook requests | [optional] |
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] |
16
17
 
17
18
  ## Example
18
19
 
@@ -28,7 +29,8 @@ instance = Zernio::Webhook.new(
28
29
  is_active: null,
29
30
  last_fired_at: null,
30
31
  failure_count: null,
31
- custom_headers: null
32
+ custom_headers: null,
33
+ disabled_resource_groups: null
32
34
  )
33
35
  ```
34
36
 
data/docs/WebhooksApi.md CHANGED
@@ -18,7 +18,7 @@ All URIs are relative to *https://zernio.com/api*
18
18
 
19
19
  Create webhook
20
20
 
21
- Create a new webhook configuration. Maximum 50 webhooks per user. `name`, `url` and `events` are required. `url` must be a valid URL and `events` must contain at least one event. Whitespace is trimmed from `url` before validation. Webhooks are automatically disabled after 10 consecutive delivery failures. A restricted (zrk_) API key can only subscribe to events whose resource group the key holds; an event outside the key's groups is rejected with 403. Note that the KEY cannot access private messages; the ACCOUNT's pre-existing webhook subscriptions are a separate grant surface.
21
+ Create a new webhook configuration. Maximum 50 webhooks per user. `name`, `url` and `events` are required. `url` must be a valid URL and `events` must contain at least one event. Whitespace is trimmed from `url` before validation. Webhooks are automatically disabled after 10 consecutive delivery failures. A restricted (zrk_) API key can only subscribe to events whose resource group the key holds; an event outside the key's groups is rejected with 403, so a restricted key can never create a subscription broader than itself. `disabledResourceGroups` restricts the subscription itself, independently of which key or session later reads it. Events in a disabled group are dropped before delivery to this endpoint, on live delivery and on every replay path (test fire, redelivery, dead-letter requeue), even if they are listed in `events`. Omit it to receive everything in `events`, which is how existing subscriptions behave. A restricted key's own disabled groups are always unioned in.
22
22
 
23
23
  ### Examples
24
24
 
@@ -156,7 +156,7 @@ end
156
156
 
157
157
  List webhook delivery logs
158
158
 
159
- Retrieve recorded webhook delivery attempts for the authenticated user, most recent first. Logs are retained for 30 days. Supports filtering by status, event type, webhook ID, and event ID, plus offset-based pagination. For a restricted (zrk_) API key, rows for events outside the key's resource groups are omitted (`pagination.total` may over-count), and an `event` filter naming such an event is rejected with 403.
159
+ Retrieve recorded webhook delivery attempts for the authenticated user, most recent first. Logs are retained for 30 days. Supports filtering by status, event type, webhook ID, and event ID, plus offset-based pagination. For a restricted (zrk_) API key, rows for events outside the key's resource groups are omitted (`pagination.total` may over-count), and an `event` filter naming such an event is rejected with 403. Events blocked by a subscription's own `disabledResourceGroups` are dropped before delivery, so they produce no log rows for anyone; the exception is the five-minute tail after a denylist change, where an already-queued event can still be delivered and logged.
160
160
 
161
161
  ### Examples
162
162
 
@@ -303,7 +303,7 @@ This endpoint does not need any parameter.
303
303
 
304
304
  Send test webhook
305
305
 
306
- Send a test webhook to verify your endpoint is configured correctly. The test payload includes event: \"webhook.test\" to distinguish it from real events.
306
+ Send a test webhook to verify your endpoint is configured correctly. The test payload includes event: \"webhook.test\" to distinguish it from real events. `webhook.test` belongs to the `webhooks` resource group, so a key with that group disabled is rejected with 403, as is a test fire on a subscription that lists `webhooks` in its own `disabledResourceGroups` (a 403, not a reported delivery failure). Replays of real events (redelivery, dead-letter requeue) run the same checks as live delivery, against both the key's groups and the subscription's.
307
307
 
308
308
  ### Examples
309
309
 
@@ -372,7 +372,7 @@ end
372
372
 
373
373
  Update webhook
374
374
 
375
- Update an existing webhook configuration. All fields except `_id` are optional; only provided fields will be updated. When provided, `name` must be 1-50 characters, `url` must be a valid URL, and `events` must contain at least one event. Whitespace is trimmed from `url` before validation. Webhooks are automatically disabled after 10 consecutive delivery failures. A restricted (zrk_) API key can only set `events` to events whose resource group the key holds; an event outside the key's groups is rejected with 403.
375
+ Update an existing webhook configuration. All fields except `_id` are optional; only provided fields will be updated. When provided, `name` must be 1-50 characters, `url` must be a valid URL, and `events` must contain at least one event. Whitespace is trimmed from `url` before validation. Webhooks are automatically disabled after 10 consecutive delivery failures. A restricted (zrk_) API key can only set `events` to events whose resource group the key holds; an event outside the key's groups is rejected with 403. It also cannot widen an existing subscription past its own groups. `disabledResourceGroups` replaces the subscription's own denylist, which applies to delivery regardless of which key or session created it. Send an empty array to clear it. A restricted key's own disabled groups are unioned into the stored value on every update, so repointing a legacy unrestricted subscription with a restricted key also narrows it. Timing: the new denylist applies to every event emitted after the update. Events already queued for delivery when the update landed were filtered against the previous denylist and can still arrive at your endpoint for up to five minutes after they were enqueued, because the delivery worker trusts a five-minute enqueue-time snapshot before re-checking the subscription. Retries beyond that window, dead-letter replays, test fires, and redeliveries are all checked against the current denylist.
376
376
 
377
377
  ### Examples
378
378
 
@@ -20,7 +20,7 @@ module Zernio
20
20
  @api_client = api_client
21
21
  end
22
22
  # Create webhook
23
- # Create a new webhook configuration. Maximum 50 webhooks per user. `name`, `url` and `events` are required. `url` must be a valid URL and `events` must contain at least one event. Whitespace is trimmed from `url` before validation. Webhooks are automatically disabled after 10 consecutive delivery failures. A restricted (zrk_) API key can only subscribe to events whose resource group the key holds; an event outside the key's groups is rejected with 403. Note that the KEY cannot access private messages; the ACCOUNT's pre-existing webhook subscriptions are a separate grant surface.
23
+ # Create a new webhook configuration. Maximum 50 webhooks per user. `name`, `url` and `events` are required. `url` must be a valid URL and `events` must contain at least one event. Whitespace is trimmed from `url` before validation. Webhooks are automatically disabled after 10 consecutive delivery failures. A restricted (zrk_) API key can only subscribe to events whose resource group the key holds; an event outside the key's groups is rejected with 403, so a restricted key can never create a subscription broader than itself. `disabledResourceGroups` restricts the subscription itself, independently of which key or session later reads it. Events in a disabled group are dropped before delivery to this endpoint, on live delivery and on every replay path (test fire, redelivery, dead-letter requeue), even if they are listed in `events`. Omit it to receive everything in `events`, which is how existing subscriptions behave. A restricted key's own disabled groups are always unioned in.
24
24
  # @param create_webhook_settings_request [CreateWebhookSettingsRequest]
25
25
  # @param [Hash] opts the optional parameters
26
26
  # @return [UpdateWebhookSettings200Response]
@@ -30,7 +30,7 @@ module Zernio
30
30
  end
31
31
 
32
32
  # Create webhook
33
- # Create a new webhook configuration. Maximum 50 webhooks per user. `name`, `url` and `events` are required. `url` must be a valid URL and `events` must contain at least one event. Whitespace is trimmed from `url` before validation. Webhooks are automatically disabled after 10 consecutive delivery failures. A restricted (zrk_) API key can only subscribe to events whose resource group the key holds; an event outside the key's groups is rejected with 403. Note that the KEY cannot access private messages; the ACCOUNT's pre-existing webhook subscriptions are a separate grant surface.
33
+ # Create a new webhook configuration. Maximum 50 webhooks per user. `name`, `url` and `events` are required. `url` must be a valid URL and `events` must contain at least one event. Whitespace is trimmed from `url` before validation. Webhooks are automatically disabled after 10 consecutive delivery failures. A restricted (zrk_) API key can only subscribe to events whose resource group the key holds; an event outside the key's groups is rejected with 403, so a restricted key can never create a subscription broader than itself. `disabledResourceGroups` restricts the subscription itself, independently of which key or session later reads it. Events in a disabled group are dropped before delivery to this endpoint, on live delivery and on every replay path (test fire, redelivery, dead-letter requeue), even if they are listed in `events`. Omit it to receive everything in `events`, which is how existing subscriptions behave. A restricted key's own disabled groups are always unioned in.
34
34
  # @param create_webhook_settings_request [CreateWebhookSettingsRequest]
35
35
  # @param [Hash] opts the optional parameters
36
36
  # @return [Array<(UpdateWebhookSettings200Response, Integer, Hash)>] UpdateWebhookSettings200Response data, response status code and response headers
@@ -152,7 +152,7 @@ module Zernio
152
152
  end
153
153
 
154
154
  # List webhook delivery logs
155
- # Retrieve recorded webhook delivery attempts for the authenticated user, most recent first. Logs are retained for 30 days. Supports filtering by status, event type, webhook ID, and event ID, plus offset-based pagination. For a restricted (zrk_) API key, rows for events outside the key's resource groups are omitted (`pagination.total` may over-count), and an `event` filter naming such an event is rejected with 403.
155
+ # Retrieve recorded webhook delivery attempts for the authenticated user, most recent first. Logs are retained for 30 days. Supports filtering by status, event type, webhook ID, and event ID, plus offset-based pagination. For a restricted (zrk_) API key, rows for events outside the key's resource groups are omitted (`pagination.total` may over-count), and an `event` filter naming such an event is rejected with 403. Events blocked by a subscription's own `disabledResourceGroups` are dropped before delivery, so they produce no log rows for anyone; the exception is the five-minute tail after a denylist change, where an already-queued event can still be delivered and logged.
156
156
  # @param [Hash] opts the optional parameters
157
157
  # @option opts [Integer] :limit Maximum number of logs to return (default to 50)
158
158
  # @option opts [Integer] :skip Number of logs to skip (offset-based pagination) (default to 0)
@@ -167,7 +167,7 @@ module Zernio
167
167
  end
168
168
 
169
169
  # List webhook delivery logs
170
- # Retrieve recorded webhook delivery attempts for the authenticated user, most recent first. Logs are retained for 30 days. Supports filtering by status, event type, webhook ID, and event ID, plus offset-based pagination. For a restricted (zrk_) API key, rows for events outside the key&#39;s resource groups are omitted (&#x60;pagination.total&#x60; may over-count), and an &#x60;event&#x60; filter naming such an event is rejected with 403.
170
+ # Retrieve recorded webhook delivery attempts for the authenticated user, most recent first. Logs are retained for 30 days. Supports filtering by status, event type, webhook ID, and event ID, plus offset-based pagination. For a restricted (zrk_) API key, rows for events outside the key&#39;s resource groups are omitted (&#x60;pagination.total&#x60; may over-count), and an &#x60;event&#x60; filter naming such an event is rejected with 403. Events blocked by a subscription&#39;s own &#x60;disabledResourceGroups&#x60; are dropped before delivery, so they produce no log rows for anyone; the exception is the five-minute tail after a denylist change, where an already-queued event can still be delivered and logged.
171
171
  # @param [Hash] opts the optional parameters
172
172
  # @option opts [Integer] :limit Maximum number of logs to return (default to 50)
173
173
  # @option opts [Integer] :skip Number of logs to skip (offset-based pagination) (default to 0)
@@ -328,7 +328,7 @@ module Zernio
328
328
  end
329
329
 
330
330
  # Send test webhook
331
- # Send a test webhook to verify your endpoint is configured correctly. The test payload includes event: \"webhook.test\" to distinguish it from real events.
331
+ # Send a test webhook to verify your endpoint is configured correctly. The test payload includes event: \"webhook.test\" to distinguish it from real events. `webhook.test` belongs to the `webhooks` resource group, so a key with that group disabled is rejected with 403, as is a test fire on a subscription that lists `webhooks` in its own `disabledResourceGroups` (a 403, not a reported delivery failure). Replays of real events (redelivery, dead-letter requeue) run the same checks as live delivery, against both the key's groups and the subscription's.
332
332
  # @param test_webhook_request [TestWebhookRequest]
333
333
  # @param [Hash] opts the optional parameters
334
334
  # @return [UnpublishPost200Response]
@@ -338,7 +338,7 @@ module Zernio
338
338
  end
339
339
 
340
340
  # Send test webhook
341
- # Send a test webhook to verify your endpoint is configured correctly. The test payload includes event: \&quot;webhook.test\&quot; to distinguish it from real events.
341
+ # Send a test webhook to verify your endpoint is configured correctly. The test payload includes event: \&quot;webhook.test\&quot; to distinguish it from real events. &#x60;webhook.test&#x60; belongs to the &#x60;webhooks&#x60; resource group, so a key with that group disabled is rejected with 403, as is a test fire on a subscription that lists &#x60;webhooks&#x60; in its own &#x60;disabledResourceGroups&#x60; (a 403, not a reported delivery failure). Replays of real events (redelivery, dead-letter requeue) run the same checks as live delivery, against both the key&#39;s groups and the subscription&#39;s.
342
342
  # @param test_webhook_request [TestWebhookRequest]
343
343
  # @param [Hash] opts the optional parameters
344
344
  # @return [Array<(UnpublishPost200Response, Integer, Hash)>] UnpublishPost200Response data, response status code and response headers
@@ -396,7 +396,7 @@ module Zernio
396
396
  end
397
397
 
398
398
  # Update webhook
399
- # Update an existing webhook configuration. All fields except `_id` are optional; only provided fields will be updated. When provided, `name` must be 1-50 characters, `url` must be a valid URL, and `events` must contain at least one event. Whitespace is trimmed from `url` before validation. Webhooks are automatically disabled after 10 consecutive delivery failures. A restricted (zrk_) API key can only set `events` to events whose resource group the key holds; an event outside the key's groups is rejected with 403.
399
+ # Update an existing webhook configuration. All fields except `_id` are optional; only provided fields will be updated. When provided, `name` must be 1-50 characters, `url` must be a valid URL, and `events` must contain at least one event. Whitespace is trimmed from `url` before validation. Webhooks are automatically disabled after 10 consecutive delivery failures. A restricted (zrk_) API key can only set `events` to events whose resource group the key holds; an event outside the key's groups is rejected with 403. It also cannot widen an existing subscription past its own groups. `disabledResourceGroups` replaces the subscription's own denylist, which applies to delivery regardless of which key or session created it. Send an empty array to clear it. A restricted key's own disabled groups are unioned into the stored value on every update, so repointing a legacy unrestricted subscription with a restricted key also narrows it. Timing: the new denylist applies to every event emitted after the update. Events already queued for delivery when the update landed were filtered against the previous denylist and can still arrive at your endpoint for up to five minutes after they were enqueued, because the delivery worker trusts a five-minute enqueue-time snapshot before re-checking the subscription. Retries beyond that window, dead-letter replays, test fires, and redeliveries are all checked against the current denylist.
400
400
  # @param update_webhook_settings_request [UpdateWebhookSettingsRequest]
401
401
  # @param [Hash] opts the optional parameters
402
402
  # @return [UpdateWebhookSettings200Response]
@@ -406,7 +406,7 @@ module Zernio
406
406
  end
407
407
 
408
408
  # Update webhook
409
- # Update an existing webhook configuration. All fields except &#x60;_id&#x60; are optional; only provided fields will be updated. When provided, &#x60;name&#x60; must be 1-50 characters, &#x60;url&#x60; must be a valid URL, and &#x60;events&#x60; must contain at least one event. Whitespace is trimmed from &#x60;url&#x60; before validation. Webhooks are automatically disabled after 10 consecutive delivery failures. A restricted (zrk_) API key can only set &#x60;events&#x60; to events whose resource group the key holds; an event outside the key&#39;s groups is rejected with 403.
409
+ # Update an existing webhook configuration. All fields except &#x60;_id&#x60; are optional; only provided fields will be updated. When provided, &#x60;name&#x60; must be 1-50 characters, &#x60;url&#x60; must be a valid URL, and &#x60;events&#x60; must contain at least one event. Whitespace is trimmed from &#x60;url&#x60; before validation. Webhooks are automatically disabled after 10 consecutive delivery failures. A restricted (zrk_) API key can only set &#x60;events&#x60; to events whose resource group the key holds; an event outside the key&#39;s groups is rejected with 403. It also cannot widen an existing subscription past its own groups. &#x60;disabledResourceGroups&#x60; replaces the subscription&#39;s own denylist, which applies to delivery regardless of which key or session created it. Send an empty array to clear it. A restricted key&#39;s own disabled groups are unioned into the stored value on every update, so repointing a legacy unrestricted subscription with a restricted key also narrows it. Timing: the new denylist applies to every event emitted after the update. Events already queued for delivery when the update landed were filtered against the previous denylist and can still arrive at your endpoint for up to five minutes after they were enqueued, because the delivery worker trusts a five-minute enqueue-time snapshot before re-checking the subscription. Retries beyond that window, dead-letter replays, test fires, and redeliveries are all checked against the current denylist.
410
410
  # @param update_webhook_settings_request [UpdateWebhookSettingsRequest]
411
411
  # @param [Hash] opts the optional parameters
412
412
  # @return [Array<(UpdateWebhookSettings200Response, Integer, Hash)>] UpdateWebhookSettings200Response data, response status code and response headers
@@ -37,7 +37,7 @@ module Zernio
37
37
  # 'read-write' allows all operations, 'read' restricts to GET requests only
38
38
  attr_accessor :permission
39
39
 
40
- # Resource groups this key can NOT access (opt-out denylist). Absent or empty means legacy full access. A key with any group disabled is a restricted key (zrk_ prefix) and can never manage API keys, invites, or member identity. Each operation's group is published as x-resource-group. With 'messages' disabled, the KEY cannot access private messages; the ACCOUNT's pre-existing webhook subscriptions are a separate grant surface.
40
+ # Resource groups this key can NOT access (opt-out denylist). Absent or empty means legacy full access. A key with any group disabled is a restricted key (zrk_ prefix) and can never manage API keys, invites, or member identity. Each operation's group is published as x-resource-group. With 'messages' disabled, the key cannot read or send private messages through any API surface, and it cannot create or edit a webhook subscription broader than itself: it cannot subscribe to, test-fire, redeliver, or read delivery logs for message events. Subscriptions created earlier, from the dashboard, or with a full-access key keep delivering whatever their own `disabledResourceGroups` allows, so restricting an existing integration end to end means restricting the subscription too. OAuth connector tokens (AI assistants and MCP clients) resolve against the same registry, but their groups are not settable yet: treat an authorized connector as full access.
41
41
  attr_accessor :disabled_resource_groups
42
42
 
43
43
  class EnumAttributeValidator
@@ -29,7 +29,7 @@ module Zernio
29
29
  # 'read-write' allows all operations (default), 'read' restricts to GET requests only
30
30
  attr_accessor :permission
31
31
 
32
- # Resource groups to DISABLE on this key (opt-out denylist). Omit for a legacy full-access key. A key with any group disabled mints with the zrk_ prefix, gets 403 with code=insufficient_permissions and required_group on operations in disabled groups (each operation's group is published as x-resource-group), and can never manage API keys, invites, or member identity. With 'messages' disabled, the KEY cannot access private messages; the ACCOUNT's pre-existing webhook subscriptions are a separate grant surface.
32
+ # Resource groups to DISABLE on this key (opt-out denylist). Omit for a legacy full-access key. A key with any group disabled mints with the zrk_ prefix, gets 403 with code=insufficient_permissions and required_group on operations in disabled groups (each operation's group is published as x-resource-group), and can never manage API keys, invites, or member identity. With 'messages' disabled, the key cannot read or send private messages through any API surface and cannot create or edit a webhook subscription broader than itself. Subscriptions that already exist are governed by their own `disabledResourceGroups`, not by this key's. OAuth connector tokens resolve against the same registry, but their groups are not settable yet.
33
33
  attr_accessor :disabled_resource_groups
34
34
 
35
35
  class EnumAttributeValidator
@@ -184,7 +184,7 @@ module Zernio
184
184
  # Meta only. Language the top-level copy is written in (e.g. `en`, `pt_BR`), used by the `translations` default rule. Defaults to `en`. Meta rejects a language asset feed whose default rule carries no locales of its own. Must NOT also appear as an entry in `translations`.
185
185
  attr_accessor :default_locale
186
186
 
187
- # Meta only. Multi-language ads (Dynamic Language Optimization): ONE ad carrying per-locale copy and, optionally, per-locale media — the \"Languages\" toggle in Ads Manager. Keeps social proof (likes/comments/shares) on a SINGLE post instead of splitting it across one ad per language. The ad's top-level copy is the DEFAULT shown to every locale you do NOT list, and it counts as one of the language variants. IMPORTANT, and the opposite of what you might expect: text does NOT inherit. Every entry must carry its own `headline`, `body` AND `description`, and all of them must be DISTINCT from each other and from the ad's top-level copy. Meta deduplicates identical strings inside the asset feed, so two locales sharing a string collapse into one asset and the create fails with a misleading \"Too few ... texts provided in asset creation\" (subcode 1885817) that names a field which is actually present. We validate this before calling Meta and return a 400 naming the offending locale and field. `description` is therefore effectively required on the ad whenever `translations` is present, even though it is optional otherwise. Do NOT list `defaultLocale` inside `translations`: Meta rejects the duplicate with \"The language asset feed includes an unsupported targeting field\" (subcode 1885985). Media DOES inherit and is uploaded once when shared. Note that Meta enforces Dynamic Creative image dimensions on language feeds, so an `imageUrl` that works on a normal ad may be rejected with \"The following images have invalid dimensions for Dynamic Creative\" (subcode 1885558). Video is not affected. Mutually exclusive with `dynamicCreative`, `placementAssets`, `carouselCards` and `existingCreativeId` — Meta allows one `asset_feed_spec` shape per creative.
187
+ # Meta only. Multi-language ads (Dynamic Language Optimization): ONE ad carrying per-locale copy and, optionally, per-locale media — the \"Languages\" toggle in Ads Manager. Keeps social proof (likes/comments/shares) on a SINGLE post instead of splitting it across one ad per language. The ad's top-level copy is the DEFAULT shown to every locale you do NOT list, and it counts as one of the language variants. IMPORTANT, and the opposite of what you might expect: text does NOT inherit. Every entry must carry its own `headline`, `body` AND `description`, and all of them must be DISTINCT from each other and from the ad's top-level copy. Meta deduplicates identical strings inside the asset feed, so two locales sharing a string collapse into one asset and the create fails with a misleading \"Too few ... texts provided in asset creation\" (subcode 1885817) that names a field which is actually present. We validate this before calling Meta and return a 400 naming the offending locale and field. `description` is therefore effectively required on the ad whenever `translations` is present, even though it is optional otherwise. Do NOT list `defaultLocale` inside `translations`: Meta rejects the duplicate with \"The language asset feed includes an unsupported targeting field\" (subcode 1885985). Media DOES inherit and is uploaded once when shared, and `linkUrl` inherits too: each locale may name its own landing page and unlisted locales fall back to the ad's top-level `linkUrl`. Note that Meta enforces Dynamic Creative image dimensions on language feeds, so an `imageUrl` that works on a normal ad may be rejected with \"The following images have invalid dimensions for Dynamic Creative\" (subcode 1885558). Video is not affected. Mutually exclusive with `dynamicCreative`, `placementAssets`, `carouselCards` and `existingCreativeId` — Meta allows one `asset_feed_spec` shape per creative.
188
188
  attr_accessor :translations
189
189
 
190
190
  attr_accessor :placement_assets
@@ -27,6 +27,9 @@ module Zernio
27
27
  # Link description for this language. REQUIRED, and must differ from every other locale and from the ad's top-level description.
28
28
  attr_accessor :description
29
29
 
30
+ # Destination URL for this language. Inherits the ad's top-level `linkUrl` when omitted, and requires it to be present (400 otherwise): the top-level URL is the destination for every locale you did not override. Unlike text, identical URLs across locales are fine (they share one asset).
31
+ attr_accessor :link_url
32
+
30
33
  # Image for this language. Inherits the ad's `imageUrl` when omitted. The feed is all-image OR all-video.
31
34
  attr_accessor :image_url
32
35
 
@@ -43,6 +46,7 @@ module Zernio
43
46
  :'headline' => :'headline',
44
47
  :'body' => :'body',
45
48
  :'description' => :'description',
49
+ :'link_url' => :'linkUrl',
46
50
  :'image_url' => :'imageUrl',
47
51
  :'video_url' => :'videoUrl',
48
52
  :'thumbnail_url' => :'thumbnailUrl'
@@ -66,6 +70,7 @@ module Zernio
66
70
  :'headline' => :'String',
67
71
  :'body' => :'String',
68
72
  :'description' => :'String',
73
+ :'link_url' => :'String',
69
74
  :'image_url' => :'String',
70
75
  :'video_url' => :'String',
71
76
  :'thumbnail_url' => :'String'
@@ -118,6 +123,10 @@ module Zernio
118
123
  self.description = nil
119
124
  end
120
125
 
126
+ if attributes.key?(:'link_url')
127
+ self.link_url = attributes[:'link_url']
128
+ end
129
+
121
130
  if attributes.key?(:'image_url')
122
131
  self.image_url = attributes[:'image_url']
123
132
  end
@@ -233,6 +242,7 @@ module Zernio
233
242
  headline == o.headline &&
234
243
  body == o.body &&
235
244
  description == o.description &&
245
+ link_url == o.link_url &&
236
246
  image_url == o.image_url &&
237
247
  video_url == o.video_url &&
238
248
  thumbnail_url == o.thumbnail_url
@@ -247,7 +257,7 @@ module Zernio
247
257
  # Calculates hash code according to all attributes.
248
258
  # @return [Integer] Hash code
249
259
  def hash
250
- [locale, headline, body, description, image_url, video_url, thumbnail_url].hash
260
+ [locale, headline, body, description, link_url, image_url, video_url, thumbnail_url].hash
251
261
  end
252
262
 
253
263
  # Builds the object from hash
@@ -33,6 +33,9 @@ module Zernio
33
33
  # Custom headers to include in webhook requests
34
34
  attr_accessor :custom_headers
35
35
 
36
+ # Resource groups this subscription does not receive (opt-out denylist). Omit or send an empty array to receive every event in `events`. Listing a group here drops its events before delivery and on every replay path. Set at creation it applies to everything this subscription ever receives; changed later via PUT it applies to events emitted after the change, with a five-minute tail for events already queued (see that operation). When the caller is a restricted (zrk_) key, that key's own disabled groups are unioned into whatever you send here, so a restricted key can never create a subscription wider than itself.
37
+ attr_accessor :disabled_resource_groups
38
+
36
39
  class EnumAttributeValidator
37
40
  attr_reader :datatype
38
41
  attr_reader :allowable_values
@@ -63,7 +66,8 @@ module Zernio
63
66
  :'secret' => :'secret',
64
67
  :'events' => :'events',
65
68
  :'is_active' => :'isActive',
66
- :'custom_headers' => :'customHeaders'
69
+ :'custom_headers' => :'customHeaders',
70
+ :'disabled_resource_groups' => :'disabledResourceGroups'
67
71
  }
68
72
  end
69
73
 
@@ -85,7 +89,8 @@ module Zernio
85
89
  :'secret' => :'String',
86
90
  :'events' => :'Array<String>',
87
91
  :'is_active' => :'Boolean',
88
- :'custom_headers' => :'Hash<String, String>'
92
+ :'custom_headers' => :'Hash<String, String>',
93
+ :'disabled_resource_groups' => :'Array<String>'
89
94
  }
90
95
  end
91
96
 
@@ -146,6 +151,12 @@ module Zernio
146
151
  self.custom_headers = value
147
152
  end
148
153
  end
154
+
155
+ if attributes.key?(:'disabled_resource_groups')
156
+ if (value = attributes[:'disabled_resource_groups']).is_a?(Array)
157
+ self.disabled_resource_groups = value
158
+ end
159
+ end
149
160
  end
150
161
 
151
162
  # Show invalid properties with the reasons. Usually used together with valid?
@@ -231,7 +242,8 @@ module Zernio
231
242
  secret == o.secret &&
232
243
  events == o.events &&
233
244
  is_active == o.is_active &&
234
- custom_headers == o.custom_headers
245
+ custom_headers == o.custom_headers &&
246
+ disabled_resource_groups == o.disabled_resource_groups
235
247
  end
236
248
 
237
249
  # @see the `==` method
@@ -243,7 +255,7 @@ module Zernio
243
255
  # Calculates hash code according to all attributes.
244
256
  # @return [Integer] Hash code
245
257
  def hash
246
- [name, url, secret, events, is_active, custom_headers].hash
258
+ [name, url, secret, events, is_active, custom_headers, disabled_resource_groups].hash
247
259
  end
248
260
 
249
261
  # Builds the object from hash
@@ -36,6 +36,9 @@ module Zernio
36
36
  # Custom headers to include in webhook requests
37
37
  attr_accessor :custom_headers
38
38
 
39
+ # Replaces the subscription's denylist. Send an empty array to clear it and receive every event in `events` again. Omitting the field leaves the current denylist untouched. Applies to events emitted after the update; already-queued events can still deliver for up to five minutes after they were enqueued. When the caller is a restricted (zrk_) key, that key's own disabled groups are unioned back in either way, so a restricted key can neither clear nor widen a subscription past its own groups.
40
+ attr_accessor :disabled_resource_groups
41
+
39
42
  class EnumAttributeValidator
40
43
  attr_reader :datatype
41
44
  attr_reader :allowable_values
@@ -67,7 +70,8 @@ module Zernio
67
70
  :'secret' => :'secret',
68
71
  :'events' => :'events',
69
72
  :'is_active' => :'isActive',
70
- :'custom_headers' => :'customHeaders'
73
+ :'custom_headers' => :'customHeaders',
74
+ :'disabled_resource_groups' => :'disabledResourceGroups'
71
75
  }
72
76
  end
73
77
 
@@ -90,7 +94,8 @@ module Zernio
90
94
  :'secret' => :'String',
91
95
  :'events' => :'Array<String>',
92
96
  :'is_active' => :'Boolean',
93
- :'custom_headers' => :'Hash<String, String>'
97
+ :'custom_headers' => :'Hash<String, String>',
98
+ :'disabled_resource_groups' => :'Array<String>'
94
99
  }
95
100
  end
96
101
 
@@ -149,6 +154,12 @@ module Zernio
149
154
  self.custom_headers = value
150
155
  end
151
156
  end
157
+
158
+ if attributes.key?(:'disabled_resource_groups')
159
+ if (value = attributes[:'disabled_resource_groups']).is_a?(Array)
160
+ self.disabled_resource_groups = value
161
+ end
162
+ end
152
163
  end
153
164
 
154
165
  # Show invalid properties with the reasons. Usually used together with valid?
@@ -225,7 +236,8 @@ module Zernio
225
236
  secret == o.secret &&
226
237
  events == o.events &&
227
238
  is_active == o.is_active &&
228
- custom_headers == o.custom_headers
239
+ custom_headers == o.custom_headers &&
240
+ disabled_resource_groups == o.disabled_resource_groups
229
241
  end
230
242
 
231
243
  # @see the `==` method
@@ -237,7 +249,7 @@ module Zernio
237
249
  # Calculates hash code according to all attributes.
238
250
  # @return [Integer] Hash code
239
251
  def hash
240
- [_id, name, url, secret, events, is_active, custom_headers].hash
252
+ [_id, name, url, secret, events, is_active, custom_headers, disabled_resource_groups].hash
241
253
  end
242
254
 
243
255
  # Builds the object from hash
@@ -43,6 +43,9 @@ module Zernio
43
43
  # Custom headers included in webhook requests
44
44
  attr_accessor :custom_headers
45
45
 
46
+ # 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.
47
+ attr_accessor :disabled_resource_groups
48
+
46
49
  class EnumAttributeValidator
47
50
  attr_reader :datatype
48
51
  attr_reader :allowable_values
@@ -76,7 +79,8 @@ module Zernio
76
79
  :'is_active' => :'isActive',
77
80
  :'last_fired_at' => :'lastFiredAt',
78
81
  :'failure_count' => :'failureCount',
79
- :'custom_headers' => :'customHeaders'
82
+ :'custom_headers' => :'customHeaders',
83
+ :'disabled_resource_groups' => :'disabledResourceGroups'
80
84
  }
81
85
  end
82
86
 
@@ -101,7 +105,8 @@ module Zernio
101
105
  :'is_active' => :'Boolean',
102
106
  :'last_fired_at' => :'Time',
103
107
  :'failure_count' => :'Integer',
104
- :'custom_headers' => :'Hash<String, String>'
108
+ :'custom_headers' => :'Hash<String, String>',
109
+ :'disabled_resource_groups' => :'Array<String>'
105
110
  }
106
111
  end
107
112
 
@@ -166,6 +171,12 @@ module Zernio
166
171
  self.custom_headers = value
167
172
  end
168
173
  end
174
+
175
+ if attributes.key?(:'disabled_resource_groups')
176
+ if (value = attributes[:'disabled_resource_groups']).is_a?(Array)
177
+ self.disabled_resource_groups = value
178
+ end
179
+ end
169
180
  end
170
181
 
171
182
  # Show invalid properties with the reasons. Usually used together with valid?
@@ -215,7 +226,8 @@ module Zernio
215
226
  is_active == o.is_active &&
216
227
  last_fired_at == o.last_fired_at &&
217
228
  failure_count == o.failure_count &&
218
- custom_headers == o.custom_headers
229
+ custom_headers == o.custom_headers &&
230
+ disabled_resource_groups == o.disabled_resource_groups
219
231
  end
220
232
 
221
233
  # @see the `==` method
@@ -227,7 +239,7 @@ module Zernio
227
239
  # Calculates hash code according to all attributes.
228
240
  # @return [Integer] Hash code
229
241
  def hash
230
- [_id, name, url, secret, events, is_active, last_fired_at, failure_count, custom_headers].hash
242
+ [_id, name, url, secret, events, is_active, last_fired_at, failure_count, custom_headers, disabled_resource_groups].hash
231
243
  end
232
244
 
233
245
  # Builds the object from hash
@@ -11,5 +11,5 @@ Generator version: 7.19.0
11
11
  =end
12
12
 
13
13
  module Zernio
14
- VERSION = '0.0.675'
14
+ VERSION = '0.0.677'
15
15
  end
data/openapi.yaml CHANGED
@@ -226,10 +226,14 @@ tags:
226
226
  - name: API Keys
227
227
  description: |
228
228
  Create, list, and revoke API keys used to authenticate requests.
229
+
230
+ Resource groups. A key can opt out of any of the ten groups (publishing, engagement, messages, contacts, analytics, ads, telephony, accounts, billing, webhooks) via `disabledResourceGroups` at creation. Omit the field for a legacy full-access key. A key with any group disabled mints with the `zrk_` prefix, is refused on operations in those groups with 403 `insufficient_permissions` plus `required_group`, and can never manage API keys, invites, connected apps, or member identity. Each operation publishes its group as `x-resource-group`. There is no update endpoint: duplicate the key with different groups and revoke the old one.
229
231
  - name: Connected Apps
230
232
  description: |
231
233
  List and revoke the OAuth clients (AI assistants and MCP connectors) authorized
232
234
  on the account.
235
+
236
+ Connector tokens resolve against the same resource-group registry as API keys, but there is no way to narrow a connector's groups yet. Treat an authorized connector as full account access and revoke it if that is not what you want.
233
237
  - name: Invites
234
238
  description: |
235
239
  Generate invite tokens for adding members to a team.
@@ -410,6 +414,8 @@ tags:
410
414
  Configure webhooks for real-time notifications. Webhooks can be created from the dashboard (Settings → Webhooks) or via this API.
411
415
  Events: post.scheduled, post.published, post.failed, post.partial, post.cancelled, post.recycled, post.platform.published, post.platform.failed, post.platform.deleted, post.tiktok.url_resolved, post.external.created, post.external.updated, post.external.deleted, account.connected, account.disconnected, account.ads.initial_sync_completed, message.received, conversation.started, call.received, call.ended, call.failed, call.permission_request, message.sent, message.edited, message.deleted, message.delivered, message.read, message.failed, reaction.received, comment.received, review.new, review.updated, lead.received, ad.status_changed, whatsapp.template.status_updated, whatsapp.automatic_event, whatsapp.number.activated, whatsapp.number.declined, whatsapp.number.action_required, whatsapp.number.verification_required, whatsapp.number.suspended, whatsapp.number.reactivated, whatsapp.number.released, whatsapp.number.kyc_submitted, verification.approved, verification.failed, webhook.test.
412
416
  Security: optional HMAC-SHA256 signature in X-Zernio-Signature header. Configure a secret key to enable verification. Custom headers supported.
417
+
418
+ Resource groups. Every event belongs to one group: post.* to publishing, message.*, reaction.*, conversation.*, call.* and whatsapp.automatic_event to messages, comment.* and review.* to engagement, lead.* to contacts, ad.* to ads, account.* and whatsapp.template.* to accounts, whatsapp.number.* and verification.* to telephony, webhook.test to webhooks. Two independent controls use that mapping. (1) A restricted (zrk_) API key can only subscribe to, test-fire, redeliver, or read delivery logs for events in the groups it holds, so it can never create a subscription broader than itself. (2) Each subscription carries its own `disabledResourceGroups` denylist: events in a disabled group are dropped before delivery to that endpoint, on live delivery and on every replay path, no matter which key or session created the subscription. Changing that denylist applies to every event emitted after the change; events already queued when it landed can still be delivered for up to five minutes after they were enqueued, because the delivery worker trusts a five-minute enqueue-time snapshot before re-checking. Absent or empty on a subscription means it receives everything it subscribes to, which is the behavior of every subscription created before the field existed.
413
419
  - name: Webhook Events
414
420
  description: |
415
421
  Incoming webhook deliveries sent by Zernio to your configured endpoint URL.
@@ -554,10 +560,11 @@ components:
554
560
  member identity), which is never grantable to restricted keys; the
555
561
  error reads "Restricted API keys cannot manage API keys, invites, or
556
562
  member identity." and the fix is a full-access key or the dashboard,
557
- never a new restricted key. (3) On webhook subscription writes and
558
- delivery-log reads, a named event maps to a resource group the key
559
- does not hold (a no-messages key cannot subscribe to or replay
560
- message.* events).
563
+ never a new restricted key. (3) On webhook subscription writes,
564
+ delivery-log reads and replays, a named event maps to a resource group
565
+ the key does not hold, so a restricted key can never create or edit a
566
+ subscription broader than itself (a no-messages key cannot subscribe
567
+ to, test-fire, redeliver or read logs for message.* events).
561
568
  content:
562
569
  application/json:
563
570
  schema:
@@ -2239,6 +2246,23 @@ components:
2239
2246
  additionalProperties:
2240
2247
  type: string
2241
2248
  description: Custom headers included in webhook requests
2249
+ disabledResourceGroups:
2250
+ type: array
2251
+ items:
2252
+ type: string
2253
+ enum: [publishing, engagement, messages, contacts, analytics, ads, telephony, accounts, billing, webhooks]
2254
+ description: >-
2255
+ Resource groups this subscription does not receive (opt-out
2256
+ denylist, same vocabulary and same semantics as the field on API
2257
+ keys). Absent or empty means the subscription receives every event
2258
+ listed in `events`, which is how every subscription created before
2259
+ this field existed behaves. An event whose group is listed here is
2260
+ dropped before delivery even when it is still present in `events`,
2261
+ and the same check runs on every replay path (test fire,
2262
+ redelivery, dead-letter requeue). Editing the denylist applies to
2263
+ every event emitted afterwards; events already queued when the edit
2264
+ landed can still be delivered for up to five minutes after they
2265
+ were enqueued.
2242
2266
  WebhookLog:
2243
2267
  type: object
2244
2268
  description: A single webhook delivery attempt recorded by Zernio (30-day retention).
@@ -5832,9 +5856,17 @@ components:
5832
5856
  or empty means legacy full access. A key with any group disabled is
5833
5857
  a restricted key (zrk_ prefix) and can never manage API keys,
5834
5858
  invites, or member identity. Each operation's group is published as
5835
- x-resource-group. With 'messages' disabled, the KEY cannot access
5836
- private messages; the ACCOUNT's pre-existing webhook subscriptions
5837
- are a separate grant surface.
5859
+ x-resource-group. With 'messages' disabled, the key cannot read or
5860
+ send private messages through any API surface, and it cannot create
5861
+ or edit a webhook subscription broader than itself: it cannot
5862
+ subscribe to, test-fire, redeliver, or read delivery logs for
5863
+ message events. Subscriptions created earlier, from the dashboard,
5864
+ or with a full-access key keep delivering whatever their own
5865
+ `disabledResourceGroups` allows, so restricting an existing
5866
+ integration end to end means restricting the subscription too.
5867
+ OAuth connector tokens (AI assistants and MCP clients) resolve
5868
+ against the same registry, but their groups are not settable yet:
5869
+ treat an authorized connector as full access.
5838
5870
  ConnectedApp:
5839
5871
  type: object
5840
5872
  description: |
@@ -15146,9 +15178,13 @@ paths:
15146
15178
  operations in disabled groups (each operation's group is
15147
15179
  published as x-resource-group), and can never manage API
15148
15180
  keys, invites, or member identity. With 'messages'
15149
- disabled, the KEY cannot access private messages; the
15150
- ACCOUNT's pre-existing webhook subscriptions are a
15151
- separate grant surface.
15181
+ disabled, the key cannot read or send private messages
15182
+ through any API surface and cannot create or edit a
15183
+ webhook subscription broader than itself. Subscriptions
15184
+ that already exist are governed by their own
15185
+ `disabledResourceGroups`, not by this key's. OAuth
15186
+ connector tokens resolve against the same registry, but
15187
+ their groups are not settable yet.
15152
15188
  example:
15153
15189
  name: "No Private Messages Key"
15154
15190
  disabledResourceGroups: ["messages", "contacts", "webhooks"]
@@ -22510,6 +22546,7 @@ paths:
22510
22546
  isActive: true
22511
22547
  failureCount: 0
22512
22548
  '401': { $ref: '#/components/responses/Unauthorized' }
22549
+ '403': { $ref: '#/components/responses/ResourceGroupForbidden' }
22513
22550
  post:
22514
22551
  x-resource-group: "webhooks"
22515
22552
  operationId: createWebhookSettings
@@ -22523,9 +22560,16 @@ paths:
22523
22560
  Webhooks are automatically disabled after 10 consecutive delivery failures.
22524
22561
 
22525
22562
  A restricted (zrk_) API key can only subscribe to events whose resource group
22526
- the key holds; an event outside the key's groups is rejected with 403. Note
22527
- that the KEY cannot access private messages; the ACCOUNT's pre-existing
22528
- webhook subscriptions are a separate grant surface.
22563
+ the key holds; an event outside the key's groups is rejected with 403, so a
22564
+ restricted key can never create a subscription broader than itself.
22565
+
22566
+ `disabledResourceGroups` restricts the subscription itself, independently of
22567
+ which key or session later reads it. Events in a disabled group are dropped
22568
+ before delivery to this endpoint, on live delivery and on every replay path
22569
+ (test fire, redelivery, dead-letter requeue), even if they are listed in
22570
+ `events`. Omit it to receive everything in `events`, which is how existing
22571
+ subscriptions behave. A restricted key's own disabled groups are always
22572
+ unioned in.
22529
22573
  security:
22530
22574
  - bearerAuth: []
22531
22575
  requestBody:
@@ -22567,6 +22611,23 @@ paths:
22567
22611
  additionalProperties:
22568
22612
  type: string
22569
22613
  description: Custom headers to include in webhook requests
22614
+ disabledResourceGroups:
22615
+ type: array
22616
+ items:
22617
+ type: string
22618
+ enum: [publishing, engagement, messages, contacts, analytics, ads, telephony, accounts, billing, webhooks]
22619
+ description: >-
22620
+ Resource groups this subscription does not receive
22621
+ (opt-out denylist). Omit or send an empty array to receive
22622
+ every event in `events`. Listing a group here drops its
22623
+ events before delivery and on every replay path. Set at
22624
+ creation it applies to everything this subscription ever
22625
+ receives; changed later via PUT it applies to events
22626
+ emitted after the change, with a five-minute tail for
22627
+ events already queued (see that operation). When the caller
22628
+ is a restricted (zrk_) key, that key's own disabled groups
22629
+ are unioned into whatever you send here, so a restricted
22630
+ key can never create a subscription wider than itself.
22570
22631
  examples:
22571
22632
  createWebhook:
22572
22633
  summary: Create webhook with all events
@@ -22576,6 +22637,14 @@ paths:
22576
22637
  secret: "your-secret-key"
22577
22638
  events: ["post.scheduled", "post.published", "post.failed", "post.partial", "post.cancelled", "post.recycled", "account.connected", "account.disconnected", "account.ads.initial_sync_completed", "message.received", "message.sent", "message.edited", "message.deleted", "message.delivered", "message.read", "message.failed", "comment.received", "review.new", "review.updated", "ad.status_changed"]
22578
22639
  isActive: true
22640
+ createWebhookWithoutMessages:
22641
+ summary: Subscription that does not receive private message payloads
22642
+ value:
22643
+ name: "Publishing Webhook"
22644
+ url: "https://example.com/webhook"
22645
+ events: ["post.published", "post.failed", "comment.received"]
22646
+ disabledResourceGroups: ["messages", "contacts"]
22647
+ isActive: true
22579
22648
  responses:
22580
22649
  '200':
22581
22650
  description: Webhook created successfully
@@ -22604,6 +22673,21 @@ paths:
22604
22673
 
22605
22674
  A restricted (zrk_) API key can only set `events` to events whose resource
22606
22675
  group the key holds; an event outside the key's groups is rejected with 403.
22676
+ It also cannot widen an existing subscription past its own groups.
22677
+
22678
+ `disabledResourceGroups` replaces the subscription's own denylist, which
22679
+ applies to delivery regardless of which key or session created it. Send an
22680
+ empty array to clear it. A restricted key's own disabled groups are unioned
22681
+ into the stored value on every update, so repointing a legacy unrestricted
22682
+ subscription with a restricted key also narrows it.
22683
+
22684
+ Timing: the new denylist applies to every event emitted after the update.
22685
+ Events already queued for delivery when the update landed were filtered
22686
+ against the previous denylist and can still arrive at your endpoint for up
22687
+ to five minutes after they were enqueued, because the delivery worker
22688
+ trusts a five-minute enqueue-time snapshot before re-checking the
22689
+ subscription. Retries beyond that window, dead-letter replays, test fires,
22690
+ and redeliveries are all checked against the current denylist.
22607
22691
  security:
22608
22692
  - bearerAuth: []
22609
22693
  requestBody:
@@ -22645,6 +22729,21 @@ paths:
22645
22729
  additionalProperties:
22646
22730
  type: string
22647
22731
  description: Custom headers to include in webhook requests
22732
+ disabledResourceGroups:
22733
+ type: array
22734
+ items:
22735
+ type: string
22736
+ enum: [publishing, engagement, messages, contacts, analytics, ads, telephony, accounts, billing, webhooks]
22737
+ description: >-
22738
+ Replaces the subscription's denylist. Send an empty array
22739
+ to clear it and receive every event in `events` again.
22740
+ Omitting the field leaves the current denylist untouched.
22741
+ Applies to events emitted after the update; already-queued
22742
+ events can still deliver for up to five minutes after they
22743
+ were enqueued. When the caller is a restricted (zrk_) key,
22744
+ that key's own disabled groups are unioned back in either
22745
+ way, so a restricted key can neither clear nor widen a
22746
+ subscription past its own groups.
22648
22747
  examples:
22649
22748
  updateWebhook:
22650
22749
  summary: Update webhook URL and events
@@ -22698,6 +22797,7 @@ paths:
22698
22797
  success: { type: boolean }
22699
22798
  '400': { description: Webhook ID required }
22700
22799
  '401': { $ref: '#/components/responses/Unauthorized' }
22800
+ '403': { $ref: '#/components/responses/ResourceGroupForbidden' }
22701
22801
 
22702
22802
  /v1/webhooks/logs:
22703
22803
  get:
@@ -22712,7 +22812,10 @@ paths:
22712
22812
 
22713
22813
  For a restricted (zrk_) API key, rows for events outside the key's resource
22714
22814
  groups are omitted (`pagination.total` may over-count), and an `event` filter
22715
- naming such an event is rejected with 403.
22815
+ naming such an event is rejected with 403. Events blocked by a subscription's
22816
+ own `disabledResourceGroups` are dropped before delivery, so they produce no
22817
+ log rows for anyone; the exception is the five-minute tail after a denylist
22818
+ change, where an already-queued event can still be delivered and logged.
22716
22819
  security:
22717
22820
  - bearerAuth: []
22718
22821
  parameters:
@@ -22801,6 +22904,13 @@ paths:
22801
22904
  summary: Send test webhook
22802
22905
  description: |
22803
22906
  Send a test webhook to verify your endpoint is configured correctly. The test payload includes event: "webhook.test" to distinguish it from real events.
22907
+
22908
+ `webhook.test` belongs to the `webhooks` resource group, so a key with that
22909
+ group disabled is rejected with 403, as is a test fire on a subscription that
22910
+ lists `webhooks` in its own `disabledResourceGroups` (a 403, not a reported
22911
+ delivery failure). Replays of real events (redelivery, dead-letter requeue) run
22912
+ the same checks as live delivery, against both the key's groups and the
22913
+ subscription's.
22804
22914
  security:
22805
22915
  - bearerAuth: []
22806
22916
  requestBody:
@@ -22832,6 +22942,7 @@ paths:
22832
22942
  message: "Test webhook sent successfully"
22833
22943
  '400': { description: Webhook ID required }
22834
22944
  '401': { $ref: '#/components/responses/Unauthorized' }
22945
+ '403': { $ref: '#/components/responses/ResourceGroupForbidden' }
22835
22946
  '404': { description: Webhook not found }
22836
22947
  '500':
22837
22948
  description: Test webhook failed to deliver
@@ -39654,7 +39765,9 @@ paths:
39654
39765
  with "The language asset feed includes an unsupported targeting field"
39655
39766
  (subcode 1885985).
39656
39767
 
39657
- Media DOES inherit and is uploaded once when shared. Note that Meta enforces
39768
+ Media DOES inherit and is uploaded once when shared, and `linkUrl` inherits
39769
+ too: each locale may name its own landing page and unlisted locales fall back
39770
+ to the ad's top-level `linkUrl`. Note that Meta enforces
39658
39771
  Dynamic Creative image dimensions on language feeds, so an `imageUrl` that
39659
39772
  works on a normal ad may be rejected with "The following images have invalid
39660
39773
  dimensions for Dynamic Creative" (subcode 1885558). Video is not affected.
@@ -39669,6 +39782,7 @@ paths:
39669
39782
  headline: { type: string, maxLength: 255, description: "Headline for this language. REQUIRED, and must differ from every other locale and from the ad's top-level headline." }
39670
39783
  body: { type: string, description: "Primary text for this language. REQUIRED, and must differ from every other locale and from the ad's top-level body." }
39671
39784
  description: { type: string, maxLength: 255, description: "Link description for this language. REQUIRED, and must differ from every other locale and from the ad's top-level description." }
39785
+ linkUrl: { type: string, format: uri, description: "Destination URL for this language. Inherits the ad's top-level `linkUrl` when omitted, and requires it to be present (400 otherwise): the top-level URL is the destination for every locale you did not override. Unlike text, identical URLs across locales are fine (they share one asset)." }
39672
39786
  imageUrl: { type: string, format: uri, description: "Image for this language. Inherits the ad's `imageUrl` when omitted. The feed is all-image OR all-video." }
39673
39787
  videoUrl: { type: string, format: uri, description: "Video for this language. Inherits the ad's `video.url` when omitted. The feed is all-image OR all-video." }
39674
39788
  thumbnailUrl: { type: string, format: uri, description: "Poster frame for this language's video." }
@@ -34,7 +34,7 @@ describe 'WebhooksApi' do
34
34
 
35
35
  # unit tests for create_webhook_settings
36
36
  # Create webhook
37
- # Create a new webhook configuration. Maximum 50 webhooks per user. &#x60;name&#x60;, &#x60;url&#x60; and &#x60;events&#x60; are required. &#x60;url&#x60; must be a valid URL and &#x60;events&#x60; must contain at least one event. Whitespace is trimmed from &#x60;url&#x60; before validation. Webhooks are automatically disabled after 10 consecutive delivery failures. A restricted (zrk_) API key can only subscribe to events whose resource group the key holds; an event outside the key&#39;s groups is rejected with 403. Note that the KEY cannot access private messages; the ACCOUNT&#39;s pre-existing webhook subscriptions are a separate grant surface.
37
+ # Create a new webhook configuration. Maximum 50 webhooks per user. &#x60;name&#x60;, &#x60;url&#x60; and &#x60;events&#x60; are required. &#x60;url&#x60; must be a valid URL and &#x60;events&#x60; must contain at least one event. Whitespace is trimmed from &#x60;url&#x60; before validation. Webhooks are automatically disabled after 10 consecutive delivery failures. A restricted (zrk_) API key can only subscribe to events whose resource group the key holds; an event outside the key&#39;s groups is rejected with 403, so a restricted key can never create a subscription broader than itself. &#x60;disabledResourceGroups&#x60; restricts the subscription itself, independently of which key or session later reads it. Events in a disabled group are dropped before delivery to this endpoint, on live delivery and on every replay path (test fire, redelivery, dead-letter requeue), even if they are listed in &#x60;events&#x60;. Omit it to receive everything in &#x60;events&#x60;, which is how existing subscriptions behave. A restricted key&#39;s own disabled groups are always unioned in.
38
38
  # @param create_webhook_settings_request
39
39
  # @param [Hash] opts the optional parameters
40
40
  # @return [UpdateWebhookSettings200Response]
@@ -58,7 +58,7 @@ describe 'WebhooksApi' do
58
58
 
59
59
  # unit tests for get_webhook_logs
60
60
  # List webhook delivery logs
61
- # Retrieve recorded webhook delivery attempts for the authenticated user, most recent first. Logs are retained for 30 days. Supports filtering by status, event type, webhook ID, and event ID, plus offset-based pagination. For a restricted (zrk_) API key, rows for events outside the key&#39;s resource groups are omitted (&#x60;pagination.total&#x60; may over-count), and an &#x60;event&#x60; filter naming such an event is rejected with 403.
61
+ # Retrieve recorded webhook delivery attempts for the authenticated user, most recent first. Logs are retained for 30 days. Supports filtering by status, event type, webhook ID, and event ID, plus offset-based pagination. For a restricted (zrk_) API key, rows for events outside the key&#39;s resource groups are omitted (&#x60;pagination.total&#x60; may over-count), and an &#x60;event&#x60; filter naming such an event is rejected with 403. Events blocked by a subscription&#39;s own &#x60;disabledResourceGroups&#x60; are dropped before delivery, so they produce no log rows for anyone; the exception is the five-minute tail after a denylist change, where an already-queued event can still be delivered and logged.
62
62
  # @param [Hash] opts the optional parameters
63
63
  # @option opts [Integer] :limit Maximum number of logs to return
64
64
  # @option opts [Integer] :skip Number of logs to skip (offset-based pagination)
@@ -86,7 +86,7 @@ describe 'WebhooksApi' do
86
86
 
87
87
  # unit tests for test_webhook
88
88
  # Send test webhook
89
- # Send a test webhook to verify your endpoint is configured correctly. The test payload includes event: \&quot;webhook.test\&quot; to distinguish it from real events.
89
+ # Send a test webhook to verify your endpoint is configured correctly. The test payload includes event: \&quot;webhook.test\&quot; to distinguish it from real events. &#x60;webhook.test&#x60; belongs to the &#x60;webhooks&#x60; resource group, so a key with that group disabled is rejected with 403, as is a test fire on a subscription that lists &#x60;webhooks&#x60; in its own &#x60;disabledResourceGroups&#x60; (a 403, not a reported delivery failure). Replays of real events (redelivery, dead-letter requeue) run the same checks as live delivery, against both the key&#39;s groups and the subscription&#39;s.
90
90
  # @param test_webhook_request
91
91
  # @param [Hash] opts the optional parameters
92
92
  # @return [UnpublishPost200Response]
@@ -98,7 +98,7 @@ describe 'WebhooksApi' do
98
98
 
99
99
  # unit tests for update_webhook_settings
100
100
  # Update webhook
101
- # Update an existing webhook configuration. All fields except &#x60;_id&#x60; are optional; only provided fields will be updated. When provided, &#x60;name&#x60; must be 1-50 characters, &#x60;url&#x60; must be a valid URL, and &#x60;events&#x60; must contain at least one event. Whitespace is trimmed from &#x60;url&#x60; before validation. Webhooks are automatically disabled after 10 consecutive delivery failures. A restricted (zrk_) API key can only set &#x60;events&#x60; to events whose resource group the key holds; an event outside the key&#39;s groups is rejected with 403.
101
+ # Update an existing webhook configuration. All fields except &#x60;_id&#x60; are optional; only provided fields will be updated. When provided, &#x60;name&#x60; must be 1-50 characters, &#x60;url&#x60; must be a valid URL, and &#x60;events&#x60; must contain at least one event. Whitespace is trimmed from &#x60;url&#x60; before validation. Webhooks are automatically disabled after 10 consecutive delivery failures. A restricted (zrk_) API key can only set &#x60;events&#x60; to events whose resource group the key holds; an event outside the key&#39;s groups is rejected with 403. It also cannot widen an existing subscription past its own groups. &#x60;disabledResourceGroups&#x60; replaces the subscription&#39;s own denylist, which applies to delivery regardless of which key or session created it. Send an empty array to clear it. A restricted key&#39;s own disabled groups are unioned into the stored value on every update, so repointing a legacy unrestricted subscription with a restricted key also narrows it. Timing: the new denylist applies to every event emitted after the update. Events already queued for delivery when the update landed were filtered against the previous denylist and can still arrive at your endpoint for up to five minutes after they were enqueued, because the delivery worker trusts a five-minute enqueue-time snapshot before re-checking the subscription. Retries beyond that window, dead-letter replays, test fires, and redeliveries are all checked against the current denylist.
102
102
  # @param update_webhook_settings_request
103
103
  # @param [Hash] opts the optional parameters
104
104
  # @return [UpdateWebhookSettings200Response]
@@ -51,6 +51,12 @@ describe Zernio::CreateStandaloneAdRequestTranslationsInner do
51
51
  end
52
52
  end
53
53
 
54
+ describe 'test attribute "link_url"' 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
+
54
60
  describe 'test attribute "image_url"' do
55
61
  it 'should work' do
56
62
  # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
@@ -67,4 +67,14 @@ describe Zernio::CreateWebhookSettingsRequest do
67
67
  end
68
68
  end
69
69
 
70
+ describe 'test attribute "disabled_resource_groups"' do
71
+ it 'should work' do
72
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
73
+ # validator = Petstore::EnumTest::EnumAttributeValidator.new('Array<String>', ["publishing", "engagement", "messages", "contacts", "analytics", "ads", "telephony", "accounts", "billing", "webhooks"])
74
+ # validator.allowable_values.each do |value|
75
+ # expect { instance.disabled_resource_groups = value }.not_to raise_error
76
+ # end
77
+ end
78
+ end
79
+
70
80
  end
@@ -73,4 +73,14 @@ describe Zernio::UpdateWebhookSettingsRequest do
73
73
  end
74
74
  end
75
75
 
76
+ describe 'test attribute "disabled_resource_groups"' do
77
+ it 'should work' do
78
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
79
+ # validator = Petstore::EnumTest::EnumAttributeValidator.new('Array<String>', ["publishing", "engagement", "messages", "contacts", "analytics", "ads", "telephony", "accounts", "billing", "webhooks"])
80
+ # validator.allowable_values.each do |value|
81
+ # expect { instance.disabled_resource_groups = value }.not_to raise_error
82
+ # end
83
+ end
84
+ end
85
+
76
86
  end
@@ -85,4 +85,14 @@ describe Zernio::Webhook do
85
85
  end
86
86
  end
87
87
 
88
+ describe 'test attribute "disabled_resource_groups"' do
89
+ it 'should work' do
90
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
91
+ # validator = Petstore::EnumTest::EnumAttributeValidator.new('Array<String>', ["publishing", "engagement", "messages", "contacts", "analytics", "ads", "telephony", "accounts", "billing", "webhooks"])
92
+ # validator.allowable_values.each do |value|
93
+ # expect { instance.disabled_resource_groups = value }.not_to raise_error
94
+ # end
95
+ end
96
+ end
97
+
88
98
  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.675
4
+ version: 0.0.677
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenAPI-Generator
@@ -4985,7 +4985,7 @@ files:
4985
4985
  - spec/models/you_tube_video_retention_response_retention_curve_inner_spec.rb
4986
4986
  - spec/models/you_tube_video_retention_response_spec.rb
4987
4987
  - spec/spec_helper.rb
4988
- - zernio-sdk-0.0.675.gem
4988
+ - zernio-sdk-0.0.677.gem
4989
4989
  - zernio-sdk.gemspec
4990
4990
  homepage: https://openapi-generator.tech
4991
4991
  licenses:
Binary file