diff --git a/api/funkwhale_api/instance/dynamic_preferences_registry.py b/api/funkwhale_api/instance/dynamic_preferences_registry.py
index 9d1f1c8f77706562fcdc8a2ecc1c863533a033f2..1e6f3147ca99e279c4b9657c02bce1f729c12021 100644
--- a/api/funkwhale_api/instance/dynamic_preferences_registry.py
+++ b/api/funkwhale_api/instance/dynamic_preferences_registry.py
@@ -43,6 +43,20 @@ class InstanceLongDescription(types.StringPreference):
     field_kwargs = {"required": False}
 
 
+@global_preferences_registry.register
+class InstanceTerms(types.StringPreference):
+    show_in_api = True
+    section = instance
+    name = "terms"
+    verbose_name = "Terms of service"
+    default = ""
+    help_text = (
+        "Terms of service and privacy policy for your instance (markdown allowed)."
+    )
+    widget = widgets.Textarea
+    field_kwargs = {"required": False}
+
+
 @global_preferences_registry.register
 class RavenDSN(types.StringPreference):
     show_in_api = True
diff --git a/api/funkwhale_api/instance/nodeinfo.py b/api/funkwhale_api/instance/nodeinfo.py
index 1c15cfac5df807dab91d23d45cc97c68dd22c14c..1d401fbca99684e7ca9c03a6a166062364dc5bfd 100644
--- a/api/funkwhale_api/instance/nodeinfo.py
+++ b/api/funkwhale_api/instance/nodeinfo.py
@@ -40,6 +40,7 @@ def get():
             "private": all_preferences.get("instance__nodeinfo_private"),
             "shortDescription": all_preferences.get("instance__short_description"),
             "longDescription": all_preferences.get("instance__long_description"),
+            "terms": all_preferences.get("instance__terms"),
             "nodeName": all_preferences.get("instance__name"),
             "library": {
                 "federationEnabled": all_preferences.get("federation__enabled"),
diff --git a/api/tests/instance/test_nodeinfo.py b/api/tests/instance/test_nodeinfo.py
index cdb9ad93a651388c4d8eba00e37daad3f2bc5217..f85f34b250c6d2c387f0550db8b42666f7e561f4 100644
--- a/api/tests/instance/test_nodeinfo.py
+++ b/api/tests/instance/test_nodeinfo.py
@@ -38,6 +38,7 @@ def test_nodeinfo_dump(preferences, mocker):
             "shortDescription": preferences["instance__short_description"],
             "longDescription": preferences["instance__long_description"],
             "nodeName": preferences["instance__name"],
+            "terms": preferences["instance__terms"],
             "library": {
                 "federationEnabled": preferences["federation__enabled"],
                 "federationNeedsApproval": preferences[
@@ -105,6 +106,7 @@ def test_nodeinfo_dump_stats_disabled(preferences, mocker):
             "shortDescription": preferences["instance__short_description"],
             "longDescription": preferences["instance__long_description"],
             "nodeName": preferences["instance__name"],
+            "terms": preferences["instance__terms"],
             "library": {
                 "federationEnabled": preferences["federation__enabled"],
                 "federationNeedsApproval": preferences[
diff --git a/front/src/views/admin/Settings.vue b/front/src/views/admin/Settings.vue
index 85a2afb420a882615bd7e36c9e72f5d30557424a..a538329e3a0ffefb38ab9089e53160cdef5b8904 100644
--- a/front/src/views/admin/Settings.vue
+++ b/front/src/views/admin/Settings.vue
@@ -94,7 +94,8 @@ export default {
           settings: [
             "instance__name",
             "instance__short_description",
-            "instance__long_description"
+            "instance__long_description",
+            "instance__terms",
           ]
         },
         {