diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/issue/IssueDetector.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/issue/IssueDetector.java
index 48d965c..c432e79 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/issue/IssueDetector.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/issue/IssueDetector.java
@@ -413,9 +413,7 @@
     private void checkFailures() {
         List<String> ids = cfg.getTrackedBranchesIds();
 
-        for (Iterator<String> iter = ids.iterator(); iter.hasNext(); ) {
-            String tbranchName = iter.next();
-
+        for (String tbranchName : ids) {
             try {
                 checkFailuresEx(tbranchName);
             }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/GetTrackedBranches.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/GetTrackedBranches.java
index 1d0c302..ecda88e 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/GetTrackedBranches.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/GetTrackedBranches.java
@@ -32,6 +32,8 @@
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
+
+import org.apache.ignite.ci.conf.BranchTracked;
 import org.apache.ignite.ci.conf.ChainAtServer;
 import org.apache.ignite.ci.tcbot.TcBotGeneralService;
 import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
@@ -63,23 +65,32 @@
 
     @GET
     @Path("getIds")
-    public List<String> getIds() {
-        return CtxListener.getInjector(ctx).getInstance(ITcBotConfig.class).getTrackedBranchesIds();
+    public List<String> getIdsIfAccessible() {
+        ICredentialsProv prov = ICredentialsProv.get(req);
+        Injector injector = CtxListener.getInjector(ctx);
+        ITcBotConfig cfg = injector.getInstance(ITcBotConfig.class);
+        ITeamcityIgnitedProvider tcProv = injector.getInstance(ITeamcityIgnitedProvider.class);
+
+        return cfg.getTrackedBranches().getBranches()
+                .stream()
+                .filter(bt ->
+                        bt.getChains().stream().anyMatch(chain-> tcProv.hasAccess(chain.serverId, prov)))
+                .map(BranchTracked::getId)
+                .collect(Collectors.toList());
     }
 
     /**
      * Return all suites involved into tracked branches.
      *
-     * @param srvId Optional service ID to additiona filtering of chains.
+     * @param srvId Optional service ID to additional filtering of chains.
      */
     @GET
     @Path("suites")
     public Set<ChainAtServer> getSuites(@Nullable @QueryParam("server") String srvId) {
-        final ICredentialsProv prov = ICredentialsProv.get(req);
-
+        ICredentialsProv prov = ICredentialsProv.get(req);
         Injector injector = CtxListener.getInjector(ctx);
         ITcBotConfig cfg = injector.getInstance(ITcBotConfig.class);
-        ITeamcityIgnitedProvider tcIgnProv = injector.getInstance(ITeamcityIgnitedProvider.class);
+        ITeamcityIgnitedProvider tcProv = injector.getInstance(ITeamcityIgnitedProvider.class);
 
         return cfg.getTrackedBranches()
             .getSuitesUnique()
@@ -87,7 +98,7 @@
             .filter(chainAtSrv ->
                 Strings.isNullOrEmpty(srvId)
                     || srvId.equals(chainAtSrv.serverId))
-            .filter(chainAtServer -> tcIgnProv.hasAccess(chainAtServer.serverId, prov))
+            .filter(chainAtServer -> tcProv.hasAccess(chainAtServer.serverId, prov))
             .collect(Collectors.toSet());
     }
 
@@ -97,19 +108,14 @@
     @GET
     @Path("getServerIds")
     public Set<String> getServerIds() {
-        final ICredentialsProv prov = ICredentialsProv.get(req);
-
+        ICredentialsProv prov = ICredentialsProv.get(req);
         Injector injector = CtxListener.getInjector(ctx);
         ITcBotConfig cfg = injector.getInstance(ITcBotConfig.class);
-
         ITeamcityIgnitedProvider tcProv = injector.getInstance(ITeamcityIgnitedProvider.class);
+
         return cfg.getServerIds()
             .stream()
-            .filter(srvId ->
-            {
-                return tcProv.hasAccess(srvId, prov);
-
-            })
+            .filter(srvId -> tcProv.hasAccess(srvId, prov))
             .collect(Collectors.toSet());
     }
 
