diff --git a/api-reference/error-codes.mdx b/api-reference/error-codes.mdx
index d1e4268..570dd0f 100644
--- a/api-reference/error-codes.mdx
+++ b/api-reference/error-codes.mdx
@@ -3,7 +3,7 @@ title: Error codes
description: API error response fields and stable error codes.
type: reference
audience: user
-verified: 2026-08-14
+verified: 2026-08-15
product_version: 0.26.2
executable: false
---
@@ -114,7 +114,7 @@ A conflict response also contains `current_state`. Some errors contain `user_mes
| `UZ-WH-002` | 400 | Malformed webhook | Webhook payload could not be parsed. Check Content-Type and body. | Keep webhook signing secrets matched and service clocks synchronized. |
| `UZ-WH-010` | 401 | Invalid webhook signature | The webhook signature did not verify. The stored signing secret must match the one configured upstream. | Keep webhook signing secrets matched and service clocks synchronized. |
| `UZ-WH-011` | 401 | Stale webhook timestamp | The webhook timestamp is more than 5 minutes off. That means a replay or clock skew. | Keep webhook signing secrets matched and service clocks synchronized. |
-| `UZ-WH-020` | 401 | Webhook credential not configured | Create a random webhook secret of at least 32 bytes. Store it as this source's webhook_secret, set the same value upstream, then resend. | Keep webhook signing secrets matched and service clocks synchronized. |
+| `UZ-WH-020` | 401 | Webhook credential not configured | The trigger's source is not a recognized webhook provider (github, slack, linear), or the workspace holds no secret for it. Set a recognized source. Then store a random value of at least 32 bytes in that secret's webhook_secret field, set the same upstream, and resend. | Keep webhook signing secrets matched and service clocks synchronized. |
| `UZ-WH-021` | 404 | Connector installation is not mapped | Reconnect the provider App to the intended workspace, then redeliver the event. | Keep webhook signing secrets matched and service clocks synchronized. |
| `UZ-WH-022` | 404 | No fleet subscription matched | Bind the repository and event to an active fleet with an approved integration grant. | Keep webhook signing secrets matched and service clocks synchronized. |
| `UZ-WH-030` | 413 | Webhook payload too large | The webhook body exceeds the 1 MiB limit. Reduce the payload size. | Keep webhook signing secrets matched and service clocks synchronized. |
diff --git a/fleets/webhooks.mdx b/fleets/webhooks.mdx
index 67cf7d8..58b76a1 100644
--- a/fleets/webhooks.mdx
+++ b/fleets/webhooks.mdx
@@ -3,7 +3,7 @@ title: Configure a webhook
description: Send signed provider events to a fleet.
type: how-to
audience: user
-verified: 2026-07-12
+verified: 2026-08-15
product_version: 0.26.2
executable: false
---
@@ -76,7 +76,7 @@ A successful request returns HTTP `202`. A filtered or inactive event returns HT
| `UZ-WH-001` | The fleet URL is wrong or deleted. | Copy the current URL from the fleet. |
| `UZ-WH-010` | The signature does not match. | Use the same signing secret on both sides. |
| `UZ-WH-011` | The signed timestamp differs by more than 5 minutes. | Correct the sender clock. |
-| `UZ-WH-020` | The workspace lacks the named secret. | Create the `secret_ref` name. |
+| `UZ-WH-020` | The trigger's `source` is not a supported provider, or the workspace has no secret for it. | Supported sources are `github`, `slack`, and `linear`. Create the workspace secret named by `credential_name`, which defaults to the `source` name, and put the signing value in its `webhook_secret` field. |
| `UZ-WH-030` | The body exceeds 1 MiB. | Filter or shorten the provider body. |
Providers can deliver the same event more than once. Use a stable provider event identifier and make fleet actions safe to repeat.