diff --git a/funkwhale_api_client/api/channels/create_channel.py b/funkwhale_api_client/api/channels/create_channel.py
index 22f2da934ca057fc5983243cbe21c04815478fa6..2890922f50c111bb6503a62b84d5121e27c39875 100644
--- a/funkwhale_api_client/api/channels/create_channel.py
+++ b/funkwhale_api_client/api/channels/create_channel.py
@@ -3,17 +3,17 @@ from typing import Any, Dict, Optional
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.channel_create import ChannelCreate
-from ...models.channel_create_request import ChannelCreateRequest
+from ...models.channel import Channel
+from ...models.channel_request import ChannelRequest
 from ...types import Response
 
 
 def _get_kwargs(
     *,
     client: AuthenticatedClient,
-    form_data: ChannelCreateRequest,
-    multipart_data: ChannelCreateRequest,
-    json_body: ChannelCreateRequest,
+    form_data: ChannelRequest,
+    multipart_data: ChannelRequest,
+    json_body: ChannelRequest,
 ) -> Dict[str, Any]:
     url = "{}/api/v1/channels/".format(client.base_url)
 
@@ -34,15 +34,15 @@ def _get_kwargs(
     }
 
 
-def _parse_response(*, response: httpx.Response) -> Optional[ChannelCreate]:
+def _parse_response(*, response: httpx.Response) -> Optional[Channel]:
     if response.status_code == 201:
-        response_201 = ChannelCreate.from_dict(response.json())
+        response_201 = Channel.from_dict(response.json())
 
         return response_201
     return None
 
 
