diff --git a/arkindex/documents/api/elements.py b/arkindex/documents/api/elements.py
index 72feeed841656d5d90c70c625419c1a6091994e0..8175bd79bcbb79e29a7dc93fb6a133958d267f16 100644
--- a/arkindex/documents/api/elements.py
+++ b/arkindex/documents/api/elements.py
@@ -31,6 +31,8 @@ class ElementsList(CorpusACLMixin, ListAPIView):
             filters['corpus'] = self.get_corpus(self.request.query_params['corpus'])
         else:
             filters['corpus__in'] = Corpus.objects.readable(self.request.user)
+        if 'name' in self.request.query_params:
+            filters['name__icontains'] = self.request.query_params['name']
         return Element.objects.filter(**filters).prefetch_related('corpus').order_by('corpus', 'type', 'name')
 
 
diff --git a/arkindex/documents/tests/test_elements_api.py b/arkindex/documents/tests/test_elements_api.py
index 482c3d7509768441b667cd01191fccf220185d9c..c62956e61c35b28f95050887b97449d1f1155dc6 100644
--- a/arkindex/documents/tests/test_elements_api.py
+++ b/arkindex/documents/tests/test_elements_api.py
@@ -60,3 +60,12 @@ class TestElementsAPI(FixtureAPITestCase):
         url += '?type=potato'
         response = self.client.get(url)
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
+
+    def test_list_elements_filter_name(self):
+        nameSelected = 'ol'
+        response = self.client.get(reverse('api:elements'), params={'name': nameSelected})
+        self.assertEqual(response.status_code, status.HTTP_200_OK)
+        data = response.json()
+        results = data['results']
+        for result in results:
+            self.assertIn(nameSelected, result['name'])