Webhook Management

Manage webhook subscriptions, signing secrets, test sends, and the delivery log for your brand. Create a subscription to start receiving snapshot or event pushes; the outbound payload shapes are documented under Webhook snapshots and Webhook events.

Create Webhook Subscription

POST/api/v1/webhooks/subscriptions/webhooks.create_subscription

Creates a webhook subscription for your brand. The full signing secret is returned only once, in this response. A brand may hold at most one event subscription.

Request body

kindType: enumdefault snapshot

Whether the subscription is snapshot or event based.

Show values
default
snapshot
snapshotevent
resourceType: enum

Resource type for snapshot subscriptions.

Show values
contentcreator
event_typesType: string[]

Event names the subscription listens for.

resource_filtersType: any

Filters that scope which resources are delivered.

urlType: string(uri)Requiredmin length 1 ยท max length 2048

Destination URL where webhook payloads are sent.

min length
1
max length
2048
custom_headersType: any

Extra HTTP headers sent with each webhook request.

interval_hoursType: enum

Hours between snapshot deliveries. Allowed values: 4, 6, 12, 24, 168, 720. The first snapshot is sent within minutes of the subscription being saved, not after a full interval has passed.

Show values
461224168720
max_itemsType: integeror nullminimum 0

Maximum number of items per delivery.

minimum
0
secret_typeType: enumdefault default

Type of signing secret to attach to the subscription.

Show values
default
default
defaultnew

Returns WebhookSubscriptionCreated

idType: stringread-only

Encoded identifier of the webhook subscription.

kindType: enumread-only

Type of webhook this subscription delivers.

Show values
snapshotevent
resourceType: enumread-only

Resource type the subscription is for (content or creator).

Show values
contentcreator
event_typesType: string[]read-only

Event types the subscription listens for.

resource_filtersType: anyread-only

Filters applied to select which resources are delivered.

urlType: string(uri)read-only

Destination URL where webhook payloads are sent.

custom_headersType: anyread-only

Custom HTTP headers to include with each delivery.

interval_hoursType: integeror nullread-only

Hours between snapshot deliveries.

max_itemsType: integeror nullread-only

Max rows a real snapshot delivers. Null or 0 falls back to the default item limit.

secret_prefixType: stringread-only

Public prefix of the subscription signing secret.

secretType: stringor nullread-only

Full signing secret, returned only once, at the moment it is minted. Null when the subscription reuses the brand's existing default secret, since that value is never shown twice.

enabledType: booleanread-only

Whether this subscription is active and will be dispatched.

createdType: string(date-time)read-only

Timestamp set once when the row is first created.

Responses

WebhookSubscriptionCreated

idType: stringread-only

Encoded identifier of the webhook subscription.

kindType: enumread-only

Type of webhook this subscription delivers.

Show values
snapshotevent
resourceType: enumread-only

Resource type the subscription is for (content or creator).

Show values
contentcreator
event_typesType: string[]read-only

Event types the subscription listens for.

resource_filtersType: anyread-only

Filters applied to select which resources are delivered.

urlType: string(uri)read-only

Destination URL where webhook payloads are sent.

custom_headersType: anyread-only

Custom HTTP headers to include with each delivery.

interval_hoursType: integeror nullread-only

Hours between snapshot deliveries.

max_itemsType: integeror nullread-only

Max rows a real snapshot delivers. Null or 0 falls back to the default item limit.

secret_prefixType: stringread-only

Public prefix of the subscription signing secret.

secretType: stringor nullread-only

Full signing secret, returned only once, at the moment it is minted. Null when the subscription reuses the brand's existing default secret, since that value is never shown twice.

enabledType: booleanread-only

Whether this subscription is active and will be dispatched.

createdType: string(date-time)read-only

Timestamp set once when the row is first created.

Request

enum
enum
string[]
from zelf import ZelfAPIClient

client = ZelfAPIClient(api_key="<your-api-key>")

result = client.webhooks.create_subscription()
print(result)
Response
{
  "log_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "timestamp": "2026-01-01T00:00:00Z",
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Request validation failed.",
    "details": {
      "field": [
        "This query parameter is required."
      ]
    }
  }
}

List Webhook Subscriptions

GET/api/v1/webhooks/subscriptions/webhooks.list_subscriptions

Returns the webhook subscriptions owned by your brand, newest first.

Returns WebhookSubscription

idType: stringread-only

Encoded identifier of the webhook subscription.

kindType: enumread-only

