diff --git a/docs/usage/self-hosted-experimental.md b/docs/usage/self-hosted-experimental.md
index a16acf51baf1d3a5177b9c9b6d3c2e04fb772604..d7945675aaac95f92a14628b930e48ee7687085c 100644
--- a/docs/usage/self-hosted-experimental.md
+++ b/docs/usage/self-hosted-experimental.md
@@ -99,7 +99,7 @@ If set to any value, Renovate will download `nupkg` files for determining packag
 
 ## `RENOVATE_X_PLATFORM_VERSION`
 
-Specify this string for Renovate to skip API checks and provide GitLab/Bitbucket server version directly.
+Specify this string for Renovate to skip API checks and provide GitLab/Gitea and Forgejo/Bitbucket server version directly.
 Particularly useful with GitLab's `CI_JOB_TOKEN` to authenticate Renovate or to reduce API calls for Bitbucket.
 
 Read [platform details](modules/platform/gitlab/index.md) to learn why we need the server version on GitLab.
diff --git a/lib/modules/platform/gitea/index.ts b/lib/modules/platform/gitea/index.ts
index 369edaad369b7ba3ce126c4600e020629084d1a4..1c8326c54167ccfc59ec9f941731083df4a213e8 100644
--- a/lib/modules/platform/gitea/index.ts
+++ b/lib/modules/platform/gitea/index.ts
@@ -212,10 +212,18 @@ const platform: Platform = {
       gitAuthor = `${user.full_name ?? user.username} <${user.email}>`;
       botUserID = user.id;
       botUserName = user.username;
-      defaults.version = await helper.getVersion({ token });
+      // istanbul ignore if: experimental feature
+      if (semver.valid(process.env.RENOVATE_X_PLATFORM_VERSION)) {
+        defaults.version = process.env.RENOVATE_X_PLATFORM_VERSION!;
+      } else {
+        defaults.version = await helper.getVersion({ token });
+      }
       if (defaults.version?.includes('gitea-')) {
         defaults.isForgejo = true;
       }
+      logger.debug(
+        `${defaults.isForgejo ? 'Forgejo' : 'Gitea'} version: ${defaults.version}`,
+      );
     } catch (err) {
       logger.debug(
         { err },