diff --git a/api/funkwhale_api/manage/serializers.py b/api/funkwhale_api/manage/serializers.py
index 87e34e173c07b5a6916a887eb3f52d3dcbcc0388..5f1e25240fd5a73164bf3f8cbed432a602862eff 100644
--- a/api/funkwhale_api/manage/serializers.py
+++ b/api/funkwhale_api/manage/serializers.py
@@ -93,11 +93,13 @@ class ManageUserSimpleSerializer(serializers.ModelSerializer):
             "date_joined",
             "last_activity",
             "privacy_level",
+            "upload_quota",
         )
 
 
 class ManageUserSerializer(serializers.ModelSerializer):
     permissions = PermissionsSerializer(source="*")
+    upload_quota = serializers.IntegerField(allow_null=True)
 
     class Meta:
         model = users_models.User
@@ -113,6 +115,7 @@ class ManageUserSerializer(serializers.ModelSerializer):
             "last_activity",
             "permissions",
             "privacy_level",
+            "upload_quota",
         )
         read_only_fields = [
             "id",
diff --git a/front/src/views/admin/users/UsersDetail.vue b/front/src/views/admin/users/UsersDetail.vue
index 4e750cafa188218d48049c288ffa654118189087..21e7b9811fdae29b1be9e05d6060343c1485e979 100644
--- a/front/src/views/admin/users/UsersDetail.vue
+++ b/front/src/views/admin/users/UsersDetail.vue
@@ -78,6 +78,25 @@
                   </select>
                 </td>
               </tr>
+              <tr>
+                <td>
+                  <translate>Upload quota</translate>
+                  <span :data-tooltip="labels.uploadQuota"><i class="question circle icon"></i></span>
+                </td>
+                <td>
+                  <div class="ui right labeled input">
+                  <input
+                    class="ui input"
+                    @change="update('upload_quota', true)"
+                    v-model.number="object.upload_quota"
+                    step="100"
+                    type="number" />
+                  <div class="ui basic label">
+                    <translate>MB</translate>
+                  </div>
+                </div>
+                </td>
+              </tr>
             </tbody>
           </table>
         </div>
@@ -122,8 +141,12 @@ export default {
         self.isLoading = false
       })
     },
-    update (attr) {
+    update (attr, toNull) {
       let newValue = this.object[attr]
+      if (toNull && !newValue) {
+        newValue = null
+      }
+      console.log(newValue, typeof(newValue))
       let params = {}
       if (attr === 'permissions') {
         params['permissions'] = {}
@@ -143,7 +166,8 @@ export default {
   computed: {
     labels () {
       return {
-        inactive: this.$gettext('Determine if the user account is active or not. Inactive users cannot login or use the service.')
+        inactive: this.$gettext('Determine if the user account is active or not. Inactive users cannot login or use the service.'),
+        uploadQuota: this.$gettext('Determine how much content the user can upload. Leave empty to use the default value of the instance.')
       }
     },
     allPermissions () {