Type of webhook this subscription delivers.

Show values
snapshotevent
resourceType: enumread-only

Resource type the subscription is for (content or creator).

Show values
contentcreator
event_typesType: string[]read-only

Event types the subscription listens for.

resource_filtersType: anyread-only

Filters applied to select which resources are delivered.

urlType: string(uri)read-only

Destination URL where webhook payloads are sent.

custom_headersType: anyread-only

Custom HTTP headers to include with each delivery.

interval_hoursType: integeror nullread-only

Hours between snapshot deliveries.

max_itemsType: integeror nullread-only

Max rows a real snapshot delivers. Null or 0 falls back to the default item limit.

secret_prefixType: stringread-only

Public prefix of the subscription signing secret.

enabledType: booleanread-only

Whether this subscription is active and will be dispatched.

last_run_atType: string(date-time)or nullread-only

When this subscription last dispatched a delivery.

last_statusType: enumread-only

Outcome status of the most recent delivery. Empty until the subscription has dispatched for the first time.

Show values
SUCCESSFAILED
createdType: string(date-time)read-only

Timestamp set once when the row is first created.

modifiedType: string(date-time)read-only

Timestamp updated automatically on every save.

Responses

WebhookSubscription

idType: stringread-only

Encoded identifier of the webhook subscription.

kindType: enumread-only

Type of webhook this subscription delivers.

Show values
snapshotevent
resourceType: enumread-only

Resource type the subscription is for (content or creator).

Show values
contentcreator
event_typesType: string[]read-only

Event types the subscription listens for.

resource_filtersType: anyread-only

Filters applied to select which resources are delivered.

urlType: string(uri)read-only

Destination URL where webhook payloads are sent.

custom_headersType: anyread-only

Custom HTTP headers to include with each delivery.

interval_hoursType: integeror nullread-only

Hours between snapshot deliveries.

max_itemsType: integeror nullread-only

Max rows a real snapshot delivers. Null or 0 falls back to the default item limit.

secret_prefixType: stringread-only

Public prefix of the subscription signing secret.

enabledType: booleanread-only

Whether this subscription is active and will be dispatched.

last_run_atType: string(date-time)or nullread-only

When this subscription last dispatched a delivery.

last_statusType: enumread-only

Outcome status of the most recent delivery. Empty until the subscription has dispatched for the first time.

Show values
SUCCESSFAILED
createdType: string(date-time)read-only

Timestamp set once when the row is first created.

modifiedType: string(date-time)read-only

Timestamp updated automatically on every save.

from zelf import ZelfAPIClient

client = ZelfAPIClient(api_key="<your-api-key>")

result = client.webhooks.list_subscriptions()
print(result)
Response
{
  "log_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "timestamp": "2026-01-01T00:00:00Z",
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Request validation failed.",
    "details": {
      "field": [
        "This query parameter is required."
      ]
    }
  }
}

Get Webhook Subscription

GET/api/v1/webhooks/subscriptions/{subscription_id}/webhooks.get_subscription

Returns a single subscription.

Parameters

subscription_idType: stringRequired

Returns WebhookSubscription

idType: stringread-only

Encoded identifier of the webhook subscription.

kindType: enumread-only

Type of webhook this subscription delivers.

Show values
snapshotevent
resourceType: enumread-only

Resource type the subscription is for (content or creator).

Show values
contentcreator
event_typesType: string[]read-only

Event types the subscription listens for.

resource_filtersType: anyread-only

Filters applied to select which resources are delivered.

urlType: string(uri)read-only

Destination URL where webhook payloads are sent.

custom_headersType: anyread-only

Custom HTTP headers to include with each delivery.

interval_hoursType: integeror nullread-only

Hours between snapshot deliveries.

max_itemsType: integeror nullread-only

Max rows a real snapshot delivers. Null or 0 falls back to the default item limit.

secret_prefixType: stringread-only

Public prefix of the subscription signing secret.

enabledType: booleanread-only

Whether this subscription is active and will be dispatched.

last_run_atType: string(date-time)or nullread-only

When this subscription last dispatched a delivery.

last_statusType: enumread-only

Outcome status of the most recent delivery. Empty until the subscription has dispatched for the first time.

Show values
SUCCESSFAILED
createdType: string(date-time)read-only

Timestamp set once when the row is first created.

modifiedType: string(date-time)read-only

Timestamp updated automatically on every save.

Responses

WebhookSubscription

idType: stringread-only

