Failures & Lifecycle
When a delivery doesn't succeed, Pennylane reacts in one of two ways depending on why it failed.
Permanent failures: disabled immediately
If your endpoint responds with one of these, the failure is treated as permanent and the subscription is disabled immediately, without retries:
- HTTP 401, 403, 404, or 410
- A TLS/SSL error (e.g. an invalid or expired certificate)
These signal that the endpoint is gone, misconfigured, or untrusted, so retrying would not help. The subscription's disabled_reason becomes permanent_error.
Temporary failures: retried, then possibly disabled
Any other unsuccessful outcome is treated as temporary and retried with increasing back-off:
- Timeouts and connection errors
- HTTP 5xx
- HTTP 429
- Any other non-
2xxresponse not listed as permanent above
Each consecutive failure increments a counter. A successful delivery resets that counter to zero. If deliveries keep failing over a sustained period, the subscription is disabled with disabled_reason repeated_failure.
When a subscription is disabled
- Deliveries stop.
enabledbecomesfalse. disabled_at,disabled_reason, andlast_failure_statusare recorded and visible via the Get / List endpoints.- The subscription owner is notified by email (except for manual disables).
Re-enabling
There is no automatic re-enable. Once you've fixed your endpoint, re-enable the subscription via the Update webhook subscription endpoint
This clears disabled_at, disabled_reason, and the failure counters, and deliveries resume immediately.
Manually disabling
To pause deliveries without deleting the subscription, update it with "enabled": false. This sets disabled_reason to manual and does not send a notification email. Re-enable the same way.
Subscription lifecycle
stateDiagram-v2
state "Disabled (permanent_error)" as Disabled_permanent
state "Disabled (repeated_failure)" as Disabled_repeated
state "Disabled (manual)" as Disabled_manual
[*] --> Enabled : POST /webhook_subscriptions
Enabled --> Disabled_permanent : 401/403/404/410 or TLS error
Enabled --> Disabled_repeated : too many consecutive failures
Enabled --> Disabled_manual : PUT enabled=false
Disabled_permanent --> Enabled : PUT enabled=true
Disabled_repeated --> Enabled : PUT enabled=true
Disabled_manual --> Enabled : PUT enabled=trueUpdated about 11 hours ago

