diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GuiceModule.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GuiceModule.java
index f6f4c71..0521cef 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GuiceModule.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GuiceModule.java
@@ -16,8 +16,10 @@
 
 import com.google.gerrit.common.EventListener;
 import com.google.gerrit.extensions.registration.DynamicSet;
+import com.google.gerrit.extensions.restapi.RestApiModule;
 import com.google.gerrit.extensions.webui.TopMenu;
 import com.google.gerrit.server.account.GroupBackend;
+import com.google.gerrit.server.project.ProjectResource;
 import com.google.gson.Gson;
 import com.google.inject.AbstractModule;
 import com.google.inject.Scopes;
@@ -31,8 +33,9 @@
 import com.googlesource.gerrit.plugins.github.oauth.IdentifiedUserGitHubLoginProvider;
 import com.googlesource.gerrit.plugins.github.oauth.UserScopedProvider;
 import com.googlesource.gerrit.plugins.github.replication.GerritGsonProvider;
-import com.googlesource.gerrit.plugins.github.replication.ReplicationStatusListener;
+import com.googlesource.gerrit.plugins.github.replication.ListProjectReplicationStatus;
 import com.googlesource.gerrit.plugins.github.replication.ReplicationStatusFlatFile;
+import com.googlesource.gerrit.plugins.github.replication.ReplicationStatusListener;
 import com.googlesource.gerrit.plugins.github.replication.ReplicationStatusStore;
 
 public class GuiceModule extends AbstractModule {
@@ -52,6 +55,14 @@
     install(new FactoryModuleBuilder()
         .build(GitHubGroupMembership.Factory.class));
 
+    install(new RestApiModule() {
+      @Override
+      protected void configure() {
+        get(ProjectResource.PROJECT_KIND, "replication").to(
+            ListProjectReplicationStatus.class);
+      }
+    });
+
     bind(ReplicationStatusStore.class).to(ReplicationStatusFlatFile.class)
         .in(Scopes.SINGLETON);
     bind(Gson.class).toProvider(GerritGsonProvider.class);
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/ListProjectReplicationStatus.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/ListProjectReplicationStatus.java
new file mode 100644
index 0000000..868ac5b
--- /dev/null
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/ListProjectReplicationStatus.java
@@ -0,0 +1,37 @@
+// Copyright (C) 2013 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.googlesource.gerrit.plugins.github.replication;
+
+import com.google.gerrit.extensions.restapi.AuthException;
+import com.google.gerrit.extensions.restapi.BadRequestException;
+import com.google.gerrit.extensions.restapi.ResourceConflictException;
+import com.google.gerrit.extensions.restapi.RestReadView;
+import com.google.gerrit.server.project.ProjectResource;
+import com.google.inject.Inject;
+
+public class ListProjectReplicationStatus implements RestReadView<ProjectResource> {
+  private final ReplicationStatusStore statusStore;
+
+  @Inject
+  public ListProjectReplicationStatus(ReplicationStatusStore statusStore) {
+    this.statusStore = statusStore;
+  }
+
+  @Override
+  public Object apply(ProjectResource resource) throws AuthException,
+      BadRequestException, ResourceConflictException, Exception {
+    return statusStore.list(resource.getNameKey());
+  }
+}
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/ReplicationStatusFlatFile.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/ReplicationStatusFlatFile.java
index 3bf0645..4d5a033 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/ReplicationStatusFlatFile.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/ReplicationStatusFlatFile.java
@@ -19,20 +19,32 @@
 import static java.nio.file.StandardOpenOption.WRITE;
 
 import java.io.IOException;
+import java.io.Reader;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.FileVisitResult;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.ArrayList;
+import java.util.List;
 
 import com.google.gerrit.extensions.annotations.PluginData;
 import com.google.gerrit.reviewdb.client.Project;
+import com.google.gson.Gson;
 import com.google.gson.JsonObject;
 import com.google.inject.Inject;
+import com.google.inject.Provider;
 
 public class ReplicationStatusFlatFile implements ReplicationStatusStore {
   private final Path pluginData;
+  private final Gson gson;
 
   @Inject
-  public ReplicationStatusFlatFile(@PluginData Path pluginData) {
+  public ReplicationStatusFlatFile(@PluginData Path pluginData,
+      Provider<Gson> gsonProvider) {
     this.pluginData = pluginData;
+    this.gson = gsonProvider.get();
   }
 
   @Override
@@ -56,4 +68,24 @@
     return sanitizedKey;
   }
 
+  @Override
+  public List<JsonObject> list(Project.NameKey parentKey) throws IOException {
+    Path projectPath = pluginData.resolve(getSanitizedKey(parentKey.get()));
+    final List<JsonObject> entries = new ArrayList<>();
+    Files.walkFileTree(projectPath, new SimpleFileVisitor<Path>() {
+
+      @Override
+      public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
+          throws IOException {
+        try (Reader fileReader =
+            Files.newBufferedReader(file, StandardCharsets.UTF_8)) {
+          JsonObject json = gson.fromJson(fileReader, JsonObject.class);
+          entries.add(json);
+        }
+        return FileVisitResult.CONTINUE;
+      }
+    });
+    return entries;
+  }
+
 }
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/ReplicationStatusStore.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/ReplicationStatusStore.java
index 701869b..75c1872 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/ReplicationStatusStore.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/ReplicationStatusStore.java
@@ -15,6 +15,7 @@
 package com.googlesource.gerrit.plugins.github.replication;
 
 import java.io.IOException;
+import java.util.List;
 
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gson.JsonObject;
@@ -23,4 +24,6 @@
 
   public void set(Project.NameKey projectKey, String refKey,
       JsonObject statusEvent) throws IOException;
+
+  public List<JsonObject> list(Project.NameKey projectKey) throws IOException;
 }