Encoded identifier of the webhook subscription.

kindType: enumread-only

Type of webhook this subscription delivers.

Show values
snapshotevent
resourceType: enumread-only

Resource type the subscription is for (content or creator).

Show values
contentcreator
event_typesType: string[]read-only

Event types the subscription listens for.

resource_filtersType: anyread-only

Filters applied to select which resources are delivered.

urlType: string(uri)read-only

Destination URL where webhook payloads are sent.

custom_headersType: anyread-only

Custom HTTP headers to include with each delivery.

interval_hoursType: integeror nullread-only

Hours between snapshot deliveries.

max_itemsType: integeror nullread-only

Max rows a real snapshot delivers. Null or 0 falls back to the default item limit.

secret_prefixType: stringread-only

Public prefix of the subscription signing secret.

enabledType: booleanread-only

Whether this subscription is active and will be dispatched.

last_run_atType: string(date-time)or nullread-only

When this subscription last dispatched a delivery.

last_statusType: enumread-only

Outcome status of the most recent delivery. Empty until the subscription has dispatched for the first time.

Show values
SUCCESSFAILED
createdType: string(date-time)read-only

Timestamp set once when the row is first created.

modifiedType: string(date-time)read-only

Timestamp updated automatically on every save.

Request

stringRequired
from zelf import ZelfAPIClient

client = ZelfAPIClient(api_key="<your-api-key>")

result = client.webhooks.get_subscription("<subscription_id>")
print(result)
Response
{
  "log_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "timestamp": "2026-01-01T00:00:00Z",
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Request validation failed.",
    "details": {
      "field": [
        "This query parameter is required."
      ]
    }
  }
}

Update Webhook Subscription

PATCH/api/v1/webhooks/subscriptions/{subscription_id}/webhooks.update_subscription

Partially updates a subscription's url, custom_headers, resource_filters, interval_hours, max_items, or enabled. kind, resource, and event_types are immutable after create.

Parameters

subscription_idType: stringRequired

Request body

urlType: string(uri)min length 1 ยท max length 2048

Destination URL where webhook payloads are sent.

min length
1
max length
2048
resource_filtersType: any

Filters that scope which resources are delivered.

custom_headersType: any

Extra HTTP headers sent with each webhook request.

interval_hoursType: enum

Hours between snapshot deliveries. Allowed values: 4, 6, 12, 24, 168, 720. The first snapshot is sent within minutes of the subscription being saved, not after a full interval has passed.

Show values
461224168720
max_itemsType: integeror nullminimum 0

Maximum number of items per delivery.

minimum
0
enabledType: boolean

Whether this subscription is active and will be dispatched.

Returns WebhookSubscription

idType: stringread-only

Encoded identifier of the webhook subscription.

kindType: enumread-only

Type of webhook this subscription delivers.

Show values
snapshotevent
resourceType: enumread-only

Resource type the subscription is for (content or creator).

Show values
contentcreator
event_typesType: string[]read-only

Event types the subscription listens for.

resource_filtersType: anyread-only

Filters applied to select which resources are delivered.

urlType: string(uri)read-only

Destination URL where webhook payloads are sent.

custom_headersType: anyread-only

Custom HTTP headers to include with each delivery.

interval_hoursType: integeror nullread-only

Hours between snapshot deliveries.

max_itemsType: integeror nullread-only

Max rows a real snapshot delivers. Null or 0 falls back to the default item limit.

secret_prefixType: stringread-only

Public prefix of the subscription signing secret.

enabledType: booleanread-only

Whether this subscription is active and will be dispatched.

last_run_atType: string(date-time)or nullread-only

When this subscription last dispatched a delivery.

last_statusType: enumread-only

Outcome status of the most recent delivery. Empty until the subscription has dispatched for the first time.

Show values
SUCCESSFAILED
createdType: string(date-time)read-only

Timestamp set once when the row is first created.

modifiedType: string(date-time)read-only

Timestamp updated automatically on every save.

Responses

WebhookSubscription

idType: stringread-only

Encoded identifier of the webhook subscription.

kindType: enumread-only

Type of webhook this subscription delivers.

Show values
snapshotevent
resourceType: enumread-only

Resource type the subscription is for (content or creator).

Show values
contentcreator
event_typesType: string[]read-only

Event types the subscription listens for.

resource_filtersType: anyread-only

Filters applied to select which resources are delivered.

urlType: string(uri)read-only

Destination URL where webhook payloads are sent.

