diff --git a/steering/schema.py b/steering/schema.py
index d607d104e9812b92c8d313370096d0204ae6349c..e2c85a9552ed9e78941473567bf53b95399b936f 100644
--- a/steering/schema.py
+++ b/steering/schema.py
@@ -1,5 +1,7 @@
 from typing import Iterable, Tuple
 
+from django.contrib.auth.models import Permission
+
 
 def _generate_choices_description(choices: Iterable[Tuple[str, str]]):
     def _gen():
@@ -53,3 +55,21 @@ def fix_schedule_pk_type(result, generator, request, public):
                     parameter["schema"]["type"] = "integer"
                     break
     return result
+
+
+def _get_all_relevant_permission_names():
+    for perm in Permission.objects.all():
+        action, module_name, model_name = perm.natural_key()
+        if module_name not in {"program", "steering", "auth"}:
+            # we’re only interested in some permissions
+            continue
+        yield f"{module_name}.{action}"
+
+
+def add_permission_type_to_schema(result, *args, **kwargs):
+    result["components"]["schemas"]["AnyPermission"] = {
+        "description": "Permissions used by steering.",
+        "enum": sorted(_get_all_relevant_permission_names()),
+        "type": "string",
+    }
+    return result
diff --git a/steering/settings.py b/steering/settings.py
index b3d9acbf153066a9447601289c9f650de8b27183..0ce92c81427bdee795ec5f6f739a3f63284f84b7 100644
--- a/steering/settings.py
+++ b/steering/settings.py
@@ -104,6 +104,7 @@ SPECTACULAR_SETTINGS = {
         "drf_spectacular.hooks.postprocess_schema_enums",
         "steering.schema.add_enum_documentation",
         "steering.schema.fix_schedule_pk_type",
+        "steering.schema.add_permission_type_to_schema",
         "drf_spectacular.contrib.djangorestframework_camel_case.camelize_serializer_fields",
     ],
     "VERSION": "1.0.0",