diff --git a/eck.module b/eck.module
index 9050568..22873f8 100644
--- a/eck.module
+++ b/eck.module
@@ -5,6 +5,7 @@
  * Contains hook implementations.
  */
 
+use Drupal\Core\Access\AccessResult;
 use Drupal\Core\Config\Entity\ConfigEntityType;
 use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
 use Drupal\Core\Entity\EntityInterface;
@@ -13,6 +14,7 @@ use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Render\Element;
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\Core\Entity\ContentEntityType;
+use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Url;
 use Drupal\eck\ArrayDeprecationWrapper;
 use Drupal\eck\Entity\EckEntity;
@@ -328,3 +330,18 @@ function eck_form_system_themes_admin_form_submit($form, FormStateInterface $for
     ->save();
   \Drupal::service('router.builder')->setRebuildNeeded();
 }
+
+/**
+ * Implements hook_jsonapi_entity_filter_access() for all eck entities.
+ */
+function eck_jsonapi_entity_filter_access(EntityTypeInterface $entity_type, AccountInterface $account) {
+  $result = [];
+  if ($entity_type->getProvider() == 'eck') {
+    $result = [
+      JSONAPI_FILTER_AMONG_ALL => AccessResult::allowedIfHasPermission($account, "view any {$entity_type->id()} entities"),
+      JSONAPI_FILTER_AMONG_OWN => AccessResult::allowedIfHasPermission($account, "view own {$entity_type->id()} entities"),
+    ];
+  }
+
+  return $result;
+}