custom_headersType: anyread-only

Custom HTTP headers to include with each delivery.

interval_hoursType: integeror nullread-only

Hours between snapshot deliveries.

max_itemsType: integeror nullread-only

Max rows a real snapshot delivers. Null or 0 falls back to the default item limit.

secret_prefixType: stringread-only

Public prefix of the subscription signing secret.

enabledType: booleanread-only

Whether this subscription is active and will be dispatched.

last_run_atType: string(date-time)or nullread-only

When this subscription last dispatched a delivery.

last_statusType: enumread-only

Outcome status of the most recent delivery. Empty until the subscription has dispatched for the first time.

Show values
SUCCESSFAILED
createdType: string(date-time)read-only

Timestamp set once when the row is first created.

modifiedType: string(date-time)read-only

Timestamp updated automatically on every save.

Request

stringRequired
string(uri)
any
from zelf import ZelfAPIClient

client = ZelfAPIClient(api_key="<your-api-key>")

result = client.webhooks.update_subscription("<subscription_id>")
print(result)
Response
{
  "log_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "timestamp": "2026-01-01T00:00:00Z",
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Request validation failed.",
    "details": {
      "field": [
        "This query parameter is required."
      ]
    }
  }
}

Delete Webhook Subscription

DELETE/api/v1/webhooks/subscriptions/{subscription_id}/webhooks.delete_subscription

Deletes a subscription. This is destructive: the subscription stops receiving deliveries.

Parameters

subscription_idType: stringRequired

Returns WebhookDeleteAcknowledgement

acknowledgedType: booleanread-only

Always true; confirms the webhook resource delete was acknowledged.

actionType: stringread-only

Action that was performed. Always 'delete'.

statusType: stringread-only

Completion status of the action. Always 'complete'.

Responses

WebhookDeleteAcknowledgement

acknowledgedType: booleanread-only

Always true; confirms the webhook resource delete was acknowledged.

actionType: stringread-only

Action that was performed. Always 'delete'.

statusType: stringread-only

Completion status of the action. Always 'complete'.

Request

stringRequired
from zelf import ZelfAPIClient

client = ZelfAPIClient(api_key="<your-api-key>")

result = client.webhooks.delete_subscription("<subscription_id>")
print(result)
Response
{
  "log_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "timestamp": "2026-01-01T00:00:00Z",
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Request validation failed.",
    "details": {
      "field": [
        "This query parameter is required."
      ]
    }
  }
}

Rotate Webhook Subscription Secret

POST/api/v1/webhooks/subscriptions/{subscription_id}/rotate_secret/webhooks.rotate_subscription_secret

Mints a new signing secret for the subscription and returns the full secret once. Deliveries after this use the new secret.

Parameters

subscription_idType: stringRequired

Returns WebhookSubscriptionCreated

idType: stringread-only

Encoded identifier of the webhook subscription.

kindType: enumread-only

Type of webhook this subscription delivers.

Show values
snapshotevent
resourceType: enumread-only

Resource type the subscription is for (content or creator).

Show values
contentcreator
event_typesType: string[]read-only

Event types the subscription listens for.

resource_filtersType: anyread-only

Filters applied to select which resources are delivered.

urlType: string(uri)read-only

Destination URL where webhook payloads are sent.

custom_headersType: anyread-only

Custom HTTP headers to include with each delivery.

interval_hoursType: integeror nullread-only

Hours between snapshot deliveries.

max_itemsType: integeror nullread-only

Max rows a real snapshot delivers. Null or 0 falls back to the default item limit.

secret_prefixType: stringread-only

Public prefix of the subscription signing secret.

secretType: stringor nullread-only

Full signing secret, returned only once, at the moment it is minted. Null when the subscription reuses the brand's existing default secret, since that value is never shown twice.

enabledType: booleanread-only

Whether this subscription is active and will be dispatched.

createdType: string(date-time)read-only

Timestamp set once when the row is first created.

Responses

WebhookSubscriptionCreated

idType: stringread-only

Encoded identifier of the webhook subscription.

kindType: enumread-only

Type of webhook this subscription delivers.

Show values
snapshotevent
resourceType: enumread-only

Resource type the subscription is for (content or creator).

Show values
contentcreator
event_typesType: string[]read-only

Event types the subscription listens for.

resource_filtersType: anyread-only

Filters applied to select which resources are delivered.

urlType: string(uri)read-only

Destination URL where webhook payloads are sent.

custom_headersType: anyread-only

