diff --git a/modules/httpcache/httpcache.go b/modules/httpcache/httpcache.go
index b57b321832..10f626b3f3 100644
--- a/modules/httpcache/httpcache.go
+++ b/modules/httpcache/httpcache.go
@@ -30,6 +30,7 @@ func SetCacheControlInHeader(h http.Header, maxAge time.Duration, additionalDire
 
 		// to remind users they are using non-prod setting.
 		h.Set("X-Gitea-Debug", "RUN_MODE="+setting.RunMode)
+		h.Set("X-Forgejo-Debug", "RUN_MODE="+setting.RunMode)
 	}
 
 	h.Set("Cache-Control", strings.Join(append(directives, additionalDirectives...), ", "))
diff --git a/modules/httpcache/httpcache_test.go b/modules/httpcache/httpcache_test.go
index d81f06097c..65a8a9b8fb 100644
--- a/modules/httpcache/httpcache_test.go
+++ b/modules/httpcache/httpcache_test.go
@@ -18,6 +18,9 @@ func countFormalHeaders(h http.Header) (c int) {
 		if strings.HasPrefix(k, "X-Gitea-") {
 			continue
 		}
+		if strings.HasPrefix(k, "X-Forgejo-") {
+			continue
+		}
 		c++
 	}
 	return c
diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go
index 92d5713493..07a0ecf64e 100644
--- a/routers/api/v1/api.go
+++ b/routers/api/v1/api.go
@@ -835,7 +835,7 @@ func Routes() *web.Route {
 			// setting.CORSConfig.AllowSubdomain // FIXME: the cors middleware needs allowSubdomain option
 			AllowedMethods:   setting.CORSConfig.Methods,
 			AllowCredentials: setting.CORSConfig.AllowCredentials,
-			AllowedHeaders:   append([]string{"Authorization", "X-Gitea-OTP"}, setting.CORSConfig.Headers...),
+			AllowedHeaders:   append([]string{"Authorization", "X-Gitea-OTP", "X-Forgejo-OTP"}, setting.CORSConfig.Headers...),
 			MaxAge:           int(setting.CORSConfig.MaxAge.Seconds()),
 		}))
 	}
diff --git a/routers/api/v1/repo/file.go b/routers/api/v1/repo/file.go
index ea311c3202..9ee10f6ce1 100644
--- a/routers/api/v1/repo/file.go
+++ b/routers/api/v1/repo/file.go
@@ -33,7 +33,10 @@ import (
 	files_service "code.gitea.io/gitea/services/repository/files"
 )
 
-const giteaObjectTypeHeader = "X-Gitea-Object-Type"
+const (
+	giteaObjectTypeHeader   = "X-Gitea-Object-Type"
+	forgejoObjectTypeHeader = "X-Forgejo-Object-Type"
+)
 
 // GetRawFile get a file by path on a repository
 func GetRawFile(ctx *context.APIContext) {
@@ -80,6 +83,7 @@ func GetRawFile(ctx *context.APIContext) {
 	}
 
 	ctx.RespHeader().Set(giteaObjectTypeHeader, string(files_service.GetObjectTypeFromTreeEntry(entry)))
+	ctx.RespHeader().Set(forgejoObjectTypeHeader, string(files_service.GetObjectTypeFromTreeEntry(entry)))
 
 	if err := common.ServeBlob(ctx.Base, ctx.Repo.TreePath, blob, lastModified); err != nil {
 		ctx.Error(http.StatusInternalServerError, "ServeBlob", err)
@@ -129,6 +133,7 @@ func GetRawFileOrLFS(ctx *context.APIContext) {
 	}
 
 	ctx.RespHeader().Set(giteaObjectTypeHeader, string(files_service.GetObjectTypeFromTreeEntry(entry)))
+	ctx.RespHeader().Set(forgejoObjectTypeHeader, string(files_service.GetObjectTypeFromTreeEntry(entry)))
 
 	// LFS Pointer files are at most 1024 bytes - so any blob greater than 1024 bytes cannot be an LFS file
 	if blob.Size() > 1024 {
diff --git a/services/mailer/mail.go b/services/mailer/mail.go
index e7dc25b5b5..a90eb6ea38 100644
--- a/services/mailer/mail.go
+++ b/services/mailer/mail.go
@@ -415,6 +415,16 @@ func generateAdditionalHeaders(ctx *mailCommentContext, reason string, recipient
 		"X-Gitea-Issue-ID":          strconv.FormatInt(ctx.Issue.Index, 10),
 		"X-Gitea-Issue-Link":        ctx.Issue.HTMLURL(),
 
+		"X-Forgejo-Reason":            reason,
+		"X-Forgejo-Sender":            ctx.Doer.DisplayName(),
+		"X-Forgejo-Recipient":         recipient.DisplayName(),
+		"X-Forgejo-Recipient-Address": recipient.Email,
+		"X-Forgejo-Repository":        repo.Name,
+		"X-Forgejo-Repository-Path":   repo.FullName(),
+		"X-Forgejo-Repository-Link":   repo.HTMLURL(),
+		"X-Forgejo-Issue-ID":          strconv.FormatInt(ctx.Issue.Index, 10),
+		"X-Forgejo-Issue-Link":        ctx.Issue.HTMLURL(),
+
 		"X-GitHub-Reason":            reason,
 		"X-GitHub-Sender":            ctx.Doer.DisplayName(),
 		"X-GitHub-Recipient":         recipient.DisplayName(),
diff --git a/services/webhook/deliver.go b/services/webhook/deliver.go
index fd7a3d7fba..d13fe1c5d3 100644
--- a/services/webhook/deliver.go
+++ b/services/webhook/deliver.go
@@ -123,6 +123,10 @@ func Deliver(ctx context.Context, t *webhook_model.HookTask) error {
 
 	event := t.EventType.Event()
 	eventType := string(t.EventType)
+	req.Header.Add("X-Forgejo-Delivery", t.UUID)
+	req.Header.Add("X-Forgejo-Event", event)
+	req.Header.Add("X-Forgejo-Event-Type", eventType)
+	req.Header.Add("X-Forgejo-Signature", signatureSHA256)
 	req.Header.Add("X-Gitea-Delivery", t.UUID)
 	req.Header.Add("X-Gitea-Event", event)
 	req.Header.Add("X-Gitea-Event-Type", eventType)