-def _build_response(*, response: httpx.Response) -> Response[ChannelCreate]:
+def _build_response(*, response: httpx.Response) -> Response[Channel]:
     return Response(
         status_code=response.status_code,
         content=response.content,
@@ -54,17 +54,17 @@ def _build_response(*, response: httpx.Response) -> Response[ChannelCreate]:
 def sync_detailed(
     *,
     client: AuthenticatedClient,
-    form_data: ChannelCreateRequest,
-    multipart_data: ChannelCreateRequest,
-    json_body: ChannelCreateRequest,
-) -> Response[ChannelCreate]:
+    form_data: ChannelRequest,
+    multipart_data: ChannelRequest,
+    json_body: ChannelRequest,
+) -> Response[Channel]:
     """
     Args:
-        multipart_data (ChannelCreateRequest):
-        json_body (ChannelCreateRequest):
+        multipart_data (ChannelRequest):
+        json_body (ChannelRequest):
 
     Returns:
-        Response[ChannelCreate]
+        Response[Channel]
     """
 
     kwargs = _get_kwargs(
@@ -85,17 +85,17 @@ def sync_detailed(
 def sync(
     *,
     client: AuthenticatedClient,
-    form_data: ChannelCreateRequest,
-    multipart_data: ChannelCreateRequest,
-    json_body: ChannelCreateRequest,
-) -> Optional[ChannelCreate]:
+    form_data: ChannelRequest,
+    multipart_data: ChannelRequest,
+    json_body: ChannelRequest,
+) -> Optional[Channel]:
     """
     Args:
-        multipart_data (ChannelCreateRequest):
-        json_body (ChannelCreateRequest):
+        multipart_data (ChannelRequest):
+        json_body (ChannelRequest):
 
     Returns:
-        Response[ChannelCreate]
+        Response[Channel]
     """
 
     return sync_detailed(
@@ -109,17 +109,17 @@ def sync(
 async def asyncio_detailed(
     *,
     client: AuthenticatedClient,
-    form_data: ChannelCreateRequest,
-    multipart_data: ChannelCreateRequest,
-    json_body: ChannelCreateRequest,
-) -> Response[ChannelCreate]:
+    form_data: ChannelRequest,
+    multipart_data: ChannelRequest,
+    json_body: ChannelRequest,
+) -> Response[Channel]:
     """
     Args:
-        multipart_data (ChannelCreateRequest):
-        json_body (ChannelCreateRequest):
+        multipart_data (ChannelRequest):
+        json_body (ChannelRequest):
 
     Returns:
-        Response[ChannelCreate]
+        Response[Channel]
     """
 
     kwargs = _get_kwargs(
@@ -138,17 +138,17 @@ async def asyncio_detailed(
 async def asyncio(
     *,
     client: AuthenticatedClient,
-    form_data: ChannelCreateRequest,
-    multipart_data: ChannelCreateRequest,
-    json_body: ChannelCreateRequest,
-) -> Optional[ChannelCreate]:
+    form_data: ChannelRequest,
+    multipart_data: ChannelRequest,
+    json_body: ChannelRequest,
+) -> Optional[Channel]:
     """
     Args:
-        multipart_data (ChannelCreateRequest):
-        json_body (ChannelCreateRequest):
+        multipart_data (ChannelRequest):
+        json_body (ChannelRequest):
 
     Returns:
-        Response[ChannelCreate]
+        Response[Channel]
     """
 
     return (
diff --git a/funkwhale_api_client/api/channels/partial_update_channel.py b/funkwhale_api_client/api/channels/partial_update_channel.py
index 65d976b8009428f20166068a38b12cfdb794e210..f20f25bd36d02a7fb0c541e6f13ad664c28ddda3 100644
--- a/funkwhale_api_client/api/channels/partial_update_channel.py
+++ b/funkwhale_api_client/api/channels/partial_update_channel.py
@@ -3,8 +3,8 @@ from typing import Any, Dict, Optional
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.channel_update import ChannelUpdate
-from ...models.patched_channel_update_request import PatchedChannelUpdateRequest
+from ...models.channel import Channel
+from ...models.patched_channel_request import PatchedChannelRequest
 from ...types import Response
 
 
@@ -12,9 +12,9 @@ def _get_kwargs(
     composite: str,
     *,
     client: AuthenticatedClient,
-    form_data: PatchedChannelUpdateRequest,
-    multipart_data: PatchedChannelUpdateRequest,
-    json_body: PatchedChannelUpdateRequest,
+    form_data: PatchedChannelRequest,
+    multipart_data: PatchedChannelRequest,
+    json_body: PatchedChannelRequest,
 ) -> Dict[str, Any]:
     url = "{}/api/v1/channels/{composite}/".format(client.base_url, composite=composite)
 
@@ -35,15 +35,15 @@ def _get_kwargs(
     }
 
 
-def _parse_response(*, response: httpx.Response) -> Optional[ChannelUpdate]:
+def _parse_response(*, response: httpx.Response) -> Optional[Channel]:
     if response.status_code == 200:
-        response_200 = ChannelUpdate.from_dict(response.json())
+        response_200 = Channel.from_dict(response.json())
 
         return response_200
     return None
 
 
-def _build_response(*, response: httpx.Response) -> Response[ChannelUpdate]:
+def _build_response(*, response: httpx.Response) -> Response[Channel]:
     return Response(
         status_code=response.status_code,
         content=response.content,
@@ -56,18 +56,18 @@ def sync_detailed(
     composite: str,
     *,
     client: AuthenticatedClient,
-    form_data: PatchedChannelUpdateRequest,
-    multipart_data: PatchedChannelUpdateRequest,
-    json_body: PatchedChannelUpdateRequest,
-) -> Response[ChannelUpdate]:
+    form_data: PatchedChannelRequest,
+    multipart_data: PatchedChannelRequest,
+    json_body: PatchedChannelRequest,
+) -> Response[Channel]:
     """
     Args:
         composite (str):
-        multipart_data (PatchedChannelUpdateRequest):
-        json_body (PatchedChannelUpdateRequest):
+        multipart_data (PatchedChannelRequest):
+        json_body (PatchedChannelRequest):
 
     Returns:
-        Response[ChannelUpdate]
+        Response[Channel]
     """
 
     kwargs = _get_kwargs(
@@ -90,18 +90,18 @@ def sync(
     composite: str,
     *,
     client: AuthenticatedClient,
-    form_data: PatchedChannelUpdateRequest,
-    multipart_data: PatchedChannelUpdateRequest,
-    json_body: PatchedChannelUpdateRequest,
-) -> Optional[ChannelUpdate]:
+    form_data: PatchedChannelRequest,
+    multipart_data: PatchedChannelRequest,
+    json_body: PatchedChannelRequest,
+) -> Optional[Channel]:
     """
     Args:
         composite (str):
-        multipart_data (PatchedChannelUpdateRequest):
-        json_body (PatchedChannelUpdateRequest):
+        multipart_data (PatchedChannelRequest):
+        json_body (PatchedChannelRequest):
 
     Returns:
-        Response[ChannelUpdate]
+        Response[Channel]
     """
 
     return sync_detailed(
@@ -117,18 +117,18 @@ async def asyncio_detailed(
     composite: str,
     *,
     client: AuthenticatedClient,
-    form_data: PatchedChannelUpdateRequest,
-    multipart_data: PatchedChannelUpdateRequest,
-    json_body: PatchedChannelUpdateRequest,
-) -> Response[ChannelUpdate]:
+    form_data: PatchedChannelRequest,
+    multipart_data: PatchedChannelRequest,
+    json_body: PatchedChannelRequest,
+) -> Response[Channel]:
     """
     Args:
         composite (str):
-        multipart_data (PatchedChannelUpdateRequest):
-        json_body (PatchedChannelUpdateRequest):
+        multipart_data (PatchedChannelRequest):
+        json_body (PatchedChannelRequest):
 
     Returns:
-        Response[ChannelUpdate]
+        Response[Channel]
     """
 
     kwargs = _get_kwargs(
@@ -149,18 +149,18 @@ async def asyncio(
     composite: str,
     *,
     client: AuthenticatedClient,
-    form_data: PatchedChannelUpdateRequest,
-    multipart_data: PatchedChannelUpdateRequest,
-    json_body: PatchedChannelUpdateRequest,
-) -> Optional[ChannelUpdate]:
+    form_data: PatchedChannelRequest,
+    multipart_data: PatchedChannelRequest,
+    json_body: PatchedChannelRequest,
+) -> Optional[Channel]:
     """
     Args:
         composite (str):
-        multipart_data (PatchedChannelUpdateRequest):
-        json_body (PatchedChannelUpdateRequest):
+        multipart_data (PatchedChannelRequest):
+        json_body (PatchedChannelRequest):
 
     Returns:
-        Response[ChannelUpdate]
+        Response[Channel]
     """
 
     return (
diff --git a/funkwhale_api_client/api/channels/subscribe_channel.py b/funkwhale_api_client/api/channels/subscribe_channel.py
index 405cec43d2a9d893f7d374c54643254acdbb11a3..26ccc06d6e6eee64df13820b79220b9bf2d45715 100644
--- a/funkwhale_api_client/api/channels/subscribe_channel.py
+++ b/funkwhale_api_client/api/channels/subscribe_channel.py
@@ -3,8 +3,7 @@ from typing import Any, Dict, Optional
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.channel_create import ChannelCreate
-from ...models.channel_create_request import ChannelCreateRequest
+from ...models.subscription import Subscription
 from ...types import Response
 
 
@@ -12,38 +11,30 @@ def _get_kwargs(
     composite: str,
     *,
     client: AuthenticatedClient,
-    form_data: ChannelCreateRequest,
-    multipart_data: ChannelCreateRequest,
-    json_body: ChannelCreateRequest,
 ) -> Dict[str, Any]:
     url = "{}/api/v1/channels/{composite}/subscribe/".format(client.base_url, composite=composite)
 
     headers: Dict[str, str] = client.get_headers()
     cookies: Dict[str, Any] = client.get_cookies()
 
-    json_body.to_dict()
-
-    multipart_data.to_multipart()
-
     return {
         "method": "post",
         "url": url,
         "headers": headers,
         "cookies": cookies,
         "timeout": client.get_timeout(),
-        "data": form_data.to_dict(),
     }
 
 
-def _parse_response(*, response: httpx.Response) -> Optional[ChannelCreate]:
+def _parse_response(*, response: httpx.Response) -> Optional[Subscription]:
     if response.status_code == 200:
-        response_200 = ChannelCreate.from_dict(response.json())
+        response_200 = Subscription.from_dict(response.json())
 
         return response_200
     return None
 
 
-def _build_response(*, response: httpx.Response) -> Response[ChannelCreate]:
+def _build_response(*, response: httpx.Response) -> Response[Subscription]:
     return Response(
         status_code=response.status_code,
         content=response.content,
@@ -56,26 +47,18 @@ def sync_detailed(
     composite: str,
     *,
     client: AuthenticatedClient,
-    form_data: ChannelCreateRequest,
-    multipart_data: ChannelCreateRequest,
-    json_body: ChannelCreateRequest,
-) -> Response[ChannelCreate]:
+) -> Response[Subscription]:
     """
     Args:
         composite (str):
-        multipart_data (ChannelCreateRequest):
-        json_body (ChannelCreateRequest):
 
     Returns:
-        Response[ChannelCreate]
+        Response[Subscription]
     """
 
     kwargs = _get_kwargs(
         composite=composite,
         client=client,
-        form_data=form_data,
-        multipart_data=multipart_data,
-        json_body=json_body,
     )
 
     response = httpx.request(
@@ -90,26 +73,18 @@ def sync(
     composite: str,
     *,
     client: AuthenticatedClient,
-    form_data: ChannelCreateRequest,
-    multipart_data: ChannelCreateRequest,
-    json_body: ChannelCreateRequest,
-) -> Optional[ChannelCreate]:
+) -> Optional[Subscription]:
     """
     Args:
         composite (str):
-        multipart_data (ChannelCreateRequest):
-        json_body (ChannelCreateRequest):
 
     Returns:
-        Response[ChannelCreate]
+        Response[Subscription]
     """
 
     return sync_detailed(
         composite=composite,
         client=client,
-        form_data=form_data,
-        multipart_data=multipart_data,
-        json_body=json_body,
     ).parsed
 
 
@@ -117,26 +92,18 @@ async def asyncio_detailed(
     composite: str,
     *,
     client: AuthenticatedClient,
-    form_data: ChannelCreateRequest,
-    multipart_data: ChannelCreateRequest,
-    json_body: ChannelCreateRequest,
-) -> Response[ChannelCreate]:
+) -> Response[Subscription]:
     """
     Args:
         composite (str):
-        multipart_data (ChannelCreateRequest):
-        json_body (ChannelCreateRequest):
 
     Returns:
-        Response[ChannelCreate]
+        Response[Subscription]
     """
 
     kwargs = _get_kwargs(
         composite=composite,
         client=client,
-        form_data=form_data,
-        multipart_data=multipart_data,
-        json_body=json_body,
     )
 
     async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
@@ -149,26 +116,18 @@ async def asyncio(
     composite: str,
     *,
     client: AuthenticatedClient,
-    form_data: ChannelCreateRequest,
-    multipart_data: ChannelCreateRequest,
-    json_body: ChannelCreateRequest,
-) -> Optional[ChannelCreate]:
+) -> Optional[Subscription]:
     """
     Args:
         composite (str):
-        multipart_data (ChannelCreateRequest):
-        json_body (ChannelCreateRequest):
 
     Returns:
-        Response[ChannelCreate]
+        Response[Subscription]
     """
 
     return (
         await asyncio_detailed(
             composite=composite,
             client=client,
-            form_data=form_data,
-            multipart_data=multipart_data,
-            json_body=json_body,
         )
     ).parsed
diff --git a/funkwhale_api_client/api/channels/subscribe_channel_rss.py b/funkwhale_api_client/api/channels/subscribe_channel_rss.py
index d202a9c03c4629711b14d93e14a0d9c6cad74b42..3cb5eeacd74bc588f88768fe5ca97f2ec9139975 100644
--- a/funkwhale_api_client/api/channels/subscribe_channel_rss.py
+++ b/funkwhale_api_client/api/channels/subscribe_channel_rss.py
@@ -3,17 +3,17 @@ from typing import Any, Dict, Optional
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.channel_create import ChannelCreate
-from ...models.channel_create_request import ChannelCreateRequest
+from ...models.channel import Channel
+from ...models.channel_request import ChannelRequest
 from ...types import Response
 
 
 def _get_kwargs(
     *,
     client: AuthenticatedClient,
-    form_data: ChannelCreateRequest,
-    multipart_data: ChannelCreateRequest,
-    json_body: ChannelCreateRequest,
+    form_data: ChannelRequest,
+    multipart_data: ChannelRequest,
+    json_body: ChannelRequest,
 ) -> Dict[str, Any]:
     url = "{}/api/v1/channels/rss-subscribe/".format(client.base_url)
 
@@ -34,15 +34,15 @@ def _get_kwargs(
     }
 
 
-def _parse_response(*, response: httpx.Response) -> Optional[ChannelCreate]:
+def _parse_response(*, response: httpx.Response) -> Optional[Channel]:
     if response.status_code == 200:
-        response_200 = ChannelCreate.from_dict(response.json())
+        response_200 = Channel.from_dict(response.json())
 
         return response_200
     return None
 
 
-def _build_response(*, response: httpx.Response) -> Response[ChannelCreate]:
+def _build_response(*, response: httpx.Response) -> Response[Channel]:
     return Response(
         status_code=response.status_code,
         content=response.content,
@@ -54,17 +54,17 @@ def _build_response(*, response: httpx.Response) -> Response[ChannelCreate]:
 def sync_detailed(
     *,
     client: AuthenticatedClient,
-    form_data: ChannelCreateRequest,
-    multipart_data: ChannelCreateRequest,
-    json_body: ChannelCreateRequest,
-) -> Response[ChannelCreate]:
+    form_data: ChannelRequest,
+    multipart_data: ChannelRequest,
+    json_body: ChannelRequest,
+) -> Response[Channel]:
     """
     Args:
-        multipart_data (ChannelCreateRequest):
-        json_body (ChannelCreateRequest):
+        multipart_data (ChannelRequest):
+        json_body (ChannelRequest):
 
     Returns:
-        Response[ChannelCreate]
+        Response[Channel]
     """
 
     kwargs = _get_kwargs(
@@ -85,17 +85,17 @@ def sync_detailed(
 def sync(
     *,
     client: AuthenticatedClient,
-    form_data: ChannelCreateRequest,
-    multipart_data: ChannelCreateRequest,
-    json_body: ChannelCreateRequest,
-) -> Optional[ChannelCreate]:
+    form_data: ChannelRequest,
+    multipart_data: ChannelRequest,
+    json_body: ChannelRequest,
+) -> Optional[Channel]:
     """
     Args:
-        multipart_data (ChannelCreateRequest):
-        json_body (ChannelCreateRequest):
+        multipart_data (ChannelRequest):
+        json_body (ChannelRequest):
 
     Returns:
-        Response[ChannelCreate]
+        Response[Channel]
     """
 
     return sync_detailed(
@@ -109,17 +109,17 @@ def sync(
 async def asyncio_detailed(
     *,
     client: AuthenticatedClient,
-    form_data: ChannelCreateRequest,
-    multipart_data: ChannelCreateRequest,
-    json_body: ChannelCreateRequest,
-) -> Response[ChannelCreate]:
+    form_data: ChannelRequest,
+    multipart_data: ChannelRequest,
+    json_body: ChannelRequest,
+) -> Response[Channel]:
     """
     Args:
-        multipart_data (ChannelCreateRequest):
-        json_body (ChannelCreateRequest):
+        multipart_data (ChannelRequest):
+        json_body (ChannelRequest):
 
     Returns:
-        Response[ChannelCreate]
+        Response[Channel]
     """
 
     kwargs = _get_kwargs(
@@ -138,17 +138,17 @@ async def asyncio_detailed(
 async def asyncio(
     *,
     client: AuthenticatedClient,
-    form_data: ChannelCreateRequest,
-    multipart_data: ChannelCreateRequest,
-    json_body: ChannelCreateRequest,
-) -> Optional[ChannelCreate]:
+    form_data: ChannelRequest,
+    multipart_data: ChannelRequest,
+    json_body: ChannelRequest,
+) -> Optional[Channel]:
     """
     Args:
-        multipart_data (ChannelCreateRequest):
-        json_body (ChannelCreateRequest):
+        multipart_data (ChannelRequest):
+        json_body (ChannelRequest):
 
     Returns:
-        Response[ChannelCreate]
+        Response[Channel]
     """
 
     return (
diff --git a/funkwhale_api_client/api/channels/unsubscribe_channel_2.py b/funkwhale_api_client/api/channels/unsubscribe_channel_2.py
index e7ee7235250820be715eccd7a2804da170b7c98c..d9189322d21276513e36abc4b3bdc738303a1ae2 100644
--- a/funkwhale_api_client/api/channels/unsubscribe_channel_2.py
+++ b/funkwhale_api_client/api/channels/unsubscribe_channel_2.py
@@ -1,10 +1,9 @@
-from typing import Any, Dict, Optional
+from typing import Any, Dict
 
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.channel_create import ChannelCreate
-from ...models.channel_create_request import ChannelCreateRequest
+from ...models.channel_request import ChannelRequest
 from ...types import Response
 
 
@@ -12,9 +11,9 @@ def _get_kwargs(
     composite: str,
     *,
     client: AuthenticatedClient,
-    form_data: ChannelCreateRequest,
-    multipart_data: ChannelCreateRequest,
-    json_body: ChannelCreateRequest,
+    form_data: ChannelRequest,
+    multipart_data: ChannelRequest,
+    json_body: ChannelRequest,
 ) -> Dict[str, Any]:
     url = "{}/api/v1/channels/{composite}/unsubscribe/".format(client.base_url, composite=composite)
 
@@ -35,20 +34,12 @@ def _get_kwargs(
     }
 
 
-def _parse_response(*, response: httpx.Response) -> Optional[ChannelCreate]:
-    if response.status_code == 200:
-        response_200 = ChannelCreate.from_dict(response.json())
-
-        return response_200
-    return None
-
-
-def _build_response(*, response: httpx.Response) -> Response[ChannelCreate]:
+def _build_response(*, response: httpx.Response) -> Response[Any]:
     return Response(
         status_code=response.status_code,
         content=response.content,
         headers=response.headers,
-        parsed=_parse_response(response=response),
+        parsed=None,
     )
 
 
@@ -56,18 +47,18 @@ def sync_detailed(
     composite: str,
     *,
     client: AuthenticatedClient,
-    form_data: ChannelCreateRequest,
-    multipart_data: ChannelCreateRequest,
-    json_body: ChannelCreateRequest,
-) -> Response[ChannelCreate]:
+    form_data: ChannelRequest,
+    multipart_data: ChannelRequest,
+    json_body: ChannelRequest,
+) -> Response[Any]:
     """
     Args:
         composite (str):
-        multipart_data (ChannelCreateRequest):
-        json_body (ChannelCreateRequest):
+        multipart_data (ChannelRequest):
+        json_body (ChannelRequest):
 
     Returns:
-        Response[ChannelCreate]
+        Response[Any]
     """
 
     kwargs = _get_kwargs(
@@ -86,49 +77,22 @@ def sync_detailed(
     return _build_response(response=response)
 
 
-def sync(
-    composite: str,
-    *,
-    client: AuthenticatedClient,
-    form_data: ChannelCreateRequest,
-    multipart_data: ChannelCreateRequest,
-    json_body: ChannelCreateRequest,
-) -> Optional[ChannelCreate]:
-    """
-    Args:
-        composite (str):
-        multipart_data (ChannelCreateRequest):
-        json_body (ChannelCreateRequest):
-
-    Returns:
-        Response[ChannelCreate]
-    """
-
-    return sync_detailed(
-        composite=composite,
-        client=client,
-        form_data=form_data,
-        multipart_data=multipart_data,
-        json_body=json_body,
-    ).parsed
-
-
 async def asyncio_detailed(
     composite: str,
     *,
     client: AuthenticatedClient,
-    form_data: ChannelCreateRequest,
-    multipart_data: ChannelCreateRequest,
-    json_body: ChannelCreateRequest,
-) -> Response[ChannelCreate]:
+    form_data: ChannelRequest,
+    multipart_data: ChannelRequest,
+    json_body: ChannelRequest,
+) -> Response[Any]:
     """
     Args:
         composite (str):
-        multipart_data (ChannelCreateRequest):
-        json_body (ChannelCreateRequest):
+        multipart_data (ChannelRequest):
+        json_body (ChannelRequest):
 
     Returns:
-        Response[ChannelCreate]
+        Response[Any]
     """
 
     kwargs = _get_kwargs(
@@ -143,32 +107,3 @@ async def asyncio_detailed(
         response = await _client.request(**kwargs)
 
     return _build_response(response=response)
-
-
-async def asyncio(
-    composite: str,
-    *,
-    client: AuthenticatedClient,
-    form_data: ChannelCreateRequest,
-    multipart_data: ChannelCreateRequest,
-    json_body: ChannelCreateRequest,
-) -> Optional[ChannelCreate]:
-    """
-    Args:
-        composite (str):
-        multipart_data (ChannelCreateRequest):
-        json_body (ChannelCreateRequest):
-
-    Returns:
-        Response[ChannelCreate]
-    """
-
-    return (
-        await asyncio_detailed(
-            composite=composite,
-            client=client,
-            form_data=form_data,
-            multipart_data=multipart_data,
-            json_body=json_body,
-        )
-    ).parsed
diff --git a/funkwhale_api_client/api/channels/update_channel.py b/funkwhale_api_client/api/channels/update_channel.py
index d6448341d8b76ade36eefbf05c1631aaf83d0f41..ebc4429bf359fac504bf0a332ef3538fa1847515 100644
--- a/funkwhale_api_client/api/channels/update_channel.py
+++ b/funkwhale_api_client/api/channels/update_channel.py
@@ -3,8 +3,8 @@ from typing import Any, Dict, Optional
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.channel_update import ChannelUpdate
-from ...models.channel_update_request import ChannelUpdateRequest
+from ...models.channel import Channel
+from ...models.channel_request import ChannelRequest
 from ...types import Response
 
 
@@ -12,9 +12,9 @@ def _get_kwargs(
     composite: str,
     *,
     client: AuthenticatedClient,
-    form_data: ChannelUpdateRequest,
-    multipart_data: ChannelUpdateRequest,
-    json_body: ChannelUpdateRequest,
+    form_data: ChannelRequest,
+    multipart_data: ChannelRequest,
+    json_body: ChannelRequest,
 ) -> Dict[str, Any]:
     url = "{}/api/v1/channels/{composite}/".format(client.base_url, composite=composite)
 
@@ -35,15 +35,15 @@ def _get_kwargs(
     }
 
 
-def _parse_response(*, response: httpx.Response) -> Optional[ChannelUpdate]:
+def _parse_response(*, response: httpx.Response) -> Optional[Channel]:
     if response.status_code == 200:
-        response_200 = ChannelUpdate.from_dict(response.json())
+        response_200 = Channel.from_dict(response.json())
 
         return response_200
     return None
 
 
-def _build_response(*, response: httpx.Response) -> Response[ChannelUpdate]:
+def _build_response(*, response: httpx.Response) -> Response[Channel]:
     return Response(
         status_code=response.status_code,
         content=response.content,
@@ -56,18 +56,18 @@ def sync_detailed(
     composite: str,
     *,
     client: AuthenticatedClient,
-    form_data: ChannelUpdateRequest,
-    multipart_data: ChannelUpdateRequest,
-    json_body: ChannelUpdateRequest,
-) -> Response[ChannelUpdate]:
+    form_data: ChannelRequest,
+    multipart_data: ChannelRequest,
+    json_body: ChannelRequest,
+) -> Response[Channel]:
     """
     Args:
         composite (str):
-        multipart_data (ChannelUpdateRequest):
-        json_body (ChannelUpdateRequest):
+        multipart_data (ChannelRequest):
+        json_body (ChannelRequest):
 
     Returns:
-        Response[ChannelUpdate]
+        Response[Channel]
     """
 
     kwargs = _get_kwargs(
@@ -90,18 +90,18 @@ def sync(
     composite: str,
     *,
     client: AuthenticatedClient,
-    form_data: ChannelUpdateRequest,
-    multipart_data: ChannelUpdateRequest,
-    json_body: ChannelUpdateRequest,
-) -> Optional[ChannelUpdate]:
+    form_data: ChannelRequest,
+    multipart_data: ChannelRequest,
+    json_body: ChannelRequest,
+) -> Optional[Channel]:
     """
     Args:
         composite (str):
-        multipart_data (ChannelUpdateRequest):
-        json_body (ChannelUpdateRequest):
+        multipart_data (ChannelRequest):
+        json_body (ChannelRequest):
 
     Returns:
-        Response[ChannelUpdate]
+        Response[Channel]
     """
 
     return sync_detailed(
@@ -117,18 +117,18 @@ async def asyncio_detailed(
     composite: str,
     *,
     client: AuthenticatedClient,
-    form_data: ChannelUpdateRequest,
-    multipart_data: ChannelUpdateRequest,
-    json_body: ChannelUpdateRequest,
-) -> Response[ChannelUpdate]:
+    form_data: ChannelRequest,
+    multipart_data: ChannelRequest,
+    json_body: ChannelRequest,
+) -> Response[Channel]:
     """
     Args:
         composite (str):
-        multipart_data (ChannelUpdateRequest):
-        json_body (ChannelUpdateRequest):
+        multipart_data (ChannelRequest):
+        json_body (ChannelRequest):
 
     Returns:
-        Response[ChannelUpdate]
+        Response[Channel]
     """
 
     kwargs = _get_kwargs(
@@ -149,18 +149,18 @@ async def asyncio(
     composite: str,
     *,
     client: AuthenticatedClient,
-    form_data: ChannelUpdateRequest,
-    multipart_data: ChannelUpdateRequest,
-    json_body: ChannelUpdateRequest,
-) -> Optional[ChannelUpdate]:
+    form_data: ChannelRequest,
+    multipart_data: ChannelRequest,
+    json_body: ChannelRequest,
+) -> Optional[Channel]:
     """
     Args:
         composite (str):
-        multipart_data (ChannelUpdateRequest):
-        json_body (ChannelUpdateRequest):
+        multipart_data (ChannelRequest):
+        json_body (ChannelRequest):
 
     Returns:
-        Response[ChannelUpdate]
+        Response[Channel]
     """
 
     return (
diff --git a/funkwhale_api_client/api/federation/accept_federation_library_follow.py b/funkwhale_api_client/api/federation/accept_federation_library_follow.py
index fec5007ebc58c6cdae83b23e5e24d3ed5d1a2955..d98e9f7d7316254231a9ebee91411b4ce3a0b672 100644
--- a/funkwhale_api_client/api/federation/accept_federation_library_follow.py
+++ b/funkwhale_api_client/api/federation/accept_federation_library_follow.py
@@ -1,9 +1,8 @@
-from typing import Any, Dict, Optional
+from typing import Any, Dict
 
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.library_follow import LibraryFollow
 from ...models.library_follow_request import LibraryFollowRequest
 from ...types import Response
 
@@ -35,20 +34,12 @@ def _get_kwargs(
     }
 
 
-def _parse_response(*, response: httpx.Response) -> Optional[LibraryFollow]:
-    if response.status_code == 200:
-        response_200 = LibraryFollow.from_dict(response.json())
-
-        return response_200
-    return None
-
-
-def _build_response(*, response: httpx.Response) -> Response[LibraryFollow]:
+def _build_response(*, response: httpx.Response) -> Response[Any]:
     return Response(
         status_code=response.status_code,
         content=response.content,
         headers=response.headers,
-        parsed=_parse_response(response=response),
+        parsed=None,
     )
 
 
@@ -59,7 +50,7 @@ def sync_detailed(
     form_data: LibraryFollowRequest,
     multipart_data: LibraryFollowRequest,
     json_body: LibraryFollowRequest,
-) -> Response[LibraryFollow]:
+) -> Response[Any]:
     """
     Args:
         uuid (str):
@@ -67,7 +58,7 @@ def sync_detailed(
         json_body (LibraryFollowRequest):
 
     Returns:
-        Response[LibraryFollow]
+        Response[Any]
     """
 
     kwargs = _get_kwargs(
@@ -86,33 +77,6 @@ def sync_detailed(
     return _build_response(response=response)
 
 
-def sync(
-    uuid: str,
-    *,
-    client: AuthenticatedClient,
-    form_data: LibraryFollowRequest,
-    multipart_data: LibraryFollowRequest,
-    json_body: LibraryFollowRequest,
-) -> Optional[LibraryFollow]:
-    """
-    Args:
-        uuid (str):
-        multipart_data (LibraryFollowRequest):
-        json_body (LibraryFollowRequest):
-
-    Returns:
-        Response[LibraryFollow]
-    """
-
-    return sync_detailed(
-        uuid=uuid,
-        client=client,
-        form_data=form_data,
-        multipart_data=multipart_data,
-        json_body=json_body,
-    ).parsed
-
-
 async def asyncio_detailed(
     uuid: str,
     *,
@@ -120,7 +84,7 @@ async def asyncio_detailed(
     form_data: LibraryFollowRequest,
     multipart_data: LibraryFollowRequest,
     json_body: LibraryFollowRequest,
-) -> Response[LibraryFollow]:
+) -> Response[Any]:
     """
     Args:
         uuid (str):
@@ -128,7 +92,7 @@ async def asyncio_detailed(
         json_body (LibraryFollowRequest):
 
     Returns:
-        Response[LibraryFollow]
+        Response[Any]
     """
 
     kwargs = _get_kwargs(
@@ -143,32 +107,3 @@ async def asyncio_detailed(
         response = await _client.request(**kwargs)
 
     return _build_response(response=response)
-
-
-async def asyncio(
-    uuid: str,
-    *,
-    client: AuthenticatedClient,
-    form_data: LibraryFollowRequest,
-    multipart_data: LibraryFollowRequest,
-    json_body: LibraryFollowRequest,
-) -> Optional[LibraryFollow]:
-    """
-    Args:
-        uuid (str):
-        multipart_data (LibraryFollowRequest):
-        json_body (LibraryFollowRequest):
-
-    Returns:
-        Response[LibraryFollow]
-    """
-
-    return (
-        await asyncio_detailed(
-            uuid=uuid,
-            client=client,
-            form_data=form_data,
-            multipart_data=multipart_data,
-            json_body=json_body,
-        )
-    ).parsed
diff --git a/funkwhale_api_client/api/federation/get_federation_actor_library.py b/funkwhale_api_client/api/federation/get_federation_actor_library.py
index f039c52b856fe09e3ddb4b1822c8c090ea503270..ceddcf4a93d0a958c45f0652d1fff9617791afe3 100644
--- a/funkwhale_api_client/api/federation/get_federation_actor_library.py
+++ b/funkwhale_api_client/api/federation/get_federation_actor_library.py
@@ -3,7 +3,7 @@ from typing import Any, Dict, Optional
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.full_actor import FullActor
+from ...models.library_for_owner import LibraryForOwner
 from ...types import Response
 
 
@@ -26,15 +26,15 @@ def _get_kwargs(
     }
 
 
-def _parse_response(*, response: httpx.Response) -> Optional[FullActor]:
+def _parse_response(*, response: httpx.Response) -> Optional[LibraryForOwner]:
     if response.status_code == 200:
-        response_200 = FullActor.from_dict(response.json())
+        response_200 = LibraryForOwner.from_dict(response.json())
 
         return response_200
     return None
 
 
-def _build_response(*, response: httpx.Response) -> Response[FullActor]:
+def _build_response(*, response: httpx.Response) -> Response[LibraryForOwner]:
     return Response(
         status_code=response.status_code,
         content=response.content,
@@ -47,13 +47,13 @@ def sync_detailed(
     full_username: str,
     *,
     client: AuthenticatedClient,
-) -> Response[FullActor]:
+) -> Response[LibraryForOwner]:
     """
     Args:
         full_username (str):
 
     Returns:
-        Response[FullActor]
+        Response[LibraryForOwner]
     """
 
     kwargs = _get_kwargs(
@@ -73,13 +73,13 @@ def sync(
     full_username: str,
     *,
     client: AuthenticatedClient,
-) -> Optional[FullActor]:
+) -> Optional[LibraryForOwner]:
     """
     Args:
         full_username (str):
 
     Returns:
-        Response[FullActor]
+        Response[LibraryForOwner]
     """
 
     return sync_detailed(
@@ -92,13 +92,13 @@ async def asyncio_detailed(
     full_username: str,
     *,
     client: AuthenticatedClient,
-) -> Response[FullActor]:
+) -> Response[LibraryForOwner]:
     """
     Args:
         full_username (str):
 
     Returns:
-        Response[FullActor]
+        Response[LibraryForOwner]
     """
 
     kwargs = _get_kwargs(
@@ -116,13 +116,13 @@ async def asyncio(
     full_username: str,
     *,
     client: AuthenticatedClient,
-) -> Optional[FullActor]:
+) -> Optional[LibraryForOwner]:
     """
     Args:
         full_username (str):
 
     Returns:
-        Response[FullActor]
+        Response[LibraryForOwner]
     """
 
     return (
diff --git a/funkwhale_api_client/api/instance/get_instance_nodeinfo_2_0.py b/funkwhale_api_client/api/instance/get_node_info_20.py
similarity index 100%
rename from funkwhale_api_client/api/instance/get_instance_nodeinfo_2_0.py
rename to funkwhale_api_client/api/instance/get_node_info_20.py
diff --git a/funkwhale_api_client/api/libraries/create_library_fs_import.py b/funkwhale_api_client/api/libraries/create_library_fs_import.py
index bf81bff32b54a9b333e721d6e76f0b799afcd3a3..9af4246a0ac27dd1077b8790285c0d5c40b802d5 100644
--- a/funkwhale_api_client/api/libraries/create_library_fs_import.py
+++ b/funkwhale_api_client/api/libraries/create_library_fs_import.py
@@ -1,9 +1,8 @@
-from typing import Any, Dict, Optional
+from typing import Any, Dict
 
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.library_for_owner import LibraryForOwner
 from ...models.library_for_owner_request import LibraryForOwnerRequest
 from ...types import Response
 
@@ -34,20 +33,12 @@ def _get_kwargs(
     }
 
 
-def _parse_response(*, response: httpx.Response) -> Optional[LibraryForOwner]:
-    if response.status_code == 200:
-        response_200 = LibraryForOwner.from_dict(response.json())
-
-        return response_200
-    return None
-
-
-def _build_response(*, response: httpx.Response) -> Response[LibraryForOwner]:
+def _build_response(*, response: httpx.Response) -> Response[Any]:
     return Response(
         status_code=response.status_code,
         content=response.content,
         headers=response.headers,
-        parsed=_parse_response(response=response),
+        parsed=None,
     )
 
 
@@ -57,14 +48,14 @@ def sync_detailed(
     form_data: LibraryForOwnerRequest,
     multipart_data: LibraryForOwnerRequest,
     json_body: LibraryForOwnerRequest,
-) -> Response[LibraryForOwner]:
+) -> Response[Any]:
     """
     Args:
         multipart_data (LibraryForOwnerRequest):
         json_body (LibraryForOwnerRequest):
 
     Returns:
-        Response[LibraryForOwner]
+        Response[Any]
     """
 
     kwargs = _get_kwargs(
@@ -82,44 +73,20 @@ def sync_detailed(
     return _build_response(response=response)
 
 
-def sync(
-    *,
-    client: AuthenticatedClient,
-    form_data: LibraryForOwnerRequest,
-    multipart_data: LibraryForOwnerRequest,
-    json_body: LibraryForOwnerRequest,
-) -> Optional[LibraryForOwner]:
-    """
-    Args:
-        multipart_data (LibraryForOwnerRequest):
-        json_body (LibraryForOwnerRequest):
-
-    Returns:
-        Response[LibraryForOwner]
-    """
-
-    return sync_detailed(
-        client=client,
-        form_data=form_data,
-        multipart_data=multipart_data,
-        json_body=json_body,
-    ).parsed
-
-
 async def asyncio_detailed(
     *,
     client: AuthenticatedClient,
     form_data: LibraryForOwnerRequest,
     multipart_data: LibraryForOwnerRequest,
     json_body: LibraryForOwnerRequest,
-) -> Response[LibraryForOwner]:
+) -> Response[Any]:
     """
     Args:
         multipart_data (LibraryForOwnerRequest):
         json_body (LibraryForOwnerRequest):
 
     Returns:
-        Response[LibraryForOwner]
+        Response[Any]
     """
 
     kwargs = _get_kwargs(
@@ -133,29 +100,3 @@ async def asyncio_detailed(
         response = await _client.request(**kwargs)
 
     return _build_response(response=response)
-
-
-async def asyncio(
-    *,
-    client: AuthenticatedClient,
-    form_data: LibraryForOwnerRequest,
-    multipart_data: LibraryForOwnerRequest,
-    json_body: LibraryForOwnerRequest,
-) -> Optional[LibraryForOwner]:
-    """
-    Args:
-        multipart_data (LibraryForOwnerRequest):
-        json_body (LibraryForOwnerRequest):
-
-    Returns:
-        Response[LibraryForOwner]
-    """
-
-    return (
-        await asyncio_detailed(
-            client=client,
-            form_data=form_data,
-            multipart_data=multipart_data,
-            json_body=json_body,
-        )
-    ).parsed
diff --git a/funkwhale_api_client/api/libraries/get_library_follow.py b/funkwhale_api_client/api/libraries/get_library_follow.py
deleted file mode 100644
index 63b211c6c7320feb6499e9c9447b7ae31a7df9cc..0000000000000000000000000000000000000000
--- a/funkwhale_api_client/api/libraries/get_library_follow.py
+++ /dev/null
@@ -1,133 +0,0 @@
-from typing import Any, Dict, Optional
-
-import httpx
-
-from ...client import AuthenticatedClient
-from ...models.library_for_owner import LibraryForOwner
-from ...types import Response
-
-
-def _get_kwargs(
-    uuid: str,
-    *,
-    client: AuthenticatedClient,
-) -> Dict[str, Any]:
-    url = "{}/api/v1/libraries/{uuid}/follows/".format(client.base_url, uuid=uuid)
-
-    headers: Dict[str, str] = client.get_headers()
-    cookies: Dict[str, Any] = client.get_cookies()
-
-    return {
-        "method": "get",
-        "url": url,
-        "headers": headers,
-        "cookies": cookies,
-        "timeout": client.get_timeout(),
-    }
-
-
-def _parse_response(*, response: httpx.Response) -> Optional[LibraryForOwner]:
-    if response.status_code == 200:
-        response_200 = LibraryForOwner.from_dict(response.json())
-
-        return response_200
-    return None
-
-
-def _build_response(*, response: httpx.Response) -> Response[LibraryForOwner]:
-    return Response(
-        status_code=response.status_code,
-        content=response.content,
-        headers=response.headers,
-        parsed=_parse_response(response=response),
-    )
-
-
-def sync_detailed(
-    uuid: str,
-    *,
-    client: AuthenticatedClient,
-) -> Response[LibraryForOwner]:
-    """
-    Args:
-        uuid (str):
-
-    Returns:
-        Response[LibraryForOwner]
-    """
-
-    kwargs = _get_kwargs(
-        uuid=uuid,
-        client=client,
-    )
-
-    response = httpx.request(
-        verify=client.verify_ssl,
-        **kwargs,
-    )
-
-    return _build_response(response=response)
-
-
-def sync(
-    uuid: str,
-    *,
-    client: AuthenticatedClient,
-) -> Optional[LibraryForOwner]:
-    """
-    Args:
-        uuid (str):
-
-    Returns:
-        Response[LibraryForOwner]
-    """
-
-    return sync_detailed(
-        uuid=uuid,
-        client=client,
-    ).parsed
-
-
-async def asyncio_detailed(
-    uuid: str,
-    *,
-    client: AuthenticatedClient,
-) -> Response[LibraryForOwner]:
-    """
-    Args:
-        uuid (str):
-
-    Returns:
-        Response[LibraryForOwner]
-    """
-
-    kwargs = _get_kwargs(
-        uuid=uuid,
-        client=client,
-    )
-
-    async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
-        response = await _client.request(**kwargs)
-
-    return _build_response(response=response)
-
-
-async def asyncio(
-    uuid: str,
-    *,
-    client: AuthenticatedClient,
-) -> Optional[LibraryForOwner]:
-    """
-    Args:
-        uuid (str):
-
-    Returns:
-        Response[LibraryForOwner]
-    """
-
-    return (
-        await asyncio_detailed(
-            uuid=uuid,
-            client=client,
-        )
-    ).parsed
diff --git a/funkwhale_api_client/api/libraries/get_library_follows.py b/funkwhale_api_client/api/libraries/get_library_follows.py
new file mode 100644
index 0000000000000000000000000000000000000000..a19e36b2bf57bb60c8df39dc32e13b9b12922af4
--- /dev/null
+++ b/funkwhale_api_client/api/libraries/get_library_follows.py
@@ -0,0 +1,232 @@
+from typing import Any, Dict, Optional, Union
+
+import httpx
+
+from ...client import AuthenticatedClient
+from ...models.get_library_follows_privacy_level import GetLibraryFollowsPrivacyLevel
+from ...models.paginated_library_follow_list import PaginatedLibraryFollowList
+from ...types import UNSET, Response, Unset
+
+
+def _get_kwargs(
+    uuid: str,
+    *,
+    client: AuthenticatedClient,
+    ordering: Union[Unset, None, str] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    privacy_level: Union[Unset, None, GetLibraryFollowsPrivacyLevel] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+) -> Dict[str, Any]:
+    url = "{}/api/v1/libraries/{uuid}/follows/".format(client.base_url, uuid=uuid)
+
+    headers: Dict[str, str] = client.get_headers()
+    cookies: Dict[str, Any] = client.get_cookies()
+
+    params: Dict[str, Any] = {}
+    params["ordering"] = ordering
+
+    params["page"] = page
+
+    params["page_size"] = page_size
+
+    json_privacy_level: Union[Unset, None, str] = UNSET
+    if not isinstance(privacy_level, Unset):
+        json_privacy_level = privacy_level.value if privacy_level else None
+
+    params["privacy_level"] = json_privacy_level
+
+    params["q"] = q
+
+    params["scope"] = scope
+
+    params = {k: v for k, v in params.items() if v is not UNSET and v is not None}
+
+    return {
+        "method": "get",
+        "url": url,
+        "headers": headers,
+        "cookies": cookies,
+        "timeout": client.get_timeout(),
+        "params": params,
+    }
+
+
+def _parse_response(*, response: httpx.Response) -> Optional[PaginatedLibraryFollowList]:
+    if response.status_code == 200:
+        response_200 = PaginatedLibraryFollowList.from_dict(response.json())
+
+        return response_200
+    return None
+
+
+def _build_response(*, response: httpx.Response) -> Response[PaginatedLibraryFollowList]:
+    return Response(
+        status_code=response.status_code,
+        content=response.content,
+        headers=response.headers,
+        parsed=_parse_response(response=response),
+    )
+
+
+def sync_detailed(
+    uuid: str,
+    *,
+    client: AuthenticatedClient,
+    ordering: Union[Unset, None, str] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    privacy_level: Union[Unset, None, GetLibraryFollowsPrivacyLevel] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+) -> Response[PaginatedLibraryFollowList]:
+    """
+    Args:
+        uuid (str):
+        ordering (Union[Unset, None, str]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        privacy_level (Union[Unset, None, GetLibraryFollowsPrivacyLevel]):
+        q (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+
+    Returns:
+        Response[PaginatedLibraryFollowList]
+    """
+
+    kwargs = _get_kwargs(
+        uuid=uuid,
+        client=client,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        privacy_level=privacy_level,
+        q=q,
+        scope=scope,
+    )
+
+    response = httpx.request(
+        verify=client.verify_ssl,
+        **kwargs,
+    )
+
+    return _build_response(response=response)
+
+
+def sync(
+    uuid: str,
+    *,
+    client: AuthenticatedClient,
+    ordering: Union[Unset, None, str] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    privacy_level: Union[Unset, None, GetLibraryFollowsPrivacyLevel] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+) -> Optional[PaginatedLibraryFollowList]:
+    """
+    Args:
+        uuid (str):
+        ordering (Union[Unset, None, str]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        privacy_level (Union[Unset, None, GetLibraryFollowsPrivacyLevel]):
+        q (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+
+    Returns:
+        Response[PaginatedLibraryFollowList]
+    """
+
+    return sync_detailed(
+        uuid=uuid,
+        client=client,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        privacy_level=privacy_level,
+        q=q,
+        scope=scope,
+    ).parsed
+
+
+async def asyncio_detailed(
+    uuid: str,
+    *,
+    client: AuthenticatedClient,
+    ordering: Union[Unset, None, str] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    privacy_level: Union[Unset, None, GetLibraryFollowsPrivacyLevel] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+) -> Response[PaginatedLibraryFollowList]:
+    """
+    Args:
+        uuid (str):
+        ordering (Union[Unset, None, str]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        privacy_level (Union[Unset, None, GetLibraryFollowsPrivacyLevel]):
+        q (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+
+    Returns:
+        Response[PaginatedLibraryFollowList]
+    """
+
+    kwargs = _get_kwargs(
+        uuid=uuid,
+        client=client,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        privacy_level=privacy_level,
+        q=q,
+        scope=scope,
+    )
+
+    async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
+        response = await _client.request(**kwargs)
+
+    return _build_response(response=response)
+
+
+async def asyncio(
+    uuid: str,
+    *,
+    client: AuthenticatedClient,
+    ordering: Union[Unset, None, str] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    privacy_level: Union[Unset, None, GetLibraryFollowsPrivacyLevel] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+) -> Optional[PaginatedLibraryFollowList]:
+    """
+    Args:
+        uuid (str):
+        ordering (Union[Unset, None, str]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        privacy_level (Union[Unset, None, GetLibraryFollowsPrivacyLevel]):
+        q (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+
+    Returns:
+        Response[PaginatedLibraryFollowList]
+    """
+
+    return (
+        await asyncio_detailed(
+            uuid=uuid,
+            client=client,
+            ordering=ordering,
+            page=page,
+            page_size=page_size,
+            privacy_level=privacy_level,
+            q=q,
+            scope=scope,
+        )
+    ).parsed
diff --git a/funkwhale_api_client/api/libraries/get_library_fs_import.py b/funkwhale_api_client/api/libraries/get_library_fs_import.py
index 6430717337863f163f2f9969bf3109c86fd2df56..6afe6c44b7035b932379c3ccccb4089186c3fef4 100644
--- a/funkwhale_api_client/api/libraries/get_library_fs_import.py
+++ b/funkwhale_api_client/api/libraries/get_library_fs_import.py
@@ -1,9 +1,8 @@
-from typing import Any, Dict, Optional
+from typing import Any, Dict
 
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.library_for_owner import LibraryForOwner
 from ...types import Response
 
 
@@ -25,30 +24,22 @@ def _get_kwargs(
     }
 
 
-def _parse_response(*, response: httpx.Response) -> Optional[LibraryForOwner]:
-    if response.status_code == 200:
-        response_200 = LibraryForOwner.from_dict(response.json())
-
-        return response_200
-    return None
-
-
-def _build_response(*, response: httpx.Response) -> Response[LibraryForOwner]:
+def _build_response(*, response: httpx.Response) -> Response[Any]:
     return Response(
         status_code=response.status_code,
         content=response.content,
         headers=response.headers,
-        parsed=_parse_response(response=response),
+        parsed=None,
     )
 
 
 def sync_detailed(
     *,
     client: AuthenticatedClient,
-) -> Response[LibraryForOwner]:
+) -> Response[Any]:
     """
     Returns:
-        Response[LibraryForOwner]
+        Response[Any]
     """
 
     kwargs = _get_kwargs(
@@ -63,27 +54,13 @@ def sync_detailed(
     return _build_response(response=response)
 
 
-def sync(
-    *,
-    client: AuthenticatedClient,
-) -> Optional[LibraryForOwner]:
-    """
-    Returns:
-        Response[LibraryForOwner]
-    """
-
-    return sync_detailed(
-        client=client,
-    ).parsed
-
-
 async def asyncio_detailed(
     *,
     client: AuthenticatedClient,
-) -> Response[LibraryForOwner]:
+) -> Response[Any]:
     """
     Returns:
-        Response[LibraryForOwner]
+        Response[Any]
     """
 
     kwargs = _get_kwargs(
@@ -94,19 +71,3 @@ async def asyncio_detailed(
         response = await _client.request(**kwargs)
 
     return _build_response(response=response)
-
-
-async def asyncio(
-    *,
-    client: AuthenticatedClient,
-) -> Optional[LibraryForOwner]:
-    """
-    Returns:
-        Response[LibraryForOwner]
-    """
-
-    return (
-        await asyncio_detailed(
-            client=client,
-        )
-    ).parsed
diff --git a/funkwhale_api_client/api/radios/get_radio_filter.py b/funkwhale_api_client/api/radios/get_radio_filter.py
index 019936a1de5d2f37fe7199ae38e44faff9f9eda1..830af0901bce9488038ac34909c1789780109d44 100644
--- a/funkwhale_api_client/api/radios/get_radio_filter.py
+++ b/funkwhale_api_client/api/radios/get_radio_filter.py
@@ -3,7 +3,7 @@ from typing import Any, Dict, Optional
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.radio import Radio
+from ...models.filter_ import Filter
 from ...types import Response
 
 
@@ -25,15 +25,15 @@ def _get_kwargs(
     }
 
 
-def _parse_response(*, response: httpx.Response) -> Optional[Radio]:
+def _parse_response(*, response: httpx.Response) -> Optional[Filter]:
     if response.status_code == 200:
-        response_200 = Radio.from_dict(response.json())
+        response_200 = Filter.from_dict(response.json())
 
         return response_200
     return None
 
 
-def _build_response(*, response: httpx.Response) -> Response[Radio]:
+def _build_response(*, response: httpx.Response) -> Response[Filter]:
     return Response(
         status_code=response.status_code,
         content=response.content,
@@ -45,10 +45,10 @@ def _build_response(*, response: httpx.Response) -> Response[Radio]:
 def sync_detailed(
     *,
     client: AuthenticatedClient,
-) -> Response[Radio]:
+) -> Response[Filter]:
     """
     Returns:
-        Response[Radio]
+        Response[Filter]
     """
 
     kwargs = _get_kwargs(
@@ -66,10 +66,10 @@ def sync_detailed(
 def sync(
     *,
     client: AuthenticatedClient,
-) -> Optional[Radio]:
+) -> Optional[Filter]:
     """
     Returns:
-        Response[Radio]
+        Response[Filter]
     """
 
     return sync_detailed(
@@ -80,10 +80,10 @@ def sync(
 async def asyncio_detailed(
     *,
     client: AuthenticatedClient,
-) -> Response[Radio]:
+) -> Response[Filter]:
     """
     Returns:
-        Response[Radio]
+        Response[Filter]
     """
 
     kwargs = _get_kwargs(
@@ -99,10 +99,10 @@ async def asyncio_detailed(
 async def asyncio(
     *,
     client: AuthenticatedClient,
-) -> Optional[Radio]:
+) -> Optional[Filter]:
     """
     Returns:
-        Response[Radio]
+        Response[Filter]
     """
 
     return (
diff --git a/funkwhale_api_client/api/radios/get_radio_track.py b/funkwhale_api_client/api/radios/get_radio_track.py
index e9f7bea7c10ecabb3f481716c48ade4e70494fc3..7dc298b67e432cc2f06009980c08979a6a44bb4f 100644
--- a/funkwhale_api_client/api/radios/get_radio_track.py
+++ b/funkwhale_api_client/api/radios/get_radio_track.py
@@ -3,7 +3,7 @@ from typing import Any, Dict, Optional
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.radio import Radio
+from ...models.track import Track
 from ...types import Response
 
 
@@ -26,15 +26,15 @@ def _get_kwargs(
     }
 
 
-def _parse_response(*, response: httpx.Response) -> Optional[Radio]:
+def _parse_response(*, response: httpx.Response) -> Optional[Track]:
     if response.status_code == 200:
-        response_200 = Radio.from_dict(response.json())
+        response_200 = Track.from_dict(response.json())
 
         return response_200
     return None
 
 
-def _build_response(*, response: httpx.Response) -> Response[Radio]:
+def _build_response(*, response: httpx.Response) -> Response[Track]:
     return Response(
         status_code=response.status_code,
         content=response.content,
@@ -47,13 +47,13 @@ def sync_detailed(
     id: int,
     *,
     client: AuthenticatedClient,
-) -> Response[Radio]:
+) -> Response[Track]:
     """
     Args:
         id (int):
 
     Returns:
-        Response[Radio]
+        Response[Track]
     """
 
     kwargs = _get_kwargs(
@@ -73,13 +73,13 @@ def sync(
     id: int,
     *,
     client: AuthenticatedClient,
-) -> Optional[Radio]:
+) -> Optional[Track]:
     """
     Args:
         id (int):
 
     Returns:
-        Response[Radio]
+        Response[Track]
     """
 
     return sync_detailed(
@@ -92,13 +92,13 @@ async def asyncio_detailed(
     id: int,
     *,
     client: AuthenticatedClient,
-) -> Response[Radio]:
+) -> Response[Track]:
     """
     Args:
         id (int):
 
     Returns:
-        Response[Radio]
+        Response[Track]
     """
 
     kwargs = _get_kwargs(
@@ -116,13 +116,13 @@ async def asyncio(
     id: int,
     *,
     client: AuthenticatedClient,
-) -> Optional[Radio]:
+) -> Optional[Track]:
     """
     Args:
         id (int):
 
     Returns:
-        Response[Radio]
+        Response[Track]
     """
 
     return (
diff --git a/funkwhale_api_client/api/users/change_email.py b/funkwhale_api_client/api/users/change_email.py
index 1e9830297a3c350cebeabf38cb94cb6378e2e203..398bc077c19ac8d22924758294ec3e85e67134ab 100644
--- a/funkwhale_api_client/api/users/change_email.py
+++ b/funkwhale_api_client/api/users/change_email.py
@@ -1,9 +1,8 @@
-from typing import Any, Dict, Optional
+from typing import Any, Dict
 
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.user_write import UserWrite
 from ...models.user_write_request import UserWriteRequest
 from ...types import Response
 
@@ -34,20 +33,12 @@ def _get_kwargs(
     }
 
 
-def _parse_response(*, response: httpx.Response) -> Optional[UserWrite]:
-    if response.status_code == 200:
-        response_200 = UserWrite.from_dict(response.json())
-
-        return response_200
-    return None
-
-
-def _build_response(*, response: httpx.Response) -> Response[UserWrite]:
+def _build_response(*, response: httpx.Response) -> Response[Any]:
     return Response(
         status_code=response.status_code,
         content=response.content,
         headers=response.headers,
-        parsed=_parse_response(response=response),
+        parsed=None,
     )
 
 
@@ -57,14 +48,14 @@ def sync_detailed(
     form_data: UserWriteRequest,
     multipart_data: UserWriteRequest,
     json_body: UserWriteRequest,
-) -> Response[UserWrite]:
+) -> Response[Any]:
     """
     Args:
         multipart_data (UserWriteRequest):
         json_body (UserWriteRequest):
 
     Returns:
-        Response[UserWrite]
+        Response[Any]
     """
 
     kwargs = _get_kwargs(
@@ -82,44 +73,20 @@ def sync_detailed(
     return _build_response(response=response)
 
 
-def sync(
-    *,
-    client: AuthenticatedClient,
-    form_data: UserWriteRequest,
-    multipart_data: UserWriteRequest,
-    json_body: UserWriteRequest,
-) -> Optional[UserWrite]:
-    """
-    Args:
-        multipart_data (UserWriteRequest):
-        json_body (UserWriteRequest):
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    return sync_detailed(
-        client=client,
-        form_data=form_data,
-        multipart_data=multipart_data,
-        json_body=json_body,
-    ).parsed
-
-
 async def asyncio_detailed(
     *,
     client: AuthenticatedClient,
     form_data: UserWriteRequest,
     multipart_data: UserWriteRequest,
     json_body: UserWriteRequest,
-) -> Response[UserWrite]:
+) -> Response[Any]:
     """
     Args:
         multipart_data (UserWriteRequest):
         json_body (UserWriteRequest):
 
     Returns:
-        Response[UserWrite]
+        Response[Any]
     """
 
     kwargs = _get_kwargs(
@@ -133,29 +100,3 @@ async def asyncio_detailed(
         response = await _client.request(**kwargs)
 
     return _build_response(response=response)
-
-
-async def asyncio(
-    *,
-    client: AuthenticatedClient,
-    form_data: UserWriteRequest,
-    multipart_data: UserWriteRequest,
-    json_body: UserWriteRequest,
-) -> Optional[UserWrite]:
-    """
-    Args:
-        multipart_data (UserWriteRequest):
-        json_body (UserWriteRequest):
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    return (
-        await asyncio_detailed(
-            client=client,
-            form_data=form_data,
-            multipart_data=multipart_data,
-            json_body=json_body,
-        )
-    ).parsed
diff --git a/funkwhale_api_client/models/__init__.py b/funkwhale_api_client/models/__init__.py
index eba558ccbe5893054518afda36a6bf85d3a04967..ff44bbd186bcba8caaec84d5ef59b53d4f2e1098 100644
--- a/funkwhale_api_client/models/__init__.py
+++ b/funkwhale_api_client/models/__init__.py
@@ -39,15 +39,9 @@ from .attachment import Attachment
 from .attachment_request import AttachmentRequest
 from .attachment_urls import AttachmentUrls
 from .channel import Channel
-from .channel_create import ChannelCreate
-from .channel_create_metadata import ChannelCreateMetadata
-from .channel_create_request import ChannelCreateRequest
-from .channel_create_request_metadata import ChannelCreateRequestMetadata
 from .channel_metadata import ChannelMetadata
-from .channel_update import ChannelUpdate
-from .channel_update_metadata import ChannelUpdateMetadata
-from .channel_update_request import ChannelUpdateRequest
-from .channel_update_request_metadata import ChannelUpdateRequestMetadata
+from .channel_request import ChannelRequest
+from .channel_request_metadata import ChannelRequestMetadata
 from .content import Content
 from .content_category_enum import ContentCategoryEnum
 from .content_request import ContentRequest
@@ -64,6 +58,7 @@ from .fetch import Fetch
 from .fetch_detail import FetchDetail
 from .fetch_request import FetchRequest
 from .fetch_status_enum import FetchStatusEnum
+from .filter_ import Filter
 from .full_actor import FullActor
 from .get_album_fetches_ordering_item import GetAlbumFetchesOrderingItem
 from .get_album_libraries_ordering_item import GetAlbumLibrariesOrderingItem
@@ -75,6 +70,7 @@ from .get_artist_mutations_ordering_item import GetArtistMutationsOrderingItem
 from .get_artists_ordering_item import GetArtistsOrderingItem
 from .get_channels_ordering_item import GetChannelsOrderingItem
 from .get_libraries_privacy_level import GetLibrariesPrivacyLevel
+from .get_library_follows_privacy_level import GetLibraryFollowsPrivacyLevel
 from .get_tags_ordering_item import GetTagsOrderingItem
 from .get_track_fetches_ordering_item import GetTrackFetchesOrderingItem
 from .get_track_libraries_ordering_item import GetTrackLibrariesOrderingItem
@@ -224,8 +220,8 @@ from .password_reset_confirm import PasswordResetConfirm
 from .password_reset_confirm_request import PasswordResetConfirmRequest
 from .password_reset_request import PasswordResetRequest
 from .patched_application_request import PatchedApplicationRequest
-from .patched_channel_update_request import PatchedChannelUpdateRequest
-from .patched_channel_update_request_metadata import PatchedChannelUpdateRequestMetadata
+from .patched_channel_request import PatchedChannelRequest
+from .patched_channel_request_metadata import PatchedChannelRequestMetadata
 from .patched_global_preference_request import PatchedGlobalPreferenceRequest
 from .patched_inbox_item_request import PatchedInboxItemRequest
 from .patched_library_for_owner_request import PatchedLibraryForOwnerRequest
diff --git a/funkwhale_api_client/models/channel_create.py b/funkwhale_api_client/models/channel_create.py
deleted file mode 100644
index 4863737744fd3fa46c69d50ddd47696954eaf89c..0000000000000000000000000000000000000000
--- a/funkwhale_api_client/models/channel_create.py
+++ /dev/null
@@ -1,113 +0,0 @@
-from typing import Any, Dict, List, Optional, Type, TypeVar, Union, cast
-
-import attr
-
-from ..models.channel_create_metadata import ChannelCreateMetadata
-from ..models.content import Content
-from ..models.content_category_enum import ContentCategoryEnum
-from ..types import UNSET, Unset
-
-T = TypeVar("T", bound="ChannelCreate")
-
-
-@attr.s(auto_attribs=True)
-class ChannelCreate:
-    """
-    Attributes:
-        name (str):
-        username (str):
-        tags (List[str]):
-        content_category (ContentCategoryEnum):
-        description (Optional[Content]):
-        metadata (Union[Unset, ChannelCreateMetadata]):
-    """
-
-    name: str
-    username: str
-    tags: List[str]
-    content_category: ContentCategoryEnum
-    description: Optional[Content]
-    metadata: Union[Unset, ChannelCreateMetadata] = UNSET
-    additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
-
-    def to_dict(self) -> Dict[str, Any]:
-        name = self.name
-        username = self.username
-        tags = self.tags
-
-        content_category = self.content_category.value
-
-        description = self.description.to_dict() if self.description else None
-
-        metadata: Union[Unset, Dict[str, Any]] = UNSET
-        if not isinstance(self.metadata, Unset):
-            metadata = self.metadata.to_dict()
-
-        field_dict: Dict[str, Any] = {}
-        field_dict.update(self.additional_properties)
-        field_dict.update(
-            {
-                "name": name,
-                "username": username,
-                "tags": tags,
-                "content_category": content_category,
-                "description": description,
-            }
-        )
-        if metadata is not UNSET:
-            field_dict["metadata"] = metadata
-
-        return field_dict
-
-    @classmethod
-    def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
-        d = src_dict.copy()
-        name = d.pop("name")
-
-        username = d.pop("username")
-
-        tags = cast(List[str], d.pop("tags"))
-
-        content_category = ContentCategoryEnum(d.pop("content_category"))
-
-        _description = d.pop("description")
-        description: Optional[Content]
-        if _description is None:
-            description = None
-        else:
-            description = Content.from_dict(_description)
-
-        _metadata = d.pop("metadata", UNSET)
-        metadata: Union[Unset, ChannelCreateMetadata]
-        if isinstance(_metadata, Unset):
-            metadata = UNSET
-        else:
-            metadata = ChannelCreateMetadata.from_dict(_metadata)
-
-        channel_create = cls(
-            name=name,
-            username=username,
-            tags=tags,
-            content_category=content_category,
-            description=description,
-            metadata=metadata,
-        )
-
-        channel_create.additional_properties = d
-        return channel_create
-
-    @property
-    def additional_keys(self) -> List[str]:
-        return list(self.additional_properties.keys())
-
-    def __getitem__(self, key: str) -> Any:
-        return self.additional_properties[key]
-
-    def __setitem__(self, key: str, value: Any) -> None:
-        self.additional_properties[key] = value
-
-    def __delitem__(self, key: str) -> None:
-        del self.additional_properties[key]
-
-    def __contains__(self, key: str) -> bool:
-        return key in self.additional_properties
diff --git a/funkwhale_api_client/models/channel_create_metadata.py b/funkwhale_api_client/models/channel_create_metadata.py
deleted file mode 100644
index da52c5ef1bf6b5a04dbeb9714d6131e3f1bfb7f3..0000000000000000000000000000000000000000
--- a/funkwhale_api_client/models/channel_create_metadata.py
+++ /dev/null
@@ -1,44 +0,0 @@
-from typing import Any, Dict, List, Type, TypeVar
-
-import attr
-
-T = TypeVar("T", bound="ChannelCreateMetadata")
-
-
-@attr.s(auto_attribs=True)
-class ChannelCreateMetadata:
-    """ """
-
-    additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
-
-    def to_dict(self) -> Dict[str, Any]:
-
-        field_dict: Dict[str, Any] = {}
-        field_dict.update(self.additional_properties)
-        field_dict.update({})
-
-        return field_dict
-
-    @classmethod
-    def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
-        d = src_dict.copy()
-        channel_create_metadata = cls()
-
-        channel_create_metadata.additional_properties = d
-        return channel_create_metadata
-
-    @property
-    def additional_keys(self) -> List[str]:
-        return list(self.additional_properties.keys())
-
-    def __getitem__(self, key: str) -> Any:
-        return self.additional_properties[key]
-
-    def __setitem__(self, key: str, value: Any) -> None:
-        self.additional_properties[key] = value
-
-    def __delitem__(self, key: str) -> None:
-        del self.additional_properties[key]
-
-    def __contains__(self, key: str) -> bool:
-        return key in self.additional_properties
diff --git a/funkwhale_api_client/models/channel_create_request.py b/funkwhale_api_client/models/channel_create_request.py
deleted file mode 100644
index d1d35d7ad0b2c212d6e7e9ddef85dd56e2378d54..0000000000000000000000000000000000000000
--- a/funkwhale_api_client/models/channel_create_request.py
+++ /dev/null
@@ -1,161 +0,0 @@
-import json
-from typing import Any, Dict, List, Optional, Tuple, Type, TypeVar, Union, cast
-
-import attr
-
-from ..models.channel_create_request_metadata import ChannelCreateRequestMetadata
-from ..models.content_category_enum import ContentCategoryEnum
-from ..models.content_request import ContentRequest
-from ..types import UNSET, Unset
-
-T = TypeVar("T", bound="ChannelCreateRequest")
-
-
-@attr.s(auto_attribs=True)
-class ChannelCreateRequest:
-    """
-    Attributes:
-        name (str):
-        username (str):
-        tags (List[str]):
-        content_category (ContentCategoryEnum):
-        cover (Union[Unset, None, str]):
-        description (Optional[ContentRequest]):
-        metadata (Union[Unset, ChannelCreateRequestMetadata]):
-    """
-
-    name: str
-    username: str
-    tags: List[str]
-    content_category: ContentCategoryEnum
-    description: Optional[ContentRequest]
-    cover: Union[Unset, None, str] = UNSET
-    metadata: Union[Unset, ChannelCreateRequestMetadata] = UNSET
-    additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
-
-    def to_dict(self) -> Dict[str, Any]:
-        name = self.name
-        username = self.username
-        tags = self.tags
-
-        content_category = self.content_category.value
-
-        cover = self.cover
-        description = self.description.to_dict() if self.description else None
-
-        metadata: Union[Unset, Dict[str, Any]] = UNSET
-        if not isinstance(self.metadata, Unset):
-            metadata = self.metadata.to_dict()
-
-        field_dict: Dict[str, Any] = {}
-        field_dict.update(self.additional_properties)
-        field_dict.update(
-            {
-                "name": name,
-                "username": username,
-                "tags": tags,
-                "content_category": content_category,
-                "description": description,
-            }
-        )
-        if cover is not UNSET:
-            field_dict["cover"] = cover
-        if metadata is not UNSET:
-            field_dict["metadata"] = metadata
-
-        return field_dict
-
-    def to_multipart(self) -> Dict[str, Any]:
-        name = self.name if isinstance(self.name, Unset) else (None, str(self.name).encode(), "text/plain")
-        username = (
-            self.username if isinstance(self.username, Unset) else (None, str(self.username).encode(), "text/plain")
-        )
-        _temp_tags = self.tags
-        tags = (None, json.dumps(_temp_tags).encode(), "application/json")
-
-        content_category = (None, str(self.content_category.value).encode(), "text/plain")
-
-        cover = self.cover if isinstance(self.cover, Unset) else (None, str(self.cover).encode(), "text/plain")
-        description = (
-            (None, json.dumps(self.description.to_dict()).encode(), "application/json") if self.description else None
-        )
-
-        metadata: Union[Unset, Tuple[None, bytes, str]] = UNSET
-        if not isinstance(self.metadata, Unset):
-            metadata = (None, json.dumps(self.metadata.to_dict()).encode(), "application/json")
-
-        field_dict: Dict[str, Any] = {}
-        field_dict.update(
-            {key: (None, str(value).encode(), "text/plain") for key, value in self.additional_properties.items()}
-        )
-        field_dict.update(
-            {
-                "name": name,
-                "username": username,
-                "tags": tags,
-                "content_category": content_category,
-                "description": description,
-            }
-        )
-        if cover is not UNSET:
-            field_dict["cover"] = cover
-        if metadata is not UNSET:
-            field_dict["metadata"] = metadata
-
-        return field_dict
-
-    @classmethod
-    def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
-        d = src_dict.copy()
-        name = d.pop("name")
-
-        username = d.pop("username")
-
-        tags = cast(List[str], d.pop("tags"))
-
-        content_category = ContentCategoryEnum(d.pop("content_category"))
-
-        cover = d.pop("cover", UNSET)
-
-        _description = d.pop("description")
-        description: Optional[ContentRequest]
-        if _description is None:
-            description = None
-        else:
-            description = ContentRequest.from_dict(_description)
-
-        _metadata = d.pop("metadata", UNSET)
-        metadata: Union[Unset, ChannelCreateRequestMetadata]
-        if isinstance(_metadata, Unset):
-            metadata = UNSET
-        else:
-            metadata = ChannelCreateRequestMetadata.from_dict(_metadata)
-
-        channel_create_request = cls(
-            name=name,
-            username=username,
-            tags=tags,
-            content_category=content_category,
-            cover=cover,
-            description=description,
-            metadata=metadata,
-        )
-
-        channel_create_request.additional_properties = d
-        return channel_create_request
-
-    @property
-    def additional_keys(self) -> List[str]:
-        return list(self.additional_properties.keys())
-
-    def __getitem__(self, key: str) -> Any:
-        return self.additional_properties[key]
-
-    def __setitem__(self, key: str, value: Any) -> None:
-        self.additional_properties[key] = value
-
-    def __delitem__(self, key: str) -> None:
-        del self.additional_properties[key]
-
-    def __contains__(self, key: str) -> bool:
-        return key in self.additional_properties
diff --git a/funkwhale_api_client/models/channel_request.py b/funkwhale_api_client/models/channel_request.py
new file mode 100644
index 0000000000000000000000000000000000000000..454f7f336ca70f83e46ce0c607e5a1b951dab057
--- /dev/null
+++ b/funkwhale_api_client/models/channel_request.py
@@ -0,0 +1,155 @@
+import datetime
+import json
+from typing import Any, Dict, List, Tuple, Type, TypeVar, Union
+
+import attr
+from dateutil.parser import isoparse
+
+from ..models.api_actor_request import APIActorRequest
+from ..models.channel_request_metadata import ChannelRequestMetadata
+from ..models.simple_artist_request import SimpleArtistRequest
+from ..types import UNSET, Unset
+
+T = TypeVar("T", bound="ChannelRequest")
+
+
+@attr.s(auto_attribs=True)
+class ChannelRequest:
+    """
+    Attributes:
+        artist (SimpleArtistRequest):
+        attributed_to (APIActorRequest):
+        rss_url (str):
+        uuid (Union[Unset, str]):
+        creation_date (Union[Unset, datetime.datetime]):
+        metadata (Union[Unset, ChannelRequestMetadata]):
+    """
+
+    artist: SimpleArtistRequest
+    attributed_to: APIActorRequest
+    rss_url: str
+    uuid: Union[Unset, str] = UNSET
+    creation_date: Union[Unset, datetime.datetime] = UNSET
+    metadata: Union[Unset, ChannelRequestMetadata] = UNSET
+    additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
+
+    def to_dict(self) -> Dict[str, Any]:
+        artist = self.artist.to_dict()
+
+        attributed_to = self.attributed_to.to_dict()
+
+        rss_url = self.rss_url
+        uuid = self.uuid
+        creation_date: Union[Unset, str] = UNSET
+        if not isinstance(self.creation_date, Unset):
+            creation_date = self.creation_date.isoformat()
+
+        metadata: Union[Unset, Dict[str, Any]] = UNSET
+        if not isinstance(self.metadata, Unset):
+            metadata = self.metadata.to_dict()
+
+        field_dict: Dict[str, Any] = {}
+        field_dict.update(self.additional_properties)
+        field_dict.update(
+            {
+                "artist": artist,
+                "attributed_to": attributed_to,
+                "rss_url": rss_url,
+            }
+        )
+        if uuid is not UNSET:
+            field_dict["uuid"] = uuid
+        if creation_date is not UNSET:
+            field_dict["creation_date"] = creation_date
+        if metadata is not UNSET:
+            field_dict["metadata"] = metadata
+
+        return field_dict
+
+    def to_multipart(self) -> Dict[str, Any]:
+        artist = (None, json.dumps(self.artist.to_dict()).encode(), "application/json")
+
+        attributed_to = (None, json.dumps(self.attributed_to.to_dict()).encode(), "application/json")
+
+        rss_url = self.rss_url if isinstance(self.rss_url, Unset) else (None, str(self.rss_url).encode(), "text/plain")
+        uuid = self.uuid if isinstance(self.uuid, Unset) else (None, str(self.uuid).encode(), "text/plain")
+        creation_date: Union[Unset, bytes] = UNSET
+        if not isinstance(self.creation_date, Unset):
+            creation_date = self.creation_date.isoformat().encode()
+
+        metadata: Union[Unset, Tuple[None, bytes, str]] = UNSET
+        if not isinstance(self.metadata, Unset):
+            metadata = (None, json.dumps(self.metadata.to_dict()).encode(), "application/json")
+
+        field_dict: Dict[str, Any] = {}
+        field_dict.update(
+            {key: (None, str(value).encode(), "text/plain") for key, value in self.additional_properties.items()}
+        )
+        field_dict.update(
+            {
+                "artist": artist,
+                "attributed_to": attributed_to,
+                "rss_url": rss_url,
+            }
+        )
+        if uuid is not UNSET:
+            field_dict["uuid"] = uuid
+        if creation_date is not UNSET:
+            field_dict["creation_date"] = creation_date
+        if metadata is not UNSET:
+            field_dict["metadata"] = metadata
+
+        return field_dict
+
+    @classmethod
+    def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
+        d = src_dict.copy()
+        artist = SimpleArtistRequest.from_dict(d.pop("artist"))
+
+        attributed_to = APIActorRequest.from_dict(d.pop("attributed_to"))
+
+        rss_url = d.pop("rss_url")
+
+        uuid = d.pop("uuid", UNSET)
+
+        _creation_date = d.pop("creation_date", UNSET)
+        creation_date: Union[Unset, datetime.datetime]
+        if isinstance(_creation_date, Unset):
+            creation_date = UNSET
+        else:
+            creation_date = isoparse(_creation_date)
+
+        _metadata = d.pop("metadata", UNSET)
+        metadata: Union[Unset, ChannelRequestMetadata]
+        if isinstance(_metadata, Unset):
+            metadata = UNSET
+        else:
+            metadata = ChannelRequestMetadata.from_dict(_metadata)
+
+        channel_request = cls(
+            artist=artist,
+            attributed_to=attributed_to,
+            rss_url=rss_url,
+            uuid=uuid,
+            creation_date=creation_date,
+            metadata=metadata,
+        )
+
+        channel_request.additional_properties = d
+        return channel_request
+
+    @property
+    def additional_keys(self) -> List[str]:
+        return list(self.additional_properties.keys())
+
+    def __getitem__(self, key: str) -> Any:
+        return self.additional_properties[key]
+
+    def __setitem__(self, key: str, value: Any) -> None:
+        self.additional_properties[key] = value
+
+    def __delitem__(self, key: str) -> None:
+        del self.additional_properties[key]
+
+    def __contains__(self, key: str) -> bool:
+        return key in self.additional_properties
diff --git a/funkwhale_api_client/models/channel_update_metadata.py b/funkwhale_api_client/models/channel_request_metadata.py
similarity index 81%
rename from funkwhale_api_client/models/channel_update_metadata.py
rename to funkwhale_api_client/models/channel_request_metadata.py
index 9016a9ecc37822c14387c93e0e34c1d2918067cd..409b929bbdd9a6da80b161c751819316b4438185 100644
--- a/funkwhale_api_client/models/channel_update_metadata.py
+++ b/funkwhale_api_client/models/channel_request_metadata.py
@@ -2,11 +2,11 @@ from typing import Any, Dict, List, Type, TypeVar
 
 import attr
 
-T = TypeVar("T", bound="ChannelUpdateMetadata")
+T = TypeVar("T", bound="ChannelRequestMetadata")
 
 
 @attr.s(auto_attribs=True)
-class ChannelUpdateMetadata:
+class ChannelRequestMetadata:
     """ """
 
     additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
@@ -22,10 +22,10 @@ class ChannelUpdateMetadata:
     @classmethod
     def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
         d = src_dict.copy()
-        channel_update_metadata = cls()
+        channel_request_metadata = cls()
 
-        channel_update_metadata.additional_properties = d
-        return channel_update_metadata
+        channel_request_metadata.additional_properties = d
+        return channel_request_metadata
 
     @property
     def additional_keys(self) -> List[str]:
diff --git a/funkwhale_api_client/models/channel_update.py b/funkwhale_api_client/models/channel_update.py
deleted file mode 100644
index 372bbde006f65ec20b7da7f4478b383c3916a31b..0000000000000000000000000000000000000000
--- a/funkwhale_api_client/models/channel_update.py
+++ /dev/null
@@ -1,106 +0,0 @@
-from typing import Any, Dict, List, Optional, Type, TypeVar, Union, cast
-
-import attr
-
-from ..models.channel_update_metadata import ChannelUpdateMetadata
-from ..models.content import Content
-from ..models.content_category_enum import ContentCategoryEnum
-from ..types import UNSET, Unset
-
-T = TypeVar("T", bound="ChannelUpdate")
-
-
-@attr.s(auto_attribs=True)
-class ChannelUpdate:
-    """
-    Attributes:
-        name (str):
-        tags (List[str]):
-        content_category (ContentCategoryEnum):
-        description (Optional[Content]):
-        metadata (Union[Unset, ChannelUpdateMetadata]):
-    """
-
-    name: str
-    tags: List[str]
-    content_category: ContentCategoryEnum
-    description: Optional[Content]
-    metadata: Union[Unset, ChannelUpdateMetadata] = UNSET
-    additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
-
-    def to_dict(self) -> Dict[str, Any]:
-        name = self.name
-        tags = self.tags
-
-        content_category = self.content_category.value
-
-        description = self.description.to_dict() if self.description else None
-
-        metadata: Union[Unset, Dict[str, Any]] = UNSET
-        if not isinstance(self.metadata, Unset):
-            metadata = self.metadata.to_dict()
-
-        field_dict: Dict[str, Any] = {}
-        field_dict.update(self.additional_properties)
-        field_dict.update(
-            {
-                "name": name,
-                "tags": tags,
-                "content_category": content_category,
-                "description": description,
-            }
-        )
-        if metadata is not UNSET:
-            field_dict["metadata"] = metadata
-
-        return field_dict
-
-    @classmethod
-    def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
-        d = src_dict.copy()
-        name = d.pop("name")
-
-        tags = cast(List[str], d.pop("tags"))
-
-        content_category = ContentCategoryEnum(d.pop("content_category"))
-
-        _description = d.pop("description")
-        description: Optional[Content]
-        if _description is None:
-            description = None
-        else:
-            description = Content.from_dict(_description)
-
-        _metadata = d.pop("metadata", UNSET)
-        metadata: Union[Unset, ChannelUpdateMetadata]
-        if isinstance(_metadata, Unset):
-            metadata = UNSET
-        else:
-            metadata = ChannelUpdateMetadata.from_dict(_metadata)
-
-        channel_update = cls(
-            name=name,
-            tags=tags,
-            content_category=content_category,
-            description=description,
-            metadata=metadata,
-        )
-
-        channel_update.additional_properties = d
-        return channel_update
-
-    @property
-    def additional_keys(self) -> List[str]:
-        return list(self.additional_properties.keys())
-
-    def __getitem__(self, key: str) -> Any:
-        return self.additional_properties[key]
-
-    def __setitem__(self, key: str, value: Any) -> None:
-        self.additional_properties[key] = value
-
-    def __delitem__(self, key: str) -> None:
-        del self.additional_properties[key]
-
-    def __contains__(self, key: str) -> bool:
-        return key in self.additional_properties
diff --git a/funkwhale_api_client/models/channel_update_request.py b/funkwhale_api_client/models/channel_update_request.py
deleted file mode 100644
index 095dac429d4b2f84e082ca92acb3af23b3e3f045..0000000000000000000000000000000000000000
--- a/funkwhale_api_client/models/channel_update_request.py
+++ /dev/null
@@ -1,150 +0,0 @@
-import json
-from typing import Any, Dict, List, Optional, Tuple, Type, TypeVar, Union, cast
-
-import attr
-
-from ..models.channel_update_request_metadata import ChannelUpdateRequestMetadata
-from ..models.content_category_enum import ContentCategoryEnum
-from ..models.content_request import ContentRequest
-from ..types import UNSET, Unset
-
-T = TypeVar("T", bound="ChannelUpdateRequest")
-
-
-@attr.s(auto_attribs=True)
-class ChannelUpdateRequest:
-    """
-    Attributes:
-        name (str):
-        tags (List[str]):
-        content_category (ContentCategoryEnum):
-        cover (Union[Unset, None, str]):
-        description (Optional[ContentRequest]):
-        metadata (Union[Unset, ChannelUpdateRequestMetadata]):
-    """
-
-    name: str
-    tags: List[str]
-    content_category: ContentCategoryEnum
-    description: Optional[ContentRequest]
-    cover: Union[Unset, None, str] = UNSET
-    metadata: Union[Unset, ChannelUpdateRequestMetadata] = UNSET
-    additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
-
-    def to_dict(self) -> Dict[str, Any]:
-        name = self.name
-        tags = self.tags
-
-        content_category = self.content_category.value
-
-        cover = self.cover
-        description = self.description.to_dict() if self.description else None
-
-        metadata: Union[Unset, Dict[str, Any]] = UNSET
-        if not isinstance(self.metadata, Unset):
-            metadata = self.metadata.to_dict()
-
-        field_dict: Dict[str, Any] = {}
-        field_dict.update(self.additional_properties)
-        field_dict.update(
-            {
-                "name": name,
-                "tags": tags,
-                "content_category": content_category,
-                "description": description,
-            }
-        )
-        if cover is not UNSET:
-            field_dict["cover"] = cover
-        if metadata is not UNSET:
-            field_dict["metadata"] = metadata
-
-        return field_dict
-
-    def to_multipart(self) -> Dict[str, Any]:
-        name = self.name if isinstance(self.name, Unset) else (None, str(self.name).encode(), "text/plain")
-        _temp_tags = self.tags
-        tags = (None, json.dumps(_temp_tags).encode(), "application/json")
-
-        content_category = (None, str(self.content_category.value).encode(), "text/plain")
-
-        cover = self.cover if isinstance(self.cover, Unset) else (None, str(self.cover).encode(), "text/plain")
-        description = (
-            (None, json.dumps(self.description.to_dict()).encode(), "application/json") if self.description else None
-        )
-
-        metadata: Union[Unset, Tuple[None, bytes, str]] = UNSET
-        if not isinstance(self.metadata, Unset):
-            metadata = (None, json.dumps(self.metadata.to_dict()).encode(), "application/json")
-
-        field_dict: Dict[str, Any] = {}
-        field_dict.update(
-            {key: (None, str(value).encode(), "text/plain") for key, value in self.additional_properties.items()}
-        )
-        field_dict.update(
-            {
-                "name": name,
-                "tags": tags,
-                "content_category": content_category,
-                "description": description,
-            }
-        )
-        if cover is not UNSET:
-            field_dict["cover"] = cover
-        if metadata is not UNSET:
-            field_dict["metadata"] = metadata
-
-        return field_dict
-
-    @classmethod
-    def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
-        d = src_dict.copy()
-        name = d.pop("name")
-
-        tags = cast(List[str], d.pop("tags"))
-
-        content_category = ContentCategoryEnum(d.pop("content_category"))
-
-        cover = d.pop("cover", UNSET)
-
-        _description = d.pop("description")
-        description: Optional[ContentRequest]
-        if _description is None:
-            description = None
-        else:
-            description = ContentRequest.from_dict(_description)
-
-        _metadata = d.pop("metadata", UNSET)
-        metadata: Union[Unset, ChannelUpdateRequestMetadata]
-        if isinstance(_metadata, Unset):
-            metadata = UNSET
-        else:
-            metadata = ChannelUpdateRequestMetadata.from_dict(_metadata)
-
-        channel_update_request = cls(
-            name=name,
-            tags=tags,
-            content_category=content_category,
-            cover=cover,
-            description=description,
-            metadata=metadata,
-        )
-
-        channel_update_request.additional_properties = d
-        return channel_update_request
-
-    @property
-    def additional_keys(self) -> List[str]:
-        return list(self.additional_properties.keys())
-
-    def __getitem__(self, key: str) -> Any:
-        return self.additional_properties[key]
-
-    def __setitem__(self, key: str, value: Any) -> None:
-        self.additional_properties[key] = value
-
-    def __delitem__(self, key: str) -> None:
-        del self.additional_properties[key]
-
-    def __contains__(self, key: str) -> bool:
-        return key in self.additional_properties
diff --git a/funkwhale_api_client/models/channel_update_request_metadata.py b/funkwhale_api_client/models/filter_.py
similarity index 51%
rename from funkwhale_api_client/models/channel_update_request_metadata.py
rename to funkwhale_api_client/models/filter_.py
index 141626fa4e0883b9fbbb08e6d64cb20b191bd720..5b35cf637ff3cadfa1223b9b8a36a98d09543d23 100644
--- a/funkwhale_api_client/models/channel_update_request_metadata.py
+++ b/funkwhale_api_client/models/filter_.py
@@ -2,30 +2,64 @@ from typing import Any, Dict, List, Type, TypeVar
 
 import attr
 
-T = TypeVar("T", bound="ChannelUpdateRequestMetadata")
+T = TypeVar("T", bound="Filter")
 
 
 @attr.s(auto_attribs=True)
-class ChannelUpdateRequestMetadata:
-    """ """
+class Filter:
+    """
+    Attributes:
+        type (str):
+        label (str):
+        help_text (str):
+        fields (str):
+    """
 
+    type: str
+    label: str
+    help_text: str
+    fields: str
     additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
 
     def to_dict(self) -> Dict[str, Any]:
+        type = self.type
+        label = self.label
+        help_text = self.help_text
+        fields = self.fields
 
         field_dict: Dict[str, Any] = {}
         field_dict.update(self.additional_properties)
-        field_dict.update({})
+        field_dict.update(
+            {
+                "type": type,
+                "label": label,
+                "help_text": help_text,
+                "fields": fields,
+            }
+        )
 
         return field_dict
 
     @classmethod
     def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
         d = src_dict.copy()
-        channel_update_request_metadata = cls()
+        type = d.pop("type")
 
-        channel_update_request_metadata.additional_properties = d
-        return channel_update_request_metadata
+        label = d.pop("label")
+
+        help_text = d.pop("help_text")
+
+        fields = d.pop("fields")
+
+        filter_ = cls(
+            type=type,
+            label=label,
+            help_text=help_text,
+            fields=fields,
+        )
+
+        filter_.additional_properties = d
+        return filter_
 
     @property
     def additional_keys(self) -> List[str]:
diff --git a/funkwhale_api_client/models/get_library_follows_privacy_level.py b/funkwhale_api_client/models/get_library_follows_privacy_level.py
new file mode 100644
index 0000000000000000000000000000000000000000..b9ad936941c246b68ab69eb3916a780e81f12b93
--- /dev/null
+++ b/funkwhale_api_client/models/get_library_follows_privacy_level.py
@@ -0,0 +1,10 @@
+from enum import Enum
+
+
+class GetLibraryFollowsPrivacyLevel(str, Enum):
+    EVERYONE = "everyone"
+    INSTANCE = "instance"
+    ME = "me"
+
+    def __str__(self) -> str:
+        return str(self.value)
diff --git a/funkwhale_api_client/models/patched_channel_request.py b/funkwhale_api_client/models/patched_channel_request.py
new file mode 100644
index 0000000000000000000000000000000000000000..afcf9f608605b75a9781328dae8797ada9f67db7
--- /dev/null
+++ b/funkwhale_api_client/models/patched_channel_request.py
@@ -0,0 +1,175 @@
+import datetime
+import json
+from typing import Any, Dict, List, Tuple, Type, TypeVar, Union
+
+import attr
+from dateutil.parser import isoparse
+
+from ..models.api_actor_request import APIActorRequest
+from ..models.patched_channel_request_metadata import PatchedChannelRequestMetadata
+from ..models.simple_artist_request import SimpleArtistRequest
+from ..types import UNSET, Unset
+
+T = TypeVar("T", bound="PatchedChannelRequest")
+
+
+@attr.s(auto_attribs=True)
+class PatchedChannelRequest:
+    """
+    Attributes:
+        uuid (Union[Unset, str]):
+        artist (Union[Unset, SimpleArtistRequest]):
+        attributed_to (Union[Unset, APIActorRequest]):
+        creation_date (Union[Unset, datetime.datetime]):
+        metadata (Union[Unset, PatchedChannelRequestMetadata]):
+        rss_url (Union[Unset, str]):
+    """
+
+    uuid: Union[Unset, str] = UNSET
+    artist: Union[Unset, SimpleArtistRequest] = UNSET
+    attributed_to: Union[Unset, APIActorRequest] = UNSET
+    creation_date: Union[Unset, datetime.datetime] = UNSET
+    metadata: Union[Unset, PatchedChannelRequestMetadata] = UNSET
+    rss_url: Union[Unset, str] = UNSET
+    additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
+
+    def to_dict(self) -> Dict[str, Any]:
+        uuid = self.uuid
+        artist: Union[Unset, Dict[str, Any]] = UNSET
+        if not isinstance(self.artist, Unset):
+            artist = self.artist.to_dict()
+
+        attributed_to: Union[Unset, Dict[str, Any]] = UNSET
+        if not isinstance(self.attributed_to, Unset):
+            attributed_to = self.attributed_to.to_dict()
+
+        creation_date: Union[Unset, str] = UNSET
+        if not isinstance(self.creation_date, Unset):
+            creation_date = self.creation_date.isoformat()
+
+        metadata: Union[Unset, Dict[str, Any]] = UNSET
+        if not isinstance(self.metadata, Unset):
+            metadata = self.metadata.to_dict()
+
+        rss_url = self.rss_url
+
+        field_dict: Dict[str, Any] = {}
+        field_dict.update(self.additional_properties)
+        field_dict.update({})
+        if uuid is not UNSET:
+            field_dict["uuid"] = uuid
+        if artist is not UNSET:
+            field_dict["artist"] = artist
+        if attributed_to is not UNSET:
+            field_dict["attributed_to"] = attributed_to
+        if creation_date is not UNSET:
+            field_dict["creation_date"] = creation_date
+        if metadata is not UNSET:
+            field_dict["metadata"] = metadata
+        if rss_url is not UNSET:
+            field_dict["rss_url"] = rss_url
+
+        return field_dict
+
+    def to_multipart(self) -> Dict[str, Any]:
+        uuid = self.uuid if isinstance(self.uuid, Unset) else (None, str(self.uuid).encode(), "text/plain")
+        artist: Union[Unset, Tuple[None, bytes, str]] = UNSET
+        if not isinstance(self.artist, Unset):
+            artist = (None, json.dumps(self.artist.to_dict()).encode(), "application/json")
+
+        attributed_to: Union[Unset, Tuple[None, bytes, str]] = UNSET
+        if not isinstance(self.attributed_to, Unset):
+            attributed_to = (None, json.dumps(self.attributed_to.to_dict()).encode(), "application/json")
+
+        creation_date: Union[Unset, bytes] = UNSET
+        if not isinstance(self.creation_date, Unset):
+            creation_date = self.creation_date.isoformat().encode()
+
+        metadata: Union[Unset, Tuple[None, bytes, str]] = UNSET
+        if not isinstance(self.metadata, Unset):
+            metadata = (None, json.dumps(self.metadata.to_dict()).encode(), "application/json")
+
+        rss_url = self.rss_url if isinstance(self.rss_url, Unset) else (None, str(self.rss_url).encode(), "text/plain")
+
+        field_dict: Dict[str, Any] = {}
+        field_dict.update(
+            {key: (None, str(value).encode(), "text/plain") for key, value in self.additional_properties.items()}
+        )
+        field_dict.update({})
+        if uuid is not UNSET:
+            field_dict["uuid"] = uuid
+        if artist is not UNSET:
+            field_dict["artist"] = artist
+        if attributed_to is not UNSET:
+            field_dict["attributed_to"] = attributed_to
+        if creation_date is not UNSET:
+            field_dict["creation_date"] = creation_date
+        if metadata is not UNSET:
+            field_dict["metadata"] = metadata
+        if rss_url is not UNSET:
+            field_dict["rss_url"] = rss_url
+
+        return field_dict
+
+    @classmethod
+    def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
+        d = src_dict.copy()
+        uuid = d.pop("uuid", UNSET)
+
+        _artist = d.pop("artist", UNSET)
+        artist: Union[Unset, SimpleArtistRequest]
+        if isinstance(_artist, Unset):
+            artist = UNSET
+        else:
+            artist = SimpleArtistRequest.from_dict(_artist)
+
+        _attributed_to = d.pop("attributed_to", UNSET)
+        attributed_to: Union[Unset, APIActorRequest]
+        if isinstance(_attributed_to, Unset):
+            attributed_to = UNSET
+        else:
+            attributed_to = APIActorRequest.from_dict(_attributed_to)
+
+        _creation_date = d.pop("creation_date", UNSET)
+        creation_date: Union[Unset, datetime.datetime]
+        if isinstance(_creation_date, Unset):
+            creation_date = UNSET
+        else:
+            creation_date = isoparse(_creation_date)
+
+        _metadata = d.pop("metadata", UNSET)
+        metadata: Union[Unset, PatchedChannelRequestMetadata]
+        if isinstance(_metadata, Unset):
+            metadata = UNSET
+        else:
+            metadata = PatchedChannelRequestMetadata.from_dict(_metadata)
+
+        rss_url = d.pop("rss_url", UNSET)
+
+        patched_channel_request = cls(
+            uuid=uuid,
+            artist=artist,
+            attributed_to=attributed_to,
+            creation_date=creation_date,
+            metadata=metadata,
+            rss_url=rss_url,
+        )
+
+        patched_channel_request.additional_properties = d
+        return patched_channel_request
+
+    @property
+    def additional_keys(self) -> List[str]:
+        return list(self.additional_properties.keys())
+
+    def __getitem__(self, key: str) -> Any:
+        return self.additional_properties[key]
+
+    def __setitem__(self, key: str, value: Any) -> None:
+        self.additional_properties[key] = value
+
+    def __delitem__(self, key: str) -> None:
+        del self.additional_properties[key]
+
+    def __contains__(self, key: str) -> bool:
+        return key in self.additional_properties
diff --git a/funkwhale_api_client/models/channel_create_request_metadata.py b/funkwhale_api_client/models/patched_channel_request_metadata.py
similarity index 79%
rename from funkwhale_api_client/models/channel_create_request_metadata.py
rename to funkwhale_api_client/models/patched_channel_request_metadata.py
index 60aeb842c03e4aebb21eb299ca209c96aa1a792b..46d2e435a6249bd9c59bffeaed4dd88a87b03a58 100644
--- a/funkwhale_api_client/models/channel_create_request_metadata.py
+++ b/funkwhale_api_client/models/patched_channel_request_metadata.py
@@ -2,11 +2,11 @@ from typing import Any, Dict, List, Type, TypeVar
 
 import attr
 
-T = TypeVar("T", bound="ChannelCreateRequestMetadata")
+T = TypeVar("T", bound="PatchedChannelRequestMetadata")
 
 
 @attr.s(auto_attribs=True)
-class ChannelCreateRequestMetadata:
+class PatchedChannelRequestMetadata:
     """ """
 
     additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
@@ -22,10 +22,10 @@ class ChannelCreateRequestMetadata:
     @classmethod
     def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
         d = src_dict.copy()
-        channel_create_request_metadata = cls()
+        patched_channel_request_metadata = cls()
 
-        channel_create_request_metadata.additional_properties = d
-        return channel_create_request_metadata
+        patched_channel_request_metadata.additional_properties = d
+        return patched_channel_request_metadata
 
     @property
     def additional_keys(self) -> List[str]:
diff --git a/funkwhale_api_client/models/patched_channel_update_request.py b/funkwhale_api_client/models/patched_channel_update_request.py
deleted file mode 100644
index c0f5de0416aa54c9c4cd4de7155c3e7343038904..0000000000000000000000000000000000000000
--- a/funkwhale_api_client/models/patched_channel_update_request.py
+++ /dev/null
@@ -1,173 +0,0 @@
-import json
-from typing import Any, Dict, List, Tuple, Type, TypeVar, Union, cast
-
-import attr
-
-from ..models.content_category_enum import ContentCategoryEnum
-from ..models.content_request import ContentRequest
-from ..models.patched_channel_update_request_metadata import PatchedChannelUpdateRequestMetadata
-from ..types import UNSET, Unset
-
-T = TypeVar("T", bound="PatchedChannelUpdateRequest")
-
-
-@attr.s(auto_attribs=True)
-class PatchedChannelUpdateRequest:
-    """
-    Attributes:
-        cover (Union[Unset, None, str]):
-        name (Union[Unset, str]):
-        description (Union[Unset, None, ContentRequest]):
-        tags (Union[Unset, List[str]]):
-        content_category (Union[Unset, ContentCategoryEnum]):
-        metadata (Union[Unset, PatchedChannelUpdateRequestMetadata]):
-    """
-
-    cover: Union[Unset, None, str] = UNSET
-    name: Union[Unset, str] = UNSET
-    description: Union[Unset, None, ContentRequest] = UNSET
-    tags: Union[Unset, List[str]] = UNSET
-    content_category: Union[Unset, ContentCategoryEnum] = UNSET
-    metadata: Union[Unset, PatchedChannelUpdateRequestMetadata] = UNSET
-    additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
-
-    def to_dict(self) -> Dict[str, Any]:
-        cover = self.cover
-        name = self.name
-        description: Union[Unset, None, Dict[str, Any]] = UNSET
-        if not isinstance(self.description, Unset):
-            description = self.description.to_dict() if self.description else None
-
-        tags: Union[Unset, List[str]] = UNSET
-        if not isinstance(self.tags, Unset):
-            tags = self.tags
-
-        content_category: Union[Unset, str] = UNSET
-        if not isinstance(self.content_category, Unset):
-            content_category = self.content_category.value
-
-        metadata: Union[Unset, Dict[str, Any]] = UNSET
-        if not isinstance(self.metadata, Unset):
-            metadata = self.metadata.to_dict()
-
-        field_dict: Dict[str, Any] = {}
-        field_dict.update(self.additional_properties)
-        field_dict.update({})
-        if cover is not UNSET:
-            field_dict["cover"] = cover
-        if name is not UNSET:
-            field_dict["name"] = name
-        if description is not UNSET:
-            field_dict["description"] = description
-        if tags is not UNSET:
-            field_dict["tags"] = tags
-        if content_category is not UNSET:
-            field_dict["content_category"] = content_category
-        if metadata is not UNSET:
-            field_dict["metadata"] = metadata
-
-        return field_dict
-
-    def to_multipart(self) -> Dict[str, Any]:
-        cover = self.cover if isinstance(self.cover, Unset) else (None, str(self.cover).encode(), "text/plain")
-        name = self.name if isinstance(self.name, Unset) else (None, str(self.name).encode(), "text/plain")
-        description: Union[Unset, Tuple[None, bytes, str]] = UNSET
-        if not isinstance(self.description, Unset):
-            description = (
-                (None, json.dumps(self.description.to_dict()).encode(), "application/json")
-                if self.description
-                else None
-            )
-
-        tags: Union[Unset, Tuple[None, bytes, str]] = UNSET
-        if not isinstance(self.tags, Unset):
-            _temp_tags = self.tags
-            tags = (None, json.dumps(_temp_tags).encode(), "application/json")
-
-        content_category: Union[Unset, Tuple[None, bytes, str]] = UNSET
-        if not isinstance(self.content_category, Unset):
-            content_category = (None, str(self.content_category.value).encode(), "text/plain")
-
-        metadata: Union[Unset, Tuple[None, bytes, str]] = UNSET
-        if not isinstance(self.metadata, Unset):
-            metadata = (None, json.dumps(self.metadata.to_dict()).encode(), "application/json")
-
-        field_dict: Dict[str, Any] = {}
-        field_dict.update(
-            {key: (None, str(value).encode(), "text/plain") for key, value in self.additional_properties.items()}
-        )
-        field_dict.update({})
-        if cover is not UNSET:
-            field_dict["cover"] = cover
-        if name is not UNSET:
-            field_dict["name"] = name
-        if description is not UNSET:
-            field_dict["description"] = description
-        if tags is not UNSET:
-            field_dict["tags"] = tags
-        if content_category is not UNSET:
-            field_dict["content_category"] = content_category
-        if metadata is not UNSET:
-            field_dict["metadata"] = metadata
-
-        return field_dict
-
-    @classmethod
-    def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
-        d = src_dict.copy()
-        cover = d.pop("cover", UNSET)
-
-        name = d.pop("name", UNSET)
-
-        _description = d.pop("description", UNSET)
-        description: Union[Unset, None, ContentRequest]
-        if _description is None:
-            description = None
-        elif isinstance(_description, Unset):
-            description = UNSET
-        else:
-            description = ContentRequest.from_dict(_description)
-
-        tags = cast(List[str], d.pop("tags", UNSET))
-
-        _content_category = d.pop("content_category", UNSET)
-        content_category: Union[Unset, ContentCategoryEnum]
-        if isinstance(_content_category, Unset):
-            content_category = UNSET
-        else:
-            content_category = ContentCategoryEnum(_content_category)
-
-        _metadata = d.pop("metadata", UNSET)
-        metadata: Union[Unset, PatchedChannelUpdateRequestMetadata]
-        if isinstance(_metadata, Unset):
-            metadata = UNSET
-        else:
-            metadata = PatchedChannelUpdateRequestMetadata.from_dict(_metadata)
-
-        patched_channel_update_request = cls(
-            cover=cover,
-            name=name,
-            description=description,
-            tags=tags,
-            content_category=content_category,
-            metadata=metadata,
-        )
-
-        patched_channel_update_request.additional_properties = d
-        return patched_channel_update_request
-
-    @property
-    def additional_keys(self) -> List[str]:
-        return list(self.additional_properties.keys())
-
-    def __getitem__(self, key: str) -> Any:
-        return self.additional_properties[key]
-
-    def __setitem__(self, key: str, value: Any) -> None:
-        self.additional_properties[key] = value
-
-    def __delitem__(self, key: str) -> None:
-        del self.additional_properties[key]
-
-    def __contains__(self, key: str) -> bool:
-        return key in self.additional_properties
diff --git a/funkwhale_api_client/models/patched_channel_update_request_metadata.py b/funkwhale_api_client/models/patched_channel_update_request_metadata.py
deleted file mode 100644
index 38b7c7d1957723d8a8fafa6fdf5cb4b35c3af692..0000000000000000000000000000000000000000
--- a/funkwhale_api_client/models/patched_channel_update_request_metadata.py
+++ /dev/null
@@ -1,44 +0,0 @@
-from typing import Any, Dict, List, Type, TypeVar
-
-import attr
-
-T = TypeVar("T", bound="PatchedChannelUpdateRequestMetadata")
-
-
-@attr.s(auto_attribs=True)
-class PatchedChannelUpdateRequestMetadata:
-    """ """
-
-    additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
-
-    def to_dict(self) -> Dict[str, Any]:
-
-        field_dict: Dict[str, Any] = {}
-        field_dict.update(self.additional_properties)
-        field_dict.update({})
-
-        return field_dict
-
-    @classmethod
-    def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
-        d = src_dict.copy()
-        patched_channel_update_request_metadata = cls()
-
-        patched_channel_update_request_metadata.additional_properties = d
-        return patched_channel_update_request_metadata
-
-    @property
-    def additional_keys(self) -> List[str]:
-        return list(self.additional_properties.keys())
-
-    def __getitem__(self, key: str) -> Any:
-        return self.additional_properties[key]
-
-    def __setitem__(self, key: str, value: Any) -> None:
-        self.additional_properties[key] = value
-
-    def __delitem__(self, key: str) -> None:
-        del self.additional_properties[key]
-
-    def __contains__(self, key: str) -> bool:
-        return key in self.additional_properties