Custom HTTP headers to include with each delivery.

interval_hoursType: integeror nullread-only

Hours between snapshot deliveries.

max_itemsType: integeror nullread-only

Max rows a real snapshot delivers. Null or 0 falls back to the default item limit.

secret_prefixType: stringread-only

Public prefix of the subscription signing secret.

secretType: stringor nullread-only

Full signing secret, returned only once, at the moment it is minted. Null when the subscription reuses the brand's existing default secret, since that value is never shown twice.

enabledType: booleanread-only

Whether this subscription is active and will be dispatched.

createdType: string(date-time)read-only

Timestamp set once when the row is first created.

Request

stringRequired
from zelf import ZelfAPIClient

client = ZelfAPIClient(api_key="<your-api-key>")

result = client.webhooks.rotate_subscription_secret("<subscription_id>")
print(result)
Response
{
  "log_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "timestamp": "2026-01-01T00:00:00Z",
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Request validation failed.",
    "details": {
      "field": [
        "This query parameter is required."
      ]
    }
  }
}

Send Test Webhook

POST/api/v1/webhooks/subscriptions/{subscription_id}/send_test/webhooks.send_test

Queues a test event to the subscription's URL so you can verify signing and parsing. Rate limited to 12 per hour per subscription. A disabled subscription is rejected.

Parameters

subscription_idType: stringRequired

Responses

Test delivery queued.

Request

stringRequired
from zelf import ZelfAPIClient

client = ZelfAPIClient(api_key="<your-api-key>")

result = client.webhooks.send_test("<subscription_id>")
print(result)
Response
{
  "log_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "timestamp": "2026-01-01T00:00:00Z",
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Request validation failed.",
    "details": {
      "field": [
        "This query parameter is required."
      ]
    }
  }
}

Create Webhook Secret

POST/api/v1/webhooks/secrets/webhooks.create_secret

Creates a signing secret for the brand. The full secret is returned only once.

Request body

kindType: enumdefault snapshot

Whether the secret is for snapshot or event webhooks.

Show values
default
snapshot
snapshotevent
make_defaultType: booleandefault false

Set this secret as the default for its kind.

default
false

Returns WebhookSecretCreated

idType: stringread-only

Encoded identifier of the webhook secret.

kindType: enumread-only

Type of webhook this secret applies to.

Show values
snapshotevent
secret_prefixType: stringread-only

Non-sensitive prefix of the secret, shown for identification.

is_activeType: booleanread-only

Whether this secret is currently active.

is_defaultType: booleanread-only

Whether this is the default secret for the brand and kind.

createdType: string(date-time)read-only

Timestamp set once when the row is first created.

modifiedType: string(date-time)read-only

Timestamp updated automatically on every save.

secretType: stringread-only

Full signing secret, returned only once on creation.

Responses

WebhookSecretCreated

idType: stringread-only

Encoded identifier of the webhook secret.

kindType: enumread-only

Type of webhook this secret applies to.

Show values
snapshotevent
secret_prefixType: stringread-only

Non-sensitive prefix of the secret, shown for identification.

is_activeType: booleanread-only

Whether this secret is currently active.

is_defaultType: booleanread-only

Whether this is the default secret for the brand and kind.

createdType: string(date-time)read-only

Timestamp set once when the row is first created.

modifiedType: string(date-time)read-only

Timestamp updated automatically on every save.

secretType: stringread-only

Full signing secret, returned only once on creation.

Request

enum
boolean
from zelf import ZelfAPIClient

client = ZelfAPIClient(api_key="<your-api-key>")

result = client.webhooks.create_secret()
print(result)
Response
{
  "log_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "timestamp": "2026-01-01T00:00:00Z",
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Request validation failed.",
    "details": {
      "field": [
        "This query parameter is required."
      ]
    }
  }
}

List Webhook Secrets

GET/api/v1/webhooks/secrets/webhooks.list_secrets

Lists the brand's active secrets.

Returns WebhookSecret

idType: stringread-only

Encoded identifier of the webhook secret.

kindType: enumread-only

Type of webhook this secret applies to.

Show values
snapshotevent
secret_prefixType: stringread-only

Non-sensitive prefix of the secret, shown for identification.

is_activeType: booleanread-only

Whether this secret is currently active.

is_defaultType: booleanread-only

Whether this is the default secret for the brand and kind.

createdType: string(date-time)read-only

Timestamp set once when the row is first created.

modifiedType: string(date-time)read-only

