# When no delivery arrives

The most common reasons why a webhook does not arrive or arrives twice, or why an endpoint cannot be created, in the order in which they occur.

> **Type:** troubleshooting
> **For:** Anyone who runs an endpoint and misses something in the delivery log or at the receiver.
> **Prerequisite:** Access to **Settings › Organization › Webhooks** as Owner or Manager. To change and redeliver, the Owner role.

| Symptom | Meaning | Solution |
|---|---|---|
| The endpoint is **Active**, the delivery log stays empty | The subscribed event does not occur in your organization, or the event was added to the list only recently, because a changed list of events takes effect up to an hour later. A misspelled type or one that cannot be subscribed to is not accepted on creation in the first place (`422 WebhookEndpoint.EventUnknown`) | Compare the type literally with the tables: [Organization, accounts, billing](/webhooks/event-types-organization) and [Content, programs, devices, apps](/webhooks/event-types-content-devices). Trigger the event in the portal and open the log again |
| The endpoint is **Inactive** with “last failure …” | More than 20 failures in a row have disabled the endpoint. It receives no new deliveries | Fix the cause at the receiver, then **Activate** (or `PATCH` with `{"active": true}`). See [Disabling an endpoint](/webhooks/delivery-and-retries#disabling-an-endpoint) |
| A delivery is `dead` although only one attempt was counted | Your server responded with 4xx (except 408 and 429). This counts as a permanent failure without a retry | For temporary problems, respond with 503 or 429, not with 4xx. Send the affected delivery again through `POST /v1/webhooks/{id}/deliveries/{deliveryId}/retry` (the portal shows **Retry** only for **Failed**). See [The expected response](/webhooks/delivery-and-retries#the-expected-response) |
| Deliveries fail without a response code, `responseCode` is `null` | Your server did not respond within 10 seconds, or the connection could not be established | Respond with 2xx right away and process afterward. Check that the address is reachable from outside. See [What follows](/webhooks/about-delivery#what-follows) |
| Your receiver rejects deliveries: signature does not match | The body was serialized again before the check, or after **Rotate secret** the receiver still checks with the old secret | Check the raw bytes and switch to the new secret. See [Verify the signature of a delivery](/webhooks/verify-signature) |
| The same delivery arrives twice | A retry or a manual redelivery carries the same `X-Delivery-Id` | Deduplicate by `X-Delivery-Id`. See [Verify the signature of a delivery](/webhooks/verify-signature#steps) |
| Creating fails with status 422, `WebhookEndpoint.UrlInvalid` | The address is not https or points to `localhost`, a private network, or a `.local` name | Enter a public https address. See [Rules for the address and events](/webhooks/create-endpoint#rules-for-the-address-and-events) |
| Creating fails with status 403, `Billing.FeatureNotEntitled`. **Create endpoint** is locked | Your package does not include webhooks. Existing endpoints keep running | Change the package. Keep editing, switching off, and deleting existing endpoints. See [Create a webhook endpoint](/webhooks/create-endpoint) |
| A call through the API fails with status 403, `Permission.Denied` | The call came with an API key or from an account without the Owner role. The webhook permissions apply only to signed-in accounts | Call with the access token of a sign-in as Owner. See [Permissions](/webhooks/delivery-and-retries#permissions) |
| Status 404, `WebhookEndpoint.NotFound` or `WebhookDelivery.NotFound` | The identifier (`whk_…` or `whd_…`) does not belong to your organization or was deleted | Take the identifier from `GET /v1/webhooks` or the delivery log |

If no row fits: the delivery log shows the state, response code, and number of attempts for each delivery. For failed attempts, the response of your server is stored truncated in `responseBody` of the [list through the API](/webhooks/delivery-and-retries#the-delivery-log-through-the-api).

`WebhookEndpoint.Disabled` (status 409) is in the error catalog but does not occur today: editing, rotation, and deletion also succeed on an inactive endpoint, and a retry sends nothing there.
