diff --git a/arkindex/documents/api/elements.py b/arkindex/documents/api/elements.py
index a0aee4ec2c087db3f66aa0dc6f54e31e54d184e1..2d4e56cbb84dddfd0b35825454c1d260b93c3da1 100644
--- a/arkindex/documents/api/elements.py
+++ b/arkindex/documents/api/elements.py
@@ -1168,3 +1168,14 @@ class ElementBulkCreate(CreateAPIView):
         ])
 
         return [{'id': element_data['element'].id} for element_data in elements]
+
+
+class CorpusDeleteSelection(ElementsListMixin, SelectionMixin, DestroyAPIView):
+    """
+    Delete selected elements on a corpus
+    """
+
+    def get_queryset(self):
+        # Should not be possible due to the URL
+        assert self.selected_corpus, 'Missing corpus ID'
+        return self.get_selection(corpus_id=self.selected_corpus.id)
diff --git a/arkindex/project/api_v1.py b/arkindex/project/api_v1.py
index 38063bb11b111f45f26328b3247d5ceca85a73b8..eab6c01e1db25091b9b5ed6050a2d4166b7817eb 100644
--- a/arkindex/project/api_v1.py
+++ b/arkindex/project/api_v1.py
@@ -35,6 +35,7 @@ from arkindex.dataimport.api import (
 from arkindex.documents.api.admin import ReindexStart
 from arkindex.documents.api.elements import (
     CorpusAllowedMetaData,
+    CorpusDeleteSelection,
     CorpusElements,
     CorpusList,
     CorpusRetrieve,
@@ -144,6 +145,7 @@ api = [
     path('corpus/<uuid:pk>/ml-stats/', CorpusMLStats.as_view(), name='corpus-ml-stats'),
     path('corpus/<uuid:pk>/allowed-metadata/', CorpusAllowedMetaData.as_view(), name='corpus-allowed-metadata'),
     path('corpus/<uuid:pk>/versions/', CorpusWorkerVersionList.as_view(), name='corpus-versions'),
+    path('corpus/<uuid:corpus>/selection/', CorpusDeleteSelection.as_view(), name='corpus-delete-selection'),
 
     # Moderation
     path('ml-classes/', MLClassList.as_view(), name='mlclass-list'),