Timestamp updated automatically on every save.

Responses

WebhookSecret

idType: stringread-only

Encoded identifier of the webhook secret.

kindType: enumread-only

Type of webhook this secret applies to.

Show values
snapshotevent
secret_prefixType: stringread-only

Non-sensitive prefix of the secret, shown for identification.

is_activeType: booleanread-only

Whether this secret is currently active.

is_defaultType: booleanread-only

Whether this is the default secret for the brand and kind.

createdType: string(date-time)read-only

Timestamp set once when the row is first created.

modifiedType: string(date-time)read-only

Timestamp updated automatically on every save.

from zelf import ZelfAPIClient

client = ZelfAPIClient(api_key="<your-api-key>")

result = client.webhooks.list_secrets()
print(result)
Response
{
  "log_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "timestamp": "2026-01-01T00:00:00Z",
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Request validation failed.",
    "details": {
      "field": [
        "This query parameter is required."
      ]
    }
  }
}

Get Webhook Secret

GET/api/v1/webhooks/secrets/{secret_id}/webhooks.get_secret

Returns a single secret.

Parameters

secret_idType: stringRequired

Returns WebhookSecret

idType: stringread-only

Encoded identifier of the webhook secret.

kindType: enumread-only

Type of webhook this secret applies to.

Show values
snapshotevent
secret_prefixType: stringread-only

Non-sensitive prefix of the secret, shown for identification.

is_activeType: booleanread-only

Whether this secret is currently active.

is_defaultType: booleanread-only

Whether this is the default secret for the brand and kind.

createdType: string(date-time)read-only

Timestamp set once when the row is first created.

modifiedType: string(date-time)read-only

Timestamp updated automatically on every save.

Responses

WebhookSecret

idType: stringread-only

Encoded identifier of the webhook secret.

kindType: enumread-only

Type of webhook this secret applies to.

Show values
snapshotevent
secret_prefixType: stringread-only

Non-sensitive prefix of the secret, shown for identification.

is_activeType: booleanread-only

Whether this secret is currently active.

is_defaultType: booleanread-only

Whether this is the default secret for the brand and kind.

createdType: string(date-time)read-only

Timestamp set once when the row is first created.

modifiedType: string(date-time)read-only

Timestamp updated automatically on every save.

Request

stringRequired
from zelf import ZelfAPIClient

client = ZelfAPIClient(api_key="<your-api-key>")

result = client.webhooks.get_secret("<secret_id>")
print(result)
Response
{
  "log_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "timestamp": "2026-01-01T00:00:00Z",
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Request validation failed.",
    "details": {
      "field": [
        "This query parameter is required."
      ]
    }
  }
}

Delete Webhook Secret

DELETE/api/v1/webhooks/secrets/{secret_id}/webhooks.delete_secret

Deactivates a secret. The default secret, or one still linked to a subscription, cannot be deleted.

Parameters

secret_idType: stringRequired

Returns WebhookDeleteAcknowledgement

acknowledgedType: booleanread-only

Always true; confirms the webhook resource delete was acknowledged.

actionType: stringread-only

Action that was performed. Always 'delete'.

statusType: stringread-only

Completion status of the action. Always 'complete'.

Responses

WebhookDeleteAcknowledgement

acknowledgedType: booleanread-only

Always true; confirms the webhook resource delete was acknowledged.

actionType: stringread-only

Action that was performed. Always 'delete'.

statusType: stringread-only

Completion status of the action. Always 'complete'.

Request

stringRequired
from zelf import ZelfAPIClient

client = ZelfAPIClient(api_key="<your-api-key>")

result = client.webhooks.delete_secret("<secret_id>")
print(result)
Response
{
  "log_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "timestamp": "2026-01-01T00:00:00Z",
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Request validation failed.",
    "details": {
      "field": [
        "This query parameter is required."
      ]
    }
  }
}

Set Default Webhook Secret

POST/api/v1/webhooks/secrets/{secret_id}/set_default/webhooks.set_default_secret

Marks a secret as the brand's default for its kind.

Parameters

secret_idType: stringRequired

Returns WebhookSecret

idType: stringread-only

Encoded identifier of the webhook secret.

kindType: enumread-only

Type of webhook this secret applies to.

Show values
snapshotevent
secret_prefixType: stringread-only

Non-sensitive prefix of the secret, shown for identification.

is_activeType: booleanread-only

Whether this secret is currently active.

is_defaultType: booleanread-only

