diff --git a/Documentation/rest-api-config.txt b/Documentation/rest-api-config.txt
index 16b76b7..fd35a29 100644
--- a/Documentation/rest-api-config.txt
+++ b/Documentation/rest-api-config.txt
@@ -218,10 +218,8 @@
 
   )]}'
   {
-    "result": {
-      "message": "user Kristen Burns \u003cKristen.Burns@gerritcodereview.com\u003e (1000098) cannot see ref refs/heads/secret/master in project medium",
-      "status": 403
-    }
+    "message": "user Kristen Burns \u003cKristen.Burns@gerritcodereview.com\u003e (1000098) cannot see ref refs/heads/secret/master in project medium",
+    "status": 403
   }
 ----
 
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account/CheckAccessIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account/CheckAccessIT.java
index cda5347..e7b5cc0 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account/CheckAccessIT.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account/CheckAccessIT.java
@@ -118,19 +118,19 @@
       }
 
       int want = entry.getValue();
-      if (want != info.result.status) {
-        fail(String.format("check.access(%s) = %d, want %d", in, info.result.status, want));
+      if (want != info.status) {
+        fail(String.format("check.access(%s) = %d, want %d", in, info.status, want));
       }
 
       switch (want) {
         case 403:
-          assertThat(info.result.message).contains("cannot see");
+          assertThat(info.message).contains("cannot see");
           break;
         case 404:
-          assertThat(info.result.message).contains("does not exist");
+          assertThat(info.message).contains("does not exist");
           break;
         case 200:
-          assertThat(info.result.message).isNull();
+          assertThat(info.message).isNull();
           break;
         default:
           fail(String.format("unknown code %d", want));
diff --git a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/config/AccessCheckInfo.java b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/config/AccessCheckInfo.java
index 4ff5172..fab2ec4 100644
--- a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/config/AccessCheckInfo.java
+++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/config/AccessCheckInfo.java
@@ -15,13 +15,9 @@
 package com.google.gerrit.extensions.api.config;
 
 public class AccessCheckInfo {
-  public static class Result {
-    public String message;
+  public String message;
+  // HTTP status code
+  public int status;
 
-    // HTTP status code.
-    public int status;
-  }
-
-  public Result result;
   // for future extension, we may add inputs / results for bulk checks.
 }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/config/CheckAccess.java b/gerrit-server/src/main/java/com/google/gerrit/server/config/CheckAccess.java
index a80d298..84db266 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/config/CheckAccess.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/config/CheckAccess.java
@@ -16,7 +16,6 @@
 
 import com.google.common.base.Strings;
 import com.google.gerrit.extensions.api.config.AccessCheckInfo;
-import com.google.gerrit.extensions.api.config.AccessCheckInfo.Result;
 import com.google.gerrit.extensions.api.config.AccessCheckInput;
 import com.google.gerrit.extensions.restapi.AuthException;
 import com.google.gerrit.extensions.restapi.BadRequestException;
@@ -87,12 +86,11 @@
     }
 
     AccessCheckInfo info = new AccessCheckInfo();
-    info.result = new Result();
 
     Project.NameKey key = new Project.NameKey(input.project);
     if (projectCache.get(key) == null) {
-      info.result.message = String.format("project %s does not exist", key);
-      info.result.status = HttpServletResponse.SC_NOT_FOUND;
+      info.message = String.format("project %s does not exist", key);
+      info.status = HttpServletResponse.SC_NOT_FOUND;
       return info;
     }
 
@@ -100,11 +98,11 @@
     try {
       permissionBackend.user(user).project(key).check(ProjectPermission.ACCESS);
     } catch (AuthException | PermissionBackendException e) {
-      info.result.message =
+      info.message =
           String.format(
               "user %s (%s) cannot see project %s",
               user.getNameEmail(), user.getAccount().getId(), key);
-      info.result.status = HttpServletResponse.SC_FORBIDDEN;
+      info.status = HttpServletResponse.SC_FORBIDDEN;
       return info;
     }
 
@@ -115,8 +113,8 @@
             .ref(new Branch.NameKey(key, input.ref))
             .check(RefPermission.READ);
       } catch (AuthException | PermissionBackendException e) {
-        info.result.status = HttpServletResponse.SC_FORBIDDEN;
-        info.result.message =
+        info.status = HttpServletResponse.SC_FORBIDDEN;
+        info.message =
             String.format(
                 "user %s (%s) cannot see ref %s in project %s",
                 user.getNameEmail(), user.getAccount().getId(), input.ref, key);
@@ -124,7 +122,7 @@
       }
     }
 
-    info.result.status = HttpServletResponse.SC_OK;
+    info.status = HttpServletResponse.SC_OK;
     return info;
   }
 }
