diff --git a/internal/pipe/webhook/webhook.go b/internal/pipe/webhook/webhook.go
index 7d98c0578..cda0766cb 100644
--- a/internal/pipe/webhook/webhook.go
+++ b/internal/pipe/webhook/webhook.go
@@ -46,6 +46,9 @@ func (p Pipe) Default(ctx *context.Context) error {
 	if ctx.Config.Announce.Webhook.ContentType == "" {
 		ctx.Config.Announce.Webhook.ContentType = DefaultContentType
 	}
+	if len(ctx.Config.Announce.Webhook.ExpectedStatusCodes) == 0 {
+		ctx.Config.Announce.Webhook.ExpectedStatusCodes = defaultExepctedStatusCodes
+	}
 	return nil
 }
 
@@ -76,11 +79,6 @@ func (p Pipe) Announce(ctx *context.Context) error {
 		return fmt.Errorf("webhook: %w", err)
 	}
 
-	expectedStatusCodes := ctx.Config.Announce.Webhook.ExpectedStatusCodes
-	if len(expectedStatusCodes) == 0 {
-		expectedStatusCodes = defaultExepctedStatusCodes
-	}
-
 	log.Infof("posting: '%s'", msg)
 	customTransport := http.DefaultTransport.(*http.Transport).Clone()
 
@@ -117,7 +115,7 @@ func (p Pipe) Announce(ctx *context.Context) error {
 	}
 	defer resp.Body.Close()
 
-	if !slices.Contains(expectedStatusCodes, resp.StatusCode) {
+	if !slices.Contains(ctx.Config.Announce.Webhook.ExpectedStatusCodes, resp.StatusCode) {
 		io.Copy(io.Discard, resp.Body)
 		return fmt.Errorf("request failed with status %v", resp.Status)
 	}
diff --git a/internal/pipe/webhook/webhook_test.go b/internal/pipe/webhook/webhook_test.go
index 18897df2e..45e4e8056 100644
--- a/internal/pipe/webhook/webhook_test.go
+++ b/internal/pipe/webhook/webhook_test.go
@@ -27,6 +27,7 @@ func TestNoEndpoint(t *testing.T) {
 			Webhook: config.Webhook{},
 		},
 	})
+	require.NoError(t, Pipe{}.Default(ctx))
 	require.EqualError(t, Pipe{}.Announce(ctx), `webhook: no endpoint url`)
 }
 
@@ -50,6 +51,7 @@ func TestAnnounceInvalidMessageTemplate(t *testing.T) {
 			},
 		},
 	})
+	require.NoError(t, Pipe{}.Default(ctx))
 	testlib.RequireTemplateError(t, Pipe{}.Announce(ctx))
 }
 
@@ -87,6 +89,7 @@ func TestAnnounceWebhook(t *testing.T) {
 			},
 		},
 	})
+	require.NoError(t, Pipe{}.Default(ctx))
 	require.NoError(t, Pipe{}.Announce(ctx))
 }
 
@@ -118,6 +121,7 @@ func TestAnnounceTLSWebhook(t *testing.T) {
 			},
 		},
 	})
+	require.NoError(t, Pipe{}.Default(ctx))
 	require.NoError(t, Pipe{}.Announce(ctx))
 }
 
@@ -145,6 +149,7 @@ func TestAnnounceTLSCheckCertWebhook(t *testing.T) {
 			},
 		},
 	})
+	require.NoError(t, Pipe{}.Default(ctx))
 	require.Error(t, Pipe{}.Announce(ctx))
 }
 
@@ -182,6 +187,7 @@ func TestAnnounceBasicAuthWebhook(t *testing.T) {
 		},
 	})
 	t.Setenv("BASIC_AUTH_HEADER_VALUE", fmt.Sprintf("Basic %s", base64.StdEncoding.EncodeToString([]byte("user:pass"))))
+	require.NoError(t, Pipe{}.Default(ctx))
 	require.NoError(t, Pipe{}.Announce(ctx))
 }
 
@@ -220,6 +226,7 @@ func TestAnnounceAdditionalHeadersWebhook(t *testing.T) {
 			},
 		},
 	})
+	require.NoError(t, Pipe{}.Default(ctx))
 	require.NoError(t, Pipe{}.Announce(ctx))
 }
 
@@ -253,6 +260,7 @@ func TestAnnounceExepectedStatusCodesWebhook(t *testing.T) {
 			},
 		},
 	})
+	require.NoError(t, Pipe{}.Default(ctx))
 	require.NoError(t, Pipe{}.Announce(ctx))
 }
 
@@ -272,3 +280,33 @@ func TestSkip(t *testing.T) {
 		require.False(t, Pipe{}.Skip(ctx))
 	})
 }
+
+func TestDefault(t *testing.T) {
+	t.Run("empty", func(t *testing.T) {
+		ctx := testctx.NewWithCfg(config.Project{
+			Announce: config.Announce{
+				Webhook: config.Webhook{},
+			},
+		})
+		require.NoError(t, Pipe{}.Default(ctx))
+		actual := ctx.Config.Announce.Webhook
+		require.NotEmpty(t, actual.MessageTemplate)
+		require.NotEmpty(t, actual.ContentType)
+		require.NotEmpty(t, actual.ExpectedStatusCodes)
+	})
+	t.Run("not empty", func(t *testing.T) {
+		expected := config.Webhook{
+			MessageTemplate:     "foo",
+			ContentType:         "text",
+			ExpectedStatusCodes: []int{200},
+		}
+		ctx := testctx.NewWithCfg(config.Project{
+			Announce: config.Announce{
+				Webhook: expected,
+			},
+		})
+		require.NoError(t, Pipe{}.Default(ctx))
+		actual := ctx.Config.Announce.Webhook
+		require.Equal(t, expected, actual)
+	})
+}