Whether this is the default secret for the brand and kind.

createdType: string(date-time)read-only

Timestamp set once when the row is first created.

modifiedType: string(date-time)read-only

Timestamp updated automatically on every save.

Responses

WebhookSecret

idType: stringread-only

Encoded identifier of the webhook secret.

kindType: enumread-only

Type of webhook this secret applies to.

Show values
snapshotevent
secret_prefixType: stringread-only

Non-sensitive prefix of the secret, shown for identification.

is_activeType: booleanread-only

Whether this secret is currently active.

is_defaultType: booleanread-only

Whether this is the default secret for the brand and kind.

createdType: string(date-time)read-only

Timestamp set once when the row is first created.

modifiedType: string(date-time)read-only

Timestamp updated automatically on every save.

Request

stringRequired
from zelf import ZelfAPIClient

client = ZelfAPIClient(api_key="<your-api-key>")

result = client.webhooks.set_default_secret("<secret_id>")
print(result)
Response
{
  "log_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "timestamp": "2026-01-01T00:00:00Z",
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Request validation failed.",
    "details": {
      "field": [
        "This query parameter is required."
      ]
    }
  }
}

List Available Webhook Events

GET/api/v1/webhooks/events/webhooks.list_events

Lists the event types an event subscription can listen for.

Returns WebhookAvailableEvent

eventType: stringread-only

Event type identifier, e.g. creator_vetting.completed.

groupType: stringread-only

Human-readable grouping label.

descriptionType: stringread-only

What triggers the event and what the payload holds.

Responses

WebhookAvailableEvent

eventType: stringread-only

Event type identifier, e.g. creator_vetting.completed.

groupType: stringread-only

Human-readable grouping label.

descriptionType: stringread-only

What triggers the event and what the payload holds.

from zelf import ZelfAPIClient

client = ZelfAPIClient(api_key="<your-api-key>")

result = client.webhooks.list_events()
print(result)
Response
{
  "log_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "timestamp": "2026-01-01T00:00:00Z",
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Request validation failed.",
    "details": {
      "field": [
        "This query parameter is required."
      ]
    }
  }
}

List Webhook Deliveries

GET/api/v1/webhooks/deliveries/webhooks.list_deliveries

Lists webhook delivery attempts for the brand, newest first. Filter by subscription (masked id), state, and a created_after / created_before window.

Parameters

createdType: string(date-time)

Delivery creation time (ISO 8601).

created_afterType: string(date-time)

Delivery creation time (ISO 8601). (Inclusive Lower Bound)

created_beforeType: string(date-time)

Delivery creation time (ISO 8601). (Inclusive Upper Bound)

sort_byType: enum[]unique items true
Show values
unique items
true
created-created
stateType: enum

Current delivery state.

Show values
PENDINGSUCCEEDEDFAILEDEXHAUSTEDQUOTA_EXHAUSTED
state!Type: enum

exclude where state - Current delivery state.

Show values
PENDINGSUCCEEDEDFAILEDEXHAUSTEDQUOTA_EXHAUSTED
subscriptionType: string

Scope to a single subscription by its masked id.

Returns WebhookDelivery

idType: stringread-only

Encoded identifier of the webhook delivery.

subscriptionType: stringread-only

Encoded identifier of the parent subscription.

scheduled_atType: string(date-time)read-only

When this delivery is scheduled to be sent.

attempt_countType: integerread-only

Number of delivery attempts made so far.

stateType: enumread-only

Current state of the delivery.

Show values
PENDINGSUCCEEDEDFAILEDEXHAUSTEDQUOTA_EXHAUSTED
last_status_codeType: integeror nullread-only

HTTP status code returned by the most recent attempt.

last_errorType: stringread-only

Error message from the most recent failed attempt.

response_excerptType: stringread-only

Excerpt of the response body returned by the endpoint.

finished_atType: string(date-time)or nullread-only

When the delivery finished (succeeded or exhausted).

item_countType: integeror nullread-only

Number of items included in the delivered payload.

sha256Type: stringread-only

SHA-256 checksum of the delivered payload.

size_bytesType: integeror nullread-only

Size of the delivered payload in bytes.

createdType: string(date-time)read-only

Timestamp set once when the row is first created.

modifiedType: string(date-time)read-only

Timestamp updated automatically on every save.

Responses

WebhookDelivery

idType: stringread-only

Encoded identifier of the webhook delivery.

subscriptionType: stringread-only

Encoded identifier of the parent subscription.

