late-sdk 0.0.674 → 0.0.676
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/docs/ApiKey.md +1 -1
- data/docs/CreateApiKeyRequest.md +1 -1
- data/docs/CreateWebhookSettingsRequest.md +3 -1
- data/docs/UpdateWebhookSettingsRequest.md +3 -1
- data/docs/Webhook.md +3 -1
- data/docs/WebhooksApi.md +4 -4
- data/lib/zernio-sdk/api/webhooks_api.rb +8 -8
- data/lib/zernio-sdk/models/api_key.rb +1 -1
- data/lib/zernio-sdk/models/create_api_key_request.rb +1 -1
- data/lib/zernio-sdk/models/create_webhook_settings_request.rb +16 -4
- data/lib/zernio-sdk/models/update_webhook_settings_request.rb +16 -4
- data/lib/zernio-sdk/models/webhook.rb +16 -4
- data/lib/zernio-sdk/version.rb +1 -1
- data/openapi.yaml +129 -18
- data/spec/api/webhooks_api_spec.rb +4 -4
- data/spec/models/create_webhook_settings_request_spec.rb +10 -0
- data/spec/models/update_webhook_settings_request_spec.rb +10 -0
- data/spec/models/webhook_spec.rb +10 -0
- data/zernio-sdk-0.0.676.gem +0 -0
- metadata +2 -2
- data/zernio-sdk-0.0.674.gem +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f8213ad5b1bbfc775119fa239570f310749ef52ab9d1d91dd1193f969e87611a
|
|
4
|
+
data.tar.gz: 1d279b6c16eadb852fd06dcb153a97ad2c7bd4350c7f978fc977f2950ab72c48
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ade71dde38ef0917cf5def307099b7ad424bf6e64defc1e3cbfa288ed149c0eb2c13b01156a9e2f02f67fc84f36dd819f47427cb136905fe654a6c2cc48cd8db
|
|
7
|
+
data.tar.gz: 5bc548ae525d00d0d7e5f7f7526eb7b524cea57d20eafba38c136a842b4213d79e880d9d20f744eb0ace33d6792167d9eb2ba048dc6ae3b7c37dd47be301b556
|
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
|
|
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
|
|
data/docs/CreateApiKeyRequest.md
CHANGED
|
@@ -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
|
|
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
|
|
|
@@ -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
|
|
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
|
|
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
|
|
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's resource groups are omitted (`pagination.total` may over-count), and an `event` 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'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.
|
|
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: \"webhook.test\" to distinguish it from real events.
|
|
341
|
+
# 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.
|
|
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 `_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.
|
|
409
|
+
# 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.
|
|
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
|
|
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
|
|
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
|
|
@@ -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
|
data/lib/zernio-sdk/version.rb
CHANGED
data/openapi.yaml
CHANGED
|
@@ -15,10 +15,10 @@ info:
|
|
|
15
15
|
url: https://zernio.com/icon.png?v=3
|
|
16
16
|
x-long-description: |
|
|
17
17
|
Zernio is the social media API that replaces 16 integrations. Schedule posts, retrieve analytics,
|
|
18
|
-
manage DMs, comments, and reviews across Twitter/X, Instagram, TikTok, LinkedIn,
|
|
19
|
-
YouTube, Threads, Reddit, Pinterest, Bluesky, Telegram, Google Business, Snapchat,
|
|
20
|
-
and Slack, all from a single REST API. Run paid ads on Meta (Facebook + Instagram), Google,
|
|
21
|
-
LinkedIn, Pinterest, X, and OpenAI from the same account.
|
|
18
|
+
manage DMs, comments, and reviews across Twitter/X, Instagram, WhatsApp, TikTok, LinkedIn,
|
|
19
|
+
Facebook, YouTube, Threads, Reddit, Pinterest, Bluesky, Telegram, Google Business, Snapchat,
|
|
20
|
+
Discord, and Slack, all from a single REST API. Run paid ads on Meta (Facebook + Instagram), Google,
|
|
21
|
+
TikTok, LinkedIn, Pinterest, X, and OpenAI from the same account.
|
|
22
22
|
|
|
23
23
|
Key features: Unified posting to 16 platforms, ads management on 7 ad networks (via /v1/ads), aggregated analytics, unified inbox (DMs, comments, reviews), webhooks, OAuth connect, queue scheduling, and white-label support for agencies managing unlimited accounts.
|
|
24
24
|
|
|
@@ -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
|
|
558
|
-
delivery-log reads, a named event maps to a resource group
|
|
559
|
-
does not hold
|
|
560
|
-
|
|
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
|
|
5836
|
-
private messages
|
|
5837
|
-
|
|
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
|
|
15150
|
-
|
|
15151
|
-
|
|
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
|
|
22527
|
-
|
|
22528
|
-
|
|
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
|
|
@@ -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. `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
|
|
37
|
+
# 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.
|
|
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's resource groups are omitted (`pagination.total` may over-count), and an `event` 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'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.
|
|
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: \"webhook.test\" to distinguish it from real events.
|
|
89
|
+
# 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.
|
|
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 `_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.
|
|
101
|
+
# 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.
|
|
102
102
|
# @param update_webhook_settings_request
|
|
103
103
|
# @param [Hash] opts the optional parameters
|
|
104
104
|
# @return [UpdateWebhookSettings200Response]
|
|
@@ -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
|
data/spec/models/webhook_spec.rb
CHANGED
|
@@ -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.
|
|
4
|
+
version: 0.0.676
|
|
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.
|
|
4988
|
+
- zernio-sdk-0.0.676.gem
|
|
4989
4989
|
- zernio-sdk.gemspec
|
|
4990
4990
|
homepage: https://openapi-generator.tech
|
|
4991
4991
|
licenses:
|
data/zernio-sdk-0.0.674.gem
DELETED
|
Binary file
|