diff --git a/java/com/google/gerrit/plugins/checks/api/CheckApiImpl.java b/java/com/google/gerrit/plugins/checks/api/CheckApiImpl.java
index 378ce64..5cd20f6 100644
--- a/java/com/google/gerrit/plugins/checks/api/CheckApiImpl.java
+++ b/java/com/google/gerrit/plugins/checks/api/CheckApiImpl.java
@@ -42,7 +42,7 @@
   public CheckInfo get(ListChecksOption... options) throws RestApiException {
     try {
       Arrays.stream(options).forEach(getCheck::addOption);
-      return getCheck.apply(checkResource);
+      return getCheck.apply(checkResource).value();
     } catch (Exception e) {
       throw asRestApiException("Cannot retrieve check", e);
     }
@@ -51,7 +51,7 @@
   @Override
   public CheckInfo update(CheckInput input) throws RestApiException {
     try {
-      return updateCheck.apply(checkResource, input);
+      return updateCheck.apply(checkResource, input).value();
     } catch (Exception e) {
       throw asRestApiException("Cannot update check", e);
     }
diff --git a/java/com/google/gerrit/plugins/checks/api/CheckerApiImpl.java b/java/com/google/gerrit/plugins/checks/api/CheckerApiImpl.java
index db74c00..1a63eac 100644
--- a/java/com/google/gerrit/plugins/checks/api/CheckerApiImpl.java
+++ b/java/com/google/gerrit/plugins/checks/api/CheckerApiImpl.java
@@ -41,7 +41,7 @@
   @Override
   public CheckerInfo get() throws RestApiException {
     try {
-      return getChecker.apply(rsrc);
+      return getChecker.apply(rsrc).value();
     } catch (Exception e) {
       throw asRestApiException("Cannot retrieve checker", e);
     }
@@ -50,7 +50,7 @@
   @Override
   public CheckerInfo update(CheckerInput input) throws RestApiException {
     try {
-      return updateChecker.apply(rsrc, input);
+      return updateChecker.apply(rsrc, input).value();
     } catch (Exception e) {
       throw asRestApiException("Cannot update checker", e);
     }
diff --git a/java/com/google/gerrit/plugins/checks/api/CheckersImpl.java b/java/com/google/gerrit/plugins/checks/api/CheckersImpl.java
index 73e0f5d..a5d101b 100644
--- a/java/com/google/gerrit/plugins/checks/api/CheckersImpl.java
+++ b/java/com/google/gerrit/plugins/checks/api/CheckersImpl.java
@@ -64,7 +64,7 @@
   @Override
   public List<CheckerInfo> all() throws RestApiException {
     try {
-      return listCheckers.apply(TopLevelResource.INSTANCE);
+      return listCheckers.apply(TopLevelResource.INSTANCE).value();
     } catch (Exception e) {
       throw asRestApiException("Cannot list all checkers ", e);
     }
diff --git a/java/com/google/gerrit/plugins/checks/api/ChecksImpl.java b/java/com/google/gerrit/plugins/checks/api/ChecksImpl.java
index 206e7b0..36d1550 100644
--- a/java/com/google/gerrit/plugins/checks/api/ChecksImpl.java
+++ b/java/com/google/gerrit/plugins/checks/api/ChecksImpl.java
@@ -65,7 +65,7 @@
   @Override
   public CheckApi create(CheckInput input) throws RestApiException {
     try {
-      CheckInfo checkInfo = postCheck.apply(revisionResource, input);
+      CheckInfo checkInfo = postCheck.apply(revisionResource, input).value();
       return id(CheckerUuid.parse(checkInfo.checkerUuid));
     } catch (Exception e) {
       throw asRestApiException("Cannot create check", e);
@@ -76,7 +76,7 @@
   public ImmutableList<CheckInfo> list(ListChecksOption... options) throws RestApiException {
     try {
       Arrays.stream(options).forEach(listChecks::addOption);
-      return listChecks.apply(revisionResource);
+      return listChecks.apply(revisionResource).value();
     } catch (Exception e) {
       throw asRestApiException("Cannot list checks", e);
     }
diff --git a/java/com/google/gerrit/plugins/checks/api/GetCheck.java b/java/com/google/gerrit/plugins/checks/api/GetCheck.java
index ab2abde..2c35307 100644
--- a/java/com/google/gerrit/plugins/checks/api/GetCheck.java
+++ b/java/com/google/gerrit/plugins/checks/api/GetCheck.java
@@ -18,6 +18,7 @@
 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.Response;
 import com.google.gerrit.extensions.restapi.RestReadView;
 import com.google.gerrit.plugins.checks.CheckJson;
 import com.google.gerrit.plugins.checks.ListChecksOption;
@@ -47,8 +48,8 @@
   }
 
   @Override
-  public CheckInfo apply(CheckResource resource)
+  public Response<CheckInfo> apply(CheckResource resource)
       throws AuthException, BadRequestException, ResourceConflictException, IOException {
-    return checkJsonFactory.create(options).format(resource.getCheck());
+    return Response.ok(checkJsonFactory.create(options).format(resource.getCheck()));
   }
 }
diff --git a/java/com/google/gerrit/plugins/checks/api/GetChecker.java b/java/com/google/gerrit/plugins/checks/api/GetChecker.java
index 9a84a91..28d95fa 100644
--- a/java/com/google/gerrit/plugins/checks/api/GetChecker.java
+++ b/java/com/google/gerrit/plugins/checks/api/GetChecker.java
@@ -14,6 +14,7 @@
 
 package com.google.gerrit.plugins.checks.api;
 
+import com.google.gerrit.extensions.restapi.Response;
 import com.google.gerrit.extensions.restapi.RestReadView;
 import com.google.gerrit.plugins.checks.CheckerJson;
 import com.google.inject.Inject;
@@ -29,7 +30,7 @@
   }
 
   @Override
-  public CheckerInfo apply(CheckerResource resource) {
-    return checkerJson.format(resource.getChecker());
+  public Response<CheckerInfo> apply(CheckerResource resource) {
+    return Response.ok(checkerJson.format(resource.getChecker()));
   }
 }
diff --git a/java/com/google/gerrit/plugins/checks/api/ListCheckers.java b/java/com/google/gerrit/plugins/checks/api/ListCheckers.java
index 0328a99..ae36fb9 100644
--- a/java/com/google/gerrit/plugins/checks/api/ListCheckers.java
+++ b/java/com/google/gerrit/plugins/checks/api/ListCheckers.java
@@ -17,6 +17,7 @@
 import static java.util.stream.Collectors.toList;
 
 import com.google.gerrit.extensions.restapi.AuthException;
+import com.google.gerrit.extensions.restapi.Response;
 import com.google.gerrit.extensions.restapi.RestApiException;
 import com.google.gerrit.extensions.restapi.RestReadView;
 import com.google.gerrit.extensions.restapi.TopLevelResource;
@@ -55,13 +56,13 @@
   }
 
   @Override
-  public List<CheckerInfo> apply(TopLevelResource resource)
+  public Response<List<CheckerInfo>> apply(TopLevelResource resource)
       throws RestApiException, PermissionBackendException, IOException {
     if (!self.get().isIdentifiedUser()) {
       throw new AuthException("Authentication required");
     }
     permissionBackend.currentUser().check(permission);
 
-    return checkers.listCheckers().stream().map(checkerJson::format).collect(toList());
+    return Response.ok(checkers.listCheckers().stream().map(checkerJson::format).collect(toList()));
   }
 }
diff --git a/java/com/google/gerrit/plugins/checks/api/ListChecks.java b/java/com/google/gerrit/plugins/checks/api/ListChecks.java
index 39346e4..4b5e0ae 100644
--- a/java/com/google/gerrit/plugins/checks/api/ListChecks.java
+++ b/java/com/google/gerrit/plugins/checks/api/ListChecks.java
@@ -20,6 +20,7 @@
 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.Response;
 import com.google.gerrit.extensions.restapi.RestReadView;
 import com.google.gerrit.plugins.checks.Check;
 import com.google.gerrit.plugins.checks.CheckJson;
@@ -55,7 +56,7 @@
   }
 
   @Override
-  public ImmutableList<CheckInfo> apply(RevisionResource resource)
+  public Response<ImmutableList<CheckInfo>> apply(RevisionResource resource)
       throws AuthException, BadRequestException, ResourceConflictException, StorageException,
           IOException {
     if (resource.getEdit().isPresent()) {
@@ -72,6 +73,6 @@
     for (Check check : allChecks) {
       result.add(checkJson.format(check));
     }
-    return result.build();
+    return Response.ok(result.build());
   }
 }
diff --git a/java/com/google/gerrit/plugins/checks/api/PostCheck.java b/java/com/google/gerrit/plugins/checks/api/PostCheck.java
index 18572e9..5531d9e 100644
--- a/java/com/google/gerrit/plugins/checks/api/PostCheck.java
+++ b/java/com/google/gerrit/plugins/checks/api/PostCheck.java
@@ -18,6 +18,7 @@
 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.Response;
 import com.google.gerrit.extensions.restapi.RestApiException;
 import com.google.gerrit.extensions.restapi.RestCollectionModifyView;
 import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
@@ -74,7 +75,7 @@
   }
 
   @Override
-  public CheckInfo apply(RevisionResource rsrc, CheckInput input)
+  public Response<CheckInfo> apply(RevisionResource rsrc, CheckInput input)
       throws StorageException, IOException, RestApiException, PermissionBackendException,
           ConfigInvalidException {
     if (!self.get().isIdentifiedUser()) {
@@ -112,7 +113,7 @@
     } else {
       updatedCheck = checksUpdate.get().updateCheck(key, toCheckUpdate(input));
     }
-    return checkJsonFactory.noOptions().format(updatedCheck);
+    return Response.ok(checkJsonFactory.noOptions().format(updatedCheck));
   }
 
   private static CheckUpdate toCheckUpdate(CheckInput input) throws BadRequestException {
diff --git a/java/com/google/gerrit/plugins/checks/api/QueryPendingChecks.java b/java/com/google/gerrit/plugins/checks/api/QueryPendingChecks.java
index 281417c..870cd61 100644
--- a/java/com/google/gerrit/plugins/checks/api/QueryPendingChecks.java
+++ b/java/com/google/gerrit/plugins/checks/api/QueryPendingChecks.java
@@ -20,6 +20,7 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.gerrit.exceptions.StorageException;
 import com.google.gerrit.extensions.restapi.BadRequestException;
+import com.google.gerrit.extensions.restapi.Response;
 import com.google.gerrit.extensions.restapi.RestApiException;
 import com.google.gerrit.extensions.restapi.RestReadView;
 import com.google.gerrit.extensions.restapi.TopLevelResource;
@@ -81,11 +82,11 @@
 
   public List<PendingChecksInfo> apply()
       throws RestApiException, IOException, ConfigInvalidException, StorageException {
-    return apply(TopLevelResource.INSTANCE);
+    return apply(TopLevelResource.INSTANCE).value();
   }
 
   @Override
-  public List<PendingChecksInfo> apply(TopLevelResource resource)
+  public Response<List<PendingChecksInfo>> apply(TopLevelResource resource)
       throws RestApiException, IOException, ConfigInvalidException, StorageException {
     if (queryString == null) {
       throw new BadRequestException("query is required");
@@ -98,7 +99,7 @@
 
     Optional<Checker> checker = checkers.getChecker(getCheckerUuidFromQuery(query));
     if (!checker.isPresent() || checker.get().isDisabled()) {
-      return ImmutableList.of();
+      return Response.ok(ImmutableList.of());
     }
 
     // The query system can only match against the current patch set; ignore non-current patch sets
@@ -123,7 +124,7 @@
         pendingChecks.add(createPendingChecksInfo(cd.project(), patchSet, checkerUuid, check));
       }
     }
-    return pendingChecks;
+    return Response.ok(pendingChecks);
   }
 
   private Predicate<Check> parseQuery(String query) throws BadRequestException {
diff --git a/java/com/google/gerrit/plugins/checks/api/UpdateCheck.java b/java/com/google/gerrit/plugins/checks/api/UpdateCheck.java
index ef7539f..1a57142 100644
--- a/java/com/google/gerrit/plugins/checks/api/UpdateCheck.java
+++ b/java/com/google/gerrit/plugins/checks/api/UpdateCheck.java
@@ -16,6 +16,7 @@
 
 import com.google.gerrit.exceptions.StorageException;
 import com.google.gerrit.extensions.restapi.BadRequestException;
+import com.google.gerrit.extensions.restapi.Response;
 import com.google.gerrit.extensions.restapi.RestApiException;
 import com.google.gerrit.extensions.restapi.RestModifyView;
 import com.google.gerrit.server.permissions.PermissionBackendException;
@@ -34,7 +35,7 @@
   }
 
   @Override
-  public CheckInfo apply(CheckResource checkResource, CheckInput input)
+  public Response<CheckInfo> apply(CheckResource checkResource, CheckInput input)
       throws RestApiException, IOException, StorageException, PermissionBackendException,
           ConfigInvalidException {
     if (input == null) {
diff --git a/java/com/google/gerrit/plugins/checks/api/UpdateChecker.java b/java/com/google/gerrit/plugins/checks/api/UpdateChecker.java
index 6512b69..1f81284 100644
--- a/java/com/google/gerrit/plugins/checks/api/UpdateChecker.java
+++ b/java/com/google/gerrit/plugins/checks/api/UpdateChecker.java
@@ -17,6 +17,7 @@
 import com.google.common.collect.ImmutableSortedSet;
 import com.google.gerrit.exceptions.StorageException;
 import com.google.gerrit.extensions.restapi.BadRequestException;
+import com.google.gerrit.extensions.restapi.Response;
 import com.google.gerrit.extensions.restapi.RestApiException;
 import com.google.gerrit.extensions.restapi.RestModifyView;
 import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
@@ -68,7 +69,7 @@
   }
 
   @Override
-  public CheckerInfo apply(CheckerResource resource, CheckerInput input)
+  public Response<CheckerInfo> apply(CheckerResource resource, CheckerInput input)
       throws RestApiException, PermissionBackendException, NoSuchCheckerException, IOException,
           ConfigInvalidException, StorageException {
     permissionBackend.currentUser().check(permission);
@@ -120,7 +121,7 @@
 
     Checker updatedChecker =
         checkersUpdate.get().updateChecker(checkerUuid, checkerUpdateBuilder.build());
-    return checkerJson.format(updatedChecker);
+    return Response.ok(checkerJson.format(updatedChecker));
   }
 
   private Project.NameKey resolveRepository(String repository)
diff --git a/javatests/com/google/gerrit/plugins/checks/acceptance/api/GetCheckerIT.java b/javatests/com/google/gerrit/plugins/checks/acceptance/api/GetCheckerIT.java
index 84463c6..cb3f695 100644
--- a/javatests/com/google/gerrit/plugins/checks/acceptance/api/GetCheckerIT.java
+++ b/javatests/com/google/gerrit/plugins/checks/acceptance/api/GetCheckerIT.java
@@ -310,7 +310,7 @@
 
   @Test
   public void administrateCheckersCapabilityIsAdvertised() throws Exception {
-    Map<String, CapabilityInfo> capabilities = listCapabilities.apply(new ConfigResource());
+    Map<String, CapabilityInfo> capabilities = listCapabilities.apply(new ConfigResource()).value();
     String capability = "checks-administrateCheckers";
     assertThat(capabilities).containsKey(capability);
     CapabilityInfo info = capabilities.get(capability);