scheduled_atType: string(date-time)read-only

When this delivery is scheduled to be sent.

attempt_countType: integerread-only

Number of delivery attempts made so far.

stateType: enumread-only

Current state of the delivery.

Show values
PENDINGSUCCEEDEDFAILEDEXHAUSTEDQUOTA_EXHAUSTED
last_status_codeType: integeror nullread-only

HTTP status code returned by the most recent attempt.

last_errorType: stringread-only

Error message from the most recent failed attempt.

response_excerptType: stringread-only

Excerpt of the response body returned by the endpoint.

finished_atType: string(date-time)or nullread-only

When the delivery finished (succeeded or exhausted).

item_countType: integeror nullread-only

Number of items included in the delivered payload.

sha256Type: stringread-only

SHA-256 checksum of the delivered payload.

size_bytesType: integeror nullread-only

Size of the delivered payload in bytes.

createdType: string(date-time)read-only

Timestamp set once when the row is first created.

modifiedType: string(date-time)read-only

Timestamp updated automatically on every save.

Request

string(date-time)
string(date-time)
string(date-time)
from zelf import ZelfAPIClient

client = ZelfAPIClient(api_key="<your-api-key>")

result = client.webhooks.list_deliveries()
print(result)
Response
{
  "log_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "timestamp": "2026-01-01T00:00:00Z",
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Request validation failed.",
    "details": {
      "field": [
        "This query parameter is required."
      ]
    }
  }
}

Get Webhook Delivery

GET/api/v1/webhooks/deliveries/{delivery_id}/webhooks.get_delivery

Returns a single delivery attempt.

Parameters

delivery_idType: stringRequired

Returns WebhookDelivery

idType: stringread-only

Encoded identifier of the webhook delivery.

subscriptionType: stringread-only

Encoded identifier of the parent subscription.

scheduled_atType: string(date-time)read-only

When this delivery is scheduled to be sent.

attempt_countType: integerread-only

Number of delivery attempts made so far.

stateType: enumread-only

Current state of the delivery.

Show values
PENDINGSUCCEEDEDFAILEDEXHAUSTEDQUOTA_EXHAUSTED
last_status_codeType: integeror nullread-only

HTTP status code returned by the most recent attempt.

last_errorType: stringread-only

Error message from the most recent failed attempt.

response_excerptType: stringread-only

Excerpt of the response body returned by the endpoint.

finished_atType: string(date-time)or nullread-only

When the delivery finished (succeeded or exhausted).

item_countType: integeror nullread-only

Number of items included in the delivered payload.

sha256Type: stringread-only

SHA-256 checksum of the delivered payload.

size_bytesType: integeror nullread-only

Size of the delivered payload in bytes.

createdType: string(date-time)read-only

Timestamp set once when the row is first created.

modifiedType: string(date-time)read-only

Timestamp updated automatically on every save.

Responses

WebhookDelivery

idType: stringread-only

Encoded identifier of the webhook delivery.

subscriptionType: stringread-only

Encoded identifier of the parent subscription.

scheduled_atType: string(date-time)read-only

When this delivery is scheduled to be sent.

attempt_countType: integerread-only

Number of delivery attempts made so far.

stateType: enumread-only

Current state of the delivery.

Show values
PENDINGSUCCEEDEDFAILEDEXHAUSTEDQUOTA_EXHAUSTED
last_status_codeType: integeror nullread-only

HTTP status code returned by the most recent attempt.

last_errorType: stringread-only

Error message from the most recent failed attempt.

response_excerptType: stringread-only

Excerpt of the response body returned by the endpoint.

finished_atType: string(date-time)or nullread-only

When the delivery finished (succeeded or exhausted).

item_countType: integeror nullread-only

Number of items included in the delivered payload.

sha256Type: stringread-only

SHA-256 checksum of the delivered payload.

size_bytesType: integeror nullread-only

Size of the delivered payload in bytes.

createdType: string(date-time)read-only

Timestamp set once when the row is first created.

modifiedType: string(date-time)read-only

Timestamp updated automatically on every save.

Request

stringRequired
from zelf import ZelfAPIClient

client = ZelfAPIClient(api_key="<your-api-key>")

result = client.webhooks.get_delivery("<delivery_id>")
print(result)
Response
{
  "log_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "timestamp": "2026-01-01T00:00:00Z",
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Request validation failed.",
    "details": {
      "field": [
        "This query parameter is required."
      ]
    }
  }
}