diff --git a/api/config/settings/common.py b/api/config/settings/common.py
index fbe3b7045e24c67d87c2ee90441103ccc27ac57a..6a85a934cdd040d6cfb5c62486b6997766510149 100644
--- a/api/config/settings/common.py
+++ b/api/config/settings/common.py
@@ -30,7 +30,9 @@ FUNKWHALE_HOSTNAME = urlsplit(FUNKWHALE_URL).netloc
 
 FEDERATION_ENABLED = env.bool('FEDERATION_ENABLED', default=True)
 FEDERATION_HOSTNAME = env('FEDERATION_HOSTNAME', default=FUNKWHALE_HOSTNAME)
-
+FEDERATION_MUSIC_NEEDS_APPROVAL = env.bool(
+    'FEDERATION_MUSIC_NEEDS_APPROVAL', default=True
+)
 ALLOWED_HOSTS = env.list('DJANGO_ALLOWED_HOSTS')
 
 # APP CONFIGURATION
diff --git a/api/funkwhale_api/federation/actors.py b/api/funkwhale_api/federation/actors.py
index a4e24912bef17df775e9ad9cbbbf222cb2e1f9a2..e29125f5b1d4eb01a84ca6eb97a4e4a5dc620e61 100644
--- a/api/funkwhale_api/federation/actors.py
+++ b/api/funkwhale_api/federation/actors.py
@@ -47,6 +47,7 @@ def get_actor(actor_url):
 
 class SystemActor(object):
     additional_attributes = {}
+    manually_approves_followers = False
 
     def get_actor_instance(self):
         args = self.get_instance_argument(
@@ -113,6 +114,9 @@ class LibraryActor(SystemActor):
     additional_attributes = {
         'manually_approves_followers': True
     }
+    @property
+    def manually_approves_followers(self):
+        return settings.FEDERATION_MUSIC_NEEDS_APPROVAL
 
 
 class TestActor(SystemActor):
@@ -125,6 +129,7 @@ class TestActor(SystemActor):
     additional_attributes = {
         'manually_approves_followers': False
     }
+    manually_approves_followers = False
 
     def get_outbox(self, data, actor=None):
         return {
diff --git a/api/funkwhale_api/federation/models.py b/api/funkwhale_api/federation/models.py
index d76ad173be80c0d37dc063a7b0d829952f9e16db..a2cd598f7052dd2c5939d2d517ce40c39f447d23 100644
--- a/api/funkwhale_api/federation/models.py
+++ b/api/funkwhale_api/federation/models.py
@@ -57,3 +57,11 @@ class Actor(models.Model):
                 setattr(self, field, v.lower())
 
         super().save(**kwargs)
+
+    @property
+    def is_system(self):
+        from . import actors
+        return all([
+            settings.FEDERATION_HOSTNAME == self.domain,
+            self.preferred_username in actors.SYSTEM_ACTORS
+        ])
diff --git a/api/tests/federation/test_actors.py b/api/tests/federation/test_actors.py
index 127b3c15e3b9d72ba78a8ad6244e4a0ca4e95ae0..8afb94ad0d518ba5ddd8a0006affc8ef55cccd50 100644
--- a/api/tests/federation/test_actors.py
+++ b/api/tests/federation/test_actors.py
@@ -197,3 +197,28 @@ def test_getting_actor_instance_persists_in_db(db):
 
     for f in test._meta.fields:
         assert getattr(from_db, f.name) == getattr(test, f.name)
+
+
+@pytest.mark.parametrize('username,domain,expected', [
+    ('test', 'wrongdomain.com', False),
+    ('notsystem', '', False),
+    ('test', '', True),
+])
+def test_actor_is_system(
+        username, domain, expected, nodb_factories, settings):
+    if not domain:
+        domain = settings.FEDERATION_HOSTNAME
+
+    actor = nodb_factories['federation.Actor'](
+        preferred_username=username,
+        domain=domain,
+    )
+    assert actor.is_system is expected
+
+
+@pytest.mark.parametrize('value', [False, True])
+def test_library_actor_manually_approves_based_on_setting(
+        value, settings):
+    settings.FEDERATION_MUSIC_NEEDS_APPROVAL = value
+    library_conf = actors.SYSTEM_ACTORS['library']
+    assert library_conf.manually_approves_followers is value
diff --git a/deploy/env.prod.sample b/deploy/env.prod.sample
index a016b34c7eea37e0272fb8b08e5afcfd6a9c085f..9e9938500823e538cced62b88280f7ef67824ccb 100644
--- a/deploy/env.prod.sample
+++ b/deploy/env.prod.sample
@@ -85,3 +85,12 @@ API_AUTHENTICATION_REQUIRED=True
 # This will help us detect and correct bugs
 RAVEN_ENABLED=false
 RAVEN_DSN=https://44332e9fdd3d42879c7d35bf8562c6a4:0062dc16a22b41679cd5765e5342f716@sentry.eliotberriot.com/5
+
+# This settings enable/disable federation on the instance level
+FEDERATION_ENABLED=True
+# This setting decide wether music library is shared automatically
+# to followers or if it requires manual approval before.
+# FEDERATION_MUSIC_NEEDS_APPROVAL=False
+# means anyone can subscribe to your library and import your file,
+# use with caution.
+FEDERATION_MUSIC_NEEDS_APPROVAL=True