---
id: "svix"
type: "component"
kind: "webhook-endpoint"
provider: "default"
category: "messaging"
docs: "https://docs.svix.com/retries"
url: "https://localhost:3000/catalogue/components/svix"
---

# Svix

Webhooks as a service: signs every message and retries delivery eight times.

| | |
|---|---|
| Provider | [default](https://localhost:3000/catalogue?provider=default) |
| Kind | [Webhook endpoint](https://localhost:3000/catalogue/kinds/webhook-endpoint) |
| Category | Messaging |
| Official docs | [https://docs.svix.com/retries](https://docs.svix.com/retries) |

## Properties

| property | type | values | required | kind default | this component |
|---|---|---|---|---|---|
| `deployment` | enum | `cloud`, `self-hosted` | no | "cloud" | inherited |
| `endpointDisabledAfterDays` | integer | — | no | 5 | inherited |
| `idempotent` | boolean | — | no | false | **false** |
| `managed` | boolean | — | no | false | **true** |
| `retriedByCaller` | boolean | — | no | true | **true** |
| `retryAttempts` | integer | — | no | 8 | inherited |
| `signatureToleranceMinutes` | integer | — | no | 5 | inherited |
| `signatureVerified` | boolean | — | no | false | **true** |

Bold values are the ones this component pins.

## Rules that apply · 1

### Webhook without signature verification or idempotency `webhook-without-signature-or-idempotency` (error)

- Page: https://localhost:3000/catalogue/rules/webhook-without-signature-or-idempotency.md
- Why: A webhook is a public endpoint that its caller retries. Without signature verification anyone can post a fake event; without idempotency the provider's own retries apply the same event twice.
- Applies to: every node of kind webhook-endpoint
- Message: Webhook '{{node.id}}' does not verify signatures or is not idempotent. Verify the caller's signature and deduplicate by event id.

It fires when:

- any of these hold:
  - the node's `signatureVerified` is false
  - the node's `idempotent` is false

## Other products of the same kind · 3

- [Hookdeck](https://localhost:3000/catalogue/components/hookdeck.md) `hookdeck` — default
- [Generic webhook endpoint](https://localhost:3000/catalogue/components/webhook-endpoint.md) `webhook-endpoint` — default
- [Webhook receiver](https://localhost:3000/catalogue/components/webhook-receiver.md) `webhook-receiver` — default

## Use it in a design

```yaml
nodes:
  - { id: "svix", component: "svix" }
```

## Source (`component` YAML, verbatim)

```yaml
# yaml-language-server: $schema=../../schema/component.schema.json
# Svix: webhooks as a service. "Why verify webhooks" states Svix signs every webhook with a unique
# key per endpoint following the Standard Webhooks spec and rejects timestamps more than five
# minutes old; "Retries" gives the eight-attempt exponential schedule (immediate, 5 s, 5 min, 30 min,
# 2 h, 5 h, 10 h, 10 h) and the endpoint being disabled after five days of failures.
schemaVersion: "1"
type: "component"
id: "svix"
kind: "webhook-endpoint"
provider: "default"
docs: "https://docs.svix.com/retries"
defaults:
  managed: true
  signatureVerified: true
  retriedByCaller: true
  idempotent: false
properties:
  deployment:
    type: "enum"
    values: ["cloud", "self-hosted"]
    default: "cloud"
  retryAttempts:
    type: "integer"
    default: 8
  endpointDisabledAfterDays:
    type: "integer"
    default: 5
  signatureToleranceMinutes:
    type: "integer"
    default: 5
```

Human page: https://localhost:3000/catalogue/components/svix
