From 0a9e931c7bdcb8139a051330cc281be510d1ea28 Mon Sep 17 00:00:00 2001
From: Georg Krause <mail@georg-krause.net>
Date: Tue, 27 Sep 2022 13:51:12 +0200
Subject: [PATCH] Update lib with named actions

---
 .../{activity_list.py => get_activity.py}     |   0
 .../api/albums/albums_fetches_retrieve.py     | 133 -----
 .../api/albums/albums_libraries_retrieve.py   | 133 -----
 .../api/albums/albums_mutations_retrieve.py   | 133 -----
 .../{albums_create.py => create_album.py}     |   0
 ...etches_create.py => create_album_fetch.py} |  24 +-
 ...ons_create.py => create_album_mutation.py} |  24 +-
 .../{albums_destroy.py => delete_album.py}    |   0
 .../{albums_retrieve.py => get_album.py}      |   0
 .../api/albums/get_album_fetches.py           | 381 +++++++++++++++
 .../api/albums/get_album_libraries.py         | 381 +++++++++++++++
 .../api/albums/get_album_mutations.py         | 381 +++++++++++++++
 .../albums/{albums_list.py => get_albums.py}  |  20 +-
 .../api/artists/artists_fetches_retrieve.py   | 133 -----
 .../api/artists/artists_libraries_retrieve.py | 133 -----
 .../api/artists/artists_mutations_retrieve.py | 133 -----
 ...tches_create.py => create_artist_fetch.py} |  24 +-
 ...ns_create.py => create_artist_mutation.py} |  24 +-
 .../{artists_retrieve.py => get_artist.py}    |   0
 .../api/artists/get_artist_fetches.py         | 426 ++++++++++++++++
 .../api/artists/get_artist_libraries.py       | 426 ++++++++++++++++
 .../api/artists/get_artist_mutations.py       | 426 ++++++++++++++++
 .../{artists_list.py => get_artists.py}       |  20 +-
 ...chments_create.py => create_attachment.py} |   0
 ...hments_destroy.py => delete_attachment.py} |   0
 ...achments_retrieve.py => get_attachment.py} |   0
 ...xy_retrieve.py => get_attachment_proxy.py} |   0
 ...rd_change_create.py => change_password.py} |   0
 ...assword_create.py => change_password_2.py} |   0
 ...rm_create.py => confirm_password_reset.py} |   0
 ...auth_user_retrieve.py => get_auth_user.py} |   0
 ..._update.py => partial_update_auth_user.py} |   0
 ...uth_registration_create.py => register.py} |   0
 ...word_reset_create.py => reset_password.py} |   0
 ...uth_user_update.py => update_auth_user.py} |   0
 ...verify_email_create.py => verify_email.py} |   0
 .../{channels_create.py => create_channel.py} |   0
 ...{channels_destroy.py => delete_channel.py} |   0
 .../{channels_retrieve.py => get_channel.py}  |   0
 ...eve.py => get_channel_metadata_choices.py} |   0
 ...els_rss_retrieve.py => get_channel_rss.py} |   0
 .../{channels_list.py => get_channels.py}     |  20 +-
 ...al_update.py => partial_update_channel.py} |   0
 ...bscribe_create.py => subscribe_channel.py} |   0
 ...ibe_create.py => subscribe_channel_rss.py} |   0
 ...ribe_destroy.py => unsubscribe_channel.py} |   0
 ...ibe_create.py => unsubscribe_channel_2.py} |   0
 .../{channels_update.py => update_channel.py} |   0
 ...ks_destroy.py => delete_favorite_track.py} |   0
 ...tes_tracks_create.py => favorite_track.py} |   0
 ...retrieve.py => get_all_favorite_tracks.py} |   0
 ..._tracks_list.py => get_favorite_tracks.py} |   0
 ..._remove_destroy.py => unfavorite_track.py} |   0
 ...remove_create.py => unfavorite_track_2.py} |   0
 ...py => accept_federation_library_follow.py} |   0
 ...s_create.py => create_federation_fetch.py} |   0
 ...e.py => create_federation_inbox_action.py} |   0
 ....py => create_federation_library_fetch.py} |   0
 ...py => create_federation_library_follow.py} |   0
 ...e.py => create_federation_library_scan.py} |   0
 ...py => delete_federation_library_follow.py} |   0
 ... => get_all_federation_library_follows.py} |   0
 ...rs_retrieve.py => get_federation_actor.py} |   0
 ...eve.py => get_federation_actor_library.py} |   0
 ...s_retrieve.py => get_federation_domain.py} |   0
 ...ains_list.py => get_federation_domains.py} |   0
 ...es_retrieve.py => get_federation_fetch.py} |   0
 ...ox_retrieve.py => get_federation_inbox.py} |   0
 ...nbox_list.py => get_federation_inboxes.py} |   0
 ..._retrieve.py => get_federation_library.py} |   0
 ...ve.py => get_federation_library_follow.py} |   0
 ...t.py => get_federation_library_follows.py} |   0
 ....py => partial_update_federation_inbox.py} |   0
 ...py => reject_federation_library_follow.py} |   0
 ...x_update.py => update_federation_inbox.py} |   0
 ..._create.py => create_history_listening.py} |   0
 ...s_retrieve.py => get_history_listening.py} |   0
 ...ings_list.py => get_history_listenings.py} |   0
 ... => create_instance_admin_setting_bulk.py} |   0
 ...rieve.py => get_instance_admin_setting.py} |   0
 ...list.py => get_instance_admin_settings.py} |   0
 ...trieve.py => get_instance_nodeinfo_2_0.py} |   0
 ...s_retrieve.py => get_instance_settings.py} |   0
 ...t_json_retrieve.py => get_spa_manifest.py} |   0
 ... partial_update_instance_admin_setting.py} |   0
 ...te.py => update_instance_admin_setting.py} |   0
 ...{libraries_create.py => create_library.py} |   0
 ..._create.py => create_library_fs_import.py} |   0
 ...libraries_destroy.py => delete_library.py} |   0
 ...destroy.py => delete_library_fs_import.py} |   0
 .../{libraries_list.py => get_libraries.py}   |  20 +-
 .../{libraries_retrieve.py => get_library.py} |   0
 ...lows_retrieve.py => get_library_follow.py} |   0
 ...t_retrieve.py => get_library_fs_import.py} |   0
 ...al_update.py => partial_update_library.py} |   0
 ...{libraries_update.py => update_library.py} |   0
 .../{licenses_retrieve.py => get_license.py}  |   0
 .../{licenses_list.py => get_licenses.py}     |   0
 .../{listen_retrieve.py => get_listen.py}     |   0
 ...eate.py => admin_create_account_action.py} |   0
 ...create.py => admin_create_album_action.py} |   0
 ...reate.py => admin_create_artist_action.py} |   0
 ...e.py => admin_create_federation_domain.py} |   0
 ... admin_create_federation_domain_action.py} |   0
 ...s_create.py => admin_create_invitation.py} |   0
 ...e.py => admin_create_invitation_action.py} |   0
 ...eate.py => admin_create_library_action.py} |   0
 ...age_tags_create.py => admin_create_tag.py} |   0
 ...n_create.py => admin_create_tag_action.py} |   0
 ...create.py => admin_create_track_action.py} |   0
 ...reate.py => admin_create_upload_action.py} |   0
 ...lbums_destroy.py => admin_delete_album.py} |   0
 ...ists_destroy.py => admin_delete_artist.py} |   0
 ...els_destroy.py => admin_delete_channel.py} |   0
 ...ies_destroy.py => admin_delete_library.py} |   0
 ...ge_tags_destroy.py => admin_delete_tag.py} |   0
 ...racks_destroy.py => admin_delete_track.py} |   0
 ...oads_destroy.py => admin_delete_upload.py} |   0
 ...ounts_retrieve.py => admin_get_account.py} |   0
 ...retrieve.py => admin_get_account_stats.py} |   0
 ...accounts_list.py => admin_get_accounts.py} |  20 +-
 ..._albums_retrieve.py => admin_get_album.py} |   0
 ...ary_albums_list.py => admin_get_albums.py} |   0
 ...rtists_retrieve.py => admin_get_artist.py} |   0
 ...y_artists_list.py => admin_get_artists.py} |  20 +-
 ...nnels_retrieve.py => admin_get_channel.py} |   0
 ...retrieve.py => admin_get_channel_stats.py} |   0
 ...channels_list.py => admin_get_channels.py} |   0
 ...ieve.py => admin_get_federation_domain.py} |   0
 ...> admin_get_federation_domain_nodeinfo.py} |   0
 ...y => admin_get_federation_domain_stats.py} |   0
 ...ist.py => admin_get_federation_domains.py} |   0
 ...ns_retrieve.py => admin_get_invitation.py} |   0
 ...tions_list.py => admin_get_invitations.py} |   0
 ...braries_list.py => admin_get_libraries.py} |  40 +-
 ...aries_retrieve.py => admin_get_library.py} |   0
 ...ve.py => admin_get_library_album_stats.py} |   0
 ...e.py => admin_get_library_artist_stats.py} |   0
 ...retrieve.py => admin_get_library_stats.py} |   0
 ...nage_tags_retrieve.py => admin_get_tag.py} |   0
 ...{manage_tags_list.py => admin_get_tags.py} |   0
 ..._tracks_retrieve.py => admin_get_track.py} |   0
 ...s_retrieve.py => admin_get_track_stats.py} |   0
 ...ary_tracks_list.py => admin_get_tracks.py} |   0
 ...ploads_retrieve.py => admin_get_upload.py} |   0
 ...y_uploads_list.py => admin_get_uploads.py} |  40 +-
 ...rs_users_retrieve.py => admin_get_user.py} |   0
 ...users_users_list.py => admin_get_users.py} |  20 +-
 ...admin_partial_update_federation_domain.py} |   0
 ....py => admin_partial_update_invitation.py} |   0
 ...ate.py => admin_partial_update_library.py} |   0
 ...update.py => admin_partial_update_user.py} |   0
 ...e.py => admin_update_federation_domain.py} |   0
 ...s_update.py => admin_update_invitation.py} |   0
 ...ries_update.py => admin_update_library.py} |   0
 ...s_users_update.py => admin_update_user.py} |   0
 ...y => moderation_create_instance_policy.py} |   0
 ...es_create.py => moderation_create_note.py} |   0
 ...y => moderation_delete_instance_policy.py} |   0
 ...s_destroy.py => moderation_delete_note.py} |   0
 ...py => moderation_get_instance_policies.py} |   0
 ...e.py => moderation_get_instance_policy.py} |   0
 ...tes_retrieve.py => moderation_get_note.py} |   0
 ..._notes_list.py => moderation_get_notes.py} |   0
 ...s_retrieve.py => moderation_get_report.py} |   0
 ...orts_list.py => moderation_get_reports.py} |  20 +-
 ..._retrieve.py => moderation_get_request.py} |   0
 ...sts_list.py => moderation_get_requests.py} |  40 +-
 ...eration_partial_update_instance_policy.py} |   0
 ...py => moderation_partial_update_report.py} |   0
 ...y => moderation_partial_update_request.py} |   0
 ...y => moderation_update_instance_policy.py} |   0
 ..._update.py => moderation_update_report.py} |   0
 ...update.py => moderation_update_request.py} |   0
 ...py => create_moderation_content_filter.py} |   0
 ..._create.py => create_moderation_report.py} |   0
 ...py => delete_moderation_content_filter.py} |   0
 ...ve.py => get_moderation_content_filter.py} |   0
 ...t.py => get_moderation_content_filters.py} |   0
 ...uth_apps_create.py => create_oauth_app.py} |   0
 ...ze_create.py => create_oauth_authorize.py} |   0
 ...th_apps_destroy.py => delete_oauth_app.py} |   0
 ...rants_destroy.py => delete_oauth_grant.py} |   0
 ...auth_apps_retrieve.py => get_oauth_app.py} |   0
 .../{oauth_apps_list.py => get_oauth_apps.py} |   0
 ...ize_retrieve.py => get_oauth_authorize.py} |   0
 ..._grants_retrieve.py => get_oauth_grant.py} |   0
 ...uth_grants_list.py => get_oauth_grants.py} |   0
 ..._update.py => partial_update_oauth_app.py} |   0
 ...token_create.py => refresh_oauth_token.py} |   0
 ...uth_apps_update.py => update_oauth_app.py} |   0
 ...ze_update.py => update_oauth_authorize.py} |   0
 .../{oembed_retrieve.py => get_oembed.py}     |   0
 ...lists_add_create.py => add_to_playlist.py} |  48 +-
 ...sts_clear_destroy.py => clear_playlist.py} |   0
 ...playlists_create.py => create_playlist.py} |   0
 ...laylists_destroy.py => delete_playlist.py} |   0
 ...{playlists_retrieve.py => get_playlist.py} |   0
 .../api/playlists/get_playlist_tracks.py      | 302 ++++++++++++
 .../{playlists_list.py => get_playlists.py}   |   0
 ...l_update.py => partial_update_playlist.py} |   0
 .../playlists/playlists_tracks_retrieve.py    | 133 -----
 ...ove_destroy.py => remove_from_playlist.py} |   0
 ...ve_create.py => remove_from_playlist_2.py} |   0
 ...create.py => reorder_track_in_playlist.py} |   0
 ...playlists_update.py => update_playlist.py} |   0
 .../{plugins_create.py => create_plugin.py}   |   0
 ...s_scan_create.py => create_plugin_scan.py} |   0
 ...ns_disable_create.py => disable_plugin.py} |   0
 ...gins_enable_create.py => enable_plugin.py} |   0
 .../{plugins_retrieve.py => get_plugin.py}    |   0
 .../{plugins_list.py => get_plugins.py}       |   0
 ...adios_radios_create.py => create_radio.py} |   0
 ...ions_create.py => create_radio_session.py} |   0
 ...dios_radios_destroy.py => delete_radio.py} |   0
 ...acks_create.py => get_next_radio_track.py} |   0
 ...radios_radios_retrieve.py => get_radio.py} |   0
 ...ilters_retrieve.py => get_radio_filter.py} |   0
 ...sions_retrieve.py => get_radio_session.py} |   0
 ..._tracks_retrieve.py => get_radio_track.py} |   0
 .../{radios_radios_list.py => get_radios.py}  |   0
 ...tial_update.py => partial_update_radio.py} |   0
 ...adios_radios_update.py => update_radio.py} |   0
 ...s_validate_create.py => validate_radio.py} |   0
 ...te_limit_retrieve.py => get_rate_limit.py} |   0
 ...arch_retrieve.py => get_search_results.py} |   0
 .../{stream_retrieve.py => get_stream.py}     |   0
 ...l_retrieve.py => get_all_subscriptions.py} |   0
 ...ptions_retrieve.py => get_subscription.py} |   0
 ...criptions_list.py => get_subscriptions.py} |   0
 .../api/tags/{tags_retrieve.py => get_tag.py} |   0
 .../api/tags/{tags_list.py => get_tags.py}    |  20 +-
 ...text_preview_create.py => preview_text.py} |   0
 ...etches_create.py => create_track_fetch.py} |  24 +-
 ...ons_create.py => create_track_mutation.py} |  24 +-
 .../{tracks_destroy.py => delete_track.py}    |   0
 .../{tracks_retrieve.py => get_track.py}      |   0
 .../api/tracks/get_track_fetches.py           | 460 ++++++++++++++++++
 .../api/tracks/get_track_libraries.py         | 460 ++++++++++++++++++
 .../api/tracks/get_track_mutations.py         | 460 ++++++++++++++++++
 .../tracks/{tracks_list.py => get_tracks.py}  |  20 +-
 .../api/tracks/tracks_fetches_retrieve.py     | 137 ------
 .../api/tracks/tracks_libraries_retrieve.py   | 137 ------
 .../api/tracks/tracks_mutations_retrieve.py   | 137 ------
 .../{uploads_create.py => create_upload.py}   |   0
 ...tion_create.py => create_upload_action.py} |   0
 .../{uploads_destroy.py => delete_upload.py}  |   0
 .../{uploads_retrieve.py => get_upload.py}    |   0
 ...ata_retrieve.py => get_upload_metadata.py} |   0
 .../{uploads_list.py => get_uploads.py}       |  20 +-
 ...ial_update.py => partial_update_upload.py} |   0
 .../{uploads_update.py => update_upload.py}   |   0
 ...change_email_create.py => change_email.py} |   0
 ...reate.py => create_user_subsonic_token.py} |   0
 ...estroy.py => delete_authenticated_user.py} |   0
 ...stroy.py => delete_user_subsonic_token.py} |   0
 ..._retrieve.py => get_authenticated_user.py} |   0
 ...retrieve.py => get_user_subsonic_token.py} |   0
 ...rtial_update.py => partial_update_user.py} |   0
 ..._settings_create.py => update_settings.py} |   0
 .../users/{users_update.py => update_user.py} |   0
 .../users/users_users_change_email_create.py  | 161 ------
 .../api/users/users_users_me_destroy.py       |  75 ---
 .../api/users/users_users_me_retrieve.py      | 116 -----
 .../api/users/users_users_partial_update.py   | 174 -------
 .../api/users/users_users_settings_create.py  | 165 -------
 .../users_users_subsonic_token_create.py      | 174 -------
 .../users_users_subsonic_token_destroy.py     |  84 ----
 .../users_users_subsonic_token_retrieve.py    | 133 -----
 .../api/users/users_users_update.py           | 174 -------
 funkwhale_api_client/models/__init__.py       |  53 +-
 ...ist_type.py => admin_get_accounts_type.py} |   2 +-
 ... => admin_get_artists_content_category.py} |   2 +-
 ...y => admin_get_libraries_ordering_item.py} |   2 +-
 ...y => admin_get_libraries_privacy_level.py} |   2 +-
 ....py => admin_get_uploads_import_status.py} |   2 +-
 ....py => admin_get_uploads_ordering_item.py} |   2 +-
 ...el.py => admin_get_users_privacy_level.py} |   2 +-
 funkwhale_api_client/models/api_mutation.py   | 171 +++++++
 .../models/api_mutation_payload.py            |  44 ++
 .../models/api_mutation_previous_state.py     |  44 ++
 .../models/api_mutation_target.py             |  44 ++
 .../models/get_album_fetches_ordering_item.py |  19 +
 .../get_album_libraries_ordering_item.py      |  19 +
 .../get_album_mutations_ordering_item.py      |  19 +
 ...ng_item.py => get_albums_ordering_item.py} |   2 +-
 .../get_artist_fetches_ordering_item.py       |  19 +
 .../get_artist_libraries_ordering_item.py     |  19 +
 .../get_artist_mutations_ordering_item.py     |  19 +
 ...g_item.py => get_artists_ordering_item.py} |   2 +-
 ..._item.py => get_channels_ordering_item.py} |   2 +-
 ...evel.py => get_libraries_privacy_level.py} |   2 +-
 ...ring_item.py => get_tags_ordering_item.py} |   2 +-
 .../models/get_track_fetches_ordering_item.py |  29 ++
 .../get_track_libraries_ordering_item.py      |  29 ++
 .../get_track_mutations_ordering_item.py      |  29 ++
 ...ng_item.py => get_tracks_ordering_item.py} |   2 +-
 ...s.py => get_uploads_import_status_item.py} |   2 +-
 ...type.py => moderation_get_reports_type.py} |   2 +-
 ...s.py => moderation_get_requests_status.py} |   2 +-
 ...ype.py => moderation_get_requests_type.py} |   2 +-
 .../models/paginated_api_mutation_list.py     |  93 ++++
 .../models/paginated_fetch_list.py            |  93 ++++
 .../models/paginated_library_list.py          |  93 ++++
 .../models/paginated_playlist_track_list.py   |  93 ++++
 .../models/playlist_add_many_request.py       |  93 ++++
 funkwhale_api_client/models/playlist_track.py |  84 ++++
 307 files changed, 5475 insertions(+), 2898 deletions(-)
 rename funkwhale_api_client/api/activity/{activity_list.py => get_activity.py} (100%)
 delete mode 100644 funkwhale_api_client/api/albums/albums_fetches_retrieve.py
 delete mode 100644 funkwhale_api_client/api/albums/albums_libraries_retrieve.py
 delete mode 100644 funkwhale_api_client/api/albums/albums_mutations_retrieve.py
 rename funkwhale_api_client/api/albums/{albums_create.py => create_album.py} (100%)
 rename funkwhale_api_client/api/albums/{albums_fetches_create.py => create_album_fetch.py} (88%)
 rename funkwhale_api_client/api/albums/{albums_mutations_create.py => create_album_mutation.py} (87%)
 rename funkwhale_api_client/api/albums/{albums_destroy.py => delete_album.py} (100%)
 rename funkwhale_api_client/api/albums/{albums_retrieve.py => get_album.py} (100%)
 create mode 100644 funkwhale_api_client/api/albums/get_album_fetches.py
 create mode 100644 funkwhale_api_client/api/albums/get_album_libraries.py
 create mode 100644 funkwhale_api_client/api/albums/get_album_mutations.py
 rename funkwhale_api_client/api/albums/{albums_list.py => get_albums.py} (93%)
 delete mode 100644 funkwhale_api_client/api/artists/artists_fetches_retrieve.py
 delete mode 100644 funkwhale_api_client/api/artists/artists_libraries_retrieve.py
 delete mode 100644 funkwhale_api_client/api/artists/artists_mutations_retrieve.py
 rename funkwhale_api_client/api/artists/{artists_fetches_create.py => create_artist_fetch.py} (86%)
 rename funkwhale_api_client/api/artists/{artists_mutations_create.py => create_artist_mutation.py} (86%)
 rename funkwhale_api_client/api/artists/{artists_retrieve.py => get_artist.py} (100%)
 create mode 100644 funkwhale_api_client/api/artists/get_artist_fetches.py
 create mode 100644 funkwhale_api_client/api/artists/get_artist_libraries.py
 create mode 100644 funkwhale_api_client/api/artists/get_artist_mutations.py
 rename funkwhale_api_client/api/artists/{artists_list.py => get_artists.py} (94%)
 rename funkwhale_api_client/api/attachments/{attachments_create.py => create_attachment.py} (100%)
 rename funkwhale_api_client/api/attachments/{attachments_destroy.py => delete_attachment.py} (100%)
 rename funkwhale_api_client/api/attachments/{attachments_retrieve.py => get_attachment.py} (100%)
 rename funkwhale_api_client/api/attachments/{attachments_proxy_retrieve.py => get_attachment_proxy.py} (100%)
 rename funkwhale_api_client/api/auth/{auth_password_change_create.py => change_password.py} (100%)
 rename funkwhale_api_client/api/auth/{auth_registration_change_password_create.py => change_password_2.py} (100%)
 rename funkwhale_api_client/api/auth/{auth_password_reset_confirm_create.py => confirm_password_reset.py} (100%)
 rename funkwhale_api_client/api/auth/{auth_user_retrieve.py => get_auth_user.py} (100%)
 rename funkwhale_api_client/api/auth/{auth_user_partial_update.py => partial_update_auth_user.py} (100%)
 rename funkwhale_api_client/api/auth/{auth_registration_create.py => register.py} (100%)
 rename funkwhale_api_client/api/auth/{auth_password_reset_create.py => reset_password.py} (100%)
 rename funkwhale_api_client/api/auth/{auth_user_update.py => update_auth_user.py} (100%)
 rename funkwhale_api_client/api/auth/{auth_registration_verify_email_create.py => verify_email.py} (100%)
 rename funkwhale_api_client/api/channels/{channels_create.py => create_channel.py} (100%)
 rename funkwhale_api_client/api/channels/{channels_destroy.py => delete_channel.py} (100%)
 rename funkwhale_api_client/api/channels/{channels_retrieve.py => get_channel.py} (100%)
 rename funkwhale_api_client/api/channels/{channels_metadata_choices_retrieve.py => get_channel_metadata_choices.py} (100%)
 rename funkwhale_api_client/api/channels/{channels_rss_retrieve.py => get_channel_rss.py} (100%)
 rename funkwhale_api_client/api/channels/{channels_list.py => get_channels.py} (91%)
 rename funkwhale_api_client/api/channels/{channels_partial_update.py => partial_update_channel.py} (100%)
 rename funkwhale_api_client/api/channels/{channels_subscribe_create.py => subscribe_channel.py} (100%)
 rename funkwhale_api_client/api/channels/{channels_rss_subscribe_create.py => subscribe_channel_rss.py} (100%)
 rename funkwhale_api_client/api/channels/{channels_unsubscribe_destroy.py => unsubscribe_channel.py} (100%)
 rename funkwhale_api_client/api/channels/{channels_unsubscribe_create.py => unsubscribe_channel_2.py} (100%)
 rename funkwhale_api_client/api/channels/{channels_update.py => update_channel.py} (100%)
 rename funkwhale_api_client/api/favorites/{favorites_tracks_destroy.py => delete_favorite_track.py} (100%)
 rename funkwhale_api_client/api/favorites/{favorites_tracks_create.py => favorite_track.py} (100%)
 rename funkwhale_api_client/api/favorites/{favorites_tracks_all_retrieve.py => get_all_favorite_tracks.py} (100%)
 rename funkwhale_api_client/api/favorites/{favorites_tracks_list.py => get_favorite_tracks.py} (100%)
 rename funkwhale_api_client/api/favorites/{favorites_tracks_remove_destroy.py => unfavorite_track.py} (100%)
 rename funkwhale_api_client/api/favorites/{favorites_tracks_remove_create.py => unfavorite_track_2.py} (100%)
 rename funkwhale_api_client/api/federation/{federation_follows_library_accept_create.py => accept_federation_library_follow.py} (100%)
 rename funkwhale_api_client/api/federation/{federation_fetches_create.py => create_federation_fetch.py} (100%)
 rename funkwhale_api_client/api/federation/{federation_inbox_action_create.py => create_federation_inbox_action.py} (100%)
 rename funkwhale_api_client/api/federation/{federation_libraries_fetch_create.py => create_federation_library_fetch.py} (100%)
 rename funkwhale_api_client/api/federation/{federation_follows_library_create.py => create_federation_library_follow.py} (100%)
 rename funkwhale_api_client/api/federation/{federation_libraries_scan_create.py => create_federation_library_scan.py} (100%)
 rename funkwhale_api_client/api/federation/{federation_follows_library_destroy.py => delete_federation_library_follow.py} (100%)
 rename funkwhale_api_client/api/federation/{federation_follows_library_all_retrieve.py => get_all_federation_library_follows.py} (100%)
 rename funkwhale_api_client/api/federation/{federation_actors_retrieve.py => get_federation_actor.py} (100%)
 rename funkwhale_api_client/api/federation/{federation_actors_libraries_retrieve.py => get_federation_actor_library.py} (100%)
 rename funkwhale_api_client/api/federation/{federation_domains_retrieve.py => get_federation_domain.py} (100%)
 rename funkwhale_api_client/api/federation/{federation_domains_list.py => get_federation_domains.py} (100%)
 rename funkwhale_api_client/api/federation/{federation_fetches_retrieve.py => get_federation_fetch.py} (100%)
 rename funkwhale_api_client/api/federation/{federation_inbox_retrieve.py => get_federation_inbox.py} (100%)
 rename funkwhale_api_client/api/federation/{federation_inbox_list.py => get_federation_inboxes.py} (100%)
 rename funkwhale_api_client/api/federation/{federation_libraries_retrieve.py => get_federation_library.py} (100%)
 rename funkwhale_api_client/api/federation/{federation_follows_library_retrieve.py => get_federation_library_follow.py} (100%)
 rename funkwhale_api_client/api/federation/{federation_follows_library_list.py => get_federation_library_follows.py} (100%)
 rename funkwhale_api_client/api/federation/{federation_inbox_partial_update.py => partial_update_federation_inbox.py} (100%)
 rename funkwhale_api_client/api/federation/{federation_follows_library_reject_create.py => reject_federation_library_follow.py} (100%)
 rename funkwhale_api_client/api/federation/{federation_inbox_update.py => update_federation_inbox.py} (100%)
 rename funkwhale_api_client/api/history/{history_listenings_create.py => create_history_listening.py} (100%)
 rename funkwhale_api_client/api/history/{history_listenings_retrieve.py => get_history_listening.py} (100%)
 rename funkwhale_api_client/api/history/{history_listenings_list.py => get_history_listenings.py} (100%)
 rename funkwhale_api_client/api/instance/{instance_admin_settings_bulk_create.py => create_instance_admin_setting_bulk.py} (100%)
 rename funkwhale_api_client/api/instance/{instance_admin_settings_retrieve.py => get_instance_admin_setting.py} (100%)
 rename funkwhale_api_client/api/instance/{instance_admin_settings_list.py => get_instance_admin_settings.py} (100%)
 rename funkwhale_api_client/api/instance/{instance_nodeinfo_2_0_retrieve.py => get_instance_nodeinfo_2_0.py} (100%)
 rename funkwhale_api_client/api/instance/{instance_settings_retrieve.py => get_instance_settings.py} (100%)
 rename funkwhale_api_client/api/instance/{instance_spa_manifest_json_retrieve.py => get_spa_manifest.py} (100%)
 rename funkwhale_api_client/api/instance/{instance_admin_settings_partial_update.py => partial_update_instance_admin_setting.py} (100%)
 rename funkwhale_api_client/api/instance/{instance_admin_settings_update.py => update_instance_admin_setting.py} (100%)
 rename funkwhale_api_client/api/libraries/{libraries_create.py => create_library.py} (100%)
 rename funkwhale_api_client/api/libraries/{libraries_fs_import_create.py => create_library_fs_import.py} (100%)
 rename funkwhale_api_client/api/libraries/{libraries_destroy.py => delete_library.py} (100%)
 rename funkwhale_api_client/api/libraries/{libraries_fs_import_destroy.py => delete_library_fs_import.py} (100%)
 rename funkwhale_api_client/api/libraries/{libraries_list.py => get_libraries.py} (88%)
 rename funkwhale_api_client/api/libraries/{libraries_retrieve.py => get_library.py} (100%)
 rename funkwhale_api_client/api/libraries/{libraries_follows_retrieve.py => get_library_follow.py} (100%)
 rename funkwhale_api_client/api/libraries/{libraries_fs_import_retrieve.py => get_library_fs_import.py} (100%)
 rename funkwhale_api_client/api/libraries/{libraries_partial_update.py => partial_update_library.py} (100%)
 rename funkwhale_api_client/api/libraries/{libraries_update.py => update_library.py} (100%)
 rename funkwhale_api_client/api/licenses/{licenses_retrieve.py => get_license.py} (100%)
 rename funkwhale_api_client/api/licenses/{licenses_list.py => get_licenses.py} (100%)
 rename funkwhale_api_client/api/listen/{listen_retrieve.py => get_listen.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_accounts_action_create.py => admin_create_account_action.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_library_albums_action_create.py => admin_create_album_action.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_library_artists_action_create.py => admin_create_artist_action.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_federation_domains_create.py => admin_create_federation_domain.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_federation_domains_action_create.py => admin_create_federation_domain_action.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_users_invitations_create.py => admin_create_invitation.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_users_invitations_action_create.py => admin_create_invitation_action.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_library_libraries_action_create.py => admin_create_library_action.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_tags_create.py => admin_create_tag.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_tags_action_create.py => admin_create_tag_action.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_library_tracks_action_create.py => admin_create_track_action.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_library_uploads_action_create.py => admin_create_upload_action.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_library_albums_destroy.py => admin_delete_album.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_library_artists_destroy.py => admin_delete_artist.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_channels_destroy.py => admin_delete_channel.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_library_libraries_destroy.py => admin_delete_library.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_tags_destroy.py => admin_delete_tag.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_library_tracks_destroy.py => admin_delete_track.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_library_uploads_destroy.py => admin_delete_upload.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_accounts_retrieve.py => admin_get_account.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_accounts_stats_retrieve.py => admin_get_account_stats.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_accounts_list.py => admin_get_accounts.py} (91%)
 rename funkwhale_api_client/api/manage/{manage_library_albums_retrieve.py => admin_get_album.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_library_albums_list.py => admin_get_albums.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_library_artists_retrieve.py => admin_get_artist.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_library_artists_list.py => admin_get_artists.py} (87%)
 rename funkwhale_api_client/api/manage/{manage_channels_retrieve.py => admin_get_channel.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_channels_stats_retrieve.py => admin_get_channel_stats.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_channels_list.py => admin_get_channels.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_federation_domains_retrieve.py => admin_get_federation_domain.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_federation_domains_nodeinfo_retrieve.py => admin_get_federation_domain_nodeinfo.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_federation_domains_stats_retrieve.py => admin_get_federation_domain_stats.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_federation_domains_list.py => admin_get_federation_domains.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_users_invitations_retrieve.py => admin_get_invitation.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_users_invitations_list.py => admin_get_invitations.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_library_libraries_list.py => admin_get_libraries.py} (78%)
 rename funkwhale_api_client/api/manage/{manage_library_libraries_retrieve.py => admin_get_library.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_library_albums_stats_retrieve.py => admin_get_library_album_stats.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_library_artists_stats_retrieve.py => admin_get_library_artist_stats.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_library_libraries_stats_retrieve.py => admin_get_library_stats.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_tags_retrieve.py => admin_get_tag.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_tags_list.py => admin_get_tags.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_library_tracks_retrieve.py => admin_get_track.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_library_tracks_stats_retrieve.py => admin_get_track_stats.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_library_tracks_list.py => admin_get_tracks.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_library_uploads_retrieve.py => admin_get_upload.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_library_uploads_list.py => admin_get_uploads.py} (82%)
 rename funkwhale_api_client/api/manage/{manage_users_users_retrieve.py => admin_get_user.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_users_users_list.py => admin_get_users.py} (91%)
 rename funkwhale_api_client/api/manage/{manage_federation_domains_partial_update.py => admin_partial_update_federation_domain.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_users_invitations_partial_update.py => admin_partial_update_invitation.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_library_libraries_partial_update.py => admin_partial_update_library.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_users_users_partial_update.py => admin_partial_update_user.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_federation_domains_update.py => admin_update_federation_domain.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_users_invitations_update.py => admin_update_invitation.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_library_libraries_update.py => admin_update_library.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_users_users_update.py => admin_update_user.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_moderation_instance_policies_create.py => moderation_create_instance_policy.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_moderation_notes_create.py => moderation_create_note.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_moderation_instance_policies_destroy.py => moderation_delete_instance_policy.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_moderation_notes_destroy.py => moderation_delete_note.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_moderation_instance_policies_list.py => moderation_get_instance_policies.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_moderation_instance_policies_retrieve.py => moderation_get_instance_policy.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_moderation_notes_retrieve.py => moderation_get_note.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_moderation_notes_list.py => moderation_get_notes.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_moderation_reports_retrieve.py => moderation_get_report.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_moderation_reports_list.py => moderation_get_reports.py} (89%)
 rename funkwhale_api_client/api/manage/{manage_moderation_requests_retrieve.py => moderation_get_request.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_moderation_requests_list.py => moderation_get_requests.py} (77%)
 rename funkwhale_api_client/api/manage/{manage_moderation_instance_policies_partial_update.py => moderation_partial_update_instance_policy.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_moderation_reports_partial_update.py => moderation_partial_update_report.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_moderation_requests_partial_update.py => moderation_partial_update_request.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_moderation_instance_policies_update.py => moderation_update_instance_policy.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_moderation_reports_update.py => moderation_update_report.py} (100%)
 rename funkwhale_api_client/api/manage/{manage_moderation_requests_update.py => moderation_update_request.py} (100%)
 rename funkwhale_api_client/api/moderation/{moderation_content_filters_create.py => create_moderation_content_filter.py} (100%)
 rename funkwhale_api_client/api/moderation/{moderation_reports_create.py => create_moderation_report.py} (100%)
 rename funkwhale_api_client/api/moderation/{moderation_content_filters_destroy.py => delete_moderation_content_filter.py} (100%)
 rename funkwhale_api_client/api/moderation/{moderation_content_filters_retrieve.py => get_moderation_content_filter.py} (100%)
 rename funkwhale_api_client/api/moderation/{moderation_content_filters_list.py => get_moderation_content_filters.py} (100%)
 rename funkwhale_api_client/api/oauth/{oauth_apps_create.py => create_oauth_app.py} (100%)
 rename funkwhale_api_client/api/oauth/{oauth_authorize_create.py => create_oauth_authorize.py} (100%)
 rename funkwhale_api_client/api/oauth/{oauth_apps_destroy.py => delete_oauth_app.py} (100%)
 rename funkwhale_api_client/api/oauth/{oauth_grants_destroy.py => delete_oauth_grant.py} (100%)
 rename funkwhale_api_client/api/oauth/{oauth_apps_retrieve.py => get_oauth_app.py} (100%)
 rename funkwhale_api_client/api/oauth/{oauth_apps_list.py => get_oauth_apps.py} (100%)
 rename funkwhale_api_client/api/oauth/{oauth_authorize_retrieve.py => get_oauth_authorize.py} (100%)
 rename funkwhale_api_client/api/oauth/{oauth_grants_retrieve.py => get_oauth_grant.py} (100%)
 rename funkwhale_api_client/api/oauth/{oauth_grants_list.py => get_oauth_grants.py} (100%)
 rename funkwhale_api_client/api/oauth/{oauth_apps_partial_update.py => partial_update_oauth_app.py} (100%)
 rename funkwhale_api_client/api/oauth/{oauth_apps_refresh_token_create.py => refresh_oauth_token.py} (100%)
 rename funkwhale_api_client/api/oauth/{oauth_apps_update.py => update_oauth_app.py} (100%)
 rename funkwhale_api_client/api/oauth/{oauth_authorize_update.py => update_oauth_authorize.py} (100%)
 rename funkwhale_api_client/api/oembed/{oembed_retrieve.py => get_oembed.py} (100%)
 rename funkwhale_api_client/api/playlists/{playlists_add_create.py => add_to_playlist.py} (73%)
 rename funkwhale_api_client/api/playlists/{playlists_clear_destroy.py => clear_playlist.py} (100%)
 rename funkwhale_api_client/api/playlists/{playlists_create.py => create_playlist.py} (100%)
 rename funkwhale_api_client/api/playlists/{playlists_destroy.py => delete_playlist.py} (100%)
 rename funkwhale_api_client/api/playlists/{playlists_retrieve.py => get_playlist.py} (100%)
 create mode 100644 funkwhale_api_client/api/playlists/get_playlist_tracks.py
 rename funkwhale_api_client/api/playlists/{playlists_list.py => get_playlists.py} (100%)
 rename funkwhale_api_client/api/playlists/{playlists_partial_update.py => partial_update_playlist.py} (100%)
 delete mode 100644 funkwhale_api_client/api/playlists/playlists_tracks_retrieve.py
 rename funkwhale_api_client/api/playlists/{playlists_remove_destroy.py => remove_from_playlist.py} (100%)
 rename funkwhale_api_client/api/playlists/{playlists_remove_create.py => remove_from_playlist_2.py} (100%)
 rename funkwhale_api_client/api/playlists/{playlists_move_create.py => reorder_track_in_playlist.py} (100%)
 rename funkwhale_api_client/api/playlists/{playlists_update.py => update_playlist.py} (100%)
 rename funkwhale_api_client/api/plugins/{plugins_create.py => create_plugin.py} (100%)
 rename funkwhale_api_client/api/plugins/{plugins_scan_create.py => create_plugin_scan.py} (100%)
 rename funkwhale_api_client/api/plugins/{plugins_disable_create.py => disable_plugin.py} (100%)
 rename funkwhale_api_client/api/plugins/{plugins_enable_create.py => enable_plugin.py} (100%)
 rename funkwhale_api_client/api/plugins/{plugins_retrieve.py => get_plugin.py} (100%)
 rename funkwhale_api_client/api/plugins/{plugins_list.py => get_plugins.py} (100%)
 rename funkwhale_api_client/api/radios/{radios_radios_create.py => create_radio.py} (100%)
 rename funkwhale_api_client/api/radios/{radios_sessions_create.py => create_radio_session.py} (100%)
 rename funkwhale_api_client/api/radios/{radios_radios_destroy.py => delete_radio.py} (100%)
 rename funkwhale_api_client/api/radios/{radios_tracks_create.py => get_next_radio_track.py} (100%)
 rename funkwhale_api_client/api/radios/{radios_radios_retrieve.py => get_radio.py} (100%)
 rename funkwhale_api_client/api/radios/{radios_radios_filters_retrieve.py => get_radio_filter.py} (100%)
 rename funkwhale_api_client/api/radios/{radios_sessions_retrieve.py => get_radio_session.py} (100%)
 rename funkwhale_api_client/api/radios/{radios_radios_tracks_retrieve.py => get_radio_track.py} (100%)
 rename funkwhale_api_client/api/radios/{radios_radios_list.py => get_radios.py} (100%)
 rename funkwhale_api_client/api/radios/{radios_radios_partial_update.py => partial_update_radio.py} (100%)
 rename funkwhale_api_client/api/radios/{radios_radios_update.py => update_radio.py} (100%)
 rename funkwhale_api_client/api/radios/{radios_radios_validate_create.py => validate_radio.py} (100%)
 rename funkwhale_api_client/api/rate_limit/{rate_limit_retrieve.py => get_rate_limit.py} (100%)
 rename funkwhale_api_client/api/search/{search_retrieve.py => get_search_results.py} (100%)
 rename funkwhale_api_client/api/stream/{stream_retrieve.py => get_stream.py} (100%)
 rename funkwhale_api_client/api/subscriptions/{subscriptions_all_retrieve.py => get_all_subscriptions.py} (100%)
 rename funkwhale_api_client/api/subscriptions/{subscriptions_retrieve.py => get_subscription.py} (100%)
 rename funkwhale_api_client/api/subscriptions/{subscriptions_list.py => get_subscriptions.py} (100%)
 rename funkwhale_api_client/api/tags/{tags_retrieve.py => get_tag.py} (100%)
 rename funkwhale_api_client/api/tags/{tags_list.py => get_tags.py} (89%)
 rename funkwhale_api_client/api/text_preview/{text_preview_create.py => preview_text.py} (100%)
 rename funkwhale_api_client/api/tracks/{tracks_fetches_create.py => create_track_fetch.py} (89%)
 rename funkwhale_api_client/api/tracks/{tracks_mutations_create.py => create_track_mutation.py} (87%)
 rename funkwhale_api_client/api/tracks/{tracks_destroy.py => delete_track.py} (100%)
 rename funkwhale_api_client/api/tracks/{tracks_retrieve.py => get_track.py} (100%)
 create mode 100644 funkwhale_api_client/api/tracks/get_track_fetches.py
 create mode 100644 funkwhale_api_client/api/tracks/get_track_libraries.py
 create mode 100644 funkwhale_api_client/api/tracks/get_track_mutations.py
 rename funkwhale_api_client/api/tracks/{tracks_list.py => get_tracks.py} (95%)
 delete mode 100644 funkwhale_api_client/api/tracks/tracks_fetches_retrieve.py
 delete mode 100644 funkwhale_api_client/api/tracks/tracks_libraries_retrieve.py
 delete mode 100644 funkwhale_api_client/api/tracks/tracks_mutations_retrieve.py
 rename funkwhale_api_client/api/uploads/{uploads_create.py => create_upload.py} (100%)
 rename funkwhale_api_client/api/uploads/{uploads_action_create.py => create_upload_action.py} (100%)
 rename funkwhale_api_client/api/uploads/{uploads_destroy.py => delete_upload.py} (100%)
 rename funkwhale_api_client/api/uploads/{uploads_retrieve.py => get_upload.py} (100%)
 rename funkwhale_api_client/api/uploads/{uploads_audio_file_metadata_retrieve.py => get_upload_metadata.py} (100%)
 rename funkwhale_api_client/api/uploads/{uploads_list.py => get_uploads.py} (93%)
 rename funkwhale_api_client/api/uploads/{uploads_partial_update.py => partial_update_upload.py} (100%)
 rename funkwhale_api_client/api/uploads/{uploads_update.py => update_upload.py} (100%)
 rename funkwhale_api_client/api/users/{users_change_email_create.py => change_email.py} (100%)
 rename funkwhale_api_client/api/users/{users_subsonic_token_create.py => create_user_subsonic_token.py} (100%)
 rename funkwhale_api_client/api/users/{users_me_destroy.py => delete_authenticated_user.py} (100%)
 rename funkwhale_api_client/api/users/{users_subsonic_token_destroy.py => delete_user_subsonic_token.py} (100%)
 rename funkwhale_api_client/api/users/{users_me_retrieve.py => get_authenticated_user.py} (100%)
 rename funkwhale_api_client/api/users/{users_subsonic_token_retrieve.py => get_user_subsonic_token.py} (100%)
 rename funkwhale_api_client/api/users/{users_partial_update.py => partial_update_user.py} (100%)
 rename funkwhale_api_client/api/users/{users_settings_create.py => update_settings.py} (100%)
 rename funkwhale_api_client/api/users/{users_update.py => update_user.py} (100%)
 delete mode 100644 funkwhale_api_client/api/users/users_users_change_email_create.py
 delete mode 100644 funkwhale_api_client/api/users/users_users_me_destroy.py
 delete mode 100644 funkwhale_api_client/api/users/users_users_me_retrieve.py
 delete mode 100644 funkwhale_api_client/api/users/users_users_partial_update.py
 delete mode 100644 funkwhale_api_client/api/users/users_users_settings_create.py
 delete mode 100644 funkwhale_api_client/api/users/users_users_subsonic_token_create.py
 delete mode 100644 funkwhale_api_client/api/users/users_users_subsonic_token_destroy.py
 delete mode 100644 funkwhale_api_client/api/users/users_users_subsonic_token_retrieve.py
 delete mode 100644 funkwhale_api_client/api/users/users_users_update.py
 rename funkwhale_api_client/models/{manage_accounts_list_type.py => admin_get_accounts_type.py} (85%)
 rename funkwhale_api_client/models/{manage_library_artists_list_content_category.py => admin_get_artists_content_category.py} (72%)
 rename funkwhale_api_client/models/{manage_library_libraries_list_ordering_item.py => admin_get_libraries_ordering_item.py} (83%)
 rename funkwhale_api_client/models/{manage_library_libraries_list_privacy_level.py => admin_get_libraries_privacy_level.py} (72%)
 rename funkwhale_api_client/models/{uploads_list_import_status_item.py => admin_get_uploads_import_status.py} (81%)
 rename funkwhale_api_client/models/{manage_library_uploads_list_ordering_item.py => admin_get_uploads_ordering_item.py} (88%)
 rename funkwhale_api_client/models/{manage_users_users_list_privacy_level.py => admin_get_users_privacy_level.py} (77%)
 create mode 100644 funkwhale_api_client/models/api_mutation.py
 create mode 100644 funkwhale_api_client/models/api_mutation_payload.py
 create mode 100644 funkwhale_api_client/models/api_mutation_previous_state.py
 create mode 100644 funkwhale_api_client/models/api_mutation_target.py
 create mode 100644 funkwhale_api_client/models/get_album_fetches_ordering_item.py
 create mode 100644 funkwhale_api_client/models/get_album_libraries_ordering_item.py
 create mode 100644 funkwhale_api_client/models/get_album_mutations_ordering_item.py
 rename funkwhale_api_client/models/{albums_list_ordering_item.py => get_albums_ordering_item.py} (91%)
 create mode 100644 funkwhale_api_client/models/get_artist_fetches_ordering_item.py
 create mode 100644 funkwhale_api_client/models/get_artist_libraries_ordering_item.py
 create mode 100644 funkwhale_api_client/models/get_artist_mutations_ordering_item.py
 rename funkwhale_api_client/models/{artists_list_ordering_item.py => get_artists_ordering_item.py} (90%)
 rename funkwhale_api_client/models/{channels_list_ordering_item.py => get_channels_ordering_item.py} (86%)
 rename funkwhale_api_client/models/{libraries_list_privacy_level.py => get_libraries_privacy_level.py} (77%)
 rename funkwhale_api_client/models/{tags_list_ordering_item.py => get_tags_ordering_item.py} (85%)
 create mode 100644 funkwhale_api_client/models/get_track_fetches_ordering_item.py
 create mode 100644 funkwhale_api_client/models/get_track_libraries_ordering_item.py
 create mode 100644 funkwhale_api_client/models/get_track_mutations_ordering_item.py
 rename funkwhale_api_client/models/{tracks_list_ordering_item.py => get_tracks_ordering_item.py} (94%)
 rename funkwhale_api_client/models/{manage_library_uploads_list_import_status.py => get_uploads_import_status_item.py} (78%)
 rename funkwhale_api_client/models/{manage_moderation_reports_list_type.py => moderation_get_reports_type.py} (84%)
 rename funkwhale_api_client/models/{manage_moderation_requests_list_status.py => moderation_get_requests_status.py} (75%)
 rename funkwhale_api_client/models/{manage_moderation_requests_list_type.py => moderation_get_requests_type.py} (67%)
 create mode 100644 funkwhale_api_client/models/paginated_api_mutation_list.py
 create mode 100644 funkwhale_api_client/models/paginated_fetch_list.py
 create mode 100644 funkwhale_api_client/models/paginated_library_list.py
 create mode 100644 funkwhale_api_client/models/paginated_playlist_track_list.py
 create mode 100644 funkwhale_api_client/models/playlist_add_many_request.py
 create mode 100644 funkwhale_api_client/models/playlist_track.py

diff --git a/funkwhale_api_client/api/activity/activity_list.py b/funkwhale_api_client/api/activity/get_activity.py
similarity index 100%
rename from funkwhale_api_client/api/activity/activity_list.py
rename to funkwhale_api_client/api/activity/get_activity.py
diff --git a/funkwhale_api_client/api/albums/albums_fetches_retrieve.py b/funkwhale_api_client/api/albums/albums_fetches_retrieve.py
deleted file mode 100644
index 5cb0360..0000000
--- a/funkwhale_api_client/api/albums/albums_fetches_retrieve.py
+++ /dev/null
@@ -1,133 +0,0 @@
-from typing import Any, Dict, Optional
-
-import httpx
-
-from ...client import AuthenticatedClient
-from ...models.album import Album
-from ...types import Response
-
-
-def _get_kwargs(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Dict[str, Any]:
-    url = "{}/api/v1/albums/{id}/fetches/".format(client.base_url, id=id)
-
-    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[Album]:
-    if response.status_code == 200:
-        response_200 = Album.from_dict(response.json())
-
-        return response_200
-    return None
-
-
-def _build_response(*, response: httpx.Response) -> Response[Album]:
-    return Response(
-        status_code=response.status_code,
-        content=response.content,
-        headers=response.headers,
-        parsed=_parse_response(response=response),
-    )
-
-
-def sync_detailed(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Response[Album]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[Album]
-    """
-
-    kwargs = _get_kwargs(
-        id=id,
-        client=client,
-    )
-
-    response = httpx.request(
-        verify=client.verify_ssl,
-        **kwargs,
-    )
-
-    return _build_response(response=response)
-
-
-def sync(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Optional[Album]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[Album]
-    """
-
-    return sync_detailed(
-        id=id,
-        client=client,
-    ).parsed
-
-
-async def asyncio_detailed(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Response[Album]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[Album]
-    """
-
-    kwargs = _get_kwargs(
-        id=id,
-        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(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Optional[Album]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[Album]
-    """
-
-    return (
-        await asyncio_detailed(
-            id=id,
-            client=client,
-        )
-    ).parsed
diff --git a/funkwhale_api_client/api/albums/albums_libraries_retrieve.py b/funkwhale_api_client/api/albums/albums_libraries_retrieve.py
deleted file mode 100644
index f2d8f71..0000000
--- a/funkwhale_api_client/api/albums/albums_libraries_retrieve.py
+++ /dev/null
@@ -1,133 +0,0 @@
-from typing import Any, Dict, Optional
-
-import httpx
-
-from ...client import AuthenticatedClient
-from ...models.album import Album
-from ...types import Response
-
-
-def _get_kwargs(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Dict[str, Any]:
-    url = "{}/api/v1/albums/{id}/libraries/".format(client.base_url, id=id)
-
-    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[Album]:
-    if response.status_code == 200:
-        response_200 = Album.from_dict(response.json())
-
-        return response_200
-    return None
-
-
-def _build_response(*, response: httpx.Response) -> Response[Album]:
-    return Response(
-        status_code=response.status_code,
-        content=response.content,
-        headers=response.headers,
-        parsed=_parse_response(response=response),
-    )
-
-
-def sync_detailed(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Response[Album]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[Album]
-    """
-
-    kwargs = _get_kwargs(
-        id=id,
-        client=client,
-    )
-
-    response = httpx.request(
-        verify=client.verify_ssl,
-        **kwargs,
-    )
-
-    return _build_response(response=response)
-
-
-def sync(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Optional[Album]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[Album]
-    """
-
-    return sync_detailed(
-        id=id,
-        client=client,
-    ).parsed
-
-
-async def asyncio_detailed(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Response[Album]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[Album]
-    """
-
-    kwargs = _get_kwargs(
-        id=id,
-        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(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Optional[Album]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[Album]
-    """
-
-    return (
-        await asyncio_detailed(
-            id=id,
-            client=client,
-        )
-    ).parsed
diff --git a/funkwhale_api_client/api/albums/albums_mutations_retrieve.py b/funkwhale_api_client/api/albums/albums_mutations_retrieve.py
deleted file mode 100644
index 9b7eeb6..0000000
--- a/funkwhale_api_client/api/albums/albums_mutations_retrieve.py
+++ /dev/null
@@ -1,133 +0,0 @@
-from typing import Any, Dict, Optional
-
-import httpx
-
-from ...client import AuthenticatedClient
-from ...models.album import Album
-from ...types import Response
-
-
-def _get_kwargs(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Dict[str, Any]:
-    url = "{}/api/v1/albums/{id}/mutations/".format(client.base_url, id=id)
-
-    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[Album]:
-    if response.status_code == 200:
-        response_200 = Album.from_dict(response.json())
-
-        return response_200
-    return None
-
-
-def _build_response(*, response: httpx.Response) -> Response[Album]:
-    return Response(
-        status_code=response.status_code,
-        content=response.content,
-        headers=response.headers,
-        parsed=_parse_response(response=response),
-    )
-
-
-def sync_detailed(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Response[Album]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[Album]
-    """
-
-    kwargs = _get_kwargs(
-        id=id,
-        client=client,
-    )
-
-    response = httpx.request(
-        verify=client.verify_ssl,
-        **kwargs,
-    )
-
-    return _build_response(response=response)
-
-
-def sync(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Optional[Album]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[Album]
-    """
-
-    return sync_detailed(
-        id=id,
-        client=client,
-    ).parsed
-
-
-async def asyncio_detailed(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Response[Album]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[Album]
-    """
-
-    kwargs = _get_kwargs(
-        id=id,
-        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(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Optional[Album]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[Album]
-    """
-
-    return (
-        await asyncio_detailed(
-            id=id,
-            client=client,
-        )
-    ).parsed
diff --git a/funkwhale_api_client/api/albums/albums_create.py b/funkwhale_api_client/api/albums/create_album.py
similarity index 100%
rename from funkwhale_api_client/api/albums/albums_create.py
rename to funkwhale_api_client/api/albums/create_album.py
diff --git a/funkwhale_api_client/api/albums/albums_fetches_create.py b/funkwhale_api_client/api/albums/create_album_fetch.py
similarity index 88%
rename from funkwhale_api_client/api/albums/albums_fetches_create.py
rename to funkwhale_api_client/api/albums/create_album_fetch.py
index ebfb78a..2004bca 100644
--- a/funkwhale_api_client/api/albums/albums_fetches_create.py
+++ b/funkwhale_api_client/api/albums/create_album_fetch.py
@@ -3,8 +3,8 @@ from typing import Any, Dict, Optional
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.album import Album
 from ...models.album_request import AlbumRequest
+from ...models.fetch import Fetch
 from ...types import Response
 
 
@@ -35,15 +35,15 @@ def _get_kwargs(
     }
 
 
-def _parse_response(*, response: httpx.Response) -> Optional[Album]:
+def _parse_response(*, response: httpx.Response) -> Optional[Fetch]:
     if response.status_code == 200:
-        response_200 = Album.from_dict(response.json())
+        response_200 = Fetch.from_dict(response.json())
 
         return response_200
     return None
 
 
-def _build_response(*, response: httpx.Response) -> Response[Album]:
+def _build_response(*, response: httpx.Response) -> Response[Fetch]:
     return Response(
         status_code=response.status_code,
         content=response.content,
@@ -59,7 +59,7 @@ def sync_detailed(
     form_data: AlbumRequest,
     multipart_data: AlbumRequest,
     json_body: AlbumRequest,
-) -> Response[Album]:
+) -> Response[Fetch]:
     """
     Args:
         id (int):
@@ -67,7 +67,7 @@ def sync_detailed(
         json_body (AlbumRequest):
 
     Returns:
-        Response[Album]
+        Response[Fetch]
     """
 
     kwargs = _get_kwargs(
@@ -93,7 +93,7 @@ def sync(
     form_data: AlbumRequest,
     multipart_data: AlbumRequest,
     json_body: AlbumRequest,
-) -> Optional[Album]:
+) -> Optional[Fetch]:
     """
     Args:
         id (int):
@@ -101,7 +101,7 @@ def sync(
         json_body (AlbumRequest):
 
     Returns:
-        Response[Album]
+        Response[Fetch]
     """
 
     return sync_detailed(
@@ -120,7 +120,7 @@ async def asyncio_detailed(
     form_data: AlbumRequest,
     multipart_data: AlbumRequest,
     json_body: AlbumRequest,
-) -> Response[Album]:
+) -> Response[Fetch]:
     """
     Args:
         id (int):
@@ -128,7 +128,7 @@ async def asyncio_detailed(
         json_body (AlbumRequest):
 
     Returns:
-        Response[Album]
+        Response[Fetch]
     """
 
     kwargs = _get_kwargs(
@@ -152,7 +152,7 @@ async def asyncio(
     form_data: AlbumRequest,
     multipart_data: AlbumRequest,
     json_body: AlbumRequest,
-) -> Optional[Album]:
+) -> Optional[Fetch]:
     """
     Args:
         id (int):
@@ -160,7 +160,7 @@ async def asyncio(
         json_body (AlbumRequest):
 
     Returns:
-        Response[Album]
+        Response[Fetch]
     """
 
     return (
diff --git a/funkwhale_api_client/api/albums/albums_mutations_create.py b/funkwhale_api_client/api/albums/create_album_mutation.py
similarity index 87%
rename from funkwhale_api_client/api/albums/albums_mutations_create.py
rename to funkwhale_api_client/api/albums/create_album_mutation.py
index c641a61..f1c3b9d 100644
--- a/funkwhale_api_client/api/albums/albums_mutations_create.py
+++ b/funkwhale_api_client/api/albums/create_album_mutation.py
@@ -3,8 +3,8 @@ from typing import Any, Dict, Optional
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.album import Album
 from ...models.album_request import AlbumRequest
+from ...models.api_mutation import APIMutation
 from ...types import Response
 
 
@@ -35,15 +35,15 @@ def _get_kwargs(
     }
 
 
-def _parse_response(*, response: httpx.Response) -> Optional[Album]:
+def _parse_response(*, response: httpx.Response) -> Optional[APIMutation]:
     if response.status_code == 200:
-        response_200 = Album.from_dict(response.json())
+        response_200 = APIMutation.from_dict(response.json())
 
         return response_200
     return None
 
 
-def _build_response(*, response: httpx.Response) -> Response[Album]:
+def _build_response(*, response: httpx.Response) -> Response[APIMutation]:
     return Response(
         status_code=response.status_code,
         content=response.content,
@@ -59,7 +59,7 @@ def sync_detailed(
     form_data: AlbumRequest,
     multipart_data: AlbumRequest,
     json_body: AlbumRequest,
-) -> Response[Album]:
+) -> Response[APIMutation]:
     """
     Args:
         id (int):
@@ -67,7 +67,7 @@ def sync_detailed(
         json_body (AlbumRequest):
 
     Returns:
-        Response[Album]
+        Response[APIMutation]
     """
 
     kwargs = _get_kwargs(
@@ -93,7 +93,7 @@ def sync(
     form_data: AlbumRequest,
     multipart_data: AlbumRequest,
     json_body: AlbumRequest,
-) -> Optional[Album]:
+) -> Optional[APIMutation]:
     """
     Args:
         id (int):
@@ -101,7 +101,7 @@ def sync(
         json_body (AlbumRequest):
 
     Returns:
-        Response[Album]
+        Response[APIMutation]
     """
 
     return sync_detailed(
@@ -120,7 +120,7 @@ async def asyncio_detailed(
     form_data: AlbumRequest,
     multipart_data: AlbumRequest,
     json_body: AlbumRequest,
-) -> Response[Album]:
+) -> Response[APIMutation]:
     """
     Args:
         id (int):
@@ -128,7 +128,7 @@ async def asyncio_detailed(
         json_body (AlbumRequest):
 
     Returns:
-        Response[Album]
+        Response[APIMutation]
     """
 
     kwargs = _get_kwargs(
@@ -152,7 +152,7 @@ async def asyncio(
     form_data: AlbumRequest,
     multipart_data: AlbumRequest,
     json_body: AlbumRequest,
-) -> Optional[Album]:
+) -> Optional[APIMutation]:
     """
     Args:
         id (int):
@@ -160,7 +160,7 @@ async def asyncio(
         json_body (AlbumRequest):
 
     Returns:
-        Response[Album]
+        Response[APIMutation]
     """
 
     return (
diff --git a/funkwhale_api_client/api/albums/albums_destroy.py b/funkwhale_api_client/api/albums/delete_album.py
similarity index 100%
rename from funkwhale_api_client/api/albums/albums_destroy.py
rename to funkwhale_api_client/api/albums/delete_album.py
diff --git a/funkwhale_api_client/api/albums/albums_retrieve.py b/funkwhale_api_client/api/albums/get_album.py
similarity index 100%
rename from funkwhale_api_client/api/albums/albums_retrieve.py
rename to funkwhale_api_client/api/albums/get_album.py
diff --git a/funkwhale_api_client/api/albums/get_album_fetches.py b/funkwhale_api_client/api/albums/get_album_fetches.py
new file mode 100644
index 0000000..b78da22
--- /dev/null
+++ b/funkwhale_api_client/api/albums/get_album_fetches.py
@@ -0,0 +1,381 @@
+from typing import Any, Dict, List, Optional, Union
+
+import httpx
+
+from ...client import AuthenticatedClient
+from ...models.get_album_fetches_ordering_item import GetAlbumFetchesOrderingItem
+from ...models.paginated_fetch_list import PaginatedFetchList
+from ...types import UNSET, Response, Unset
+
+
+def _get_kwargs(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    artist: Union[Unset, None, int] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    content_category: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetAlbumFetchesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Dict[str, Any]:
+    url = "{}/api/v1/albums/{id}/fetches/".format(client.base_url, id=id)
+
+    headers: Dict[str, str] = client.get_headers()
+    cookies: Dict[str, Any] = client.get_cookies()
+
+    params: Dict[str, Any] = {}
+    params["artist"] = artist
+
+    params["channel"] = channel
+
+    params["content_category"] = content_category
+
+    params["hidden"] = hidden
+
+    params["include_channels"] = include_channels
+
+    params["library"] = library
+
+    params["mbid"] = mbid
+
+    json_ordering: Union[Unset, None, List[str]] = UNSET
+    if not isinstance(ordering, Unset):
+        if ordering is None:
+            json_ordering = None
+        else:
+            json_ordering = []
+            for ordering_item_data in ordering:
+                ordering_item = ordering_item_data.value
+
+                json_ordering.append(ordering_item)
+
+    params["ordering"] = json_ordering
+
+    params["page"] = page
+
+    params["page_size"] = page_size
+
+    params["playable"] = playable
+
+    params["q"] = q
+
+    params["related"] = related
+
+    params["scope"] = scope
+
+    json_tag: Union[Unset, None, List[str]] = UNSET
+    if not isinstance(tag, Unset):
+        if tag is None:
+            json_tag = None
+        else:
+            json_tag = tag
+
+    params["tag"] = json_tag
+
+    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[PaginatedFetchList]:
+    if response.status_code == 200:
+        response_200 = PaginatedFetchList.from_dict(response.json())
+
+        return response_200
+    return None
+
+
+def _build_response(*, response: httpx.Response) -> Response[PaginatedFetchList]:
+    return Response(
+        status_code=response.status_code,
+        content=response.content,
+        headers=response.headers,
+        parsed=_parse_response(response=response),
+    )
+
+
+def sync_detailed(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    artist: Union[Unset, None, int] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    content_category: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetAlbumFetchesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Response[PaginatedFetchList]:
+    """
+    Args:
+        id (int):
+        artist (Union[Unset, None, int]):
+        channel (Union[Unset, None, str]):
+        content_category (Union[Unset, None, str]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetAlbumFetchesOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+
+    Returns:
+        Response[PaginatedFetchList]
+    """
+
+    kwargs = _get_kwargs(
+        id=id,
+        client=client,
+        artist=artist,
+        channel=channel,
+        content_category=content_category,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        mbid=mbid,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+    )
+
+    response = httpx.request(
+        verify=client.verify_ssl,
+        **kwargs,
+    )
+
+    return _build_response(response=response)
+
+
+def sync(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    artist: Union[Unset, None, int] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    content_category: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetAlbumFetchesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Optional[PaginatedFetchList]:
+    """
+    Args:
+        id (int):
+        artist (Union[Unset, None, int]):
+        channel (Union[Unset, None, str]):
+        content_category (Union[Unset, None, str]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetAlbumFetchesOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+
+    Returns:
+        Response[PaginatedFetchList]
+    """
+
+    return sync_detailed(
+        id=id,
+        client=client,
+        artist=artist,
+        channel=channel,
+        content_category=content_category,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        mbid=mbid,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+    ).parsed
+
+
+async def asyncio_detailed(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    artist: Union[Unset, None, int] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    content_category: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetAlbumFetchesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Response[PaginatedFetchList]:
+    """
+    Args:
+        id (int):
+        artist (Union[Unset, None, int]):
+        channel (Union[Unset, None, str]):
+        content_category (Union[Unset, None, str]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetAlbumFetchesOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+
+    Returns:
+        Response[PaginatedFetchList]
+    """
+
+    kwargs = _get_kwargs(
+        id=id,
+        client=client,
+        artist=artist,
+        channel=channel,
+        content_category=content_category,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        mbid=mbid,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+    )
+
+    async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
+        response = await _client.request(**kwargs)
+
+    return _build_response(response=response)
+
+
+async def asyncio(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    artist: Union[Unset, None, int] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    content_category: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetAlbumFetchesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Optional[PaginatedFetchList]:
+    """
+    Args:
+        id (int):
+        artist (Union[Unset, None, int]):
+        channel (Union[Unset, None, str]):
+        content_category (Union[Unset, None, str]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetAlbumFetchesOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+
+    Returns:
+        Response[PaginatedFetchList]
+    """
+
+    return (
+        await asyncio_detailed(
+            id=id,
+            client=client,
+            artist=artist,
+            channel=channel,
+            content_category=content_category,
+            hidden=hidden,
+            include_channels=include_channels,
+            library=library,
+            mbid=mbid,
+            ordering=ordering,
+            page=page,
+            page_size=page_size,
+            playable=playable,
+            q=q,
+            related=related,
+            scope=scope,
+            tag=tag,
+        )
+    ).parsed
diff --git a/funkwhale_api_client/api/albums/get_album_libraries.py b/funkwhale_api_client/api/albums/get_album_libraries.py
new file mode 100644
index 0000000..703f085
--- /dev/null
+++ b/funkwhale_api_client/api/albums/get_album_libraries.py
@@ -0,0 +1,381 @@
+from typing import Any, Dict, List, Optional, Union
+
+import httpx
+
+from ...client import AuthenticatedClient
+from ...models.get_album_libraries_ordering_item import GetAlbumLibrariesOrderingItem
+from ...models.paginated_library_list import PaginatedLibraryList
+from ...types import UNSET, Response, Unset
+
+
+def _get_kwargs(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    artist: Union[Unset, None, int] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    content_category: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetAlbumLibrariesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Dict[str, Any]:
+    url = "{}/api/v1/albums/{id}/libraries/".format(client.base_url, id=id)
+
+    headers: Dict[str, str] = client.get_headers()
+    cookies: Dict[str, Any] = client.get_cookies()
+
+    params: Dict[str, Any] = {}
+    params["artist"] = artist
+
+    params["channel"] = channel
+
+    params["content_category"] = content_category
+
+    params["hidden"] = hidden
+
+    params["include_channels"] = include_channels
+
+    params["library"] = library
+
+    params["mbid"] = mbid
+
+    json_ordering: Union[Unset, None, List[str]] = UNSET
+    if not isinstance(ordering, Unset):
+        if ordering is None:
+            json_ordering = None
+        else:
+            json_ordering = []
+            for ordering_item_data in ordering:
+                ordering_item = ordering_item_data.value
+
+                json_ordering.append(ordering_item)
+
+    params["ordering"] = json_ordering
+
+    params["page"] = page
+
+    params["page_size"] = page_size
+
+    params["playable"] = playable
+
+    params["q"] = q
+
+    params["related"] = related
+
+    params["scope"] = scope
+
+    json_tag: Union[Unset, None, List[str]] = UNSET
+    if not isinstance(tag, Unset):
+        if tag is None:
+            json_tag = None
+        else:
+            json_tag = tag
+
+    params["tag"] = json_tag
+
+    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[PaginatedLibraryList]:
+    if response.status_code == 200:
+        response_200 = PaginatedLibraryList.from_dict(response.json())
+
+        return response_200
+    return None
+
+
+def _build_response(*, response: httpx.Response) -> Response[PaginatedLibraryList]:
+    return Response(
+        status_code=response.status_code,
+        content=response.content,
+        headers=response.headers,
+        parsed=_parse_response(response=response),
+    )
+
+
+def sync_detailed(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    artist: Union[Unset, None, int] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    content_category: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetAlbumLibrariesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Response[PaginatedLibraryList]:
+    """
+    Args:
+        id (int):
+        artist (Union[Unset, None, int]):
+        channel (Union[Unset, None, str]):
+        content_category (Union[Unset, None, str]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetAlbumLibrariesOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+
+    Returns:
+        Response[PaginatedLibraryList]
+    """
+
+    kwargs = _get_kwargs(
+        id=id,
+        client=client,
+        artist=artist,
+        channel=channel,
+        content_category=content_category,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        mbid=mbid,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+    )
+
+    response = httpx.request(
+        verify=client.verify_ssl,
+        **kwargs,
+    )
+
+    return _build_response(response=response)
+
+
+def sync(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    artist: Union[Unset, None, int] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    content_category: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetAlbumLibrariesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Optional[PaginatedLibraryList]:
+    """
+    Args:
+        id (int):
+        artist (Union[Unset, None, int]):
+        channel (Union[Unset, None, str]):
+        content_category (Union[Unset, None, str]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetAlbumLibrariesOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+
+    Returns:
+        Response[PaginatedLibraryList]
+    """
+
+    return sync_detailed(
+        id=id,
+        client=client,
+        artist=artist,
+        channel=channel,
+        content_category=content_category,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        mbid=mbid,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+    ).parsed
+
+
+async def asyncio_detailed(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    artist: Union[Unset, None, int] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    content_category: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetAlbumLibrariesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Response[PaginatedLibraryList]:
+    """
+    Args:
+        id (int):
+        artist (Union[Unset, None, int]):
+        channel (Union[Unset, None, str]):
+        content_category (Union[Unset, None, str]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetAlbumLibrariesOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+
+    Returns:
+        Response[PaginatedLibraryList]
+    """
+
+    kwargs = _get_kwargs(
+        id=id,
+        client=client,
+        artist=artist,
+        channel=channel,
+        content_category=content_category,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        mbid=mbid,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+    )
+
+    async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
+        response = await _client.request(**kwargs)
+
+    return _build_response(response=response)
+
+
+async def asyncio(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    artist: Union[Unset, None, int] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    content_category: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetAlbumLibrariesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Optional[PaginatedLibraryList]:
+    """
+    Args:
+        id (int):
+        artist (Union[Unset, None, int]):
+        channel (Union[Unset, None, str]):
+        content_category (Union[Unset, None, str]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetAlbumLibrariesOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+
+    Returns:
+        Response[PaginatedLibraryList]
+    """
+
+    return (
+        await asyncio_detailed(
+            id=id,
+            client=client,
+            artist=artist,
+            channel=channel,
+            content_category=content_category,
+            hidden=hidden,
+            include_channels=include_channels,
+            library=library,
+            mbid=mbid,
+            ordering=ordering,
+            page=page,
+            page_size=page_size,
+            playable=playable,
+            q=q,
+            related=related,
+            scope=scope,
+            tag=tag,
+        )
+    ).parsed
diff --git a/funkwhale_api_client/api/albums/get_album_mutations.py b/funkwhale_api_client/api/albums/get_album_mutations.py
new file mode 100644
index 0000000..f4a360d
--- /dev/null
+++ b/funkwhale_api_client/api/albums/get_album_mutations.py
@@ -0,0 +1,381 @@
+from typing import Any, Dict, List, Optional, Union
+
+import httpx
+
+from ...client import AuthenticatedClient
+from ...models.get_album_mutations_ordering_item import GetAlbumMutationsOrderingItem
+from ...models.paginated_api_mutation_list import PaginatedAPIMutationList
+from ...types import UNSET, Response, Unset
+
+
+def _get_kwargs(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    artist: Union[Unset, None, int] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    content_category: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetAlbumMutationsOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Dict[str, Any]:
+    url = "{}/api/v1/albums/{id}/mutations/".format(client.base_url, id=id)
+
+    headers: Dict[str, str] = client.get_headers()
+    cookies: Dict[str, Any] = client.get_cookies()
+
+    params: Dict[str, Any] = {}
+    params["artist"] = artist
+
+    params["channel"] = channel
+
+    params["content_category"] = content_category
+
+    params["hidden"] = hidden
+
+    params["include_channels"] = include_channels
+
+    params["library"] = library
+
+    params["mbid"] = mbid
+
+    json_ordering: Union[Unset, None, List[str]] = UNSET
+    if not isinstance(ordering, Unset):
+        if ordering is None:
+            json_ordering = None
+        else:
+            json_ordering = []
+            for ordering_item_data in ordering:
+                ordering_item = ordering_item_data.value
+
+                json_ordering.append(ordering_item)
+
+    params["ordering"] = json_ordering
+
+    params["page"] = page
+
+    params["page_size"] = page_size
+
+    params["playable"] = playable
+
+    params["q"] = q
+
+    params["related"] = related
+
+    params["scope"] = scope
+
+    json_tag: Union[Unset, None, List[str]] = UNSET
+    if not isinstance(tag, Unset):
+        if tag is None:
+            json_tag = None
+        else:
+            json_tag = tag
+
+    params["tag"] = json_tag
+
+    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[PaginatedAPIMutationList]:
+    if response.status_code == 200:
+        response_200 = PaginatedAPIMutationList.from_dict(response.json())
+
+        return response_200
+    return None
+
+
+def _build_response(*, response: httpx.Response) -> Response[PaginatedAPIMutationList]:
+    return Response(
+        status_code=response.status_code,
+        content=response.content,
+        headers=response.headers,
+        parsed=_parse_response(response=response),
+    )
+
+
+def sync_detailed(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    artist: Union[Unset, None, int] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    content_category: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetAlbumMutationsOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Response[PaginatedAPIMutationList]:
+    """
+    Args:
+        id (int):
+        artist (Union[Unset, None, int]):
+        channel (Union[Unset, None, str]):
+        content_category (Union[Unset, None, str]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetAlbumMutationsOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+
+    Returns:
+        Response[PaginatedAPIMutationList]
+    """
+
+    kwargs = _get_kwargs(
+        id=id,
+        client=client,
+        artist=artist,
+        channel=channel,
+        content_category=content_category,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        mbid=mbid,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+    )
+
+    response = httpx.request(
+        verify=client.verify_ssl,
+        **kwargs,
+    )
+
+    return _build_response(response=response)
+
+
+def sync(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    artist: Union[Unset, None, int] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    content_category: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetAlbumMutationsOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Optional[PaginatedAPIMutationList]:
+    """
+    Args:
+        id (int):
+        artist (Union[Unset, None, int]):
+        channel (Union[Unset, None, str]):
+        content_category (Union[Unset, None, str]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetAlbumMutationsOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+
+    Returns:
+        Response[PaginatedAPIMutationList]
+    """
+
+    return sync_detailed(
+        id=id,
+        client=client,
+        artist=artist,
+        channel=channel,
+        content_category=content_category,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        mbid=mbid,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+    ).parsed
+
+
+async def asyncio_detailed(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    artist: Union[Unset, None, int] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    content_category: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetAlbumMutationsOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Response[PaginatedAPIMutationList]:
+    """
+    Args:
+        id (int):
+        artist (Union[Unset, None, int]):
+        channel (Union[Unset, None, str]):
+        content_category (Union[Unset, None, str]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetAlbumMutationsOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+
+    Returns:
+        Response[PaginatedAPIMutationList]
+    """
+
+    kwargs = _get_kwargs(
+        id=id,
+        client=client,
+        artist=artist,
+        channel=channel,
+        content_category=content_category,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        mbid=mbid,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+    )
+
+    async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
+        response = await _client.request(**kwargs)
+
+    return _build_response(response=response)
+
+
+async def asyncio(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    artist: Union[Unset, None, int] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    content_category: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetAlbumMutationsOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Optional[PaginatedAPIMutationList]:
+    """
+    Args:
+        id (int):
+        artist (Union[Unset, None, int]):
+        channel (Union[Unset, None, str]):
+        content_category (Union[Unset, None, str]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetAlbumMutationsOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+
+    Returns:
+        Response[PaginatedAPIMutationList]
+    """
+
+    return (
+        await asyncio_detailed(
+            id=id,
+            client=client,
+            artist=artist,
+            channel=channel,
+            content_category=content_category,
+            hidden=hidden,
+            include_channels=include_channels,
+            library=library,
+            mbid=mbid,
+            ordering=ordering,
+            page=page,
+            page_size=page_size,
+            playable=playable,
+            q=q,
+            related=related,
+            scope=scope,
+            tag=tag,
+        )
+    ).parsed
diff --git a/funkwhale_api_client/api/albums/albums_list.py b/funkwhale_api_client/api/albums/get_albums.py
similarity index 93%
rename from funkwhale_api_client/api/albums/albums_list.py
rename to funkwhale_api_client/api/albums/get_albums.py
index a01af4d..ef44d13 100644
--- a/funkwhale_api_client/api/albums/albums_list.py
+++ b/funkwhale_api_client/api/albums/get_albums.py
@@ -3,7 +3,7 @@ from typing import Any, Dict, List, Optional, Union
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.albums_list_ordering_item import AlbumsListOrderingItem
+from ...models.get_albums_ordering_item import GetAlbumsOrderingItem
 from ...models.paginated_album_list import PaginatedAlbumList
 from ...types import UNSET, Response, Unset
 
@@ -18,7 +18,7 @@ def _get_kwargs(
     include_channels: Union[Unset, None, bool] = UNSET,
     library: Union[Unset, None, str] = UNSET,
     mbid: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[AlbumsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetAlbumsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     playable: Union[Unset, None, bool] = UNSET,
@@ -120,7 +120,7 @@ def sync_detailed(
     include_channels: Union[Unset, None, bool] = UNSET,
     library: Union[Unset, None, str] = UNSET,
     mbid: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[AlbumsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetAlbumsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     playable: Union[Unset, None, bool] = UNSET,
@@ -138,7 +138,7 @@ def sync_detailed(
         include_channels (Union[Unset, None, bool]):
         library (Union[Unset, None, str]):
         mbid (Union[Unset, None, str]):
-        ordering (Union[Unset, None, List[AlbumsListOrderingItem]]):
+        ordering (Union[Unset, None, List[GetAlbumsOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         playable (Union[Unset, None, bool]):
@@ -188,7 +188,7 @@ def sync(
     include_channels: Union[Unset, None, bool] = UNSET,
     library: Union[Unset, None, str] = UNSET,
     mbid: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[AlbumsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetAlbumsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     playable: Union[Unset, None, bool] = UNSET,
@@ -206,7 +206,7 @@ def sync(
         include_channels (Union[Unset, None, bool]):
         library (Union[Unset, None, str]):
         mbid (Union[Unset, None, str]):
-        ordering (Union[Unset, None, List[AlbumsListOrderingItem]]):
+        ordering (Union[Unset, None, List[GetAlbumsOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         playable (Union[Unset, None, bool]):
@@ -249,7 +249,7 @@ async def asyncio_detailed(
     include_channels: Union[Unset, None, bool] = UNSET,
     library: Union[Unset, None, str] = UNSET,
     mbid: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[AlbumsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetAlbumsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     playable: Union[Unset, None, bool] = UNSET,
@@ -267,7 +267,7 @@ async def asyncio_detailed(
         include_channels (Union[Unset, None, bool]):
         library (Union[Unset, None, str]):
         mbid (Union[Unset, None, str]):
-        ordering (Union[Unset, None, List[AlbumsListOrderingItem]]):
+        ordering (Union[Unset, None, List[GetAlbumsOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         playable (Union[Unset, None, bool]):
@@ -315,7 +315,7 @@ async def asyncio(
     include_channels: Union[Unset, None, bool] = UNSET,
     library: Union[Unset, None, str] = UNSET,
     mbid: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[AlbumsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetAlbumsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     playable: Union[Unset, None, bool] = UNSET,
@@ -333,7 +333,7 @@ async def asyncio(
         include_channels (Union[Unset, None, bool]):
         library (Union[Unset, None, str]):
         mbid (Union[Unset, None, str]):
-        ordering (Union[Unset, None, List[AlbumsListOrderingItem]]):
+        ordering (Union[Unset, None, List[GetAlbumsOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         playable (Union[Unset, None, bool]):
diff --git a/funkwhale_api_client/api/artists/artists_fetches_retrieve.py b/funkwhale_api_client/api/artists/artists_fetches_retrieve.py
deleted file mode 100644
index bef84c3..0000000
--- a/funkwhale_api_client/api/artists/artists_fetches_retrieve.py
+++ /dev/null
@@ -1,133 +0,0 @@
-from typing import Any, Dict, Optional
-
-import httpx
-
-from ...client import AuthenticatedClient
-from ...models.artist_with_albums import ArtistWithAlbums
-from ...types import Response
-
-
-def _get_kwargs(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Dict[str, Any]:
-    url = "{}/api/v1/artists/{id}/fetches/".format(client.base_url, id=id)
-
-    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[ArtistWithAlbums]:
-    if response.status_code == 200:
-        response_200 = ArtistWithAlbums.from_dict(response.json())
-
-        return response_200
-    return None
-
-
-def _build_response(*, response: httpx.Response) -> Response[ArtistWithAlbums]:
-    return Response(
-        status_code=response.status_code,
-        content=response.content,
-        headers=response.headers,
-        parsed=_parse_response(response=response),
-    )
-
-
-def sync_detailed(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Response[ArtistWithAlbums]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[ArtistWithAlbums]
-    """
-
-    kwargs = _get_kwargs(
-        id=id,
-        client=client,
-    )
-
-    response = httpx.request(
-        verify=client.verify_ssl,
-        **kwargs,
-    )
-
-    return _build_response(response=response)
-
-
-def sync(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Optional[ArtistWithAlbums]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[ArtistWithAlbums]
-    """
-
-    return sync_detailed(
-        id=id,
-        client=client,
-    ).parsed
-
-
-async def asyncio_detailed(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Response[ArtistWithAlbums]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[ArtistWithAlbums]
-    """
-
-    kwargs = _get_kwargs(
-        id=id,
-        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(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Optional[ArtistWithAlbums]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[ArtistWithAlbums]
-    """
-
-    return (
-        await asyncio_detailed(
-            id=id,
-            client=client,
-        )
-    ).parsed
diff --git a/funkwhale_api_client/api/artists/artists_libraries_retrieve.py b/funkwhale_api_client/api/artists/artists_libraries_retrieve.py
deleted file mode 100644
index 0550b42..0000000
--- a/funkwhale_api_client/api/artists/artists_libraries_retrieve.py
+++ /dev/null
@@ -1,133 +0,0 @@
-from typing import Any, Dict, Optional
-
-import httpx
-
-from ...client import AuthenticatedClient
-from ...models.artist_with_albums import ArtistWithAlbums
-from ...types import Response
-
-
-def _get_kwargs(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Dict[str, Any]:
-    url = "{}/api/v1/artists/{id}/libraries/".format(client.base_url, id=id)
-
-    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[ArtistWithAlbums]:
-    if response.status_code == 200:
-        response_200 = ArtistWithAlbums.from_dict(response.json())
-
-        return response_200
-    return None
-
-
-def _build_response(*, response: httpx.Response) -> Response[ArtistWithAlbums]:
-    return Response(
-        status_code=response.status_code,
-        content=response.content,
-        headers=response.headers,
-        parsed=_parse_response(response=response),
-    )
-
-
-def sync_detailed(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Response[ArtistWithAlbums]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[ArtistWithAlbums]
-    """
-
-    kwargs = _get_kwargs(
-        id=id,
-        client=client,
-    )
-
-    response = httpx.request(
-        verify=client.verify_ssl,
-        **kwargs,
-    )
-
-    return _build_response(response=response)
-
-
-def sync(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Optional[ArtistWithAlbums]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[ArtistWithAlbums]
-    """
-
-    return sync_detailed(
-        id=id,
-        client=client,
-    ).parsed
-
-
-async def asyncio_detailed(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Response[ArtistWithAlbums]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[ArtistWithAlbums]
-    """
-
-    kwargs = _get_kwargs(
-        id=id,
-        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(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Optional[ArtistWithAlbums]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[ArtistWithAlbums]
-    """
-
-    return (
-        await asyncio_detailed(
-            id=id,
-            client=client,
-        )
-    ).parsed
diff --git a/funkwhale_api_client/api/artists/artists_mutations_retrieve.py b/funkwhale_api_client/api/artists/artists_mutations_retrieve.py
deleted file mode 100644
index c89b8aa..0000000
--- a/funkwhale_api_client/api/artists/artists_mutations_retrieve.py
+++ /dev/null
@@ -1,133 +0,0 @@
-from typing import Any, Dict, Optional
-
-import httpx
-
-from ...client import AuthenticatedClient
-from ...models.artist_with_albums import ArtistWithAlbums
-from ...types import Response
-
-
-def _get_kwargs(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Dict[str, Any]:
-    url = "{}/api/v1/artists/{id}/mutations/".format(client.base_url, id=id)
-
-    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[ArtistWithAlbums]:
-    if response.status_code == 200:
-        response_200 = ArtistWithAlbums.from_dict(response.json())
-
-        return response_200
-    return None
-
-
-def _build_response(*, response: httpx.Response) -> Response[ArtistWithAlbums]:
-    return Response(
-        status_code=response.status_code,
-        content=response.content,
-        headers=response.headers,
-        parsed=_parse_response(response=response),
-    )
-
-
-def sync_detailed(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Response[ArtistWithAlbums]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[ArtistWithAlbums]
-    """
-
-    kwargs = _get_kwargs(
-        id=id,
-        client=client,
-    )
-
-    response = httpx.request(
-        verify=client.verify_ssl,
-        **kwargs,
-    )
-
-    return _build_response(response=response)
-
-
-def sync(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Optional[ArtistWithAlbums]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[ArtistWithAlbums]
-    """
-
-    return sync_detailed(
-        id=id,
-        client=client,
-    ).parsed
-
-
-async def asyncio_detailed(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Response[ArtistWithAlbums]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[ArtistWithAlbums]
-    """
-
-    kwargs = _get_kwargs(
-        id=id,
-        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(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Optional[ArtistWithAlbums]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[ArtistWithAlbums]
-    """
-
-    return (
-        await asyncio_detailed(
-            id=id,
-            client=client,
-        )
-    ).parsed
diff --git a/funkwhale_api_client/api/artists/artists_fetches_create.py b/funkwhale_api_client/api/artists/create_artist_fetch.py
similarity index 86%
rename from funkwhale_api_client/api/artists/artists_fetches_create.py
rename to funkwhale_api_client/api/artists/create_artist_fetch.py
index 411181a..2382494 100644
--- a/funkwhale_api_client/api/artists/artists_fetches_create.py
+++ b/funkwhale_api_client/api/artists/create_artist_fetch.py
@@ -3,8 +3,8 @@ from typing import Any, Dict, Optional
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.artist_with_albums import ArtistWithAlbums
 from ...models.artist_with_albums_request import ArtistWithAlbumsRequest
+from ...models.fetch import Fetch
 from ...types import Response
 
 
@@ -35,15 +35,15 @@ def _get_kwargs(
     }
 
 
-def _parse_response(*, response: httpx.Response) -> Optional[ArtistWithAlbums]:
+def _parse_response(*, response: httpx.Response) -> Optional[Fetch]:
     if response.status_code == 200:
-        response_200 = ArtistWithAlbums.from_dict(response.json())
+        response_200 = Fetch.from_dict(response.json())
 
         return response_200
     return None
 
 
-def _build_response(*, response: httpx.Response) -> Response[ArtistWithAlbums]:
+def _build_response(*, response: httpx.Response) -> Response[Fetch]:
     return Response(
         status_code=response.status_code,
         content=response.content,
@@ -59,7 +59,7 @@ def sync_detailed(
     form_data: ArtistWithAlbumsRequest,
     multipart_data: ArtistWithAlbumsRequest,
     json_body: ArtistWithAlbumsRequest,
-) -> Response[ArtistWithAlbums]:
+) -> Response[Fetch]:
     """
     Args:
         id (int):
@@ -67,7 +67,7 @@ def sync_detailed(
         json_body (ArtistWithAlbumsRequest):
 
     Returns:
-        Response[ArtistWithAlbums]
+        Response[Fetch]
     """
 
     kwargs = _get_kwargs(
@@ -93,7 +93,7 @@ def sync(
     form_data: ArtistWithAlbumsRequest,
     multipart_data: ArtistWithAlbumsRequest,
     json_body: ArtistWithAlbumsRequest,
-) -> Optional[ArtistWithAlbums]:
+) -> Optional[Fetch]:
     """
     Args:
         id (int):
@@ -101,7 +101,7 @@ def sync(
         json_body (ArtistWithAlbumsRequest):
 
     Returns:
-        Response[ArtistWithAlbums]
+        Response[Fetch]
     """
 
     return sync_detailed(
@@ -120,7 +120,7 @@ async def asyncio_detailed(
     form_data: ArtistWithAlbumsRequest,
     multipart_data: ArtistWithAlbumsRequest,
     json_body: ArtistWithAlbumsRequest,
-) -> Response[ArtistWithAlbums]:
+) -> Response[Fetch]:
     """
     Args:
         id (int):
@@ -128,7 +128,7 @@ async def asyncio_detailed(
         json_body (ArtistWithAlbumsRequest):
 
     Returns:
-        Response[ArtistWithAlbums]
+        Response[Fetch]
     """
 
     kwargs = _get_kwargs(
@@ -152,7 +152,7 @@ async def asyncio(
     form_data: ArtistWithAlbumsRequest,
     multipart_data: ArtistWithAlbumsRequest,
     json_body: ArtistWithAlbumsRequest,
-) -> Optional[ArtistWithAlbums]:
+) -> Optional[Fetch]:
     """
     Args:
         id (int):
@@ -160,7 +160,7 @@ async def asyncio(
         json_body (ArtistWithAlbumsRequest):
 
     Returns:
-        Response[ArtistWithAlbums]
+        Response[Fetch]
     """
 
     return (
diff --git a/funkwhale_api_client/api/artists/artists_mutations_create.py b/funkwhale_api_client/api/artists/create_artist_mutation.py
similarity index 86%
rename from funkwhale_api_client/api/artists/artists_mutations_create.py
rename to funkwhale_api_client/api/artists/create_artist_mutation.py
index 1053a81..01c0ecc 100644
--- a/funkwhale_api_client/api/artists/artists_mutations_create.py
+++ b/funkwhale_api_client/api/artists/create_artist_mutation.py
@@ -3,7 +3,7 @@ from typing import Any, Dict, Optional
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.artist_with_albums import ArtistWithAlbums
+from ...models.api_mutation import APIMutation
 from ...models.artist_with_albums_request import ArtistWithAlbumsRequest
 from ...types import Response
 
@@ -35,15 +35,15 @@ def _get_kwargs(
     }
 
 
-def _parse_response(*, response: httpx.Response) -> Optional[ArtistWithAlbums]:
+def _parse_response(*, response: httpx.Response) -> Optional[APIMutation]:
     if response.status_code == 200:
-        response_200 = ArtistWithAlbums.from_dict(response.json())
+        response_200 = APIMutation.from_dict(response.json())
 
         return response_200
     return None
 
 
-def _build_response(*, response: httpx.Response) -> Response[ArtistWithAlbums]:
+def _build_response(*, response: httpx.Response) -> Response[APIMutation]:
     return Response(
         status_code=response.status_code,
         content=response.content,
@@ -59,7 +59,7 @@ def sync_detailed(
     form_data: ArtistWithAlbumsRequest,
     multipart_data: ArtistWithAlbumsRequest,
     json_body: ArtistWithAlbumsRequest,
-) -> Response[ArtistWithAlbums]:
+) -> Response[APIMutation]:
     """
     Args:
         id (int):
@@ -67,7 +67,7 @@ def sync_detailed(
         json_body (ArtistWithAlbumsRequest):
 
     Returns:
-        Response[ArtistWithAlbums]
+        Response[APIMutation]
     """
 
     kwargs = _get_kwargs(
@@ -93,7 +93,7 @@ def sync(
     form_data: ArtistWithAlbumsRequest,
     multipart_data: ArtistWithAlbumsRequest,
     json_body: ArtistWithAlbumsRequest,
-) -> Optional[ArtistWithAlbums]:
+) -> Optional[APIMutation]:
     """
     Args:
         id (int):
@@ -101,7 +101,7 @@ def sync(
         json_body (ArtistWithAlbumsRequest):
 
     Returns:
-        Response[ArtistWithAlbums]
+        Response[APIMutation]
     """
 
     return sync_detailed(
@@ -120,7 +120,7 @@ async def asyncio_detailed(
     form_data: ArtistWithAlbumsRequest,
     multipart_data: ArtistWithAlbumsRequest,
     json_body: ArtistWithAlbumsRequest,
-) -> Response[ArtistWithAlbums]:
+) -> Response[APIMutation]:
     """
     Args:
         id (int):
@@ -128,7 +128,7 @@ async def asyncio_detailed(
         json_body (ArtistWithAlbumsRequest):
 
     Returns:
-        Response[ArtistWithAlbums]
+        Response[APIMutation]
     """
 
     kwargs = _get_kwargs(
@@ -152,7 +152,7 @@ async def asyncio(
     form_data: ArtistWithAlbumsRequest,
     multipart_data: ArtistWithAlbumsRequest,
     json_body: ArtistWithAlbumsRequest,
-) -> Optional[ArtistWithAlbums]:
+) -> Optional[APIMutation]:
     """
     Args:
         id (int):
@@ -160,7 +160,7 @@ async def asyncio(
         json_body (ArtistWithAlbumsRequest):
 
     Returns:
-        Response[ArtistWithAlbums]
+        Response[APIMutation]
     """
 
     return (
diff --git a/funkwhale_api_client/api/artists/artists_retrieve.py b/funkwhale_api_client/api/artists/get_artist.py
similarity index 100%
rename from funkwhale_api_client/api/artists/artists_retrieve.py
rename to funkwhale_api_client/api/artists/get_artist.py
diff --git a/funkwhale_api_client/api/artists/get_artist_fetches.py b/funkwhale_api_client/api/artists/get_artist_fetches.py
new file mode 100644
index 0000000..a0887bf
--- /dev/null
+++ b/funkwhale_api_client/api/artists/get_artist_fetches.py
@@ -0,0 +1,426 @@
+from typing import Any, Dict, List, Optional, Union
+
+import httpx
+
+from ...client import AuthenticatedClient
+from ...models.get_artist_fetches_ordering_item import GetArtistFetchesOrderingItem
+from ...models.paginated_fetch_list import PaginatedFetchList
+from ...types import UNSET, Response, Unset
+
+
+def _get_kwargs(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    content_category: Union[Unset, None, str] = UNSET,
+    has_albums: Union[Unset, None, bool] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    name: Union[Unset, None, str] = UNSET,
+    name_icontains: Union[Unset, None, str] = UNSET,
+    name_iexact: Union[Unset, None, str] = UNSET,
+    name_startswith: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetArtistFetchesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Dict[str, Any]:
+    url = "{}/api/v1/artists/{id}/fetches/".format(client.base_url, id=id)
+
+    headers: Dict[str, str] = client.get_headers()
+    cookies: Dict[str, Any] = client.get_cookies()
+
+    params: Dict[str, Any] = {}
+    params["content_category"] = content_category
+
+    params["has_albums"] = has_albums
+
+    params["hidden"] = hidden
+
+    params["include_channels"] = include_channels
+
+    params["library"] = library
+
+    params["mbid"] = mbid
+
+    params["name"] = name
+
+    params["name__icontains"] = name_icontains
+
+    params["name__iexact"] = name_iexact
+
+    params["name__startswith"] = name_startswith
+
+    json_ordering: Union[Unset, None, List[str]] = UNSET
+    if not isinstance(ordering, Unset):
+        if ordering is None:
+            json_ordering = None
+        else:
+            json_ordering = []
+            for ordering_item_data in ordering:
+                ordering_item = ordering_item_data.value
+
+                json_ordering.append(ordering_item)
+
+    params["ordering"] = json_ordering
+
+    params["page"] = page
+
+    params["page_size"] = page_size
+
+    params["playable"] = playable
+
+    params["q"] = q
+
+    params["related"] = related
+
+    params["scope"] = scope
+
+    json_tag: Union[Unset, None, List[str]] = UNSET
+    if not isinstance(tag, Unset):
+        if tag is None:
+            json_tag = None
+        else:
+            json_tag = tag
+
+    params["tag"] = json_tag
+
+    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[PaginatedFetchList]:
+    if response.status_code == 200:
+        response_200 = PaginatedFetchList.from_dict(response.json())
+
+        return response_200
+    return None
+
+
+def _build_response(*, response: httpx.Response) -> Response[PaginatedFetchList]:
+    return Response(
+        status_code=response.status_code,
+        content=response.content,
+        headers=response.headers,
+        parsed=_parse_response(response=response),
+    )
+
+
+def sync_detailed(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    content_category: Union[Unset, None, str] = UNSET,
+    has_albums: Union[Unset, None, bool] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    name: Union[Unset, None, str] = UNSET,
+    name_icontains: Union[Unset, None, str] = UNSET,
+    name_iexact: Union[Unset, None, str] = UNSET,
+    name_startswith: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetArtistFetchesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Response[PaginatedFetchList]:
+    """
+    Args:
+        id (int):
+        content_category (Union[Unset, None, str]):
+        has_albums (Union[Unset, None, bool]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        name (Union[Unset, None, str]):
+        name_icontains (Union[Unset, None, str]):
+        name_iexact (Union[Unset, None, str]):
+        name_startswith (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetArtistFetchesOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+
+    Returns:
+        Response[PaginatedFetchList]
+    """
+
+    kwargs = _get_kwargs(
+        id=id,
+        client=client,
+        content_category=content_category,
+        has_albums=has_albums,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        mbid=mbid,
+        name=name,
+        name_icontains=name_icontains,
+        name_iexact=name_iexact,
+        name_startswith=name_startswith,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+    )
+
+    response = httpx.request(
+        verify=client.verify_ssl,
+        **kwargs,
+    )
+
+    return _build_response(response=response)
+
+
+def sync(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    content_category: Union[Unset, None, str] = UNSET,
+    has_albums: Union[Unset, None, bool] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    name: Union[Unset, None, str] = UNSET,
+    name_icontains: Union[Unset, None, str] = UNSET,
+    name_iexact: Union[Unset, None, str] = UNSET,
+    name_startswith: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetArtistFetchesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Optional[PaginatedFetchList]:
+    """
+    Args:
+        id (int):
+        content_category (Union[Unset, None, str]):
+        has_albums (Union[Unset, None, bool]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        name (Union[Unset, None, str]):
+        name_icontains (Union[Unset, None, str]):
+        name_iexact (Union[Unset, None, str]):
+        name_startswith (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetArtistFetchesOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+
+    Returns:
+        Response[PaginatedFetchList]
+    """
+
+    return sync_detailed(
+        id=id,
+        client=client,
+        content_category=content_category,
+        has_albums=has_albums,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        mbid=mbid,
+        name=name,
+        name_icontains=name_icontains,
+        name_iexact=name_iexact,
+        name_startswith=name_startswith,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+    ).parsed
+
+
+async def asyncio_detailed(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    content_category: Union[Unset, None, str] = UNSET,
+    has_albums: Union[Unset, None, bool] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    name: Union[Unset, None, str] = UNSET,
+    name_icontains: Union[Unset, None, str] = UNSET,
+    name_iexact: Union[Unset, None, str] = UNSET,
+    name_startswith: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetArtistFetchesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Response[PaginatedFetchList]:
+    """
+    Args:
+        id (int):
+        content_category (Union[Unset, None, str]):
+        has_albums (Union[Unset, None, bool]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        name (Union[Unset, None, str]):
+        name_icontains (Union[Unset, None, str]):
+        name_iexact (Union[Unset, None, str]):
+        name_startswith (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetArtistFetchesOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+
+    Returns:
+        Response[PaginatedFetchList]
+    """
+
+    kwargs = _get_kwargs(
+        id=id,
+        client=client,
+        content_category=content_category,
+        has_albums=has_albums,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        mbid=mbid,
+        name=name,
+        name_icontains=name_icontains,
+        name_iexact=name_iexact,
+        name_startswith=name_startswith,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+    )
+
+    async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
+        response = await _client.request(**kwargs)
+
+    return _build_response(response=response)
+
+
+async def asyncio(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    content_category: Union[Unset, None, str] = UNSET,
+    has_albums: Union[Unset, None, bool] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    name: Union[Unset, None, str] = UNSET,
+    name_icontains: Union[Unset, None, str] = UNSET,
+    name_iexact: Union[Unset, None, str] = UNSET,
+    name_startswith: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetArtistFetchesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Optional[PaginatedFetchList]:
+    """
+    Args:
+        id (int):
+        content_category (Union[Unset, None, str]):
+        has_albums (Union[Unset, None, bool]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        name (Union[Unset, None, str]):
+        name_icontains (Union[Unset, None, str]):
+        name_iexact (Union[Unset, None, str]):
+        name_startswith (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetArtistFetchesOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+
+    Returns:
+        Response[PaginatedFetchList]
+    """
+
+    return (
+        await asyncio_detailed(
+            id=id,
+            client=client,
+            content_category=content_category,
+            has_albums=has_albums,
+            hidden=hidden,
+            include_channels=include_channels,
+            library=library,
+            mbid=mbid,
+            name=name,
+            name_icontains=name_icontains,
+            name_iexact=name_iexact,
+            name_startswith=name_startswith,
+            ordering=ordering,
+            page=page,
+            page_size=page_size,
+            playable=playable,
+            q=q,
+            related=related,
+            scope=scope,
+            tag=tag,
+        )
+    ).parsed
diff --git a/funkwhale_api_client/api/artists/get_artist_libraries.py b/funkwhale_api_client/api/artists/get_artist_libraries.py
new file mode 100644
index 0000000..5fe7350
--- /dev/null
+++ b/funkwhale_api_client/api/artists/get_artist_libraries.py
@@ -0,0 +1,426 @@
+from typing import Any, Dict, List, Optional, Union
+
+import httpx
+
+from ...client import AuthenticatedClient
+from ...models.get_artist_libraries_ordering_item import GetArtistLibrariesOrderingItem
+from ...models.paginated_library_list import PaginatedLibraryList
+from ...types import UNSET, Response, Unset
+
+
+def _get_kwargs(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    content_category: Union[Unset, None, str] = UNSET,
+    has_albums: Union[Unset, None, bool] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    name: Union[Unset, None, str] = UNSET,
+    name_icontains: Union[Unset, None, str] = UNSET,
+    name_iexact: Union[Unset, None, str] = UNSET,
+    name_startswith: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetArtistLibrariesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Dict[str, Any]:
+    url = "{}/api/v1/artists/{id}/libraries/".format(client.base_url, id=id)
+
+    headers: Dict[str, str] = client.get_headers()
+    cookies: Dict[str, Any] = client.get_cookies()
+
+    params: Dict[str, Any] = {}
+    params["content_category"] = content_category
+
+    params["has_albums"] = has_albums
+
+    params["hidden"] = hidden
+
+    params["include_channels"] = include_channels
+
+    params["library"] = library
+
+    params["mbid"] = mbid
+
+    params["name"] = name
+
+    params["name__icontains"] = name_icontains
+
+    params["name__iexact"] = name_iexact
+
+    params["name__startswith"] = name_startswith
+
+    json_ordering: Union[Unset, None, List[str]] = UNSET
+    if not isinstance(ordering, Unset):
+        if ordering is None:
+            json_ordering = None
+        else:
+            json_ordering = []
+            for ordering_item_data in ordering:
+                ordering_item = ordering_item_data.value
+
+                json_ordering.append(ordering_item)
+
+    params["ordering"] = json_ordering
+
+    params["page"] = page
+
+    params["page_size"] = page_size
+
+    params["playable"] = playable
+
+    params["q"] = q
+
+    params["related"] = related
+
+    params["scope"] = scope
+
+    json_tag: Union[Unset, None, List[str]] = UNSET
+    if not isinstance(tag, Unset):
+        if tag is None:
+            json_tag = None
+        else:
+            json_tag = tag
+
+    params["tag"] = json_tag
+
+    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[PaginatedLibraryList]:
+    if response.status_code == 200:
+        response_200 = PaginatedLibraryList.from_dict(response.json())
+
+        return response_200
+    return None
+
+
+def _build_response(*, response: httpx.Response) -> Response[PaginatedLibraryList]:
+    return Response(
+        status_code=response.status_code,
+        content=response.content,
+        headers=response.headers,
+        parsed=_parse_response(response=response),
+    )
+
+
+def sync_detailed(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    content_category: Union[Unset, None, str] = UNSET,
+    has_albums: Union[Unset, None, bool] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    name: Union[Unset, None, str] = UNSET,
+    name_icontains: Union[Unset, None, str] = UNSET,
+    name_iexact: Union[Unset, None, str] = UNSET,
+    name_startswith: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetArtistLibrariesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Response[PaginatedLibraryList]:
+    """
+    Args:
+        id (int):
+        content_category (Union[Unset, None, str]):
+        has_albums (Union[Unset, None, bool]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        name (Union[Unset, None, str]):
+        name_icontains (Union[Unset, None, str]):
+        name_iexact (Union[Unset, None, str]):
+        name_startswith (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetArtistLibrariesOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+
+    Returns:
+        Response[PaginatedLibraryList]
+    """
+
+    kwargs = _get_kwargs(
+        id=id,
+        client=client,
+        content_category=content_category,
+        has_albums=has_albums,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        mbid=mbid,
+        name=name,
+        name_icontains=name_icontains,
+        name_iexact=name_iexact,
+        name_startswith=name_startswith,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+    )
+
+    response = httpx.request(
+        verify=client.verify_ssl,
+        **kwargs,
+    )
+
+    return _build_response(response=response)
+
+
+def sync(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    content_category: Union[Unset, None, str] = UNSET,
+    has_albums: Union[Unset, None, bool] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    name: Union[Unset, None, str] = UNSET,
+    name_icontains: Union[Unset, None, str] = UNSET,
+    name_iexact: Union[Unset, None, str] = UNSET,
+    name_startswith: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetArtistLibrariesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Optional[PaginatedLibraryList]:
+    """
+    Args:
+        id (int):
+        content_category (Union[Unset, None, str]):
+        has_albums (Union[Unset, None, bool]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        name (Union[Unset, None, str]):
+        name_icontains (Union[Unset, None, str]):
+        name_iexact (Union[Unset, None, str]):
+        name_startswith (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetArtistLibrariesOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+
+    Returns:
+        Response[PaginatedLibraryList]
+    """
+
+    return sync_detailed(
+        id=id,
+        client=client,
+        content_category=content_category,
+        has_albums=has_albums,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        mbid=mbid,
+        name=name,
+        name_icontains=name_icontains,
+        name_iexact=name_iexact,
+        name_startswith=name_startswith,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+    ).parsed
+
+
+async def asyncio_detailed(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    content_category: Union[Unset, None, str] = UNSET,
+    has_albums: Union[Unset, None, bool] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    name: Union[Unset, None, str] = UNSET,
+    name_icontains: Union[Unset, None, str] = UNSET,
+    name_iexact: Union[Unset, None, str] = UNSET,
+    name_startswith: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetArtistLibrariesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Response[PaginatedLibraryList]:
+    """
+    Args:
+        id (int):
+        content_category (Union[Unset, None, str]):
+        has_albums (Union[Unset, None, bool]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        name (Union[Unset, None, str]):
+        name_icontains (Union[Unset, None, str]):
+        name_iexact (Union[Unset, None, str]):
+        name_startswith (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetArtistLibrariesOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+
+    Returns:
+        Response[PaginatedLibraryList]
+    """
+
+    kwargs = _get_kwargs(
+        id=id,
+        client=client,
+        content_category=content_category,
+        has_albums=has_albums,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        mbid=mbid,
+        name=name,
+        name_icontains=name_icontains,
+        name_iexact=name_iexact,
+        name_startswith=name_startswith,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+    )
+
+    async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
+        response = await _client.request(**kwargs)
+
+    return _build_response(response=response)
+
+
+async def asyncio(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    content_category: Union[Unset, None, str] = UNSET,
+    has_albums: Union[Unset, None, bool] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    name: Union[Unset, None, str] = UNSET,
+    name_icontains: Union[Unset, None, str] = UNSET,
+    name_iexact: Union[Unset, None, str] = UNSET,
+    name_startswith: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetArtistLibrariesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Optional[PaginatedLibraryList]:
+    """
+    Args:
+        id (int):
+        content_category (Union[Unset, None, str]):
+        has_albums (Union[Unset, None, bool]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        name (Union[Unset, None, str]):
+        name_icontains (Union[Unset, None, str]):
+        name_iexact (Union[Unset, None, str]):
+        name_startswith (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetArtistLibrariesOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+
+    Returns:
+        Response[PaginatedLibraryList]
+    """
+
+    return (
+        await asyncio_detailed(
+            id=id,
+            client=client,
+            content_category=content_category,
+            has_albums=has_albums,
+            hidden=hidden,
+            include_channels=include_channels,
+            library=library,
+            mbid=mbid,
+            name=name,
+            name_icontains=name_icontains,
+            name_iexact=name_iexact,
+            name_startswith=name_startswith,
+            ordering=ordering,
+            page=page,
+            page_size=page_size,
+            playable=playable,
+            q=q,
+            related=related,
+            scope=scope,
+            tag=tag,
+        )
+    ).parsed
diff --git a/funkwhale_api_client/api/artists/get_artist_mutations.py b/funkwhale_api_client/api/artists/get_artist_mutations.py
new file mode 100644
index 0000000..6c2bf0e
--- /dev/null
+++ b/funkwhale_api_client/api/artists/get_artist_mutations.py
@@ -0,0 +1,426 @@
+from typing import Any, Dict, List, Optional, Union
+
+import httpx
+
+from ...client import AuthenticatedClient
+from ...models.get_artist_mutations_ordering_item import GetArtistMutationsOrderingItem
+from ...models.paginated_api_mutation_list import PaginatedAPIMutationList
+from ...types import UNSET, Response, Unset
+
+
+def _get_kwargs(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    content_category: Union[Unset, None, str] = UNSET,
+    has_albums: Union[Unset, None, bool] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    name: Union[Unset, None, str] = UNSET,
+    name_icontains: Union[Unset, None, str] = UNSET,
+    name_iexact: Union[Unset, None, str] = UNSET,
+    name_startswith: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetArtistMutationsOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Dict[str, Any]:
+    url = "{}/api/v1/artists/{id}/mutations/".format(client.base_url, id=id)
+
+    headers: Dict[str, str] = client.get_headers()
+    cookies: Dict[str, Any] = client.get_cookies()
+
+    params: Dict[str, Any] = {}
+    params["content_category"] = content_category
+
+    params["has_albums"] = has_albums
+
+    params["hidden"] = hidden
+
+    params["include_channels"] = include_channels
+
+    params["library"] = library
+
+    params["mbid"] = mbid
+
+    params["name"] = name
+
+    params["name__icontains"] = name_icontains
+
+    params["name__iexact"] = name_iexact
+
+    params["name__startswith"] = name_startswith
+
+    json_ordering: Union[Unset, None, List[str]] = UNSET
+    if not isinstance(ordering, Unset):
+        if ordering is None:
+            json_ordering = None
+        else:
+            json_ordering = []
+            for ordering_item_data in ordering:
+                ordering_item = ordering_item_data.value
+
+                json_ordering.append(ordering_item)
+
+    params["ordering"] = json_ordering
+
+    params["page"] = page
+
+    params["page_size"] = page_size
+
+    params["playable"] = playable
+
+    params["q"] = q
+
+    params["related"] = related
+
+    params["scope"] = scope
+
+    json_tag: Union[Unset, None, List[str]] = UNSET
+    if not isinstance(tag, Unset):
+        if tag is None:
+            json_tag = None
+        else:
+            json_tag = tag
+
+    params["tag"] = json_tag
+
+    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[PaginatedAPIMutationList]:
+    if response.status_code == 200:
+        response_200 = PaginatedAPIMutationList.from_dict(response.json())
+
+        return response_200
+    return None
+
+
+def _build_response(*, response: httpx.Response) -> Response[PaginatedAPIMutationList]:
+    return Response(
+        status_code=response.status_code,
+        content=response.content,
+        headers=response.headers,
+        parsed=_parse_response(response=response),
+    )
+
+
+def sync_detailed(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    content_category: Union[Unset, None, str] = UNSET,
+    has_albums: Union[Unset, None, bool] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    name: Union[Unset, None, str] = UNSET,
+    name_icontains: Union[Unset, None, str] = UNSET,
+    name_iexact: Union[Unset, None, str] = UNSET,
+    name_startswith: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetArtistMutationsOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Response[PaginatedAPIMutationList]:
+    """
+    Args:
+        id (int):
+        content_category (Union[Unset, None, str]):
+        has_albums (Union[Unset, None, bool]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        name (Union[Unset, None, str]):
+        name_icontains (Union[Unset, None, str]):
+        name_iexact (Union[Unset, None, str]):
+        name_startswith (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetArtistMutationsOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+
+    Returns:
+        Response[PaginatedAPIMutationList]
+    """
+
+    kwargs = _get_kwargs(
+        id=id,
+        client=client,
+        content_category=content_category,
+        has_albums=has_albums,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        mbid=mbid,
+        name=name,
+        name_icontains=name_icontains,
+        name_iexact=name_iexact,
+        name_startswith=name_startswith,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+    )
+
+    response = httpx.request(
+        verify=client.verify_ssl,
+        **kwargs,
+    )
+
+    return _build_response(response=response)
+
+
+def sync(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    content_category: Union[Unset, None, str] = UNSET,
+    has_albums: Union[Unset, None, bool] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    name: Union[Unset, None, str] = UNSET,
+    name_icontains: Union[Unset, None, str] = UNSET,
+    name_iexact: Union[Unset, None, str] = UNSET,
+    name_startswith: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetArtistMutationsOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Optional[PaginatedAPIMutationList]:
+    """
+    Args:
+        id (int):
+        content_category (Union[Unset, None, str]):
+        has_albums (Union[Unset, None, bool]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        name (Union[Unset, None, str]):
+        name_icontains (Union[Unset, None, str]):
+        name_iexact (Union[Unset, None, str]):
+        name_startswith (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetArtistMutationsOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+
+    Returns:
+        Response[PaginatedAPIMutationList]
+    """
+
+    return sync_detailed(
+        id=id,
+        client=client,
+        content_category=content_category,
+        has_albums=has_albums,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        mbid=mbid,
+        name=name,
+        name_icontains=name_icontains,
+        name_iexact=name_iexact,
+        name_startswith=name_startswith,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+    ).parsed
+
+
+async def asyncio_detailed(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    content_category: Union[Unset, None, str] = UNSET,
+    has_albums: Union[Unset, None, bool] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    name: Union[Unset, None, str] = UNSET,
+    name_icontains: Union[Unset, None, str] = UNSET,
+    name_iexact: Union[Unset, None, str] = UNSET,
+    name_startswith: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetArtistMutationsOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Response[PaginatedAPIMutationList]:
+    """
+    Args:
+        id (int):
+        content_category (Union[Unset, None, str]):
+        has_albums (Union[Unset, None, bool]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        name (Union[Unset, None, str]):
+        name_icontains (Union[Unset, None, str]):
+        name_iexact (Union[Unset, None, str]):
+        name_startswith (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetArtistMutationsOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+
+    Returns:
+        Response[PaginatedAPIMutationList]
+    """
+
+    kwargs = _get_kwargs(
+        id=id,
+        client=client,
+        content_category=content_category,
+        has_albums=has_albums,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        mbid=mbid,
+        name=name,
+        name_icontains=name_icontains,
+        name_iexact=name_iexact,
+        name_startswith=name_startswith,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+    )
+
+    async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
+        response = await _client.request(**kwargs)
+
+    return _build_response(response=response)
+
+
+async def asyncio(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    content_category: Union[Unset, None, str] = UNSET,
+    has_albums: Union[Unset, None, bool] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    name: Union[Unset, None, str] = UNSET,
+    name_icontains: Union[Unset, None, str] = UNSET,
+    name_iexact: Union[Unset, None, str] = UNSET,
+    name_startswith: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetArtistMutationsOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+) -> Optional[PaginatedAPIMutationList]:
+    """
+    Args:
+        id (int):
+        content_category (Union[Unset, None, str]):
+        has_albums (Union[Unset, None, bool]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        name (Union[Unset, None, str]):
+        name_icontains (Union[Unset, None, str]):
+        name_iexact (Union[Unset, None, str]):
+        name_startswith (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetArtistMutationsOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+
+    Returns:
+        Response[PaginatedAPIMutationList]
+    """
+
+    return (
+        await asyncio_detailed(
+            id=id,
+            client=client,
+            content_category=content_category,
+            has_albums=has_albums,
+            hidden=hidden,
+            include_channels=include_channels,
+            library=library,
+            mbid=mbid,
+            name=name,
+            name_icontains=name_icontains,
+            name_iexact=name_iexact,
+            name_startswith=name_startswith,
+            ordering=ordering,
+            page=page,
+            page_size=page_size,
+            playable=playable,
+            q=q,
+            related=related,
+            scope=scope,
+            tag=tag,
+        )
+    ).parsed
diff --git a/funkwhale_api_client/api/artists/artists_list.py b/funkwhale_api_client/api/artists/get_artists.py
similarity index 94%
rename from funkwhale_api_client/api/artists/artists_list.py
rename to funkwhale_api_client/api/artists/get_artists.py
index 508f311..5fa251c 100644
--- a/funkwhale_api_client/api/artists/artists_list.py
+++ b/funkwhale_api_client/api/artists/get_artists.py
@@ -3,7 +3,7 @@ from typing import Any, Dict, List, Optional, Union
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.artists_list_ordering_item import ArtistsListOrderingItem
+from ...models.get_artists_ordering_item import GetArtistsOrderingItem
 from ...models.paginated_artist_with_albums_list import PaginatedArtistWithAlbumsList
 from ...types import UNSET, Response, Unset
 
@@ -21,7 +21,7 @@ def _get_kwargs(
     name_icontains: Union[Unset, None, str] = UNSET,
     name_iexact: Union[Unset, None, str] = UNSET,
     name_startswith: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[ArtistsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetArtistsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     playable: Union[Unset, None, bool] = UNSET,
@@ -132,7 +132,7 @@ def sync_detailed(
     name_icontains: Union[Unset, None, str] = UNSET,
     name_iexact: Union[Unset, None, str] = UNSET,
     name_startswith: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[ArtistsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetArtistsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     playable: Union[Unset, None, bool] = UNSET,
@@ -153,7 +153,7 @@ def sync_detailed(
         name_icontains (Union[Unset, None, str]):
         name_iexact (Union[Unset, None, str]):
         name_startswith (Union[Unset, None, str]):
-        ordering (Union[Unset, None, List[ArtistsListOrderingItem]]):
+        ordering (Union[Unset, None, List[GetArtistsOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         playable (Union[Unset, None, bool]):
@@ -209,7 +209,7 @@ def sync(
     name_icontains: Union[Unset, None, str] = UNSET,
     name_iexact: Union[Unset, None, str] = UNSET,
     name_startswith: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[ArtistsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetArtistsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     playable: Union[Unset, None, bool] = UNSET,
@@ -230,7 +230,7 @@ def sync(
         name_icontains (Union[Unset, None, str]):
         name_iexact (Union[Unset, None, str]):
         name_startswith (Union[Unset, None, str]):
-        ordering (Union[Unset, None, List[ArtistsListOrderingItem]]):
+        ordering (Union[Unset, None, List[GetArtistsOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         playable (Union[Unset, None, bool]):
@@ -279,7 +279,7 @@ async def asyncio_detailed(
     name_icontains: Union[Unset, None, str] = UNSET,
     name_iexact: Union[Unset, None, str] = UNSET,
     name_startswith: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[ArtistsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetArtistsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     playable: Union[Unset, None, bool] = UNSET,
@@ -300,7 +300,7 @@ async def asyncio_detailed(
         name_icontains (Union[Unset, None, str]):
         name_iexact (Union[Unset, None, str]):
         name_startswith (Union[Unset, None, str]):
-        ordering (Union[Unset, None, List[ArtistsListOrderingItem]]):
+        ordering (Union[Unset, None, List[GetArtistsOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         playable (Union[Unset, None, bool]):
@@ -354,7 +354,7 @@ async def asyncio(
     name_icontains: Union[Unset, None, str] = UNSET,
     name_iexact: Union[Unset, None, str] = UNSET,
     name_startswith: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[ArtistsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetArtistsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     playable: Union[Unset, None, bool] = UNSET,
@@ -375,7 +375,7 @@ async def asyncio(
         name_icontains (Union[Unset, None, str]):
         name_iexact (Union[Unset, None, str]):
         name_startswith (Union[Unset, None, str]):
-        ordering (Union[Unset, None, List[ArtistsListOrderingItem]]):
+        ordering (Union[Unset, None, List[GetArtistsOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         playable (Union[Unset, None, bool]):
diff --git a/funkwhale_api_client/api/attachments/attachments_create.py b/funkwhale_api_client/api/attachments/create_attachment.py
similarity index 100%
rename from funkwhale_api_client/api/attachments/attachments_create.py
rename to funkwhale_api_client/api/attachments/create_attachment.py
diff --git a/funkwhale_api_client/api/attachments/attachments_destroy.py b/funkwhale_api_client/api/attachments/delete_attachment.py
similarity index 100%
rename from funkwhale_api_client/api/attachments/attachments_destroy.py
rename to funkwhale_api_client/api/attachments/delete_attachment.py
diff --git a/funkwhale_api_client/api/attachments/attachments_retrieve.py b/funkwhale_api_client/api/attachments/get_attachment.py
similarity index 100%
rename from funkwhale_api_client/api/attachments/attachments_retrieve.py
rename to funkwhale_api_client/api/attachments/get_attachment.py
diff --git a/funkwhale_api_client/api/attachments/attachments_proxy_retrieve.py b/funkwhale_api_client/api/attachments/get_attachment_proxy.py
similarity index 100%
rename from funkwhale_api_client/api/attachments/attachments_proxy_retrieve.py
rename to funkwhale_api_client/api/attachments/get_attachment_proxy.py
diff --git a/funkwhale_api_client/api/auth/auth_password_change_create.py b/funkwhale_api_client/api/auth/change_password.py
similarity index 100%
rename from funkwhale_api_client/api/auth/auth_password_change_create.py
rename to funkwhale_api_client/api/auth/change_password.py
diff --git a/funkwhale_api_client/api/auth/auth_registration_change_password_create.py b/funkwhale_api_client/api/auth/change_password_2.py
similarity index 100%
rename from funkwhale_api_client/api/auth/auth_registration_change_password_create.py
rename to funkwhale_api_client/api/auth/change_password_2.py
diff --git a/funkwhale_api_client/api/auth/auth_password_reset_confirm_create.py b/funkwhale_api_client/api/auth/confirm_password_reset.py
similarity index 100%
rename from funkwhale_api_client/api/auth/auth_password_reset_confirm_create.py
rename to funkwhale_api_client/api/auth/confirm_password_reset.py
diff --git a/funkwhale_api_client/api/auth/auth_user_retrieve.py b/funkwhale_api_client/api/auth/get_auth_user.py
similarity index 100%
rename from funkwhale_api_client/api/auth/auth_user_retrieve.py
rename to funkwhale_api_client/api/auth/get_auth_user.py
diff --git a/funkwhale_api_client/api/auth/auth_user_partial_update.py b/funkwhale_api_client/api/auth/partial_update_auth_user.py
similarity index 100%
rename from funkwhale_api_client/api/auth/auth_user_partial_update.py
rename to funkwhale_api_client/api/auth/partial_update_auth_user.py
diff --git a/funkwhale_api_client/api/auth/auth_registration_create.py b/funkwhale_api_client/api/auth/register.py
similarity index 100%
rename from funkwhale_api_client/api/auth/auth_registration_create.py
rename to funkwhale_api_client/api/auth/register.py
diff --git a/funkwhale_api_client/api/auth/auth_password_reset_create.py b/funkwhale_api_client/api/auth/reset_password.py
similarity index 100%
rename from funkwhale_api_client/api/auth/auth_password_reset_create.py
rename to funkwhale_api_client/api/auth/reset_password.py
diff --git a/funkwhale_api_client/api/auth/auth_user_update.py b/funkwhale_api_client/api/auth/update_auth_user.py
similarity index 100%
rename from funkwhale_api_client/api/auth/auth_user_update.py
rename to funkwhale_api_client/api/auth/update_auth_user.py
diff --git a/funkwhale_api_client/api/auth/auth_registration_verify_email_create.py b/funkwhale_api_client/api/auth/verify_email.py
similarity index 100%
rename from funkwhale_api_client/api/auth/auth_registration_verify_email_create.py
rename to funkwhale_api_client/api/auth/verify_email.py
diff --git a/funkwhale_api_client/api/channels/channels_create.py b/funkwhale_api_client/api/channels/create_channel.py
similarity index 100%
rename from funkwhale_api_client/api/channels/channels_create.py
rename to funkwhale_api_client/api/channels/create_channel.py
diff --git a/funkwhale_api_client/api/channels/channels_destroy.py b/funkwhale_api_client/api/channels/delete_channel.py
similarity index 100%
rename from funkwhale_api_client/api/channels/channels_destroy.py
rename to funkwhale_api_client/api/channels/delete_channel.py
diff --git a/funkwhale_api_client/api/channels/channels_retrieve.py b/funkwhale_api_client/api/channels/get_channel.py
similarity index 100%
rename from funkwhale_api_client/api/channels/channels_retrieve.py
rename to funkwhale_api_client/api/channels/get_channel.py
diff --git a/funkwhale_api_client/api/channels/channels_metadata_choices_retrieve.py b/funkwhale_api_client/api/channels/get_channel_metadata_choices.py
similarity index 100%
rename from funkwhale_api_client/api/channels/channels_metadata_choices_retrieve.py
rename to funkwhale_api_client/api/channels/get_channel_metadata_choices.py
diff --git a/funkwhale_api_client/api/channels/channels_rss_retrieve.py b/funkwhale_api_client/api/channels/get_channel_rss.py
similarity index 100%
rename from funkwhale_api_client/api/channels/channels_rss_retrieve.py
rename to funkwhale_api_client/api/channels/get_channel_rss.py
diff --git a/funkwhale_api_client/api/channels/channels_list.py b/funkwhale_api_client/api/channels/get_channels.py
similarity index 91%
rename from funkwhale_api_client/api/channels/channels_list.py
rename to funkwhale_api_client/api/channels/get_channels.py
index 0168365..535a4b2 100644
--- a/funkwhale_api_client/api/channels/channels_list.py
+++ b/funkwhale_api_client/api/channels/get_channels.py
@@ -3,7 +3,7 @@ from typing import Any, Dict, List, Optional, Union
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.channels_list_ordering_item import ChannelsListOrderingItem
+from ...models.get_channels_ordering_item import GetChannelsOrderingItem
 from ...models.paginated_channel_list import PaginatedChannelList
 from ...types import UNSET, Response, Unset
 
@@ -13,7 +13,7 @@ def _get_kwargs(
     client: AuthenticatedClient,
     external: Union[Unset, None, bool] = UNSET,
     hidden: Union[Unset, None, bool] = UNSET,
-    ordering: Union[Unset, None, List[ChannelsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetChannelsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
@@ -97,7 +97,7 @@ def sync_detailed(
     client: AuthenticatedClient,
     external: Union[Unset, None, bool] = UNSET,
     hidden: Union[Unset, None, bool] = UNSET,
-    ordering: Union[Unset, None, List[ChannelsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetChannelsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
@@ -109,7 +109,7 @@ def sync_detailed(
     Args:
         external (Union[Unset, None, bool]):
         hidden (Union[Unset, None, bool]):
-        ordering (Union[Unset, None, List[ChannelsListOrderingItem]]):
+        ordering (Union[Unset, None, List[GetChannelsOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         q (Union[Unset, None, str]):
@@ -147,7 +147,7 @@ def sync(
     client: AuthenticatedClient,
     external: Union[Unset, None, bool] = UNSET,
     hidden: Union[Unset, None, bool] = UNSET,
-    ordering: Union[Unset, None, List[ChannelsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetChannelsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
@@ -159,7 +159,7 @@ def sync(
     Args:
         external (Union[Unset, None, bool]):
         hidden (Union[Unset, None, bool]):
-        ordering (Union[Unset, None, List[ChannelsListOrderingItem]]):
+        ordering (Union[Unset, None, List[GetChannelsOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         q (Union[Unset, None, str]):
@@ -190,7 +190,7 @@ async def asyncio_detailed(
     client: AuthenticatedClient,
     external: Union[Unset, None, bool] = UNSET,
     hidden: Union[Unset, None, bool] = UNSET,
-    ordering: Union[Unset, None, List[ChannelsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetChannelsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
@@ -202,7 +202,7 @@ async def asyncio_detailed(
     Args:
         external (Union[Unset, None, bool]):
         hidden (Union[Unset, None, bool]):
-        ordering (Union[Unset, None, List[ChannelsListOrderingItem]]):
+        ordering (Union[Unset, None, List[GetChannelsOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         q (Union[Unset, None, str]):
@@ -238,7 +238,7 @@ async def asyncio(
     client: AuthenticatedClient,
     external: Union[Unset, None, bool] = UNSET,
     hidden: Union[Unset, None, bool] = UNSET,
-    ordering: Union[Unset, None, List[ChannelsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetChannelsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
@@ -250,7 +250,7 @@ async def asyncio(
     Args:
         external (Union[Unset, None, bool]):
         hidden (Union[Unset, None, bool]):
-        ordering (Union[Unset, None, List[ChannelsListOrderingItem]]):
+        ordering (Union[Unset, None, List[GetChannelsOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         q (Union[Unset, None, str]):
diff --git a/funkwhale_api_client/api/channels/channels_partial_update.py b/funkwhale_api_client/api/channels/partial_update_channel.py
similarity index 100%
rename from funkwhale_api_client/api/channels/channels_partial_update.py
rename to funkwhale_api_client/api/channels/partial_update_channel.py
diff --git a/funkwhale_api_client/api/channels/channels_subscribe_create.py b/funkwhale_api_client/api/channels/subscribe_channel.py
similarity index 100%
rename from funkwhale_api_client/api/channels/channels_subscribe_create.py
rename to funkwhale_api_client/api/channels/subscribe_channel.py
diff --git a/funkwhale_api_client/api/channels/channels_rss_subscribe_create.py b/funkwhale_api_client/api/channels/subscribe_channel_rss.py
similarity index 100%
rename from funkwhale_api_client/api/channels/channels_rss_subscribe_create.py
rename to funkwhale_api_client/api/channels/subscribe_channel_rss.py
diff --git a/funkwhale_api_client/api/channels/channels_unsubscribe_destroy.py b/funkwhale_api_client/api/channels/unsubscribe_channel.py
similarity index 100%
rename from funkwhale_api_client/api/channels/channels_unsubscribe_destroy.py
rename to funkwhale_api_client/api/channels/unsubscribe_channel.py
diff --git a/funkwhale_api_client/api/channels/channels_unsubscribe_create.py b/funkwhale_api_client/api/channels/unsubscribe_channel_2.py
similarity index 100%
rename from funkwhale_api_client/api/channels/channels_unsubscribe_create.py
rename to funkwhale_api_client/api/channels/unsubscribe_channel_2.py
diff --git a/funkwhale_api_client/api/channels/channels_update.py b/funkwhale_api_client/api/channels/update_channel.py
similarity index 100%
rename from funkwhale_api_client/api/channels/channels_update.py
rename to funkwhale_api_client/api/channels/update_channel.py
diff --git a/funkwhale_api_client/api/favorites/favorites_tracks_destroy.py b/funkwhale_api_client/api/favorites/delete_favorite_track.py
similarity index 100%
rename from funkwhale_api_client/api/favorites/favorites_tracks_destroy.py
rename to funkwhale_api_client/api/favorites/delete_favorite_track.py
diff --git a/funkwhale_api_client/api/favorites/favorites_tracks_create.py b/funkwhale_api_client/api/favorites/favorite_track.py
similarity index 100%
rename from funkwhale_api_client/api/favorites/favorites_tracks_create.py
rename to funkwhale_api_client/api/favorites/favorite_track.py
diff --git a/funkwhale_api_client/api/favorites/favorites_tracks_all_retrieve.py b/funkwhale_api_client/api/favorites/get_all_favorite_tracks.py
similarity index 100%
rename from funkwhale_api_client/api/favorites/favorites_tracks_all_retrieve.py
rename to funkwhale_api_client/api/favorites/get_all_favorite_tracks.py
diff --git a/funkwhale_api_client/api/favorites/favorites_tracks_list.py b/funkwhale_api_client/api/favorites/get_favorite_tracks.py
similarity index 100%
rename from funkwhale_api_client/api/favorites/favorites_tracks_list.py
rename to funkwhale_api_client/api/favorites/get_favorite_tracks.py
diff --git a/funkwhale_api_client/api/favorites/favorites_tracks_remove_destroy.py b/funkwhale_api_client/api/favorites/unfavorite_track.py
similarity index 100%
rename from funkwhale_api_client/api/favorites/favorites_tracks_remove_destroy.py
rename to funkwhale_api_client/api/favorites/unfavorite_track.py
diff --git a/funkwhale_api_client/api/favorites/favorites_tracks_remove_create.py b/funkwhale_api_client/api/favorites/unfavorite_track_2.py
similarity index 100%
rename from funkwhale_api_client/api/favorites/favorites_tracks_remove_create.py
rename to funkwhale_api_client/api/favorites/unfavorite_track_2.py
diff --git a/funkwhale_api_client/api/federation/federation_follows_library_accept_create.py b/funkwhale_api_client/api/federation/accept_federation_library_follow.py
similarity index 100%
rename from funkwhale_api_client/api/federation/federation_follows_library_accept_create.py
rename to funkwhale_api_client/api/federation/accept_federation_library_follow.py
diff --git a/funkwhale_api_client/api/federation/federation_fetches_create.py b/funkwhale_api_client/api/federation/create_federation_fetch.py
similarity index 100%
rename from funkwhale_api_client/api/federation/federation_fetches_create.py
rename to funkwhale_api_client/api/federation/create_federation_fetch.py
diff --git a/funkwhale_api_client/api/federation/federation_inbox_action_create.py b/funkwhale_api_client/api/federation/create_federation_inbox_action.py
similarity index 100%
rename from funkwhale_api_client/api/federation/federation_inbox_action_create.py
rename to funkwhale_api_client/api/federation/create_federation_inbox_action.py
diff --git a/funkwhale_api_client/api/federation/federation_libraries_fetch_create.py b/funkwhale_api_client/api/federation/create_federation_library_fetch.py
similarity index 100%
rename from funkwhale_api_client/api/federation/federation_libraries_fetch_create.py
rename to funkwhale_api_client/api/federation/create_federation_library_fetch.py
diff --git a/funkwhale_api_client/api/federation/federation_follows_library_create.py b/funkwhale_api_client/api/federation/create_federation_library_follow.py
similarity index 100%
rename from funkwhale_api_client/api/federation/federation_follows_library_create.py
rename to funkwhale_api_client/api/federation/create_federation_library_follow.py
diff --git a/funkwhale_api_client/api/federation/federation_libraries_scan_create.py b/funkwhale_api_client/api/federation/create_federation_library_scan.py
similarity index 100%
rename from funkwhale_api_client/api/federation/federation_libraries_scan_create.py
rename to funkwhale_api_client/api/federation/create_federation_library_scan.py
diff --git a/funkwhale_api_client/api/federation/federation_follows_library_destroy.py b/funkwhale_api_client/api/federation/delete_federation_library_follow.py
similarity index 100%
rename from funkwhale_api_client/api/federation/federation_follows_library_destroy.py
rename to funkwhale_api_client/api/federation/delete_federation_library_follow.py
diff --git a/funkwhale_api_client/api/federation/federation_follows_library_all_retrieve.py b/funkwhale_api_client/api/federation/get_all_federation_library_follows.py
similarity index 100%
rename from funkwhale_api_client/api/federation/federation_follows_library_all_retrieve.py
rename to funkwhale_api_client/api/federation/get_all_federation_library_follows.py
diff --git a/funkwhale_api_client/api/federation/federation_actors_retrieve.py b/funkwhale_api_client/api/federation/get_federation_actor.py
similarity index 100%
rename from funkwhale_api_client/api/federation/federation_actors_retrieve.py
rename to funkwhale_api_client/api/federation/get_federation_actor.py
diff --git a/funkwhale_api_client/api/federation/federation_actors_libraries_retrieve.py b/funkwhale_api_client/api/federation/get_federation_actor_library.py
similarity index 100%
rename from funkwhale_api_client/api/federation/federation_actors_libraries_retrieve.py
rename to funkwhale_api_client/api/federation/get_federation_actor_library.py
diff --git a/funkwhale_api_client/api/federation/federation_domains_retrieve.py b/funkwhale_api_client/api/federation/get_federation_domain.py
similarity index 100%
rename from funkwhale_api_client/api/federation/federation_domains_retrieve.py
rename to funkwhale_api_client/api/federation/get_federation_domain.py
diff --git a/funkwhale_api_client/api/federation/federation_domains_list.py b/funkwhale_api_client/api/federation/get_federation_domains.py
similarity index 100%
rename from funkwhale_api_client/api/federation/federation_domains_list.py
rename to funkwhale_api_client/api/federation/get_federation_domains.py
diff --git a/funkwhale_api_client/api/federation/federation_fetches_retrieve.py b/funkwhale_api_client/api/federation/get_federation_fetch.py
similarity index 100%
rename from funkwhale_api_client/api/federation/federation_fetches_retrieve.py
rename to funkwhale_api_client/api/federation/get_federation_fetch.py
diff --git a/funkwhale_api_client/api/federation/federation_inbox_retrieve.py b/funkwhale_api_client/api/federation/get_federation_inbox.py
similarity index 100%
rename from funkwhale_api_client/api/federation/federation_inbox_retrieve.py
rename to funkwhale_api_client/api/federation/get_federation_inbox.py
diff --git a/funkwhale_api_client/api/federation/federation_inbox_list.py b/funkwhale_api_client/api/federation/get_federation_inboxes.py
similarity index 100%
rename from funkwhale_api_client/api/federation/federation_inbox_list.py
rename to funkwhale_api_client/api/federation/get_federation_inboxes.py
diff --git a/funkwhale_api_client/api/federation/federation_libraries_retrieve.py b/funkwhale_api_client/api/federation/get_federation_library.py
similarity index 100%
rename from funkwhale_api_client/api/federation/federation_libraries_retrieve.py
rename to funkwhale_api_client/api/federation/get_federation_library.py
diff --git a/funkwhale_api_client/api/federation/federation_follows_library_retrieve.py b/funkwhale_api_client/api/federation/get_federation_library_follow.py
similarity index 100%
rename from funkwhale_api_client/api/federation/federation_follows_library_retrieve.py
rename to funkwhale_api_client/api/federation/get_federation_library_follow.py
diff --git a/funkwhale_api_client/api/federation/federation_follows_library_list.py b/funkwhale_api_client/api/federation/get_federation_library_follows.py
similarity index 100%
rename from funkwhale_api_client/api/federation/federation_follows_library_list.py
rename to funkwhale_api_client/api/federation/get_federation_library_follows.py
diff --git a/funkwhale_api_client/api/federation/federation_inbox_partial_update.py b/funkwhale_api_client/api/federation/partial_update_federation_inbox.py
similarity index 100%
rename from funkwhale_api_client/api/federation/federation_inbox_partial_update.py
rename to funkwhale_api_client/api/federation/partial_update_federation_inbox.py
diff --git a/funkwhale_api_client/api/federation/federation_follows_library_reject_create.py b/funkwhale_api_client/api/federation/reject_federation_library_follow.py
similarity index 100%
rename from funkwhale_api_client/api/federation/federation_follows_library_reject_create.py
rename to funkwhale_api_client/api/federation/reject_federation_library_follow.py
diff --git a/funkwhale_api_client/api/federation/federation_inbox_update.py b/funkwhale_api_client/api/federation/update_federation_inbox.py
similarity index 100%
rename from funkwhale_api_client/api/federation/federation_inbox_update.py
rename to funkwhale_api_client/api/federation/update_federation_inbox.py
diff --git a/funkwhale_api_client/api/history/history_listenings_create.py b/funkwhale_api_client/api/history/create_history_listening.py
similarity index 100%
rename from funkwhale_api_client/api/history/history_listenings_create.py
rename to funkwhale_api_client/api/history/create_history_listening.py
diff --git a/funkwhale_api_client/api/history/history_listenings_retrieve.py b/funkwhale_api_client/api/history/get_history_listening.py
similarity index 100%
rename from funkwhale_api_client/api/history/history_listenings_retrieve.py
rename to funkwhale_api_client/api/history/get_history_listening.py
diff --git a/funkwhale_api_client/api/history/history_listenings_list.py b/funkwhale_api_client/api/history/get_history_listenings.py
similarity index 100%
rename from funkwhale_api_client/api/history/history_listenings_list.py
rename to funkwhale_api_client/api/history/get_history_listenings.py
diff --git a/funkwhale_api_client/api/instance/instance_admin_settings_bulk_create.py b/funkwhale_api_client/api/instance/create_instance_admin_setting_bulk.py
similarity index 100%
rename from funkwhale_api_client/api/instance/instance_admin_settings_bulk_create.py
rename to funkwhale_api_client/api/instance/create_instance_admin_setting_bulk.py
diff --git a/funkwhale_api_client/api/instance/instance_admin_settings_retrieve.py b/funkwhale_api_client/api/instance/get_instance_admin_setting.py
similarity index 100%
rename from funkwhale_api_client/api/instance/instance_admin_settings_retrieve.py
rename to funkwhale_api_client/api/instance/get_instance_admin_setting.py
diff --git a/funkwhale_api_client/api/instance/instance_admin_settings_list.py b/funkwhale_api_client/api/instance/get_instance_admin_settings.py
similarity index 100%
rename from funkwhale_api_client/api/instance/instance_admin_settings_list.py
rename to funkwhale_api_client/api/instance/get_instance_admin_settings.py
diff --git a/funkwhale_api_client/api/instance/instance_nodeinfo_2_0_retrieve.py b/funkwhale_api_client/api/instance/get_instance_nodeinfo_2_0.py
similarity index 100%
rename from funkwhale_api_client/api/instance/instance_nodeinfo_2_0_retrieve.py
rename to funkwhale_api_client/api/instance/get_instance_nodeinfo_2_0.py
diff --git a/funkwhale_api_client/api/instance/instance_settings_retrieve.py b/funkwhale_api_client/api/instance/get_instance_settings.py
similarity index 100%
rename from funkwhale_api_client/api/instance/instance_settings_retrieve.py
rename to funkwhale_api_client/api/instance/get_instance_settings.py
diff --git a/funkwhale_api_client/api/instance/instance_spa_manifest_json_retrieve.py b/funkwhale_api_client/api/instance/get_spa_manifest.py
similarity index 100%
rename from funkwhale_api_client/api/instance/instance_spa_manifest_json_retrieve.py
rename to funkwhale_api_client/api/instance/get_spa_manifest.py
diff --git a/funkwhale_api_client/api/instance/instance_admin_settings_partial_update.py b/funkwhale_api_client/api/instance/partial_update_instance_admin_setting.py
similarity index 100%
rename from funkwhale_api_client/api/instance/instance_admin_settings_partial_update.py
rename to funkwhale_api_client/api/instance/partial_update_instance_admin_setting.py
diff --git a/funkwhale_api_client/api/instance/instance_admin_settings_update.py b/funkwhale_api_client/api/instance/update_instance_admin_setting.py
similarity index 100%
rename from funkwhale_api_client/api/instance/instance_admin_settings_update.py
rename to funkwhale_api_client/api/instance/update_instance_admin_setting.py
diff --git a/funkwhale_api_client/api/libraries/libraries_create.py b/funkwhale_api_client/api/libraries/create_library.py
similarity index 100%
rename from funkwhale_api_client/api/libraries/libraries_create.py
rename to funkwhale_api_client/api/libraries/create_library.py
diff --git a/funkwhale_api_client/api/libraries/libraries_fs_import_create.py b/funkwhale_api_client/api/libraries/create_library_fs_import.py
similarity index 100%
rename from funkwhale_api_client/api/libraries/libraries_fs_import_create.py
rename to funkwhale_api_client/api/libraries/create_library_fs_import.py
diff --git a/funkwhale_api_client/api/libraries/libraries_destroy.py b/funkwhale_api_client/api/libraries/delete_library.py
similarity index 100%
rename from funkwhale_api_client/api/libraries/libraries_destroy.py
rename to funkwhale_api_client/api/libraries/delete_library.py
diff --git a/funkwhale_api_client/api/libraries/libraries_fs_import_destroy.py b/funkwhale_api_client/api/libraries/delete_library_fs_import.py
similarity index 100%
rename from funkwhale_api_client/api/libraries/libraries_fs_import_destroy.py
rename to funkwhale_api_client/api/libraries/delete_library_fs_import.py
diff --git a/funkwhale_api_client/api/libraries/libraries_list.py b/funkwhale_api_client/api/libraries/get_libraries.py
similarity index 88%
rename from funkwhale_api_client/api/libraries/libraries_list.py
rename to funkwhale_api_client/api/libraries/get_libraries.py
index 452c205..bf71aa5 100644
--- a/funkwhale_api_client/api/libraries/libraries_list.py
+++ b/funkwhale_api_client/api/libraries/get_libraries.py
@@ -3,7 +3,7 @@ from typing import Any, Dict, Optional, Union
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.libraries_list_privacy_level import LibrariesListPrivacyLevel
+from ...models.get_libraries_privacy_level import GetLibrariesPrivacyLevel
 from ...models.paginated_library_for_owner_list import PaginatedLibraryForOwnerList
 from ...types import UNSET, Response, Unset
 
@@ -14,7 +14,7 @@ def _get_kwargs(
     ordering: Union[Unset, None, str] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
-    privacy_level: Union[Unset, None, LibrariesListPrivacyLevel] = UNSET,
+    privacy_level: Union[Unset, None, GetLibrariesPrivacyLevel] = UNSET,
     q: Union[Unset, None, str] = UNSET,
     scope: Union[Unset, None, str] = UNSET,
 ) -> Dict[str, Any]:
@@ -75,7 +75,7 @@ def sync_detailed(
     ordering: Union[Unset, None, str] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
-    privacy_level: Union[Unset, None, LibrariesListPrivacyLevel] = UNSET,
+    privacy_level: Union[Unset, None, GetLibrariesPrivacyLevel] = UNSET,
     q: Union[Unset, None, str] = UNSET,
     scope: Union[Unset, None, str] = UNSET,
 ) -> Response[PaginatedLibraryForOwnerList]:
@@ -84,7 +84,7 @@ def sync_detailed(
         ordering (Union[Unset, None, str]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
-        privacy_level (Union[Unset, None, LibrariesListPrivacyLevel]):
+        privacy_level (Union[Unset, None, GetLibrariesPrivacyLevel]):
         q (Union[Unset, None, str]):
         scope (Union[Unset, None, str]):
 
@@ -116,7 +116,7 @@ def sync(
     ordering: Union[Unset, None, str] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
-    privacy_level: Union[Unset, None, LibrariesListPrivacyLevel] = UNSET,
+    privacy_level: Union[Unset, None, GetLibrariesPrivacyLevel] = UNSET,
     q: Union[Unset, None, str] = UNSET,
     scope: Union[Unset, None, str] = UNSET,
 ) -> Optional[PaginatedLibraryForOwnerList]:
@@ -125,7 +125,7 @@ def sync(
         ordering (Union[Unset, None, str]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
-        privacy_level (Union[Unset, None, LibrariesListPrivacyLevel]):
+        privacy_level (Union[Unset, None, GetLibrariesPrivacyLevel]):
         q (Union[Unset, None, str]):
         scope (Union[Unset, None, str]):
 
@@ -150,7 +150,7 @@ async def asyncio_detailed(
     ordering: Union[Unset, None, str] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
-    privacy_level: Union[Unset, None, LibrariesListPrivacyLevel] = UNSET,
+    privacy_level: Union[Unset, None, GetLibrariesPrivacyLevel] = UNSET,
     q: Union[Unset, None, str] = UNSET,
     scope: Union[Unset, None, str] = UNSET,
 ) -> Response[PaginatedLibraryForOwnerList]:
@@ -159,7 +159,7 @@ async def asyncio_detailed(
         ordering (Union[Unset, None, str]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
-        privacy_level (Union[Unset, None, LibrariesListPrivacyLevel]):
+        privacy_level (Union[Unset, None, GetLibrariesPrivacyLevel]):
         q (Union[Unset, None, str]):
         scope (Union[Unset, None, str]):
 
@@ -189,7 +189,7 @@ async def asyncio(
     ordering: Union[Unset, None, str] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
-    privacy_level: Union[Unset, None, LibrariesListPrivacyLevel] = UNSET,
+    privacy_level: Union[Unset, None, GetLibrariesPrivacyLevel] = UNSET,
     q: Union[Unset, None, str] = UNSET,
     scope: Union[Unset, None, str] = UNSET,
 ) -> Optional[PaginatedLibraryForOwnerList]:
@@ -198,7 +198,7 @@ async def asyncio(
         ordering (Union[Unset, None, str]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
-        privacy_level (Union[Unset, None, LibrariesListPrivacyLevel]):
+        privacy_level (Union[Unset, None, GetLibrariesPrivacyLevel]):
         q (Union[Unset, None, str]):
         scope (Union[Unset, None, str]):
 
diff --git a/funkwhale_api_client/api/libraries/libraries_retrieve.py b/funkwhale_api_client/api/libraries/get_library.py
similarity index 100%
rename from funkwhale_api_client/api/libraries/libraries_retrieve.py
rename to funkwhale_api_client/api/libraries/get_library.py
diff --git a/funkwhale_api_client/api/libraries/libraries_follows_retrieve.py b/funkwhale_api_client/api/libraries/get_library_follow.py
similarity index 100%
rename from funkwhale_api_client/api/libraries/libraries_follows_retrieve.py
rename to funkwhale_api_client/api/libraries/get_library_follow.py
diff --git a/funkwhale_api_client/api/libraries/libraries_fs_import_retrieve.py b/funkwhale_api_client/api/libraries/get_library_fs_import.py
similarity index 100%
rename from funkwhale_api_client/api/libraries/libraries_fs_import_retrieve.py
rename to funkwhale_api_client/api/libraries/get_library_fs_import.py
diff --git a/funkwhale_api_client/api/libraries/libraries_partial_update.py b/funkwhale_api_client/api/libraries/partial_update_library.py
similarity index 100%
rename from funkwhale_api_client/api/libraries/libraries_partial_update.py
rename to funkwhale_api_client/api/libraries/partial_update_library.py
diff --git a/funkwhale_api_client/api/libraries/libraries_update.py b/funkwhale_api_client/api/libraries/update_library.py
similarity index 100%
rename from funkwhale_api_client/api/libraries/libraries_update.py
rename to funkwhale_api_client/api/libraries/update_library.py
diff --git a/funkwhale_api_client/api/licenses/licenses_retrieve.py b/funkwhale_api_client/api/licenses/get_license.py
similarity index 100%
rename from funkwhale_api_client/api/licenses/licenses_retrieve.py
rename to funkwhale_api_client/api/licenses/get_license.py
diff --git a/funkwhale_api_client/api/licenses/licenses_list.py b/funkwhale_api_client/api/licenses/get_licenses.py
similarity index 100%
rename from funkwhale_api_client/api/licenses/licenses_list.py
rename to funkwhale_api_client/api/licenses/get_licenses.py
diff --git a/funkwhale_api_client/api/listen/listen_retrieve.py b/funkwhale_api_client/api/listen/get_listen.py
similarity index 100%
rename from funkwhale_api_client/api/listen/listen_retrieve.py
rename to funkwhale_api_client/api/listen/get_listen.py
diff --git a/funkwhale_api_client/api/manage/manage_accounts_action_create.py b/funkwhale_api_client/api/manage/admin_create_account_action.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_accounts_action_create.py
rename to funkwhale_api_client/api/manage/admin_create_account_action.py
diff --git a/funkwhale_api_client/api/manage/manage_library_albums_action_create.py b/funkwhale_api_client/api/manage/admin_create_album_action.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_library_albums_action_create.py
rename to funkwhale_api_client/api/manage/admin_create_album_action.py
diff --git a/funkwhale_api_client/api/manage/manage_library_artists_action_create.py b/funkwhale_api_client/api/manage/admin_create_artist_action.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_library_artists_action_create.py
rename to funkwhale_api_client/api/manage/admin_create_artist_action.py
diff --git a/funkwhale_api_client/api/manage/manage_federation_domains_create.py b/funkwhale_api_client/api/manage/admin_create_federation_domain.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_federation_domains_create.py
rename to funkwhale_api_client/api/manage/admin_create_federation_domain.py
diff --git a/funkwhale_api_client/api/manage/manage_federation_domains_action_create.py b/funkwhale_api_client/api/manage/admin_create_federation_domain_action.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_federation_domains_action_create.py
rename to funkwhale_api_client/api/manage/admin_create_federation_domain_action.py
diff --git a/funkwhale_api_client/api/manage/manage_users_invitations_create.py b/funkwhale_api_client/api/manage/admin_create_invitation.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_users_invitations_create.py
rename to funkwhale_api_client/api/manage/admin_create_invitation.py
diff --git a/funkwhale_api_client/api/manage/manage_users_invitations_action_create.py b/funkwhale_api_client/api/manage/admin_create_invitation_action.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_users_invitations_action_create.py
rename to funkwhale_api_client/api/manage/admin_create_invitation_action.py
diff --git a/funkwhale_api_client/api/manage/manage_library_libraries_action_create.py b/funkwhale_api_client/api/manage/admin_create_library_action.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_library_libraries_action_create.py
rename to funkwhale_api_client/api/manage/admin_create_library_action.py
diff --git a/funkwhale_api_client/api/manage/manage_tags_create.py b/funkwhale_api_client/api/manage/admin_create_tag.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_tags_create.py
rename to funkwhale_api_client/api/manage/admin_create_tag.py
diff --git a/funkwhale_api_client/api/manage/manage_tags_action_create.py b/funkwhale_api_client/api/manage/admin_create_tag_action.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_tags_action_create.py
rename to funkwhale_api_client/api/manage/admin_create_tag_action.py
diff --git a/funkwhale_api_client/api/manage/manage_library_tracks_action_create.py b/funkwhale_api_client/api/manage/admin_create_track_action.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_library_tracks_action_create.py
rename to funkwhale_api_client/api/manage/admin_create_track_action.py
diff --git a/funkwhale_api_client/api/manage/manage_library_uploads_action_create.py b/funkwhale_api_client/api/manage/admin_create_upload_action.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_library_uploads_action_create.py
rename to funkwhale_api_client/api/manage/admin_create_upload_action.py
diff --git a/funkwhale_api_client/api/manage/manage_library_albums_destroy.py b/funkwhale_api_client/api/manage/admin_delete_album.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_library_albums_destroy.py
rename to funkwhale_api_client/api/manage/admin_delete_album.py
diff --git a/funkwhale_api_client/api/manage/manage_library_artists_destroy.py b/funkwhale_api_client/api/manage/admin_delete_artist.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_library_artists_destroy.py
rename to funkwhale_api_client/api/manage/admin_delete_artist.py
diff --git a/funkwhale_api_client/api/manage/manage_channels_destroy.py b/funkwhale_api_client/api/manage/admin_delete_channel.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_channels_destroy.py
rename to funkwhale_api_client/api/manage/admin_delete_channel.py
diff --git a/funkwhale_api_client/api/manage/manage_library_libraries_destroy.py b/funkwhale_api_client/api/manage/admin_delete_library.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_library_libraries_destroy.py
rename to funkwhale_api_client/api/manage/admin_delete_library.py
diff --git a/funkwhale_api_client/api/manage/manage_tags_destroy.py b/funkwhale_api_client/api/manage/admin_delete_tag.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_tags_destroy.py
rename to funkwhale_api_client/api/manage/admin_delete_tag.py
diff --git a/funkwhale_api_client/api/manage/manage_library_tracks_destroy.py b/funkwhale_api_client/api/manage/admin_delete_track.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_library_tracks_destroy.py
rename to funkwhale_api_client/api/manage/admin_delete_track.py
diff --git a/funkwhale_api_client/api/manage/manage_library_uploads_destroy.py b/funkwhale_api_client/api/manage/admin_delete_upload.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_library_uploads_destroy.py
rename to funkwhale_api_client/api/manage/admin_delete_upload.py
diff --git a/funkwhale_api_client/api/manage/manage_accounts_retrieve.py b/funkwhale_api_client/api/manage/admin_get_account.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_accounts_retrieve.py
rename to funkwhale_api_client/api/manage/admin_get_account.py
diff --git a/funkwhale_api_client/api/manage/manage_accounts_stats_retrieve.py b/funkwhale_api_client/api/manage/admin_get_account_stats.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_accounts_stats_retrieve.py
rename to funkwhale_api_client/api/manage/admin_get_account_stats.py
diff --git a/funkwhale_api_client/api/manage/manage_accounts_list.py b/funkwhale_api_client/api/manage/admin_get_accounts.py
similarity index 91%
rename from funkwhale_api_client/api/manage/manage_accounts_list.py
rename to funkwhale_api_client/api/manage/admin_get_accounts.py
index 4170c20..32cb820 100644
--- a/funkwhale_api_client/api/manage/manage_accounts_list.py
+++ b/funkwhale_api_client/api/manage/admin_get_accounts.py
@@ -3,7 +3,7 @@ from typing import Any, Dict, Optional, Union
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.manage_accounts_list_type import ManageAccountsListType
+from ...models.admin_get_accounts_type import AdminGetAccountsType
 from ...models.paginated_manage_actor_list import PaginatedManageActorList
 from ...types import UNSET, Response, Unset
 
@@ -18,7 +18,7 @@ def _get_kwargs(
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
-    type: Union[Unset, None, ManageAccountsListType] = UNSET,
+    type: Union[Unset, None, AdminGetAccountsType] = UNSET,
 ) -> Dict[str, Any]:
     url = "{}/api/v1/manage/accounts/".format(client.base_url)
 
@@ -85,7 +85,7 @@ def sync_detailed(
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
-    type: Union[Unset, None, ManageAccountsListType] = UNSET,
+    type: Union[Unset, None, AdminGetAccountsType] = UNSET,
 ) -> Response[PaginatedManageActorList]:
     """
     Args:
@@ -96,7 +96,7 @@ def sync_detailed(
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         q (Union[Unset, None, str]):
-        type (Union[Unset, None, ManageAccountsListType]):
+        type (Union[Unset, None, AdminGetAccountsType]):
 
     Returns:
         Response[PaginatedManageActorList]
@@ -132,7 +132,7 @@ def sync(
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
-    type: Union[Unset, None, ManageAccountsListType] = UNSET,
+    type: Union[Unset, None, AdminGetAccountsType] = UNSET,
 ) -> Optional[PaginatedManageActorList]:
     """
     Args:
@@ -143,7 +143,7 @@ def sync(
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         q (Union[Unset, None, str]):
-        type (Union[Unset, None, ManageAccountsListType]):
+        type (Union[Unset, None, AdminGetAccountsType]):
 
     Returns:
         Response[PaginatedManageActorList]
@@ -172,7 +172,7 @@ async def asyncio_detailed(
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
-    type: Union[Unset, None, ManageAccountsListType] = UNSET,
+    type: Union[Unset, None, AdminGetAccountsType] = UNSET,
 ) -> Response[PaginatedManageActorList]:
     """
     Args:
@@ -183,7 +183,7 @@ async def asyncio_detailed(
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         q (Union[Unset, None, str]):
-        type (Union[Unset, None, ManageAccountsListType]):
+        type (Union[Unset, None, AdminGetAccountsType]):
 
     Returns:
         Response[PaginatedManageActorList]
@@ -217,7 +217,7 @@ async def asyncio(
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
-    type: Union[Unset, None, ManageAccountsListType] = UNSET,
+    type: Union[Unset, None, AdminGetAccountsType] = UNSET,
 ) -> Optional[PaginatedManageActorList]:
     """
     Args:
@@ -228,7 +228,7 @@ async def asyncio(
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         q (Union[Unset, None, str]):
-        type (Union[Unset, None, ManageAccountsListType]):
+        type (Union[Unset, None, AdminGetAccountsType]):
 
     Returns:
         Response[PaginatedManageActorList]
diff --git a/funkwhale_api_client/api/manage/manage_library_albums_retrieve.py b/funkwhale_api_client/api/manage/admin_get_album.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_library_albums_retrieve.py
rename to funkwhale_api_client/api/manage/admin_get_album.py
diff --git a/funkwhale_api_client/api/manage/manage_library_albums_list.py b/funkwhale_api_client/api/manage/admin_get_albums.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_library_albums_list.py
rename to funkwhale_api_client/api/manage/admin_get_albums.py
diff --git a/funkwhale_api_client/api/manage/manage_library_artists_retrieve.py b/funkwhale_api_client/api/manage/admin_get_artist.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_library_artists_retrieve.py
rename to funkwhale_api_client/api/manage/admin_get_artist.py
diff --git a/funkwhale_api_client/api/manage/manage_library_artists_list.py b/funkwhale_api_client/api/manage/admin_get_artists.py
similarity index 87%
rename from funkwhale_api_client/api/manage/manage_library_artists_list.py
rename to funkwhale_api_client/api/manage/admin_get_artists.py
index 51a48ce..c993a1d 100644
--- a/funkwhale_api_client/api/manage/manage_library_artists_list.py
+++ b/funkwhale_api_client/api/manage/admin_get_artists.py
@@ -3,7 +3,7 @@ from typing import Any, Dict, Optional, Union
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.manage_library_artists_list_content_category import ManageLibraryArtistsListContentCategory
+from ...models.admin_get_artists_content_category import AdminGetArtistsContentCategory
 from ...models.paginated_manage_artist_list import PaginatedManageArtistList
 from ...types import UNSET, Response, Unset
 
@@ -11,7 +11,7 @@ from ...types import UNSET, Response, Unset
 def _get_kwargs(
     *,
     client: AuthenticatedClient,
-    content_category: Union[Unset, None, ManageLibraryArtistsListContentCategory] = UNSET,
+    content_category: Union[Unset, None, AdminGetArtistsContentCategory] = UNSET,
     fid: Union[Unset, None, str] = UNSET,
     mbid: Union[Unset, None, str] = UNSET,
     name: Union[Unset, None, str] = UNSET,
@@ -78,7 +78,7 @@ def _build_response(*, response: httpx.Response) -> Response[PaginatedManageArti
 def sync_detailed(
     *,
     client: AuthenticatedClient,
-    content_category: Union[Unset, None, ManageLibraryArtistsListContentCategory] = UNSET,
+    content_category: Union[Unset, None, AdminGetArtistsContentCategory] = UNSET,
     fid: Union[Unset, None, str] = UNSET,
     mbid: Union[Unset, None, str] = UNSET,
     name: Union[Unset, None, str] = UNSET,
@@ -89,7 +89,7 @@ def sync_detailed(
 ) -> Response[PaginatedManageArtistList]:
     """
     Args:
-        content_category (Union[Unset, None, ManageLibraryArtistsListContentCategory]):
+        content_category (Union[Unset, None, AdminGetArtistsContentCategory]):
         fid (Union[Unset, None, str]):
         mbid (Union[Unset, None, str]):
         name (Union[Unset, None, str]):
@@ -125,7 +125,7 @@ def sync_detailed(
 def sync(
     *,
     client: AuthenticatedClient,
-    content_category: Union[Unset, None, ManageLibraryArtistsListContentCategory] = UNSET,
+    content_category: Union[Unset, None, AdminGetArtistsContentCategory] = UNSET,
     fid: Union[Unset, None, str] = UNSET,
     mbid: Union[Unset, None, str] = UNSET,
     name: Union[Unset, None, str] = UNSET,
@@ -136,7 +136,7 @@ def sync(
 ) -> Optional[PaginatedManageArtistList]:
     """
     Args:
-        content_category (Union[Unset, None, ManageLibraryArtistsListContentCategory]):
+        content_category (Union[Unset, None, AdminGetArtistsContentCategory]):
         fid (Union[Unset, None, str]):
         mbid (Union[Unset, None, str]):
         name (Union[Unset, None, str]):
@@ -165,7 +165,7 @@ def sync(
 async def asyncio_detailed(
     *,
     client: AuthenticatedClient,
-    content_category: Union[Unset, None, ManageLibraryArtistsListContentCategory] = UNSET,
+    content_category: Union[Unset, None, AdminGetArtistsContentCategory] = UNSET,
     fid: Union[Unset, None, str] = UNSET,
     mbid: Union[Unset, None, str] = UNSET,
     name: Union[Unset, None, str] = UNSET,
@@ -176,7 +176,7 @@ async def asyncio_detailed(
 ) -> Response[PaginatedManageArtistList]:
     """
     Args:
-        content_category (Union[Unset, None, ManageLibraryArtistsListContentCategory]):
+        content_category (Union[Unset, None, AdminGetArtistsContentCategory]):
         fid (Union[Unset, None, str]):
         mbid (Union[Unset, None, str]):
         name (Union[Unset, None, str]):
@@ -210,7 +210,7 @@ async def asyncio_detailed(
 async def asyncio(
     *,
     client: AuthenticatedClient,
-    content_category: Union[Unset, None, ManageLibraryArtistsListContentCategory] = UNSET,
+    content_category: Union[Unset, None, AdminGetArtistsContentCategory] = UNSET,
     fid: Union[Unset, None, str] = UNSET,
     mbid: Union[Unset, None, str] = UNSET,
     name: Union[Unset, None, str] = UNSET,
@@ -221,7 +221,7 @@ async def asyncio(
 ) -> Optional[PaginatedManageArtistList]:
     """
     Args:
-        content_category (Union[Unset, None, ManageLibraryArtistsListContentCategory]):
+        content_category (Union[Unset, None, AdminGetArtistsContentCategory]):
         fid (Union[Unset, None, str]):
         mbid (Union[Unset, None, str]):
         name (Union[Unset, None, str]):
diff --git a/funkwhale_api_client/api/manage/manage_channels_retrieve.py b/funkwhale_api_client/api/manage/admin_get_channel.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_channels_retrieve.py
rename to funkwhale_api_client/api/manage/admin_get_channel.py
diff --git a/funkwhale_api_client/api/manage/manage_channels_stats_retrieve.py b/funkwhale_api_client/api/manage/admin_get_channel_stats.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_channels_stats_retrieve.py
rename to funkwhale_api_client/api/manage/admin_get_channel_stats.py
diff --git a/funkwhale_api_client/api/manage/manage_channels_list.py b/funkwhale_api_client/api/manage/admin_get_channels.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_channels_list.py
rename to funkwhale_api_client/api/manage/admin_get_channels.py
diff --git a/funkwhale_api_client/api/manage/manage_federation_domains_retrieve.py b/funkwhale_api_client/api/manage/admin_get_federation_domain.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_federation_domains_retrieve.py
rename to funkwhale_api_client/api/manage/admin_get_federation_domain.py
diff --git a/funkwhale_api_client/api/manage/manage_federation_domains_nodeinfo_retrieve.py b/funkwhale_api_client/api/manage/admin_get_federation_domain_nodeinfo.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_federation_domains_nodeinfo_retrieve.py
rename to funkwhale_api_client/api/manage/admin_get_federation_domain_nodeinfo.py
diff --git a/funkwhale_api_client/api/manage/manage_federation_domains_stats_retrieve.py b/funkwhale_api_client/api/manage/admin_get_federation_domain_stats.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_federation_domains_stats_retrieve.py
rename to funkwhale_api_client/api/manage/admin_get_federation_domain_stats.py
diff --git a/funkwhale_api_client/api/manage/manage_federation_domains_list.py b/funkwhale_api_client/api/manage/admin_get_federation_domains.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_federation_domains_list.py
rename to funkwhale_api_client/api/manage/admin_get_federation_domains.py
diff --git a/funkwhale_api_client/api/manage/manage_users_invitations_retrieve.py b/funkwhale_api_client/api/manage/admin_get_invitation.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_users_invitations_retrieve.py
rename to funkwhale_api_client/api/manage/admin_get_invitation.py
diff --git a/funkwhale_api_client/api/manage/manage_users_invitations_list.py b/funkwhale_api_client/api/manage/admin_get_invitations.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_users_invitations_list.py
rename to funkwhale_api_client/api/manage/admin_get_invitations.py
diff --git a/funkwhale_api_client/api/manage/manage_library_libraries_list.py b/funkwhale_api_client/api/manage/admin_get_libraries.py
similarity index 78%
rename from funkwhale_api_client/api/manage/manage_library_libraries_list.py
rename to funkwhale_api_client/api/manage/admin_get_libraries.py
index 41f806f..3b09ade 100644
--- a/funkwhale_api_client/api/manage/manage_library_libraries_list.py
+++ b/funkwhale_api_client/api/manage/admin_get_libraries.py
@@ -3,8 +3,8 @@ from typing import Any, Dict, List, Optional, Union
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.manage_library_libraries_list_ordering_item import ManageLibraryLibrariesListOrderingItem
-from ...models.manage_library_libraries_list_privacy_level import ManageLibraryLibrariesListPrivacyLevel
+from ...models.admin_get_libraries_ordering_item import AdminGetLibrariesOrderingItem
+from ...models.admin_get_libraries_privacy_level import AdminGetLibrariesPrivacyLevel
 from ...models.paginated_manage_library_list import PaginatedManageLibraryList
 from ...types import UNSET, Response, Unset
 
@@ -15,10 +15,10 @@ def _get_kwargs(
     domain: Union[Unset, None, str] = UNSET,
     fid: Union[Unset, None, str] = UNSET,
     name: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[ManageLibraryLibrariesListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[AdminGetLibrariesOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
-    privacy_level: Union[Unset, None, ManageLibraryLibrariesListPrivacyLevel] = UNSET,
+    privacy_level: Union[Unset, None, AdminGetLibrariesPrivacyLevel] = UNSET,
     q: Union[Unset, None, str] = UNSET,
 ) -> Dict[str, Any]:
     url = "{}/api/v1/manage/library/libraries/".format(client.base_url)
@@ -93,10 +93,10 @@ def sync_detailed(
     domain: Union[Unset, None, str] = UNSET,
     fid: Union[Unset, None, str] = UNSET,
     name: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[ManageLibraryLibrariesListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[AdminGetLibrariesOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
-    privacy_level: Union[Unset, None, ManageLibraryLibrariesListPrivacyLevel] = UNSET,
+    privacy_level: Union[Unset, None, AdminGetLibrariesPrivacyLevel] = UNSET,
     q: Union[Unset, None, str] = UNSET,
 ) -> Response[PaginatedManageLibraryList]:
     """
@@ -104,10 +104,10 @@ def sync_detailed(
         domain (Union[Unset, None, str]):
         fid (Union[Unset, None, str]):
         name (Union[Unset, None, str]):
-        ordering (Union[Unset, None, List[ManageLibraryLibrariesListOrderingItem]]):
+        ordering (Union[Unset, None, List[AdminGetLibrariesOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
-        privacy_level (Union[Unset, None, ManageLibraryLibrariesListPrivacyLevel]):
+        privacy_level (Union[Unset, None, AdminGetLibrariesPrivacyLevel]):
         q (Union[Unset, None, str]):
 
     Returns:
@@ -140,10 +140,10 @@ def sync(
     domain: Union[Unset, None, str] = UNSET,
     fid: Union[Unset, None, str] = UNSET,
     name: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[ManageLibraryLibrariesListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[AdminGetLibrariesOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
-    privacy_level: Union[Unset, None, ManageLibraryLibrariesListPrivacyLevel] = UNSET,
+    privacy_level: Union[Unset, None, AdminGetLibrariesPrivacyLevel] = UNSET,
     q: Union[Unset, None, str] = UNSET,
 ) -> Optional[PaginatedManageLibraryList]:
     """
@@ -151,10 +151,10 @@ def sync(
         domain (Union[Unset, None, str]):
         fid (Union[Unset, None, str]):
         name (Union[Unset, None, str]):
-        ordering (Union[Unset, None, List[ManageLibraryLibrariesListOrderingItem]]):
+        ordering (Union[Unset, None, List[AdminGetLibrariesOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
-        privacy_level (Union[Unset, None, ManageLibraryLibrariesListPrivacyLevel]):
+        privacy_level (Union[Unset, None, AdminGetLibrariesPrivacyLevel]):
         q (Union[Unset, None, str]):
 
     Returns:
@@ -180,10 +180,10 @@ async def asyncio_detailed(
     domain: Union[Unset, None, str] = UNSET,
     fid: Union[Unset, None, str] = UNSET,
     name: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[ManageLibraryLibrariesListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[AdminGetLibrariesOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
-    privacy_level: Union[Unset, None, ManageLibraryLibrariesListPrivacyLevel] = UNSET,
+    privacy_level: Union[Unset, None, AdminGetLibrariesPrivacyLevel] = UNSET,
     q: Union[Unset, None, str] = UNSET,
 ) -> Response[PaginatedManageLibraryList]:
     """
@@ -191,10 +191,10 @@ async def asyncio_detailed(
         domain (Union[Unset, None, str]):
         fid (Union[Unset, None, str]):
         name (Union[Unset, None, str]):
-        ordering (Union[Unset, None, List[ManageLibraryLibrariesListOrderingItem]]):
+        ordering (Union[Unset, None, List[AdminGetLibrariesOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
-        privacy_level (Union[Unset, None, ManageLibraryLibrariesListPrivacyLevel]):
+        privacy_level (Union[Unset, None, AdminGetLibrariesPrivacyLevel]):
         q (Union[Unset, None, str]):
 
     Returns:
@@ -225,10 +225,10 @@ async def asyncio(
     domain: Union[Unset, None, str] = UNSET,
     fid: Union[Unset, None, str] = UNSET,
     name: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[ManageLibraryLibrariesListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[AdminGetLibrariesOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
-    privacy_level: Union[Unset, None, ManageLibraryLibrariesListPrivacyLevel] = UNSET,
+    privacy_level: Union[Unset, None, AdminGetLibrariesPrivacyLevel] = UNSET,
     q: Union[Unset, None, str] = UNSET,
 ) -> Optional[PaginatedManageLibraryList]:
     """
@@ -236,10 +236,10 @@ async def asyncio(
         domain (Union[Unset, None, str]):
         fid (Union[Unset, None, str]):
         name (Union[Unset, None, str]):
-        ordering (Union[Unset, None, List[ManageLibraryLibrariesListOrderingItem]]):
+        ordering (Union[Unset, None, List[AdminGetLibrariesOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
-        privacy_level (Union[Unset, None, ManageLibraryLibrariesListPrivacyLevel]):
+        privacy_level (Union[Unset, None, AdminGetLibrariesPrivacyLevel]):
         q (Union[Unset, None, str]):
 
     Returns:
diff --git a/funkwhale_api_client/api/manage/manage_library_libraries_retrieve.py b/funkwhale_api_client/api/manage/admin_get_library.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_library_libraries_retrieve.py
rename to funkwhale_api_client/api/manage/admin_get_library.py
diff --git a/funkwhale_api_client/api/manage/manage_library_albums_stats_retrieve.py b/funkwhale_api_client/api/manage/admin_get_library_album_stats.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_library_albums_stats_retrieve.py
rename to funkwhale_api_client/api/manage/admin_get_library_album_stats.py
diff --git a/funkwhale_api_client/api/manage/manage_library_artists_stats_retrieve.py b/funkwhale_api_client/api/manage/admin_get_library_artist_stats.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_library_artists_stats_retrieve.py
rename to funkwhale_api_client/api/manage/admin_get_library_artist_stats.py
diff --git a/funkwhale_api_client/api/manage/manage_library_libraries_stats_retrieve.py b/funkwhale_api_client/api/manage/admin_get_library_stats.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_library_libraries_stats_retrieve.py
rename to funkwhale_api_client/api/manage/admin_get_library_stats.py
diff --git a/funkwhale_api_client/api/manage/manage_tags_retrieve.py b/funkwhale_api_client/api/manage/admin_get_tag.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_tags_retrieve.py
rename to funkwhale_api_client/api/manage/admin_get_tag.py
diff --git a/funkwhale_api_client/api/manage/manage_tags_list.py b/funkwhale_api_client/api/manage/admin_get_tags.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_tags_list.py
rename to funkwhale_api_client/api/manage/admin_get_tags.py
diff --git a/funkwhale_api_client/api/manage/manage_library_tracks_retrieve.py b/funkwhale_api_client/api/manage/admin_get_track.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_library_tracks_retrieve.py
rename to funkwhale_api_client/api/manage/admin_get_track.py
diff --git a/funkwhale_api_client/api/manage/manage_library_tracks_stats_retrieve.py b/funkwhale_api_client/api/manage/admin_get_track_stats.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_library_tracks_stats_retrieve.py
rename to funkwhale_api_client/api/manage/admin_get_track_stats.py
diff --git a/funkwhale_api_client/api/manage/manage_library_tracks_list.py b/funkwhale_api_client/api/manage/admin_get_tracks.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_library_tracks_list.py
rename to funkwhale_api_client/api/manage/admin_get_tracks.py
diff --git a/funkwhale_api_client/api/manage/manage_library_uploads_retrieve.py b/funkwhale_api_client/api/manage/admin_get_upload.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_library_uploads_retrieve.py
rename to funkwhale_api_client/api/manage/admin_get_upload.py
diff --git a/funkwhale_api_client/api/manage/manage_library_uploads_list.py b/funkwhale_api_client/api/manage/admin_get_uploads.py
similarity index 82%
rename from funkwhale_api_client/api/manage/manage_library_uploads_list.py
rename to funkwhale_api_client/api/manage/admin_get_uploads.py
index 3816bf4..c6cd61d 100644
--- a/funkwhale_api_client/api/manage/manage_library_uploads_list.py
+++ b/funkwhale_api_client/api/manage/admin_get_uploads.py
@@ -3,8 +3,8 @@ from typing import Any, Dict, List, Optional, Union
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.manage_library_uploads_list_import_status import ManageLibraryUploadsListImportStatus
-from ...models.manage_library_uploads_list_ordering_item import ManageLibraryUploadsListOrderingItem
+from ...models.admin_get_uploads_import_status import AdminGetUploadsImportStatus
+from ...models.admin_get_uploads_ordering_item import AdminGetUploadsOrderingItem
 from ...models.paginated_manage_upload_list import PaginatedManageUploadList
 from ...types import UNSET, Response, Unset
 
@@ -15,9 +15,9 @@ def _get_kwargs(
     domain: Union[Unset, None, str] = UNSET,
     fid: Union[Unset, None, str] = UNSET,
     import_reference: Union[Unset, None, str] = UNSET,
-    import_status: Union[Unset, None, ManageLibraryUploadsListImportStatus] = UNSET,
+    import_status: Union[Unset, None, AdminGetUploadsImportStatus] = UNSET,
     mimetype: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[ManageLibraryUploadsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[AdminGetUploadsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     privacy_level: Union[Unset, None, str] = UNSET,
@@ -99,9 +99,9 @@ def sync_detailed(
     domain: Union[Unset, None, str] = UNSET,
     fid: Union[Unset, None, str] = UNSET,
     import_reference: Union[Unset, None, str] = UNSET,
-    import_status: Union[Unset, None, ManageLibraryUploadsListImportStatus] = UNSET,
+    import_status: Union[Unset, None, AdminGetUploadsImportStatus] = UNSET,
     mimetype: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[ManageLibraryUploadsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[AdminGetUploadsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     privacy_level: Union[Unset, None, str] = UNSET,
@@ -112,9 +112,9 @@ def sync_detailed(
         domain (Union[Unset, None, str]):
         fid (Union[Unset, None, str]):
         import_reference (Union[Unset, None, str]):
-        import_status (Union[Unset, None, ManageLibraryUploadsListImportStatus]):
+        import_status (Union[Unset, None, AdminGetUploadsImportStatus]):
         mimetype (Union[Unset, None, str]):
-        ordering (Union[Unset, None, List[ManageLibraryUploadsListOrderingItem]]):
+        ordering (Union[Unset, None, List[AdminGetUploadsOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         privacy_level (Union[Unset, None, str]):
@@ -152,9 +152,9 @@ def sync(
     domain: Union[Unset, None, str] = UNSET,
     fid: Union[Unset, None, str] = UNSET,
     import_reference: Union[Unset, None, str] = UNSET,
-    import_status: Union[Unset, None, ManageLibraryUploadsListImportStatus] = UNSET,
+    import_status: Union[Unset, None, AdminGetUploadsImportStatus] = UNSET,
     mimetype: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[ManageLibraryUploadsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[AdminGetUploadsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     privacy_level: Union[Unset, None, str] = UNSET,
@@ -165,9 +165,9 @@ def sync(
         domain (Union[Unset, None, str]):
         fid (Union[Unset, None, str]):
         import_reference (Union[Unset, None, str]):
-        import_status (Union[Unset, None, ManageLibraryUploadsListImportStatus]):
+        import_status (Union[Unset, None, AdminGetUploadsImportStatus]):
         mimetype (Union[Unset, None, str]):
-        ordering (Union[Unset, None, List[ManageLibraryUploadsListOrderingItem]]):
+        ordering (Union[Unset, None, List[AdminGetUploadsOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         privacy_level (Union[Unset, None, str]):
@@ -198,9 +198,9 @@ async def asyncio_detailed(
     domain: Union[Unset, None, str] = UNSET,
     fid: Union[Unset, None, str] = UNSET,
     import_reference: Union[Unset, None, str] = UNSET,
-    import_status: Union[Unset, None, ManageLibraryUploadsListImportStatus] = UNSET,
+    import_status: Union[Unset, None, AdminGetUploadsImportStatus] = UNSET,
     mimetype: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[ManageLibraryUploadsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[AdminGetUploadsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     privacy_level: Union[Unset, None, str] = UNSET,
@@ -211,9 +211,9 @@ async def asyncio_detailed(
         domain (Union[Unset, None, str]):
         fid (Union[Unset, None, str]):
         import_reference (Union[Unset, None, str]):
-        import_status (Union[Unset, None, ManageLibraryUploadsListImportStatus]):
+        import_status (Union[Unset, None, AdminGetUploadsImportStatus]):
         mimetype (Union[Unset, None, str]):
-        ordering (Union[Unset, None, List[ManageLibraryUploadsListOrderingItem]]):
+        ordering (Union[Unset, None, List[AdminGetUploadsOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         privacy_level (Union[Unset, None, str]):
@@ -249,9 +249,9 @@ async def asyncio(
     domain: Union[Unset, None, str] = UNSET,
     fid: Union[Unset, None, str] = UNSET,
     import_reference: Union[Unset, None, str] = UNSET,
-    import_status: Union[Unset, None, ManageLibraryUploadsListImportStatus] = UNSET,
+    import_status: Union[Unset, None, AdminGetUploadsImportStatus] = UNSET,
     mimetype: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[ManageLibraryUploadsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[AdminGetUploadsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     privacy_level: Union[Unset, None, str] = UNSET,
@@ -262,9 +262,9 @@ async def asyncio(
         domain (Union[Unset, None, str]):
         fid (Union[Unset, None, str]):
         import_reference (Union[Unset, None, str]):
-        import_status (Union[Unset, None, ManageLibraryUploadsListImportStatus]):
+        import_status (Union[Unset, None, AdminGetUploadsImportStatus]):
         mimetype (Union[Unset, None, str]):
-        ordering (Union[Unset, None, List[ManageLibraryUploadsListOrderingItem]]):
+        ordering (Union[Unset, None, List[AdminGetUploadsOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         privacy_level (Union[Unset, None, str]):
diff --git a/funkwhale_api_client/api/manage/manage_users_users_retrieve.py b/funkwhale_api_client/api/manage/admin_get_user.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_users_users_retrieve.py
rename to funkwhale_api_client/api/manage/admin_get_user.py
diff --git a/funkwhale_api_client/api/manage/manage_users_users_list.py b/funkwhale_api_client/api/manage/admin_get_users.py
similarity index 91%
rename from funkwhale_api_client/api/manage/manage_users_users_list.py
rename to funkwhale_api_client/api/manage/admin_get_users.py
index d842a00..36fc9ab 100644
--- a/funkwhale_api_client/api/manage/manage_users_users_list.py
+++ b/funkwhale_api_client/api/manage/admin_get_users.py
@@ -3,7 +3,7 @@ from typing import Any, Dict, Optional, Union
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.manage_users_users_list_privacy_level import ManageUsersUsersListPrivacyLevel
+from ...models.admin_get_users_privacy_level import AdminGetUsersPrivacyLevel
 from ...models.paginated_manage_user_list import PaginatedManageUserList
 from ...types import UNSET, Response, Unset
 
@@ -20,7 +20,7 @@ def _get_kwargs(
     permission_library: Union[Unset, None, bool] = UNSET,
     permission_moderation: Union[Unset, None, bool] = UNSET,
     permission_settings: Union[Unset, None, bool] = UNSET,
-    privacy_level: Union[Unset, None, ManageUsersUsersListPrivacyLevel] = UNSET,
+    privacy_level: Union[Unset, None, AdminGetUsersPrivacyLevel] = UNSET,
     q: Union[Unset, None, str] = UNSET,
 ) -> Dict[str, Any]:
     url = "{}/api/v1/manage/users/users/".format(client.base_url)
@@ -96,7 +96,7 @@ def sync_detailed(
     permission_library: Union[Unset, None, bool] = UNSET,
     permission_moderation: Union[Unset, None, bool] = UNSET,
     permission_settings: Union[Unset, None, bool] = UNSET,
-    privacy_level: Union[Unset, None, ManageUsersUsersListPrivacyLevel] = UNSET,
+    privacy_level: Union[Unset, None, AdminGetUsersPrivacyLevel] = UNSET,
     q: Union[Unset, None, str] = UNSET,
 ) -> Response[PaginatedManageUserList]:
     """
@@ -110,7 +110,7 @@ def sync_detailed(
         permission_library (Union[Unset, None, bool]):
         permission_moderation (Union[Unset, None, bool]):
         permission_settings (Union[Unset, None, bool]):
-        privacy_level (Union[Unset, None, ManageUsersUsersListPrivacyLevel]):
+        privacy_level (Union[Unset, None, AdminGetUsersPrivacyLevel]):
         q (Union[Unset, None, str]):
 
     Returns:
@@ -152,7 +152,7 @@ def sync(
     permission_library: Union[Unset, None, bool] = UNSET,
     permission_moderation: Union[Unset, None, bool] = UNSET,
     permission_settings: Union[Unset, None, bool] = UNSET,
-    privacy_level: Union[Unset, None, ManageUsersUsersListPrivacyLevel] = UNSET,
+    privacy_level: Union[Unset, None, AdminGetUsersPrivacyLevel] = UNSET,
     q: Union[Unset, None, str] = UNSET,
 ) -> Optional[PaginatedManageUserList]:
     """
@@ -166,7 +166,7 @@ def sync(
         permission_library (Union[Unset, None, bool]):
         permission_moderation (Union[Unset, None, bool]):
         permission_settings (Union[Unset, None, bool]):
-        privacy_level (Union[Unset, None, ManageUsersUsersListPrivacyLevel]):
+        privacy_level (Union[Unset, None, AdminGetUsersPrivacyLevel]):
         q (Union[Unset, None, str]):
 
     Returns:
@@ -201,7 +201,7 @@ async def asyncio_detailed(
     permission_library: Union[Unset, None, bool] = UNSET,
     permission_moderation: Union[Unset, None, bool] = UNSET,
     permission_settings: Union[Unset, None, bool] = UNSET,
-    privacy_level: Union[Unset, None, ManageUsersUsersListPrivacyLevel] = UNSET,
+    privacy_level: Union[Unset, None, AdminGetUsersPrivacyLevel] = UNSET,
     q: Union[Unset, None, str] = UNSET,
 ) -> Response[PaginatedManageUserList]:
     """
@@ -215,7 +215,7 @@ async def asyncio_detailed(
         permission_library (Union[Unset, None, bool]):
         permission_moderation (Union[Unset, None, bool]):
         permission_settings (Union[Unset, None, bool]):
-        privacy_level (Union[Unset, None, ManageUsersUsersListPrivacyLevel]):
+        privacy_level (Union[Unset, None, AdminGetUsersPrivacyLevel]):
         q (Union[Unset, None, str]):
 
     Returns:
@@ -255,7 +255,7 @@ async def asyncio(
     permission_library: Union[Unset, None, bool] = UNSET,
     permission_moderation: Union[Unset, None, bool] = UNSET,
     permission_settings: Union[Unset, None, bool] = UNSET,
-    privacy_level: Union[Unset, None, ManageUsersUsersListPrivacyLevel] = UNSET,
+    privacy_level: Union[Unset, None, AdminGetUsersPrivacyLevel] = UNSET,
     q: Union[Unset, None, str] = UNSET,
 ) -> Optional[PaginatedManageUserList]:
     """
@@ -269,7 +269,7 @@ async def asyncio(
         permission_library (Union[Unset, None, bool]):
         permission_moderation (Union[Unset, None, bool]):
         permission_settings (Union[Unset, None, bool]):
-        privacy_level (Union[Unset, None, ManageUsersUsersListPrivacyLevel]):
+        privacy_level (Union[Unset, None, AdminGetUsersPrivacyLevel]):
         q (Union[Unset, None, str]):
 
     Returns:
diff --git a/funkwhale_api_client/api/manage/manage_federation_domains_partial_update.py b/funkwhale_api_client/api/manage/admin_partial_update_federation_domain.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_federation_domains_partial_update.py
rename to funkwhale_api_client/api/manage/admin_partial_update_federation_domain.py
diff --git a/funkwhale_api_client/api/manage/manage_users_invitations_partial_update.py b/funkwhale_api_client/api/manage/admin_partial_update_invitation.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_users_invitations_partial_update.py
rename to funkwhale_api_client/api/manage/admin_partial_update_invitation.py
diff --git a/funkwhale_api_client/api/manage/manage_library_libraries_partial_update.py b/funkwhale_api_client/api/manage/admin_partial_update_library.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_library_libraries_partial_update.py
rename to funkwhale_api_client/api/manage/admin_partial_update_library.py
diff --git a/funkwhale_api_client/api/manage/manage_users_users_partial_update.py b/funkwhale_api_client/api/manage/admin_partial_update_user.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_users_users_partial_update.py
rename to funkwhale_api_client/api/manage/admin_partial_update_user.py
diff --git a/funkwhale_api_client/api/manage/manage_federation_domains_update.py b/funkwhale_api_client/api/manage/admin_update_federation_domain.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_federation_domains_update.py
rename to funkwhale_api_client/api/manage/admin_update_federation_domain.py
diff --git a/funkwhale_api_client/api/manage/manage_users_invitations_update.py b/funkwhale_api_client/api/manage/admin_update_invitation.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_users_invitations_update.py
rename to funkwhale_api_client/api/manage/admin_update_invitation.py
diff --git a/funkwhale_api_client/api/manage/manage_library_libraries_update.py b/funkwhale_api_client/api/manage/admin_update_library.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_library_libraries_update.py
rename to funkwhale_api_client/api/manage/admin_update_library.py
diff --git a/funkwhale_api_client/api/manage/manage_users_users_update.py b/funkwhale_api_client/api/manage/admin_update_user.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_users_users_update.py
rename to funkwhale_api_client/api/manage/admin_update_user.py
diff --git a/funkwhale_api_client/api/manage/manage_moderation_instance_policies_create.py b/funkwhale_api_client/api/manage/moderation_create_instance_policy.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_moderation_instance_policies_create.py
rename to funkwhale_api_client/api/manage/moderation_create_instance_policy.py
diff --git a/funkwhale_api_client/api/manage/manage_moderation_notes_create.py b/funkwhale_api_client/api/manage/moderation_create_note.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_moderation_notes_create.py
rename to funkwhale_api_client/api/manage/moderation_create_note.py
diff --git a/funkwhale_api_client/api/manage/manage_moderation_instance_policies_destroy.py b/funkwhale_api_client/api/manage/moderation_delete_instance_policy.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_moderation_instance_policies_destroy.py
rename to funkwhale_api_client/api/manage/moderation_delete_instance_policy.py
diff --git a/funkwhale_api_client/api/manage/manage_moderation_notes_destroy.py b/funkwhale_api_client/api/manage/moderation_delete_note.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_moderation_notes_destroy.py
rename to funkwhale_api_client/api/manage/moderation_delete_note.py
diff --git a/funkwhale_api_client/api/manage/manage_moderation_instance_policies_list.py b/funkwhale_api_client/api/manage/moderation_get_instance_policies.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_moderation_instance_policies_list.py
rename to funkwhale_api_client/api/manage/moderation_get_instance_policies.py
diff --git a/funkwhale_api_client/api/manage/manage_moderation_instance_policies_retrieve.py b/funkwhale_api_client/api/manage/moderation_get_instance_policy.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_moderation_instance_policies_retrieve.py
rename to funkwhale_api_client/api/manage/moderation_get_instance_policy.py
diff --git a/funkwhale_api_client/api/manage/manage_moderation_notes_retrieve.py b/funkwhale_api_client/api/manage/moderation_get_note.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_moderation_notes_retrieve.py
rename to funkwhale_api_client/api/manage/moderation_get_note.py
diff --git a/funkwhale_api_client/api/manage/manage_moderation_notes_list.py b/funkwhale_api_client/api/manage/moderation_get_notes.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_moderation_notes_list.py
rename to funkwhale_api_client/api/manage/moderation_get_notes.py
diff --git a/funkwhale_api_client/api/manage/manage_moderation_reports_retrieve.py b/funkwhale_api_client/api/manage/moderation_get_report.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_moderation_reports_retrieve.py
rename to funkwhale_api_client/api/manage/moderation_get_report.py
diff --git a/funkwhale_api_client/api/manage/manage_moderation_reports_list.py b/funkwhale_api_client/api/manage/moderation_get_reports.py
similarity index 89%
rename from funkwhale_api_client/api/manage/manage_moderation_reports_list.py
rename to funkwhale_api_client/api/manage/moderation_get_reports.py
index 12b8cb4..21fb000 100644
--- a/funkwhale_api_client/api/manage/manage_moderation_reports_list.py
+++ b/funkwhale_api_client/api/manage/moderation_get_reports.py
@@ -3,7 +3,7 @@ from typing import Any, Dict, Optional, Union
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.manage_moderation_reports_list_type import ManageModerationReportsListType
+from ...models.moderation_get_reports_type import ModerationGetReportsType
 from ...models.paginated_manage_report_list import PaginatedManageReportList
 from ...types import UNSET, Response, Unset
 
@@ -17,7 +17,7 @@ def _get_kwargs(
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
     submitter_email: Union[Unset, None, str] = UNSET,
-    type: Union[Unset, None, ManageModerationReportsListType] = UNSET,
+    type: Union[Unset, None, ModerationGetReportsType] = UNSET,
 ) -> Dict[str, Any]:
     url = "{}/api/v1/manage/moderation/reports/".format(client.base_url)
 
@@ -81,7 +81,7 @@ def sync_detailed(
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
     submitter_email: Union[Unset, None, str] = UNSET,
-    type: Union[Unset, None, ManageModerationReportsListType] = UNSET,
+    type: Union[Unset, None, ModerationGetReportsType] = UNSET,
 ) -> Response[PaginatedManageReportList]:
     """
     Args:
@@ -91,7 +91,7 @@ def sync_detailed(
         page_size (Union[Unset, None, int]):
         q (Union[Unset, None, str]):
         submitter_email (Union[Unset, None, str]):
-        type (Union[Unset, None, ManageModerationReportsListType]):
+        type (Union[Unset, None, ModerationGetReportsType]):
 
     Returns:
         Response[PaginatedManageReportList]
@@ -125,7 +125,7 @@ def sync(
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
     submitter_email: Union[Unset, None, str] = UNSET,
-    type: Union[Unset, None, ManageModerationReportsListType] = UNSET,
+    type: Union[Unset, None, ModerationGetReportsType] = UNSET,
 ) -> Optional[PaginatedManageReportList]:
     """
     Args:
@@ -135,7 +135,7 @@ def sync(
         page_size (Union[Unset, None, int]):
         q (Union[Unset, None, str]):
         submitter_email (Union[Unset, None, str]):
-        type (Union[Unset, None, ManageModerationReportsListType]):
+        type (Union[Unset, None, ModerationGetReportsType]):
 
     Returns:
         Response[PaginatedManageReportList]
@@ -162,7 +162,7 @@ async def asyncio_detailed(
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
     submitter_email: Union[Unset, None, str] = UNSET,
-    type: Union[Unset, None, ManageModerationReportsListType] = UNSET,
+    type: Union[Unset, None, ModerationGetReportsType] = UNSET,
 ) -> Response[PaginatedManageReportList]:
     """
     Args:
@@ -172,7 +172,7 @@ async def asyncio_detailed(
         page_size (Union[Unset, None, int]):
         q (Union[Unset, None, str]):
         submitter_email (Union[Unset, None, str]):
-        type (Union[Unset, None, ManageModerationReportsListType]):
+        type (Union[Unset, None, ModerationGetReportsType]):
 
     Returns:
         Response[PaginatedManageReportList]
@@ -204,7 +204,7 @@ async def asyncio(
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
     submitter_email: Union[Unset, None, str] = UNSET,
-    type: Union[Unset, None, ManageModerationReportsListType] = UNSET,
+    type: Union[Unset, None, ModerationGetReportsType] = UNSET,
 ) -> Optional[PaginatedManageReportList]:
     """
     Args:
@@ -214,7 +214,7 @@ async def asyncio(
         page_size (Union[Unset, None, int]):
         q (Union[Unset, None, str]):
         submitter_email (Union[Unset, None, str]):
-        type (Union[Unset, None, ManageModerationReportsListType]):
+        type (Union[Unset, None, ModerationGetReportsType]):
 
     Returns:
         Response[PaginatedManageReportList]
diff --git a/funkwhale_api_client/api/manage/manage_moderation_requests_retrieve.py b/funkwhale_api_client/api/manage/moderation_get_request.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_moderation_requests_retrieve.py
rename to funkwhale_api_client/api/manage/moderation_get_request.py
diff --git a/funkwhale_api_client/api/manage/manage_moderation_requests_list.py b/funkwhale_api_client/api/manage/moderation_get_requests.py
similarity index 77%
rename from funkwhale_api_client/api/manage/manage_moderation_requests_list.py
rename to funkwhale_api_client/api/manage/moderation_get_requests.py
index 65a3120..92e3a7e 100644
--- a/funkwhale_api_client/api/manage/manage_moderation_requests_list.py
+++ b/funkwhale_api_client/api/manage/moderation_get_requests.py
@@ -3,8 +3,8 @@ from typing import Any, Dict, Optional, Union
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.manage_moderation_requests_list_status import ManageModerationRequestsListStatus
-from ...models.manage_moderation_requests_list_type import ManageModerationRequestsListType
+from ...models.moderation_get_requests_status import ModerationGetRequestsStatus
+from ...models.moderation_get_requests_type import ModerationGetRequestsType
 from ...models.paginated_manage_user_request_list import PaginatedManageUserRequestList
 from ...types import UNSET, Response, Unset
 
@@ -16,8 +16,8 @@ def _get_kwargs(
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
-    status: Union[Unset, None, ManageModerationRequestsListStatus] = UNSET,
-    type: Union[Unset, None, ManageModerationRequestsListType] = UNSET,
+    status: Union[Unset, None, ModerationGetRequestsStatus] = UNSET,
+    type: Union[Unset, None, ModerationGetRequestsType] = UNSET,
 ) -> Dict[str, Any]:
     url = "{}/api/v1/manage/moderation/requests/".format(client.base_url)
 
@@ -81,8 +81,8 @@ def sync_detailed(
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
-    status: Union[Unset, None, ManageModerationRequestsListStatus] = UNSET,
-    type: Union[Unset, None, ManageModerationRequestsListType] = UNSET,
+    status: Union[Unset, None, ModerationGetRequestsStatus] = UNSET,
+    type: Union[Unset, None, ModerationGetRequestsType] = UNSET,
 ) -> Response[PaginatedManageUserRequestList]:
     """
     Args:
@@ -90,8 +90,8 @@ def sync_detailed(
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         q (Union[Unset, None, str]):
-        status (Union[Unset, None, ManageModerationRequestsListStatus]):
-        type (Union[Unset, None, ManageModerationRequestsListType]):
+        status (Union[Unset, None, ModerationGetRequestsStatus]):
+        type (Union[Unset, None, ModerationGetRequestsType]):
 
     Returns:
         Response[PaginatedManageUserRequestList]
@@ -122,8 +122,8 @@ def sync(
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
-    status: Union[Unset, None, ManageModerationRequestsListStatus] = UNSET,
-    type: Union[Unset, None, ManageModerationRequestsListType] = UNSET,
+    status: Union[Unset, None, ModerationGetRequestsStatus] = UNSET,
+    type: Union[Unset, None, ModerationGetRequestsType] = UNSET,
 ) -> Optional[PaginatedManageUserRequestList]:
     """
     Args:
@@ -131,8 +131,8 @@ def sync(
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         q (Union[Unset, None, str]):
-        status (Union[Unset, None, ManageModerationRequestsListStatus]):
-        type (Union[Unset, None, ManageModerationRequestsListType]):
+        status (Union[Unset, None, ModerationGetRequestsStatus]):
+        type (Union[Unset, None, ModerationGetRequestsType]):
 
     Returns:
         Response[PaginatedManageUserRequestList]
@@ -156,8 +156,8 @@ async def asyncio_detailed(
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
-    status: Union[Unset, None, ManageModerationRequestsListStatus] = UNSET,
-    type: Union[Unset, None, ManageModerationRequestsListType] = UNSET,
+    status: Union[Unset, None, ModerationGetRequestsStatus] = UNSET,
+    type: Union[Unset, None, ModerationGetRequestsType] = UNSET,
 ) -> Response[PaginatedManageUserRequestList]:
     """
     Args:
@@ -165,8 +165,8 @@ async def asyncio_detailed(
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         q (Union[Unset, None, str]):
-        status (Union[Unset, None, ManageModerationRequestsListStatus]):
-        type (Union[Unset, None, ManageModerationRequestsListType]):
+        status (Union[Unset, None, ModerationGetRequestsStatus]):
+        type (Union[Unset, None, ModerationGetRequestsType]):
 
     Returns:
         Response[PaginatedManageUserRequestList]
@@ -195,8 +195,8 @@ async def asyncio(
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
-    status: Union[Unset, None, ManageModerationRequestsListStatus] = UNSET,
-    type: Union[Unset, None, ManageModerationRequestsListType] = UNSET,
+    status: Union[Unset, None, ModerationGetRequestsStatus] = UNSET,
+    type: Union[Unset, None, ModerationGetRequestsType] = UNSET,
 ) -> Optional[PaginatedManageUserRequestList]:
     """
     Args:
@@ -204,8 +204,8 @@ async def asyncio(
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         q (Union[Unset, None, str]):
-        status (Union[Unset, None, ManageModerationRequestsListStatus]):
-        type (Union[Unset, None, ManageModerationRequestsListType]):
+        status (Union[Unset, None, ModerationGetRequestsStatus]):
+        type (Union[Unset, None, ModerationGetRequestsType]):
 
     Returns:
         Response[PaginatedManageUserRequestList]
diff --git a/funkwhale_api_client/api/manage/manage_moderation_instance_policies_partial_update.py b/funkwhale_api_client/api/manage/moderation_partial_update_instance_policy.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_moderation_instance_policies_partial_update.py
rename to funkwhale_api_client/api/manage/moderation_partial_update_instance_policy.py
diff --git a/funkwhale_api_client/api/manage/manage_moderation_reports_partial_update.py b/funkwhale_api_client/api/manage/moderation_partial_update_report.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_moderation_reports_partial_update.py
rename to funkwhale_api_client/api/manage/moderation_partial_update_report.py
diff --git a/funkwhale_api_client/api/manage/manage_moderation_requests_partial_update.py b/funkwhale_api_client/api/manage/moderation_partial_update_request.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_moderation_requests_partial_update.py
rename to funkwhale_api_client/api/manage/moderation_partial_update_request.py
diff --git a/funkwhale_api_client/api/manage/manage_moderation_instance_policies_update.py b/funkwhale_api_client/api/manage/moderation_update_instance_policy.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_moderation_instance_policies_update.py
rename to funkwhale_api_client/api/manage/moderation_update_instance_policy.py
diff --git a/funkwhale_api_client/api/manage/manage_moderation_reports_update.py b/funkwhale_api_client/api/manage/moderation_update_report.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_moderation_reports_update.py
rename to funkwhale_api_client/api/manage/moderation_update_report.py
diff --git a/funkwhale_api_client/api/manage/manage_moderation_requests_update.py b/funkwhale_api_client/api/manage/moderation_update_request.py
similarity index 100%
rename from funkwhale_api_client/api/manage/manage_moderation_requests_update.py
rename to funkwhale_api_client/api/manage/moderation_update_request.py
diff --git a/funkwhale_api_client/api/moderation/moderation_content_filters_create.py b/funkwhale_api_client/api/moderation/create_moderation_content_filter.py
similarity index 100%
rename from funkwhale_api_client/api/moderation/moderation_content_filters_create.py
rename to funkwhale_api_client/api/moderation/create_moderation_content_filter.py
diff --git a/funkwhale_api_client/api/moderation/moderation_reports_create.py b/funkwhale_api_client/api/moderation/create_moderation_report.py
similarity index 100%
rename from funkwhale_api_client/api/moderation/moderation_reports_create.py
rename to funkwhale_api_client/api/moderation/create_moderation_report.py
diff --git a/funkwhale_api_client/api/moderation/moderation_content_filters_destroy.py b/funkwhale_api_client/api/moderation/delete_moderation_content_filter.py
similarity index 100%
rename from funkwhale_api_client/api/moderation/moderation_content_filters_destroy.py
rename to funkwhale_api_client/api/moderation/delete_moderation_content_filter.py
diff --git a/funkwhale_api_client/api/moderation/moderation_content_filters_retrieve.py b/funkwhale_api_client/api/moderation/get_moderation_content_filter.py
similarity index 100%
rename from funkwhale_api_client/api/moderation/moderation_content_filters_retrieve.py
rename to funkwhale_api_client/api/moderation/get_moderation_content_filter.py
diff --git a/funkwhale_api_client/api/moderation/moderation_content_filters_list.py b/funkwhale_api_client/api/moderation/get_moderation_content_filters.py
similarity index 100%
rename from funkwhale_api_client/api/moderation/moderation_content_filters_list.py
rename to funkwhale_api_client/api/moderation/get_moderation_content_filters.py
diff --git a/funkwhale_api_client/api/oauth/oauth_apps_create.py b/funkwhale_api_client/api/oauth/create_oauth_app.py
similarity index 100%
rename from funkwhale_api_client/api/oauth/oauth_apps_create.py
rename to funkwhale_api_client/api/oauth/create_oauth_app.py
diff --git a/funkwhale_api_client/api/oauth/oauth_authorize_create.py b/funkwhale_api_client/api/oauth/create_oauth_authorize.py
similarity index 100%
rename from funkwhale_api_client/api/oauth/oauth_authorize_create.py
rename to funkwhale_api_client/api/oauth/create_oauth_authorize.py
diff --git a/funkwhale_api_client/api/oauth/oauth_apps_destroy.py b/funkwhale_api_client/api/oauth/delete_oauth_app.py
similarity index 100%
rename from funkwhale_api_client/api/oauth/oauth_apps_destroy.py
rename to funkwhale_api_client/api/oauth/delete_oauth_app.py
diff --git a/funkwhale_api_client/api/oauth/oauth_grants_destroy.py b/funkwhale_api_client/api/oauth/delete_oauth_grant.py
similarity index 100%
rename from funkwhale_api_client/api/oauth/oauth_grants_destroy.py
rename to funkwhale_api_client/api/oauth/delete_oauth_grant.py
diff --git a/funkwhale_api_client/api/oauth/oauth_apps_retrieve.py b/funkwhale_api_client/api/oauth/get_oauth_app.py
similarity index 100%
rename from funkwhale_api_client/api/oauth/oauth_apps_retrieve.py
rename to funkwhale_api_client/api/oauth/get_oauth_app.py
diff --git a/funkwhale_api_client/api/oauth/oauth_apps_list.py b/funkwhale_api_client/api/oauth/get_oauth_apps.py
similarity index 100%
rename from funkwhale_api_client/api/oauth/oauth_apps_list.py
rename to funkwhale_api_client/api/oauth/get_oauth_apps.py
diff --git a/funkwhale_api_client/api/oauth/oauth_authorize_retrieve.py b/funkwhale_api_client/api/oauth/get_oauth_authorize.py
similarity index 100%
rename from funkwhale_api_client/api/oauth/oauth_authorize_retrieve.py
rename to funkwhale_api_client/api/oauth/get_oauth_authorize.py
diff --git a/funkwhale_api_client/api/oauth/oauth_grants_retrieve.py b/funkwhale_api_client/api/oauth/get_oauth_grant.py
similarity index 100%
rename from funkwhale_api_client/api/oauth/oauth_grants_retrieve.py
rename to funkwhale_api_client/api/oauth/get_oauth_grant.py
diff --git a/funkwhale_api_client/api/oauth/oauth_grants_list.py b/funkwhale_api_client/api/oauth/get_oauth_grants.py
similarity index 100%
rename from funkwhale_api_client/api/oauth/oauth_grants_list.py
rename to funkwhale_api_client/api/oauth/get_oauth_grants.py
diff --git a/funkwhale_api_client/api/oauth/oauth_apps_partial_update.py b/funkwhale_api_client/api/oauth/partial_update_oauth_app.py
similarity index 100%
rename from funkwhale_api_client/api/oauth/oauth_apps_partial_update.py
rename to funkwhale_api_client/api/oauth/partial_update_oauth_app.py
diff --git a/funkwhale_api_client/api/oauth/oauth_apps_refresh_token_create.py b/funkwhale_api_client/api/oauth/refresh_oauth_token.py
similarity index 100%
rename from funkwhale_api_client/api/oauth/oauth_apps_refresh_token_create.py
rename to funkwhale_api_client/api/oauth/refresh_oauth_token.py
diff --git a/funkwhale_api_client/api/oauth/oauth_apps_update.py b/funkwhale_api_client/api/oauth/update_oauth_app.py
similarity index 100%
rename from funkwhale_api_client/api/oauth/oauth_apps_update.py
rename to funkwhale_api_client/api/oauth/update_oauth_app.py
diff --git a/funkwhale_api_client/api/oauth/oauth_authorize_update.py b/funkwhale_api_client/api/oauth/update_oauth_authorize.py
similarity index 100%
rename from funkwhale_api_client/api/oauth/oauth_authorize_update.py
rename to funkwhale_api_client/api/oauth/update_oauth_authorize.py
diff --git a/funkwhale_api_client/api/oembed/oembed_retrieve.py b/funkwhale_api_client/api/oembed/get_oembed.py
similarity index 100%
rename from funkwhale_api_client/api/oembed/oembed_retrieve.py
rename to funkwhale_api_client/api/oembed/get_oembed.py
diff --git a/funkwhale_api_client/api/playlists/playlists_add_create.py b/funkwhale_api_client/api/playlists/add_to_playlist.py
similarity index 73%
rename from funkwhale_api_client/api/playlists/playlists_add_create.py
rename to funkwhale_api_client/api/playlists/add_to_playlist.py
index fb6818b..e03d7fa 100644
--- a/funkwhale_api_client/api/playlists/playlists_add_create.py
+++ b/funkwhale_api_client/api/playlists/add_to_playlist.py
@@ -4,7 +4,7 @@ import httpx
 
 from ...client import AuthenticatedClient
 from ...models.playlist import Playlist
-from ...models.playlist_request import PlaylistRequest
+from ...models.playlist_add_many_request import PlaylistAddManyRequest
 from ...types import Response
 
 
@@ -12,9 +12,9 @@ def _get_kwargs(
     id: int,
     *,
     client: AuthenticatedClient,
-    form_data: PlaylistRequest,
-    multipart_data: PlaylistRequest,
-    json_body: PlaylistRequest,
+    form_data: PlaylistAddManyRequest,
+    multipart_data: PlaylistAddManyRequest,
+    json_body: PlaylistAddManyRequest,
 ) -> Dict[str, Any]:
     url = "{}/api/v1/playlists/{id}/add/".format(client.base_url, id=id)
 
@@ -56,15 +56,15 @@ def sync_detailed(
     id: int,
     *,
     client: AuthenticatedClient,
-    form_data: PlaylistRequest,
-    multipart_data: PlaylistRequest,
-    json_body: PlaylistRequest,
+    form_data: PlaylistAddManyRequest,
+    multipart_data: PlaylistAddManyRequest,
+    json_body: PlaylistAddManyRequest,
 ) -> Response[Playlist]:
     """
     Args:
         id (int):
-        multipart_data (PlaylistRequest):
-        json_body (PlaylistRequest):
+        multipart_data (PlaylistAddManyRequest):
+        json_body (PlaylistAddManyRequest):
 
     Returns:
         Response[Playlist]
@@ -90,15 +90,15 @@ def sync(
     id: int,
     *,
     client: AuthenticatedClient,
-    form_data: PlaylistRequest,
-    multipart_data: PlaylistRequest,
-    json_body: PlaylistRequest,
+    form_data: PlaylistAddManyRequest,
+    multipart_data: PlaylistAddManyRequest,
+    json_body: PlaylistAddManyRequest,
 ) -> Optional[Playlist]:
     """
     Args:
         id (int):
-        multipart_data (PlaylistRequest):
-        json_body (PlaylistRequest):
+        multipart_data (PlaylistAddManyRequest):
+        json_body (PlaylistAddManyRequest):
 
     Returns:
         Response[Playlist]
@@ -117,15 +117,15 @@ async def asyncio_detailed(
     id: int,
     *,
     client: AuthenticatedClient,
-    form_data: PlaylistRequest,
-    multipart_data: PlaylistRequest,
-    json_body: PlaylistRequest,
+    form_data: PlaylistAddManyRequest,
+    multipart_data: PlaylistAddManyRequest,
+    json_body: PlaylistAddManyRequest,
 ) -> Response[Playlist]:
     """
     Args:
         id (int):
-        multipart_data (PlaylistRequest):
-        json_body (PlaylistRequest):
+        multipart_data (PlaylistAddManyRequest):
+        json_body (PlaylistAddManyRequest):
 
     Returns:
         Response[Playlist]
@@ -149,15 +149,15 @@ async def asyncio(
     id: int,
     *,
     client: AuthenticatedClient,
-    form_data: PlaylistRequest,
-    multipart_data: PlaylistRequest,
-    json_body: PlaylistRequest,
+    form_data: PlaylistAddManyRequest,
+    multipart_data: PlaylistAddManyRequest,
+    json_body: PlaylistAddManyRequest,
 ) -> Optional[Playlist]:
     """
     Args:
         id (int):
-        multipart_data (PlaylistRequest):
-        json_body (PlaylistRequest):
+        multipart_data (PlaylistAddManyRequest):
+        json_body (PlaylistAddManyRequest):
 
     Returns:
         Response[Playlist]
diff --git a/funkwhale_api_client/api/playlists/playlists_clear_destroy.py b/funkwhale_api_client/api/playlists/clear_playlist.py
similarity index 100%
rename from funkwhale_api_client/api/playlists/playlists_clear_destroy.py
rename to funkwhale_api_client/api/playlists/clear_playlist.py
diff --git a/funkwhale_api_client/api/playlists/playlists_create.py b/funkwhale_api_client/api/playlists/create_playlist.py
similarity index 100%
rename from funkwhale_api_client/api/playlists/playlists_create.py
rename to funkwhale_api_client/api/playlists/create_playlist.py
diff --git a/funkwhale_api_client/api/playlists/playlists_destroy.py b/funkwhale_api_client/api/playlists/delete_playlist.py
similarity index 100%
rename from funkwhale_api_client/api/playlists/playlists_destroy.py
rename to funkwhale_api_client/api/playlists/delete_playlist.py
diff --git a/funkwhale_api_client/api/playlists/playlists_retrieve.py b/funkwhale_api_client/api/playlists/get_playlist.py
similarity index 100%
rename from funkwhale_api_client/api/playlists/playlists_retrieve.py
rename to funkwhale_api_client/api/playlists/get_playlist.py
diff --git a/funkwhale_api_client/api/playlists/get_playlist_tracks.py b/funkwhale_api_client/api/playlists/get_playlist_tracks.py
new file mode 100644
index 0000000..7361f31
--- /dev/null
+++ b/funkwhale_api_client/api/playlists/get_playlist_tracks.py
@@ -0,0 +1,302 @@
+from typing import Any, Dict, Optional, Union
+
+import httpx
+
+from ...client import AuthenticatedClient
+from ...models.paginated_playlist_track_list import PaginatedPlaylistTrackList
+from ...types import UNSET, Response, Unset
+
+
+def _get_kwargs(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    album: Union[Unset, None, int] = UNSET,
+    artist: Union[Unset, None, int] = UNSET,
+    name: Union[Unset, None, str] = UNSET,
+    name_icontains: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, str] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    track: Union[Unset, None, int] = UNSET,
+) -> Dict[str, Any]:
+    url = "{}/api/v1/playlists/{id}/tracks/".format(client.base_url, id=id)
+
+    headers: Dict[str, str] = client.get_headers()
+    cookies: Dict[str, Any] = client.get_cookies()
+
+    params: Dict[str, Any] = {}
+    params["album"] = album
+
+    params["artist"] = artist
+
+    params["name"] = name
+
+    params["name__icontains"] = name_icontains
+
+    params["ordering"] = ordering
+
+    params["page"] = page
+
+    params["page_size"] = page_size
+
+    params["playable"] = playable
+
+    params["q"] = q
+
+    params["scope"] = scope
+
+    params["track"] = track
+
+    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[PaginatedPlaylistTrackList]:
+    if response.status_code == 200:
+        response_200 = PaginatedPlaylistTrackList.from_dict(response.json())
+
+        return response_200
+    return None
+
+
+def _build_response(*, response: httpx.Response) -> Response[PaginatedPlaylistTrackList]:
+    return Response(
+        status_code=response.status_code,
+        content=response.content,
+        headers=response.headers,
+        parsed=_parse_response(response=response),
+    )
+
+
+def sync_detailed(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    album: Union[Unset, None, int] = UNSET,
+    artist: Union[Unset, None, int] = UNSET,
+    name: Union[Unset, None, str] = UNSET,
+    name_icontains: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, str] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    track: Union[Unset, None, int] = UNSET,
+) -> Response[PaginatedPlaylistTrackList]:
+    """
+    Args:
+        id (int):
+        album (Union[Unset, None, int]):
+        artist (Union[Unset, None, int]):
+        name (Union[Unset, None, str]):
+        name_icontains (Union[Unset, None, str]):
+        ordering (Union[Unset, None, str]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        track (Union[Unset, None, int]):
+
+    Returns:
+        Response[PaginatedPlaylistTrackList]
+    """
+
+    kwargs = _get_kwargs(
+        id=id,
+        client=client,
+        album=album,
+        artist=artist,
+        name=name,
+        name_icontains=name_icontains,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        scope=scope,
+        track=track,
+    )
+
+    response = httpx.request(
+        verify=client.verify_ssl,
+        **kwargs,
+    )
+
+    return _build_response(response=response)
+
+
+def sync(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    album: Union[Unset, None, int] = UNSET,
+    artist: Union[Unset, None, int] = UNSET,
+    name: Union[Unset, None, str] = UNSET,
+    name_icontains: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, str] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    track: Union[Unset, None, int] = UNSET,
+) -> Optional[PaginatedPlaylistTrackList]:
+    """
+    Args:
+        id (int):
+        album (Union[Unset, None, int]):
+        artist (Union[Unset, None, int]):
+        name (Union[Unset, None, str]):
+        name_icontains (Union[Unset, None, str]):
+        ordering (Union[Unset, None, str]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        track (Union[Unset, None, int]):
+
+    Returns:
+        Response[PaginatedPlaylistTrackList]
+    """
+
+    return sync_detailed(
+        id=id,
+        client=client,
+        album=album,
+        artist=artist,
+        name=name,
+        name_icontains=name_icontains,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        scope=scope,
+        track=track,
+    ).parsed
+
+
+async def asyncio_detailed(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    album: Union[Unset, None, int] = UNSET,
+    artist: Union[Unset, None, int] = UNSET,
+    name: Union[Unset, None, str] = UNSET,
+    name_icontains: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, str] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    track: Union[Unset, None, int] = UNSET,
+) -> Response[PaginatedPlaylistTrackList]:
+    """
+    Args:
+        id (int):
+        album (Union[Unset, None, int]):
+        artist (Union[Unset, None, int]):
+        name (Union[Unset, None, str]):
+        name_icontains (Union[Unset, None, str]):
+        ordering (Union[Unset, None, str]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        track (Union[Unset, None, int]):
+
+    Returns:
+        Response[PaginatedPlaylistTrackList]
+    """
+
+    kwargs = _get_kwargs(
+        id=id,
+        client=client,
+        album=album,
+        artist=artist,
+        name=name,
+        name_icontains=name_icontains,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        scope=scope,
+        track=track,
+    )
+
+    async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
+        response = await _client.request(**kwargs)
+
+    return _build_response(response=response)
+
+
+async def asyncio(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    album: Union[Unset, None, int] = UNSET,
+    artist: Union[Unset, None, int] = UNSET,
+    name: Union[Unset, None, str] = UNSET,
+    name_icontains: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, str] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    track: Union[Unset, None, int] = UNSET,
+) -> Optional[PaginatedPlaylistTrackList]:
+    """
+    Args:
+        id (int):
+        album (Union[Unset, None, int]):
+        artist (Union[Unset, None, int]):
+        name (Union[Unset, None, str]):
+        name_icontains (Union[Unset, None, str]):
+        ordering (Union[Unset, None, str]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        track (Union[Unset, None, int]):
+
+    Returns:
+        Response[PaginatedPlaylistTrackList]
+    """
+
+    return (
+        await asyncio_detailed(
+            id=id,
+            client=client,
+            album=album,
+            artist=artist,
+            name=name,
+            name_icontains=name_icontains,
+            ordering=ordering,
+            page=page,
+            page_size=page_size,
+            playable=playable,
+            q=q,
+            scope=scope,
+            track=track,
+        )
+    ).parsed
diff --git a/funkwhale_api_client/api/playlists/playlists_list.py b/funkwhale_api_client/api/playlists/get_playlists.py
similarity index 100%
rename from funkwhale_api_client/api/playlists/playlists_list.py
rename to funkwhale_api_client/api/playlists/get_playlists.py
diff --git a/funkwhale_api_client/api/playlists/playlists_partial_update.py b/funkwhale_api_client/api/playlists/partial_update_playlist.py
similarity index 100%
rename from funkwhale_api_client/api/playlists/playlists_partial_update.py
rename to funkwhale_api_client/api/playlists/partial_update_playlist.py
diff --git a/funkwhale_api_client/api/playlists/playlists_tracks_retrieve.py b/funkwhale_api_client/api/playlists/playlists_tracks_retrieve.py
deleted file mode 100644
index e637dd3..0000000
--- a/funkwhale_api_client/api/playlists/playlists_tracks_retrieve.py
+++ /dev/null
@@ -1,133 +0,0 @@
-from typing import Any, Dict, Optional
-
-import httpx
-
-from ...client import AuthenticatedClient
-from ...models.playlist import Playlist
-from ...types import Response
-
-
-def _get_kwargs(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Dict[str, Any]:
-    url = "{}/api/v1/playlists/{id}/tracks/".format(client.base_url, id=id)
-
-    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[Playlist]:
-    if response.status_code == 200:
-        response_200 = Playlist.from_dict(response.json())
-
-        return response_200
-    return None
-
-
-def _build_response(*, response: httpx.Response) -> Response[Playlist]:
-    return Response(
-        status_code=response.status_code,
-        content=response.content,
-        headers=response.headers,
-        parsed=_parse_response(response=response),
-    )
-
-
-def sync_detailed(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Response[Playlist]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[Playlist]
-    """
-
-    kwargs = _get_kwargs(
-        id=id,
-        client=client,
-    )
-
-    response = httpx.request(
-        verify=client.verify_ssl,
-        **kwargs,
-    )
-
-    return _build_response(response=response)
-
-
-def sync(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Optional[Playlist]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[Playlist]
-    """
-
-    return sync_detailed(
-        id=id,
-        client=client,
-    ).parsed
-
-
-async def asyncio_detailed(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Response[Playlist]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[Playlist]
-    """
-
-    kwargs = _get_kwargs(
-        id=id,
-        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(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Optional[Playlist]:
-    """
-    Args:
-        id (int):
-
-    Returns:
-        Response[Playlist]
-    """
-
-    return (
-        await asyncio_detailed(
-            id=id,
-            client=client,
-        )
-    ).parsed
diff --git a/funkwhale_api_client/api/playlists/playlists_remove_destroy.py b/funkwhale_api_client/api/playlists/remove_from_playlist.py
similarity index 100%
rename from funkwhale_api_client/api/playlists/playlists_remove_destroy.py
rename to funkwhale_api_client/api/playlists/remove_from_playlist.py
diff --git a/funkwhale_api_client/api/playlists/playlists_remove_create.py b/funkwhale_api_client/api/playlists/remove_from_playlist_2.py
similarity index 100%
rename from funkwhale_api_client/api/playlists/playlists_remove_create.py
rename to funkwhale_api_client/api/playlists/remove_from_playlist_2.py
diff --git a/funkwhale_api_client/api/playlists/playlists_move_create.py b/funkwhale_api_client/api/playlists/reorder_track_in_playlist.py
similarity index 100%
rename from funkwhale_api_client/api/playlists/playlists_move_create.py
rename to funkwhale_api_client/api/playlists/reorder_track_in_playlist.py
diff --git a/funkwhale_api_client/api/playlists/playlists_update.py b/funkwhale_api_client/api/playlists/update_playlist.py
similarity index 100%
rename from funkwhale_api_client/api/playlists/playlists_update.py
rename to funkwhale_api_client/api/playlists/update_playlist.py
diff --git a/funkwhale_api_client/api/plugins/plugins_create.py b/funkwhale_api_client/api/plugins/create_plugin.py
similarity index 100%
rename from funkwhale_api_client/api/plugins/plugins_create.py
rename to funkwhale_api_client/api/plugins/create_plugin.py
diff --git a/funkwhale_api_client/api/plugins/plugins_scan_create.py b/funkwhale_api_client/api/plugins/create_plugin_scan.py
similarity index 100%
rename from funkwhale_api_client/api/plugins/plugins_scan_create.py
rename to funkwhale_api_client/api/plugins/create_plugin_scan.py
diff --git a/funkwhale_api_client/api/plugins/plugins_disable_create.py b/funkwhale_api_client/api/plugins/disable_plugin.py
similarity index 100%
rename from funkwhale_api_client/api/plugins/plugins_disable_create.py
rename to funkwhale_api_client/api/plugins/disable_plugin.py
diff --git a/funkwhale_api_client/api/plugins/plugins_enable_create.py b/funkwhale_api_client/api/plugins/enable_plugin.py
similarity index 100%
rename from funkwhale_api_client/api/plugins/plugins_enable_create.py
rename to funkwhale_api_client/api/plugins/enable_plugin.py
diff --git a/funkwhale_api_client/api/plugins/plugins_retrieve.py b/funkwhale_api_client/api/plugins/get_plugin.py
similarity index 100%
rename from funkwhale_api_client/api/plugins/plugins_retrieve.py
rename to funkwhale_api_client/api/plugins/get_plugin.py
diff --git a/funkwhale_api_client/api/plugins/plugins_list.py b/funkwhale_api_client/api/plugins/get_plugins.py
similarity index 100%
rename from funkwhale_api_client/api/plugins/plugins_list.py
rename to funkwhale_api_client/api/plugins/get_plugins.py
diff --git a/funkwhale_api_client/api/radios/radios_radios_create.py b/funkwhale_api_client/api/radios/create_radio.py
similarity index 100%
rename from funkwhale_api_client/api/radios/radios_radios_create.py
rename to funkwhale_api_client/api/radios/create_radio.py
diff --git a/funkwhale_api_client/api/radios/radios_sessions_create.py b/funkwhale_api_client/api/radios/create_radio_session.py
similarity index 100%
rename from funkwhale_api_client/api/radios/radios_sessions_create.py
rename to funkwhale_api_client/api/radios/create_radio_session.py
diff --git a/funkwhale_api_client/api/radios/radios_radios_destroy.py b/funkwhale_api_client/api/radios/delete_radio.py
similarity index 100%
rename from funkwhale_api_client/api/radios/radios_radios_destroy.py
rename to funkwhale_api_client/api/radios/delete_radio.py
diff --git a/funkwhale_api_client/api/radios/radios_tracks_create.py b/funkwhale_api_client/api/radios/get_next_radio_track.py
similarity index 100%
rename from funkwhale_api_client/api/radios/radios_tracks_create.py
rename to funkwhale_api_client/api/radios/get_next_radio_track.py
diff --git a/funkwhale_api_client/api/radios/radios_radios_retrieve.py b/funkwhale_api_client/api/radios/get_radio.py
similarity index 100%
rename from funkwhale_api_client/api/radios/radios_radios_retrieve.py
rename to funkwhale_api_client/api/radios/get_radio.py
diff --git a/funkwhale_api_client/api/radios/radios_radios_filters_retrieve.py b/funkwhale_api_client/api/radios/get_radio_filter.py
similarity index 100%
rename from funkwhale_api_client/api/radios/radios_radios_filters_retrieve.py
rename to funkwhale_api_client/api/radios/get_radio_filter.py
diff --git a/funkwhale_api_client/api/radios/radios_sessions_retrieve.py b/funkwhale_api_client/api/radios/get_radio_session.py
similarity index 100%
rename from funkwhale_api_client/api/radios/radios_sessions_retrieve.py
rename to funkwhale_api_client/api/radios/get_radio_session.py
diff --git a/funkwhale_api_client/api/radios/radios_radios_tracks_retrieve.py b/funkwhale_api_client/api/radios/get_radio_track.py
similarity index 100%
rename from funkwhale_api_client/api/radios/radios_radios_tracks_retrieve.py
rename to funkwhale_api_client/api/radios/get_radio_track.py
diff --git a/funkwhale_api_client/api/radios/radios_radios_list.py b/funkwhale_api_client/api/radios/get_radios.py
similarity index 100%
rename from funkwhale_api_client/api/radios/radios_radios_list.py
rename to funkwhale_api_client/api/radios/get_radios.py
diff --git a/funkwhale_api_client/api/radios/radios_radios_partial_update.py b/funkwhale_api_client/api/radios/partial_update_radio.py
similarity index 100%
rename from funkwhale_api_client/api/radios/radios_radios_partial_update.py
rename to funkwhale_api_client/api/radios/partial_update_radio.py
diff --git a/funkwhale_api_client/api/radios/radios_radios_update.py b/funkwhale_api_client/api/radios/update_radio.py
similarity index 100%
rename from funkwhale_api_client/api/radios/radios_radios_update.py
rename to funkwhale_api_client/api/radios/update_radio.py
diff --git a/funkwhale_api_client/api/radios/radios_radios_validate_create.py b/funkwhale_api_client/api/radios/validate_radio.py
similarity index 100%
rename from funkwhale_api_client/api/radios/radios_radios_validate_create.py
rename to funkwhale_api_client/api/radios/validate_radio.py
diff --git a/funkwhale_api_client/api/rate_limit/rate_limit_retrieve.py b/funkwhale_api_client/api/rate_limit/get_rate_limit.py
similarity index 100%
rename from funkwhale_api_client/api/rate_limit/rate_limit_retrieve.py
rename to funkwhale_api_client/api/rate_limit/get_rate_limit.py
diff --git a/funkwhale_api_client/api/search/search_retrieve.py b/funkwhale_api_client/api/search/get_search_results.py
similarity index 100%
rename from funkwhale_api_client/api/search/search_retrieve.py
rename to funkwhale_api_client/api/search/get_search_results.py
diff --git a/funkwhale_api_client/api/stream/stream_retrieve.py b/funkwhale_api_client/api/stream/get_stream.py
similarity index 100%
rename from funkwhale_api_client/api/stream/stream_retrieve.py
rename to funkwhale_api_client/api/stream/get_stream.py
diff --git a/funkwhale_api_client/api/subscriptions/subscriptions_all_retrieve.py b/funkwhale_api_client/api/subscriptions/get_all_subscriptions.py
similarity index 100%
rename from funkwhale_api_client/api/subscriptions/subscriptions_all_retrieve.py
rename to funkwhale_api_client/api/subscriptions/get_all_subscriptions.py
diff --git a/funkwhale_api_client/api/subscriptions/subscriptions_retrieve.py b/funkwhale_api_client/api/subscriptions/get_subscription.py
similarity index 100%
rename from funkwhale_api_client/api/subscriptions/subscriptions_retrieve.py
rename to funkwhale_api_client/api/subscriptions/get_subscription.py
diff --git a/funkwhale_api_client/api/subscriptions/subscriptions_list.py b/funkwhale_api_client/api/subscriptions/get_subscriptions.py
similarity index 100%
rename from funkwhale_api_client/api/subscriptions/subscriptions_list.py
rename to funkwhale_api_client/api/subscriptions/get_subscriptions.py
diff --git a/funkwhale_api_client/api/tags/tags_retrieve.py b/funkwhale_api_client/api/tags/get_tag.py
similarity index 100%
rename from funkwhale_api_client/api/tags/tags_retrieve.py
rename to funkwhale_api_client/api/tags/get_tag.py
diff --git a/funkwhale_api_client/api/tags/tags_list.py b/funkwhale_api_client/api/tags/get_tags.py
similarity index 89%
rename from funkwhale_api_client/api/tags/tags_list.py
rename to funkwhale_api_client/api/tags/get_tags.py
index db9cff7..ef57ac9 100644
--- a/funkwhale_api_client/api/tags/tags_list.py
+++ b/funkwhale_api_client/api/tags/get_tags.py
@@ -3,8 +3,8 @@ from typing import Any, Dict, List, Optional, Union
 import httpx
 
 from ...client import AuthenticatedClient
+from ...models.get_tags_ordering_item import GetTagsOrderingItem
 from ...models.paginated_tag_list import PaginatedTagList
-from ...models.tags_list_ordering_item import TagsListOrderingItem
 from ...types import UNSET, Response, Unset
 
 
@@ -13,7 +13,7 @@ def _get_kwargs(
     client: AuthenticatedClient,
     name: Union[Unset, None, str] = UNSET,
     name_startswith: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[TagsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetTagsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
@@ -81,7 +81,7 @@ def sync_detailed(
     client: AuthenticatedClient,
     name: Union[Unset, None, str] = UNSET,
     name_startswith: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[TagsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetTagsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
@@ -90,7 +90,7 @@ def sync_detailed(
     Args:
         name (Union[Unset, None, str]):
         name_startswith (Union[Unset, None, str]):
-        ordering (Union[Unset, None, List[TagsListOrderingItem]]):
+        ordering (Union[Unset, None, List[GetTagsOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         q (Union[Unset, None, str]):
@@ -122,7 +122,7 @@ def sync(
     client: AuthenticatedClient,
     name: Union[Unset, None, str] = UNSET,
     name_startswith: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[TagsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetTagsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
@@ -131,7 +131,7 @@ def sync(
     Args:
         name (Union[Unset, None, str]):
         name_startswith (Union[Unset, None, str]):
-        ordering (Union[Unset, None, List[TagsListOrderingItem]]):
+        ordering (Union[Unset, None, List[GetTagsOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         q (Union[Unset, None, str]):
@@ -156,7 +156,7 @@ async def asyncio_detailed(
     client: AuthenticatedClient,
     name: Union[Unset, None, str] = UNSET,
     name_startswith: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[TagsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetTagsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
@@ -165,7 +165,7 @@ async def asyncio_detailed(
     Args:
         name (Union[Unset, None, str]):
         name_startswith (Union[Unset, None, str]):
-        ordering (Union[Unset, None, List[TagsListOrderingItem]]):
+        ordering (Union[Unset, None, List[GetTagsOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         q (Union[Unset, None, str]):
@@ -195,7 +195,7 @@ async def asyncio(
     client: AuthenticatedClient,
     name: Union[Unset, None, str] = UNSET,
     name_startswith: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[TagsListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetTagsOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     q: Union[Unset, None, str] = UNSET,
@@ -204,7 +204,7 @@ async def asyncio(
     Args:
         name (Union[Unset, None, str]):
         name_startswith (Union[Unset, None, str]):
-        ordering (Union[Unset, None, List[TagsListOrderingItem]]):
+        ordering (Union[Unset, None, List[GetTagsOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         q (Union[Unset, None, str]):
diff --git a/funkwhale_api_client/api/text_preview/text_preview_create.py b/funkwhale_api_client/api/text_preview/preview_text.py
similarity index 100%
rename from funkwhale_api_client/api/text_preview/text_preview_create.py
rename to funkwhale_api_client/api/text_preview/preview_text.py
diff --git a/funkwhale_api_client/api/tracks/tracks_fetches_create.py b/funkwhale_api_client/api/tracks/create_track_fetch.py
similarity index 89%
rename from funkwhale_api_client/api/tracks/tracks_fetches_create.py
rename to funkwhale_api_client/api/tracks/create_track_fetch.py
index 3c824e6..687b1cb 100644
--- a/funkwhale_api_client/api/tracks/tracks_fetches_create.py
+++ b/funkwhale_api_client/api/tracks/create_track_fetch.py
@@ -3,7 +3,7 @@ from typing import Any, Dict, Optional
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.track import Track
+from ...models.fetch import Fetch
 from ...models.track_request import TrackRequest
 from ...types import Response
 
@@ -35,15 +35,15 @@ def _get_kwargs(
     }
 
 
-def _parse_response(*, response: httpx.Response) -> Optional[Track]:
+def _parse_response(*, response: httpx.Response) -> Optional[Fetch]:
     if response.status_code == 200:
-        response_200 = Track.from_dict(response.json())
+        response_200 = Fetch.from_dict(response.json())
 
         return response_200
     return None
 
 
-def _build_response(*, response: httpx.Response) -> Response[Track]:
+def _build_response(*, response: httpx.Response) -> Response[Fetch]:
     return Response(
         status_code=response.status_code,
         content=response.content,
@@ -59,7 +59,7 @@ def sync_detailed(
     form_data: TrackRequest,
     multipart_data: TrackRequest,
     json_body: TrackRequest,
-) -> Response[Track]:
+) -> Response[Fetch]:
     """A simple ViewSet for viewing and editing accounts.
 
     Args:
@@ -68,7 +68,7 @@ def sync_detailed(
         json_body (TrackRequest):
 
     Returns:
-        Response[Track]
+        Response[Fetch]
     """
 
     kwargs = _get_kwargs(
@@ -94,7 +94,7 @@ def sync(
     form_data: TrackRequest,
     multipart_data: TrackRequest,
     json_body: TrackRequest,
-) -> Optional[Track]:
+) -> Optional[Fetch]:
     """A simple ViewSet for viewing and editing accounts.
 
     Args:
@@ -103,7 +103,7 @@ def sync(
         json_body (TrackRequest):
 
     Returns:
-        Response[Track]
+        Response[Fetch]
     """
 
     return sync_detailed(
@@ -122,7 +122,7 @@ async def asyncio_detailed(
     form_data: TrackRequest,
     multipart_data: TrackRequest,
     json_body: TrackRequest,
-) -> Response[Track]:
+) -> Response[Fetch]:
     """A simple ViewSet for viewing and editing accounts.
 
     Args:
@@ -131,7 +131,7 @@ async def asyncio_detailed(
         json_body (TrackRequest):
 
     Returns:
-        Response[Track]
+        Response[Fetch]
     """
 
     kwargs = _get_kwargs(
@@ -155,7 +155,7 @@ async def asyncio(
     form_data: TrackRequest,
     multipart_data: TrackRequest,
     json_body: TrackRequest,
-) -> Optional[Track]:
+) -> Optional[Fetch]:
     """A simple ViewSet for viewing and editing accounts.
 
     Args:
@@ -164,7 +164,7 @@ async def asyncio(
         json_body (TrackRequest):
 
     Returns:
-        Response[Track]
+        Response[Fetch]
     """
 
     return (
diff --git a/funkwhale_api_client/api/tracks/tracks_mutations_create.py b/funkwhale_api_client/api/tracks/create_track_mutation.py
similarity index 87%
rename from funkwhale_api_client/api/tracks/tracks_mutations_create.py
rename to funkwhale_api_client/api/tracks/create_track_mutation.py
index 55536ba..19bf60d 100644
--- a/funkwhale_api_client/api/tracks/tracks_mutations_create.py
+++ b/funkwhale_api_client/api/tracks/create_track_mutation.py
@@ -3,7 +3,7 @@ from typing import Any, Dict, Optional
 import httpx
 
 from ...client import AuthenticatedClient
-from ...models.track import Track
+from ...models.api_mutation import APIMutation
 from ...models.track_request import TrackRequest
 from ...types import Response
 
@@ -35,15 +35,15 @@ def _get_kwargs(
     }
 
 
-def _parse_response(*, response: httpx.Response) -> Optional[Track]:
+def _parse_response(*, response: httpx.Response) -> Optional[APIMutation]:
     if response.status_code == 200:
-        response_200 = Track.from_dict(response.json())
+        response_200 = APIMutation.from_dict(response.json())
 
         return response_200
     return None
 
 
-def _build_response(*, response: httpx.Response) -> Response[Track]:
+def _build_response(*, response: httpx.Response) -> Response[APIMutation]:
     return Response(
         status_code=response.status_code,
         content=response.content,
@@ -59,7 +59,7 @@ def sync_detailed(
     form_data: TrackRequest,
     multipart_data: TrackRequest,
     json_body: TrackRequest,
-) -> Response[Track]:
+) -> Response[APIMutation]:
     """A simple ViewSet for viewing and editing accounts.
 
     Args:
@@ -68,7 +68,7 @@ def sync_detailed(
         json_body (TrackRequest):
 
     Returns:
-        Response[Track]
+        Response[APIMutation]
     """
 
     kwargs = _get_kwargs(
@@ -94,7 +94,7 @@ def sync(
     form_data: TrackRequest,
     multipart_data: TrackRequest,
     json_body: TrackRequest,
-) -> Optional[Track]:
+) -> Optional[APIMutation]:
     """A simple ViewSet for viewing and editing accounts.
 
     Args:
@@ -103,7 +103,7 @@ def sync(
         json_body (TrackRequest):
 
     Returns:
-        Response[Track]
+        Response[APIMutation]
     """
 
     return sync_detailed(
@@ -122,7 +122,7 @@ async def asyncio_detailed(
     form_data: TrackRequest,
     multipart_data: TrackRequest,
     json_body: TrackRequest,
-) -> Response[Track]:
+) -> Response[APIMutation]:
     """A simple ViewSet for viewing and editing accounts.
 
     Args:
@@ -131,7 +131,7 @@ async def asyncio_detailed(
         json_body (TrackRequest):
 
     Returns:
-        Response[Track]
+        Response[APIMutation]
     """
 
     kwargs = _get_kwargs(
@@ -155,7 +155,7 @@ async def asyncio(
     form_data: TrackRequest,
     multipart_data: TrackRequest,
     json_body: TrackRequest,
-) -> Optional[Track]:
+) -> Optional[APIMutation]:
     """A simple ViewSet for viewing and editing accounts.
 
     Args:
@@ -164,7 +164,7 @@ async def asyncio(
         json_body (TrackRequest):
 
     Returns:
-        Response[Track]
+        Response[APIMutation]
     """
 
     return (
diff --git a/funkwhale_api_client/api/tracks/tracks_destroy.py b/funkwhale_api_client/api/tracks/delete_track.py
similarity index 100%
rename from funkwhale_api_client/api/tracks/tracks_destroy.py
rename to funkwhale_api_client/api/tracks/delete_track.py
diff --git a/funkwhale_api_client/api/tracks/tracks_retrieve.py b/funkwhale_api_client/api/tracks/get_track.py
similarity index 100%
rename from funkwhale_api_client/api/tracks/tracks_retrieve.py
rename to funkwhale_api_client/api/tracks/get_track.py
diff --git a/funkwhale_api_client/api/tracks/get_track_fetches.py b/funkwhale_api_client/api/tracks/get_track_fetches.py
new file mode 100644
index 0000000..44722d0
--- /dev/null
+++ b/funkwhale_api_client/api/tracks/get_track_fetches.py
@@ -0,0 +1,460 @@
+from typing import Any, Dict, List, Optional, Union
+
+import httpx
+
+from ...client import AuthenticatedClient
+from ...models.get_track_fetches_ordering_item import GetTrackFetchesOrderingItem
+from ...models.paginated_fetch_list import PaginatedFetchList
+from ...types import UNSET, Response, Unset
+
+
+def _get_kwargs(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    album: Union[Unset, None, int] = UNSET,
+    artist: Union[Unset, None, str] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    license_: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetTrackFetchesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+    title: Union[Unset, None, str] = UNSET,
+    title_icontains: Union[Unset, None, str] = UNSET,
+    title_iexact: Union[Unset, None, str] = UNSET,
+    title_startswith: Union[Unset, None, str] = UNSET,
+) -> Dict[str, Any]:
+    url = "{}/api/v1/tracks/{id}/fetches/".format(client.base_url, id=id)
+
+    headers: Dict[str, str] = client.get_headers()
+    cookies: Dict[str, Any] = client.get_cookies()
+
+    params: Dict[str, Any] = {}
+    params["album"] = album
+
+    params["artist"] = artist
+
+    params["channel"] = channel
+
+    params["hidden"] = hidden
+
+    params["include_channels"] = include_channels
+
+    params["library"] = library
+
+    params["license"] = license_
+
+    params["mbid"] = mbid
+
+    json_ordering: Union[Unset, None, List[str]] = UNSET
+    if not isinstance(ordering, Unset):
+        if ordering is None:
+            json_ordering = None
+        else:
+            json_ordering = []
+            for ordering_item_data in ordering:
+                ordering_item = ordering_item_data.value
+
+                json_ordering.append(ordering_item)
+
+    params["ordering"] = json_ordering
+
+    params["page"] = page
+
+    params["page_size"] = page_size
+
+    params["playable"] = playable
+
+    params["q"] = q
+
+    params["related"] = related
+
+    params["scope"] = scope
+
+    json_tag: Union[Unset, None, List[str]] = UNSET
+    if not isinstance(tag, Unset):
+        if tag is None:
+            json_tag = None
+        else:
+            json_tag = tag
+
+    params["tag"] = json_tag
+
+    params["title"] = title
+
+    params["title__icontains"] = title_icontains
+
+    params["title__iexact"] = title_iexact
+
+    params["title__startswith"] = title_startswith
+
+    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[PaginatedFetchList]:
+    if response.status_code == 200:
+        response_200 = PaginatedFetchList.from_dict(response.json())
+
+        return response_200
+    return None
+
+
+def _build_response(*, response: httpx.Response) -> Response[PaginatedFetchList]:
+    return Response(
+        status_code=response.status_code,
+        content=response.content,
+        headers=response.headers,
+        parsed=_parse_response(response=response),
+    )
+
+
+def sync_detailed(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    album: Union[Unset, None, int] = UNSET,
+    artist: Union[Unset, None, str] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    license_: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetTrackFetchesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+    title: Union[Unset, None, str] = UNSET,
+    title_icontains: Union[Unset, None, str] = UNSET,
+    title_iexact: Union[Unset, None, str] = UNSET,
+    title_startswith: Union[Unset, None, str] = UNSET,
+) -> Response[PaginatedFetchList]:
+    """A simple ViewSet for viewing and editing accounts.
+
+    Args:
+        id (int):
+        album (Union[Unset, None, int]):
+        artist (Union[Unset, None, str]):
+        channel (Union[Unset, None, str]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        license_ (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetTrackFetchesOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+        title (Union[Unset, None, str]):
+        title_icontains (Union[Unset, None, str]):
+        title_iexact (Union[Unset, None, str]):
+        title_startswith (Union[Unset, None, str]):
+
+    Returns:
+        Response[PaginatedFetchList]
+    """
+
+    kwargs = _get_kwargs(
+        id=id,
+        client=client,
+        album=album,
+        artist=artist,
+        channel=channel,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        license_=license_,
+        mbid=mbid,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+        title=title,
+        title_icontains=title_icontains,
+        title_iexact=title_iexact,
+        title_startswith=title_startswith,
+    )
+
+    response = httpx.request(
+        verify=client.verify_ssl,
+        **kwargs,
+    )
+
+    return _build_response(response=response)
+
+
+def sync(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    album: Union[Unset, None, int] = UNSET,
+    artist: Union[Unset, None, str] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    license_: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetTrackFetchesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+    title: Union[Unset, None, str] = UNSET,
+    title_icontains: Union[Unset, None, str] = UNSET,
+    title_iexact: Union[Unset, None, str] = UNSET,
+    title_startswith: Union[Unset, None, str] = UNSET,
+) -> Optional[PaginatedFetchList]:
+    """A simple ViewSet for viewing and editing accounts.
+
+    Args:
+        id (int):
+        album (Union[Unset, None, int]):
+        artist (Union[Unset, None, str]):
+        channel (Union[Unset, None, str]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        license_ (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetTrackFetchesOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+        title (Union[Unset, None, str]):
+        title_icontains (Union[Unset, None, str]):
+        title_iexact (Union[Unset, None, str]):
+        title_startswith (Union[Unset, None, str]):
+
+    Returns:
+        Response[PaginatedFetchList]
+    """
+
+    return sync_detailed(
+        id=id,
+        client=client,
+        album=album,
+        artist=artist,
+        channel=channel,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        license_=license_,
+        mbid=mbid,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+        title=title,
+        title_icontains=title_icontains,
+        title_iexact=title_iexact,
+        title_startswith=title_startswith,
+    ).parsed
+
+
+async def asyncio_detailed(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    album: Union[Unset, None, int] = UNSET,
+    artist: Union[Unset, None, str] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    license_: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetTrackFetchesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+    title: Union[Unset, None, str] = UNSET,
+    title_icontains: Union[Unset, None, str] = UNSET,
+    title_iexact: Union[Unset, None, str] = UNSET,
+    title_startswith: Union[Unset, None, str] = UNSET,
+) -> Response[PaginatedFetchList]:
+    """A simple ViewSet for viewing and editing accounts.
+
+    Args:
+        id (int):
+        album (Union[Unset, None, int]):
+        artist (Union[Unset, None, str]):
+        channel (Union[Unset, None, str]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        license_ (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetTrackFetchesOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+        title (Union[Unset, None, str]):
+        title_icontains (Union[Unset, None, str]):
+        title_iexact (Union[Unset, None, str]):
+        title_startswith (Union[Unset, None, str]):
+
+    Returns:
+        Response[PaginatedFetchList]
+    """
+
+    kwargs = _get_kwargs(
+        id=id,
+        client=client,
+        album=album,
+        artist=artist,
+        channel=channel,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        license_=license_,
+        mbid=mbid,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+        title=title,
+        title_icontains=title_icontains,
+        title_iexact=title_iexact,
+        title_startswith=title_startswith,
+    )
+
+    async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
+        response = await _client.request(**kwargs)
+
+    return _build_response(response=response)
+
+
+async def asyncio(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    album: Union[Unset, None, int] = UNSET,
+    artist: Union[Unset, None, str] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    license_: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetTrackFetchesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+    title: Union[Unset, None, str] = UNSET,
+    title_icontains: Union[Unset, None, str] = UNSET,
+    title_iexact: Union[Unset, None, str] = UNSET,
+    title_startswith: Union[Unset, None, str] = UNSET,
+) -> Optional[PaginatedFetchList]:
+    """A simple ViewSet for viewing and editing accounts.
+
+    Args:
+        id (int):
+        album (Union[Unset, None, int]):
+        artist (Union[Unset, None, str]):
+        channel (Union[Unset, None, str]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        license_ (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetTrackFetchesOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+        title (Union[Unset, None, str]):
+        title_icontains (Union[Unset, None, str]):
+        title_iexact (Union[Unset, None, str]):
+        title_startswith (Union[Unset, None, str]):
+
+    Returns:
+        Response[PaginatedFetchList]
+    """
+
+    return (
+        await asyncio_detailed(
+            id=id,
+            client=client,
+            album=album,
+            artist=artist,
+            channel=channel,
+            hidden=hidden,
+            include_channels=include_channels,
+            library=library,
+            license_=license_,
+            mbid=mbid,
+            ordering=ordering,
+            page=page,
+            page_size=page_size,
+            playable=playable,
+            q=q,
+            related=related,
+            scope=scope,
+            tag=tag,
+            title=title,
+            title_icontains=title_icontains,
+            title_iexact=title_iexact,
+            title_startswith=title_startswith,
+        )
+    ).parsed
diff --git a/funkwhale_api_client/api/tracks/get_track_libraries.py b/funkwhale_api_client/api/tracks/get_track_libraries.py
new file mode 100644
index 0000000..04c6cfc
--- /dev/null
+++ b/funkwhale_api_client/api/tracks/get_track_libraries.py
@@ -0,0 +1,460 @@
+from typing import Any, Dict, List, Optional, Union
+
+import httpx
+
+from ...client import AuthenticatedClient
+from ...models.get_track_libraries_ordering_item import GetTrackLibrariesOrderingItem
+from ...models.paginated_library_list import PaginatedLibraryList
+from ...types import UNSET, Response, Unset
+
+
+def _get_kwargs(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    album: Union[Unset, None, int] = UNSET,
+    artist: Union[Unset, None, str] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    license_: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetTrackLibrariesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+    title: Union[Unset, None, str] = UNSET,
+    title_icontains: Union[Unset, None, str] = UNSET,
+    title_iexact: Union[Unset, None, str] = UNSET,
+    title_startswith: Union[Unset, None, str] = UNSET,
+) -> Dict[str, Any]:
+    url = "{}/api/v1/tracks/{id}/libraries/".format(client.base_url, id=id)
+
+    headers: Dict[str, str] = client.get_headers()
+    cookies: Dict[str, Any] = client.get_cookies()
+
+    params: Dict[str, Any] = {}
+    params["album"] = album
+
+    params["artist"] = artist
+
+    params["channel"] = channel
+
+    params["hidden"] = hidden
+
+    params["include_channels"] = include_channels
+
+    params["library"] = library
+
+    params["license"] = license_
+
+    params["mbid"] = mbid
+
+    json_ordering: Union[Unset, None, List[str]] = UNSET
+    if not isinstance(ordering, Unset):
+        if ordering is None:
+            json_ordering = None
+        else:
+            json_ordering = []
+            for ordering_item_data in ordering:
+                ordering_item = ordering_item_data.value
+
+                json_ordering.append(ordering_item)
+
+    params["ordering"] = json_ordering
+
+    params["page"] = page
+
+    params["page_size"] = page_size
+
+    params["playable"] = playable
+
+    params["q"] = q
+
+    params["related"] = related
+
+    params["scope"] = scope
+
+    json_tag: Union[Unset, None, List[str]] = UNSET
+    if not isinstance(tag, Unset):
+        if tag is None:
+            json_tag = None
+        else:
+            json_tag = tag
+
+    params["tag"] = json_tag
+
+    params["title"] = title
+
+    params["title__icontains"] = title_icontains
+
+    params["title__iexact"] = title_iexact
+
+    params["title__startswith"] = title_startswith
+
+    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[PaginatedLibraryList]:
+    if response.status_code == 200:
+        response_200 = PaginatedLibraryList.from_dict(response.json())
+
+        return response_200
+    return None
+
+
+def _build_response(*, response: httpx.Response) -> Response[PaginatedLibraryList]:
+    return Response(
+        status_code=response.status_code,
+        content=response.content,
+        headers=response.headers,
+        parsed=_parse_response(response=response),
+    )
+
+
+def sync_detailed(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    album: Union[Unset, None, int] = UNSET,
+    artist: Union[Unset, None, str] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    license_: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetTrackLibrariesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+    title: Union[Unset, None, str] = UNSET,
+    title_icontains: Union[Unset, None, str] = UNSET,
+    title_iexact: Union[Unset, None, str] = UNSET,
+    title_startswith: Union[Unset, None, str] = UNSET,
+) -> Response[PaginatedLibraryList]:
+    """A simple ViewSet for viewing and editing accounts.
+
+    Args:
+        id (int):
+        album (Union[Unset, None, int]):
+        artist (Union[Unset, None, str]):
+        channel (Union[Unset, None, str]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        license_ (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetTrackLibrariesOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+        title (Union[Unset, None, str]):
+        title_icontains (Union[Unset, None, str]):
+        title_iexact (Union[Unset, None, str]):
+        title_startswith (Union[Unset, None, str]):
+
+    Returns:
+        Response[PaginatedLibraryList]
+    """
+
+    kwargs = _get_kwargs(
+        id=id,
+        client=client,
+        album=album,
+        artist=artist,
+        channel=channel,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        license_=license_,
+        mbid=mbid,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+        title=title,
+        title_icontains=title_icontains,
+        title_iexact=title_iexact,
+        title_startswith=title_startswith,
+    )
+
+    response = httpx.request(
+        verify=client.verify_ssl,
+        **kwargs,
+    )
+
+    return _build_response(response=response)
+
+
+def sync(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    album: Union[Unset, None, int] = UNSET,
+    artist: Union[Unset, None, str] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    license_: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetTrackLibrariesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+    title: Union[Unset, None, str] = UNSET,
+    title_icontains: Union[Unset, None, str] = UNSET,
+    title_iexact: Union[Unset, None, str] = UNSET,
+    title_startswith: Union[Unset, None, str] = UNSET,
+) -> Optional[PaginatedLibraryList]:
+    """A simple ViewSet for viewing and editing accounts.
+
+    Args:
+        id (int):
+        album (Union[Unset, None, int]):
+        artist (Union[Unset, None, str]):
+        channel (Union[Unset, None, str]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        license_ (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetTrackLibrariesOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+        title (Union[Unset, None, str]):
+        title_icontains (Union[Unset, None, str]):
+        title_iexact (Union[Unset, None, str]):
+        title_startswith (Union[Unset, None, str]):
+
+    Returns:
+        Response[PaginatedLibraryList]
+    """
+
+    return sync_detailed(
+        id=id,
+        client=client,
+        album=album,
+        artist=artist,
+        channel=channel,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        license_=license_,
+        mbid=mbid,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+        title=title,
+        title_icontains=title_icontains,
+        title_iexact=title_iexact,
+        title_startswith=title_startswith,
+    ).parsed
+
+
+async def asyncio_detailed(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    album: Union[Unset, None, int] = UNSET,
+    artist: Union[Unset, None, str] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    license_: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetTrackLibrariesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+    title: Union[Unset, None, str] = UNSET,
+    title_icontains: Union[Unset, None, str] = UNSET,
+    title_iexact: Union[Unset, None, str] = UNSET,
+    title_startswith: Union[Unset, None, str] = UNSET,
+) -> Response[PaginatedLibraryList]:
+    """A simple ViewSet for viewing and editing accounts.
+
+    Args:
+        id (int):
+        album (Union[Unset, None, int]):
+        artist (Union[Unset, None, str]):
+        channel (Union[Unset, None, str]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        license_ (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetTrackLibrariesOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+        title (Union[Unset, None, str]):
+        title_icontains (Union[Unset, None, str]):
+        title_iexact (Union[Unset, None, str]):
+        title_startswith (Union[Unset, None, str]):
+
+    Returns:
+        Response[PaginatedLibraryList]
+    """
+
+    kwargs = _get_kwargs(
+        id=id,
+        client=client,
+        album=album,
+        artist=artist,
+        channel=channel,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        license_=license_,
+        mbid=mbid,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+        title=title,
+        title_icontains=title_icontains,
+        title_iexact=title_iexact,
+        title_startswith=title_startswith,
+    )
+
+    async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
+        response = await _client.request(**kwargs)
+
+    return _build_response(response=response)
+
+
+async def asyncio(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    album: Union[Unset, None, int] = UNSET,
+    artist: Union[Unset, None, str] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    license_: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetTrackLibrariesOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+    title: Union[Unset, None, str] = UNSET,
+    title_icontains: Union[Unset, None, str] = UNSET,
+    title_iexact: Union[Unset, None, str] = UNSET,
+    title_startswith: Union[Unset, None, str] = UNSET,
+) -> Optional[PaginatedLibraryList]:
+    """A simple ViewSet for viewing and editing accounts.
+
+    Args:
+        id (int):
+        album (Union[Unset, None, int]):
+        artist (Union[Unset, None, str]):
+        channel (Union[Unset, None, str]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        license_ (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetTrackLibrariesOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+        title (Union[Unset, None, str]):
+        title_icontains (Union[Unset, None, str]):
+        title_iexact (Union[Unset, None, str]):
+        title_startswith (Union[Unset, None, str]):
+
+    Returns:
+        Response[PaginatedLibraryList]
+    """
+
+    return (
+        await asyncio_detailed(
+            id=id,
+            client=client,
+            album=album,
+            artist=artist,
+            channel=channel,
+            hidden=hidden,
+            include_channels=include_channels,
+            library=library,
+            license_=license_,
+            mbid=mbid,
+            ordering=ordering,
+            page=page,
+            page_size=page_size,
+            playable=playable,
+            q=q,
+            related=related,
+            scope=scope,
+            tag=tag,
+            title=title,
+            title_icontains=title_icontains,
+            title_iexact=title_iexact,
+            title_startswith=title_startswith,
+        )
+    ).parsed
diff --git a/funkwhale_api_client/api/tracks/get_track_mutations.py b/funkwhale_api_client/api/tracks/get_track_mutations.py
new file mode 100644
index 0000000..65478c6
--- /dev/null
+++ b/funkwhale_api_client/api/tracks/get_track_mutations.py
@@ -0,0 +1,460 @@
+from typing import Any, Dict, List, Optional, Union
+
+import httpx
+
+from ...client import AuthenticatedClient
+from ...models.get_track_mutations_ordering_item import GetTrackMutationsOrderingItem
+from ...models.paginated_api_mutation_list import PaginatedAPIMutationList
+from ...types import UNSET, Response, Unset
+
+
+def _get_kwargs(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    album: Union[Unset, None, int] = UNSET,
+    artist: Union[Unset, None, str] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    license_: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetTrackMutationsOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+    title: Union[Unset, None, str] = UNSET,
+    title_icontains: Union[Unset, None, str] = UNSET,
+    title_iexact: Union[Unset, None, str] = UNSET,
+    title_startswith: Union[Unset, None, str] = UNSET,
+) -> Dict[str, Any]:
+    url = "{}/api/v1/tracks/{id}/mutations/".format(client.base_url, id=id)
+
+    headers: Dict[str, str] = client.get_headers()
+    cookies: Dict[str, Any] = client.get_cookies()
+
+    params: Dict[str, Any] = {}
+    params["album"] = album
+
+    params["artist"] = artist
+
+    params["channel"] = channel
+
+    params["hidden"] = hidden
+
+    params["include_channels"] = include_channels
+
+    params["library"] = library
+
+    params["license"] = license_
+
+    params["mbid"] = mbid
+
+    json_ordering: Union[Unset, None, List[str]] = UNSET
+    if not isinstance(ordering, Unset):
+        if ordering is None:
+            json_ordering = None
+        else:
+            json_ordering = []
+            for ordering_item_data in ordering:
+                ordering_item = ordering_item_data.value
+
+                json_ordering.append(ordering_item)
+
+    params["ordering"] = json_ordering
+
+    params["page"] = page
+
+    params["page_size"] = page_size
+
+    params["playable"] = playable
+
+    params["q"] = q
+
+    params["related"] = related
+
+    params["scope"] = scope
+
+    json_tag: Union[Unset, None, List[str]] = UNSET
+    if not isinstance(tag, Unset):
+        if tag is None:
+            json_tag = None
+        else:
+            json_tag = tag
+
+    params["tag"] = json_tag
+
+    params["title"] = title
+
+    params["title__icontains"] = title_icontains
+
+    params["title__iexact"] = title_iexact
+
+    params["title__startswith"] = title_startswith
+
+    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[PaginatedAPIMutationList]:
+    if response.status_code == 200:
+        response_200 = PaginatedAPIMutationList.from_dict(response.json())
+
+        return response_200
+    return None
+
+
+def _build_response(*, response: httpx.Response) -> Response[PaginatedAPIMutationList]:
+    return Response(
+        status_code=response.status_code,
+        content=response.content,
+        headers=response.headers,
+        parsed=_parse_response(response=response),
+    )
+
+
+def sync_detailed(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    album: Union[Unset, None, int] = UNSET,
+    artist: Union[Unset, None, str] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    license_: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetTrackMutationsOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+    title: Union[Unset, None, str] = UNSET,
+    title_icontains: Union[Unset, None, str] = UNSET,
+    title_iexact: Union[Unset, None, str] = UNSET,
+    title_startswith: Union[Unset, None, str] = UNSET,
+) -> Response[PaginatedAPIMutationList]:
+    """A simple ViewSet for viewing and editing accounts.
+
+    Args:
+        id (int):
+        album (Union[Unset, None, int]):
+        artist (Union[Unset, None, str]):
+        channel (Union[Unset, None, str]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        license_ (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetTrackMutationsOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+        title (Union[Unset, None, str]):
+        title_icontains (Union[Unset, None, str]):
+        title_iexact (Union[Unset, None, str]):
+        title_startswith (Union[Unset, None, str]):
+
+    Returns:
+        Response[PaginatedAPIMutationList]
+    """
+
+    kwargs = _get_kwargs(
+        id=id,
+        client=client,
+        album=album,
+        artist=artist,
+        channel=channel,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        license_=license_,
+        mbid=mbid,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+        title=title,
+        title_icontains=title_icontains,
+        title_iexact=title_iexact,
+        title_startswith=title_startswith,
+    )
+
+    response = httpx.request(
+        verify=client.verify_ssl,
+        **kwargs,
+    )
+
+    return _build_response(response=response)
+
+
+def sync(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    album: Union[Unset, None, int] = UNSET,
+    artist: Union[Unset, None, str] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    license_: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetTrackMutationsOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+    title: Union[Unset, None, str] = UNSET,
+    title_icontains: Union[Unset, None, str] = UNSET,
+    title_iexact: Union[Unset, None, str] = UNSET,
+    title_startswith: Union[Unset, None, str] = UNSET,
+) -> Optional[PaginatedAPIMutationList]:
+    """A simple ViewSet for viewing and editing accounts.
+
+    Args:
+        id (int):
+        album (Union[Unset, None, int]):
+        artist (Union[Unset, None, str]):
+        channel (Union[Unset, None, str]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        license_ (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetTrackMutationsOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+        title (Union[Unset, None, str]):
+        title_icontains (Union[Unset, None, str]):
+        title_iexact (Union[Unset, None, str]):
+        title_startswith (Union[Unset, None, str]):
+
+    Returns:
+        Response[PaginatedAPIMutationList]
+    """
+
+    return sync_detailed(
+        id=id,
+        client=client,
+        album=album,
+        artist=artist,
+        channel=channel,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        license_=license_,
+        mbid=mbid,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+        title=title,
+        title_icontains=title_icontains,
+        title_iexact=title_iexact,
+        title_startswith=title_startswith,
+    ).parsed
+
+
+async def asyncio_detailed(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    album: Union[Unset, None, int] = UNSET,
+    artist: Union[Unset, None, str] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    license_: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetTrackMutationsOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+    title: Union[Unset, None, str] = UNSET,
+    title_icontains: Union[Unset, None, str] = UNSET,
+    title_iexact: Union[Unset, None, str] = UNSET,
+    title_startswith: Union[Unset, None, str] = UNSET,
+) -> Response[PaginatedAPIMutationList]:
+    """A simple ViewSet for viewing and editing accounts.
+
+    Args:
+        id (int):
+        album (Union[Unset, None, int]):
+        artist (Union[Unset, None, str]):
+        channel (Union[Unset, None, str]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        license_ (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetTrackMutationsOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+        title (Union[Unset, None, str]):
+        title_icontains (Union[Unset, None, str]):
+        title_iexact (Union[Unset, None, str]):
+        title_startswith (Union[Unset, None, str]):
+
+    Returns:
+        Response[PaginatedAPIMutationList]
+    """
+
+    kwargs = _get_kwargs(
+        id=id,
+        client=client,
+        album=album,
+        artist=artist,
+        channel=channel,
+        hidden=hidden,
+        include_channels=include_channels,
+        library=library,
+        license_=license_,
+        mbid=mbid,
+        ordering=ordering,
+        page=page,
+        page_size=page_size,
+        playable=playable,
+        q=q,
+        related=related,
+        scope=scope,
+        tag=tag,
+        title=title,
+        title_icontains=title_icontains,
+        title_iexact=title_iexact,
+        title_startswith=title_startswith,
+    )
+
+    async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
+        response = await _client.request(**kwargs)
+
+    return _build_response(response=response)
+
+
+async def asyncio(
+    id: int,
+    *,
+    client: AuthenticatedClient,
+    album: Union[Unset, None, int] = UNSET,
+    artist: Union[Unset, None, str] = UNSET,
+    channel: Union[Unset, None, str] = UNSET,
+    hidden: Union[Unset, None, bool] = UNSET,
+    include_channels: Union[Unset, None, bool] = UNSET,
+    library: Union[Unset, None, str] = UNSET,
+    license_: Union[Unset, None, str] = UNSET,
+    mbid: Union[Unset, None, str] = UNSET,
+    ordering: Union[Unset, None, List[GetTrackMutationsOrderingItem]] = UNSET,
+    page: Union[Unset, None, int] = UNSET,
+    page_size: Union[Unset, None, int] = UNSET,
+    playable: Union[Unset, None, bool] = UNSET,
+    q: Union[Unset, None, str] = UNSET,
+    related: Union[Unset, None, str] = UNSET,
+    scope: Union[Unset, None, str] = UNSET,
+    tag: Union[Unset, None, List[str]] = UNSET,
+    title: Union[Unset, None, str] = UNSET,
+    title_icontains: Union[Unset, None, str] = UNSET,
+    title_iexact: Union[Unset, None, str] = UNSET,
+    title_startswith: Union[Unset, None, str] = UNSET,
+) -> Optional[PaginatedAPIMutationList]:
+    """A simple ViewSet for viewing and editing accounts.
+
+    Args:
+        id (int):
+        album (Union[Unset, None, int]):
+        artist (Union[Unset, None, str]):
+        channel (Union[Unset, None, str]):
+        hidden (Union[Unset, None, bool]):
+        include_channels (Union[Unset, None, bool]):
+        library (Union[Unset, None, str]):
+        license_ (Union[Unset, None, str]):
+        mbid (Union[Unset, None, str]):
+        ordering (Union[Unset, None, List[GetTrackMutationsOrderingItem]]):
+        page (Union[Unset, None, int]):
+        page_size (Union[Unset, None, int]):
+        playable (Union[Unset, None, bool]):
+        q (Union[Unset, None, str]):
+        related (Union[Unset, None, str]):
+        scope (Union[Unset, None, str]):
+        tag (Union[Unset, None, List[str]]):
+        title (Union[Unset, None, str]):
+        title_icontains (Union[Unset, None, str]):
+        title_iexact (Union[Unset, None, str]):
+        title_startswith (Union[Unset, None, str]):
+
+    Returns:
+        Response[PaginatedAPIMutationList]
+    """
+
+    return (
+        await asyncio_detailed(
+            id=id,
+            client=client,
+            album=album,
+            artist=artist,
+            channel=channel,
+            hidden=hidden,
+            include_channels=include_channels,
+            library=library,
+            license_=license_,
+            mbid=mbid,
+            ordering=ordering,
+            page=page,
+            page_size=page_size,
+            playable=playable,
+            q=q,
+            related=related,
+            scope=scope,
+            tag=tag,
+            title=title,
+            title_icontains=title_icontains,
+            title_iexact=title_iexact,
+            title_startswith=title_startswith,
+        )
+    ).parsed
diff --git a/funkwhale_api_client/api/tracks/tracks_list.py b/funkwhale_api_client/api/tracks/get_tracks.py
similarity index 95%
rename from funkwhale_api_client/api/tracks/tracks_list.py
rename to funkwhale_api_client/api/tracks/get_tracks.py
index 425b942..346edcf 100644
--- a/funkwhale_api_client/api/tracks/tracks_list.py
+++ b/funkwhale_api_client/api/tracks/get_tracks.py
@@ -3,8 +3,8 @@ from typing import Any, Dict, List, Optional, Union
 import httpx
 
 from ...client import AuthenticatedClient
+from ...models.get_tracks_ordering_item import GetTracksOrderingItem
 from ...models.paginated_track_list import PaginatedTrackList
-from ...models.tracks_list_ordering_item import TracksListOrderingItem
 from ...types import UNSET, Response, Unset
 
 
@@ -20,7 +20,7 @@ def _get_kwargs(
     library: Union[Unset, None, str] = UNSET,
     license_: Union[Unset, None, str] = UNSET,
     mbid: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[TracksListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetTracksOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     playable: Union[Unset, None, bool] = UNSET,
@@ -147,7 +147,7 @@ def sync_detailed(
     library: Union[Unset, None, str] = UNSET,
     license_: Union[Unset, None, str] = UNSET,
     mbid: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[TracksListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetTracksOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     playable: Union[Unset, None, bool] = UNSET,
@@ -172,7 +172,7 @@ def sync_detailed(
         library (Union[Unset, None, str]):
         license_ (Union[Unset, None, str]):
         mbid (Union[Unset, None, str]):
-        ordering (Union[Unset, None, List[TracksListOrderingItem]]):
+        ordering (Union[Unset, None, List[GetTracksOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         playable (Union[Unset, None, bool]):
@@ -234,7 +234,7 @@ def sync(
     library: Union[Unset, None, str] = UNSET,
     license_: Union[Unset, None, str] = UNSET,
     mbid: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[TracksListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetTracksOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     playable: Union[Unset, None, bool] = UNSET,
@@ -259,7 +259,7 @@ def sync(
         library (Union[Unset, None, str]):
         license_ (Union[Unset, None, str]):
         mbid (Union[Unset, None, str]):
-        ordering (Union[Unset, None, List[TracksListOrderingItem]]):
+        ordering (Union[Unset, None, List[GetTracksOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         playable (Union[Unset, None, bool]):
@@ -314,7 +314,7 @@ async def asyncio_detailed(
     library: Union[Unset, None, str] = UNSET,
     license_: Union[Unset, None, str] = UNSET,
     mbid: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[TracksListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetTracksOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     playable: Union[Unset, None, bool] = UNSET,
@@ -339,7 +339,7 @@ async def asyncio_detailed(
         library (Union[Unset, None, str]):
         license_ (Union[Unset, None, str]):
         mbid (Union[Unset, None, str]):
-        ordering (Union[Unset, None, List[TracksListOrderingItem]]):
+        ordering (Union[Unset, None, List[GetTracksOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         playable (Union[Unset, None, bool]):
@@ -399,7 +399,7 @@ async def asyncio(
     library: Union[Unset, None, str] = UNSET,
     license_: Union[Unset, None, str] = UNSET,
     mbid: Union[Unset, None, str] = UNSET,
-    ordering: Union[Unset, None, List[TracksListOrderingItem]] = UNSET,
+    ordering: Union[Unset, None, List[GetTracksOrderingItem]] = UNSET,
     page: Union[Unset, None, int] = UNSET,
     page_size: Union[Unset, None, int] = UNSET,
     playable: Union[Unset, None, bool] = UNSET,
@@ -424,7 +424,7 @@ async def asyncio(
         library (Union[Unset, None, str]):
         license_ (Union[Unset, None, str]):
         mbid (Union[Unset, None, str]):
-        ordering (Union[Unset, None, List[TracksListOrderingItem]]):
+        ordering (Union[Unset, None, List[GetTracksOrderingItem]]):
         page (Union[Unset, None, int]):
         page_size (Union[Unset, None, int]):
         playable (Union[Unset, None, bool]):
diff --git a/funkwhale_api_client/api/tracks/tracks_fetches_retrieve.py b/funkwhale_api_client/api/tracks/tracks_fetches_retrieve.py
deleted file mode 100644
index 8d75aec..0000000
--- a/funkwhale_api_client/api/tracks/tracks_fetches_retrieve.py
+++ /dev/null
@@ -1,137 +0,0 @@
-from typing import Any, Dict, Optional
-
-import httpx
-
-from ...client import AuthenticatedClient
-from ...models.track import Track
-from ...types import Response
-
-
-def _get_kwargs(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Dict[str, Any]:
-    url = "{}/api/v1/tracks/{id}/fetches/".format(client.base_url, id=id)
-
-    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[Track]:
-    if response.status_code == 200:
-        response_200 = Track.from_dict(response.json())
-
-        return response_200
-    return None
-
-
-def _build_response(*, response: httpx.Response) -> Response[Track]:
-    return Response(
-        status_code=response.status_code,
-        content=response.content,
-        headers=response.headers,
-        parsed=_parse_response(response=response),
-    )
-
-
-def sync_detailed(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Response[Track]:
-    """A simple ViewSet for viewing and editing accounts.
-
-    Args:
-        id (int):
-
-    Returns:
-        Response[Track]
-    """
-
-    kwargs = _get_kwargs(
-        id=id,
-        client=client,
-    )
-
-    response = httpx.request(
-        verify=client.verify_ssl,
-        **kwargs,
-    )
-
-    return _build_response(response=response)
-
-
-def sync(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Optional[Track]:
-    """A simple ViewSet for viewing and editing accounts.
-
-    Args:
-        id (int):
-
-    Returns:
-        Response[Track]
-    """
-
-    return sync_detailed(
-        id=id,
-        client=client,
-    ).parsed
-
-
-async def asyncio_detailed(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Response[Track]:
-    """A simple ViewSet for viewing and editing accounts.
-
-    Args:
-        id (int):
-
-    Returns:
-        Response[Track]
-    """
-
-    kwargs = _get_kwargs(
-        id=id,
-        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(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Optional[Track]:
-    """A simple ViewSet for viewing and editing accounts.
-
-    Args:
-        id (int):
-
-    Returns:
-        Response[Track]
-    """
-
-    return (
-        await asyncio_detailed(
-            id=id,
-            client=client,
-        )
-    ).parsed
diff --git a/funkwhale_api_client/api/tracks/tracks_libraries_retrieve.py b/funkwhale_api_client/api/tracks/tracks_libraries_retrieve.py
deleted file mode 100644
index 8a1d772..0000000
--- a/funkwhale_api_client/api/tracks/tracks_libraries_retrieve.py
+++ /dev/null
@@ -1,137 +0,0 @@
-from typing import Any, Dict, Optional
-
-import httpx
-
-from ...client import AuthenticatedClient
-from ...models.track import Track
-from ...types import Response
-
-
-def _get_kwargs(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Dict[str, Any]:
-    url = "{}/api/v1/tracks/{id}/libraries/".format(client.base_url, id=id)
-
-    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[Track]:
-    if response.status_code == 200:
-        response_200 = Track.from_dict(response.json())
-
-        return response_200
-    return None
-
-
-def _build_response(*, response: httpx.Response) -> Response[Track]:
-    return Response(
-        status_code=response.status_code,
-        content=response.content,
-        headers=response.headers,
-        parsed=_parse_response(response=response),
-    )
-
-
-def sync_detailed(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Response[Track]:
-    """A simple ViewSet for viewing and editing accounts.
-
-    Args:
-        id (int):
-
-    Returns:
-        Response[Track]
-    """
-
-    kwargs = _get_kwargs(
-        id=id,
-        client=client,
-    )
-
-    response = httpx.request(
-        verify=client.verify_ssl,
-        **kwargs,
-    )
-
-    return _build_response(response=response)
-
-
-def sync(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Optional[Track]:
-    """A simple ViewSet for viewing and editing accounts.
-
-    Args:
-        id (int):
-
-    Returns:
-        Response[Track]
-    """
-
-    return sync_detailed(
-        id=id,
-        client=client,
-    ).parsed
-
-
-async def asyncio_detailed(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Response[Track]:
-    """A simple ViewSet for viewing and editing accounts.
-
-    Args:
-        id (int):
-
-    Returns:
-        Response[Track]
-    """
-
-    kwargs = _get_kwargs(
-        id=id,
-        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(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Optional[Track]:
-    """A simple ViewSet for viewing and editing accounts.
-
-    Args:
-        id (int):
-
-    Returns:
-        Response[Track]
-    """
-
-    return (
-        await asyncio_detailed(
-            id=id,
-            client=client,
-        )
-    ).parsed
diff --git a/funkwhale_api_client/api/tracks/tracks_mutations_retrieve.py b/funkwhale_api_client/api/tracks/tracks_mutations_retrieve.py
deleted file mode 100644
index d020b34..0000000
--- a/funkwhale_api_client/api/tracks/tracks_mutations_retrieve.py
+++ /dev/null
@@ -1,137 +0,0 @@
-from typing import Any, Dict, Optional
-
-import httpx
-
-from ...client import AuthenticatedClient
-from ...models.track import Track
-from ...types import Response
-
-
-def _get_kwargs(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Dict[str, Any]:
-    url = "{}/api/v1/tracks/{id}/mutations/".format(client.base_url, id=id)
-
-    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[Track]:
-    if response.status_code == 200:
-        response_200 = Track.from_dict(response.json())
-
-        return response_200
-    return None
-
-
-def _build_response(*, response: httpx.Response) -> Response[Track]:
-    return Response(
-        status_code=response.status_code,
-        content=response.content,
-        headers=response.headers,
-        parsed=_parse_response(response=response),
-    )
-
-
-def sync_detailed(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Response[Track]:
-    """A simple ViewSet for viewing and editing accounts.
-
-    Args:
-        id (int):
-
-    Returns:
-        Response[Track]
-    """
-
-    kwargs = _get_kwargs(
-        id=id,
-        client=client,
-    )
-
-    response = httpx.request(
-        verify=client.verify_ssl,
-        **kwargs,
-    )
-
-    return _build_response(response=response)
-
-
-def sync(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Optional[Track]:
-    """A simple ViewSet for viewing and editing accounts.
-
-    Args:
-        id (int):
-
-    Returns:
-        Response[Track]
-    """
-
-    return sync_detailed(
-        id=id,
-        client=client,
-    ).parsed
-
-
-async def asyncio_detailed(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Response[Track]:
-    """A simple ViewSet for viewing and editing accounts.
-
-    Args:
-        id (int):
-
-    Returns:
-        Response[Track]
-    """
-
-    kwargs = _get_kwargs(
-        id=id,
-        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(
-    id: int,
-    *,
-    client: AuthenticatedClient,
-) -> Optional[Track]:
-    """A simple ViewSet for viewing and editing accounts.
-
-    Args:
-        id (int):
-
-    Returns:
-        Response[Track]
-    """
-
-    return (
-        await asyncio_detailed(
-            id=id,
-            client=client,
-        )
-    ).parsed
diff --git a/funkwhale_api_client/api/uploads/uploads_create.py b/funkwhale_api_client/api/uploads/create_upload.py
similarity index 100%
rename from funkwhale_api_client/api/uploads/uploads_create.py
rename to funkwhale_api_client/api/uploads/create_upload.py
diff --git a/funkwhale_api_client/api/uploads/uploads_action_create.py b/funkwhale_api_client/api/uploads/create_upload_action.py
similarity index 100%
rename from funkwhale_api_client/api/uploads/uploads_action_create.py
rename to funkwhale_api_client/api/uploads/create_upload_action.py
diff --git a/funkwhale_api_client/api/uploads/uploads_destroy.py b/funkwhale_api_client/api/uploads/delete_upload.py
similarity index 100%
rename from funkwhale_api_client/api/uploads/uploads_destroy.py
rename to funkwhale_api_client/api/uploads/delete_upload.py
diff --git a/funkwhale_api_client/api/uploads/uploads_retrieve.py b/funkwhale_api_client/api/uploads/get_upload.py
similarity index 100%
rename from funkwhale_api_client/api/uploads/uploads_retrieve.py
rename to funkwhale_api_client/api/uploads/get_upload.py
diff --git a/funkwhale_api_client/api/uploads/uploads_audio_file_metadata_retrieve.py b/funkwhale_api_client/api/uploads/get_upload_metadata.py
similarity index 100%
rename from funkwhale_api_client/api/uploads/uploads_audio_file_metadata_retrieve.py
rename to funkwhale_api_client/api/uploads/get_upload_metadata.py
diff --git a/funkwhale_api_client/api/uploads/uploads_list.py b/funkwhale_api_client/api/uploads/get_uploads.py
similarity index 93%
rename from funkwhale_api_client/api/uploads/uploads_list.py
rename to funkwhale_api_client/api/uploads/get_uploads.py
index 964b253..fd7fa10 100644
--- a/funkwhale_api_client/api/uploads/uploads_list.py
+++ b/funkwhale_api_client/api/uploads/get_uploads.py
@@ -3,8 +3,8 @@ from typing import Any, Dict, List, Optional, Union
 import httpx
 
 from ...client import AuthenticatedClient
+from ...models.get_uploads_import_status_item import GetUploadsImportStatusItem
 from ...models.paginated_upload_for_owner_list import PaginatedUploadForOwnerList
-from ...models.uploads_list_import_status_item import UploadsListImportStatusItem
 from ...types import UNSET, Response, Unset
 
 
@@ -14,7 +14,7 @@ def _get_kwargs(
     album_artist: Union[Unset, None, str] = UNSET,
     channel: Union[Unset, None, str] = UNSET,
     import_reference: Union[Unset, None, str] = UNSET,
-    import_status: Union[Unset, None, List[UploadsListImportStatusItem]] = UNSET,
+    import_status: Union[Unset, None, List[GetUploadsImportStatusItem]] = UNSET,
     include_channels: Union[Unset, None, bool] = UNSET,
     library: Union[Unset, None, str] = UNSET,
     mimetype: Union[Unset, None, str] = UNSET,
@@ -109,7 +109,7 @@ def sync_detailed(
     album_artist: Union[Unset, None, str] = UNSET,
     channel: Union[Unset, None, str] = UNSET,
     import_reference: Union[Unset, None, str] = UNSET,
-    import_status: Union[Unset, None, List[UploadsListImportStatusItem]] = UNSET,
+    import_status: Union[Unset, None, List[GetUploadsImportStatusItem]] = UNSET,
     include_channels: Union[Unset, None, bool] = UNSET,
     library: Union[Unset, None, str] = UNSET,
     mimetype: Union[Unset, None, str] = UNSET,
@@ -127,7 +127,7 @@ def sync_detailed(
         album_artist (Union[Unset, None, str]):
         channel (Union[Unset, None, str]):
         import_reference (Union[Unset, None, str]):
-        import_status (Union[Unset, None, List[UploadsListImportStatusItem]]):
+        import_status (Union[Unset, None, List[GetUploadsImportStatusItem]]):
         include_channels (Union[Unset, None, bool]):
         library (Union[Unset, None, str]):
         mimetype (Union[Unset, None, str]):
@@ -177,7 +177,7 @@ def sync(
     album_artist: Union[Unset, None, str] = UNSET,
     channel: Union[Unset, None, str] = UNSET,
     import_reference: Union[Unset, None, str] = UNSET,
-    import_status: Union[Unset, None, List[UploadsListImportStatusItem]] = UNSET,
+    import_status: Union[Unset, None, List[GetUploadsImportStatusItem]] = UNSET,
     include_channels: Union[Unset, None, bool] = UNSET,
     library: Union[Unset, None, str] = UNSET,
     mimetype: Union[Unset, None, str] = UNSET,
@@ -195,7 +195,7 @@ def sync(
         album_artist (Union[Unset, None, str]):
         channel (Union[Unset, None, str]):
         import_reference (Union[Unset, None, str]):
-        import_status (Union[Unset, None, List[UploadsListImportStatusItem]]):
+        import_status (Union[Unset, None, List[GetUploadsImportStatusItem]]):
         include_channels (Union[Unset, None, bool]):
         library (Union[Unset, None, str]):
         mimetype (Union[Unset, None, str]):
@@ -238,7 +238,7 @@ async def asyncio_detailed(
     album_artist: Union[Unset, None, str] = UNSET,
     channel: Union[Unset, None, str] = UNSET,
     import_reference: Union[Unset, None, str] = UNSET,
-    import_status: Union[Unset, None, List[UploadsListImportStatusItem]] = UNSET,
+    import_status: Union[Unset, None, List[GetUploadsImportStatusItem]] = UNSET,
     include_channels: Union[Unset, None, bool] = UNSET,
     library: Union[Unset, None, str] = UNSET,
     mimetype: Union[Unset, None, str] = UNSET,
@@ -256,7 +256,7 @@ async def asyncio_detailed(
         album_artist (Union[Unset, None, str]):
         channel (Union[Unset, None, str]):
         import_reference (Union[Unset, None, str]):
-        import_status (Union[Unset, None, List[UploadsListImportStatusItem]]):
+        import_status (Union[Unset, None, List[GetUploadsImportStatusItem]]):
         include_channels (Union[Unset, None, bool]):
         library (Union[Unset, None, str]):
         mimetype (Union[Unset, None, str]):
@@ -304,7 +304,7 @@ async def asyncio(
     album_artist: Union[Unset, None, str] = UNSET,
     channel: Union[Unset, None, str] = UNSET,
     import_reference: Union[Unset, None, str] = UNSET,
-    import_status: Union[Unset, None, List[UploadsListImportStatusItem]] = UNSET,
+    import_status: Union[Unset, None, List[GetUploadsImportStatusItem]] = UNSET,
     include_channels: Union[Unset, None, bool] = UNSET,
     library: Union[Unset, None, str] = UNSET,
     mimetype: Union[Unset, None, str] = UNSET,
@@ -322,7 +322,7 @@ async def asyncio(
         album_artist (Union[Unset, None, str]):
         channel (Union[Unset, None, str]):
         import_reference (Union[Unset, None, str]):
-        import_status (Union[Unset, None, List[UploadsListImportStatusItem]]):
+        import_status (Union[Unset, None, List[GetUploadsImportStatusItem]]):
         include_channels (Union[Unset, None, bool]):
         library (Union[Unset, None, str]):
         mimetype (Union[Unset, None, str]):
diff --git a/funkwhale_api_client/api/uploads/uploads_partial_update.py b/funkwhale_api_client/api/uploads/partial_update_upload.py
similarity index 100%
rename from funkwhale_api_client/api/uploads/uploads_partial_update.py
rename to funkwhale_api_client/api/uploads/partial_update_upload.py
diff --git a/funkwhale_api_client/api/uploads/uploads_update.py b/funkwhale_api_client/api/uploads/update_upload.py
similarity index 100%
rename from funkwhale_api_client/api/uploads/uploads_update.py
rename to funkwhale_api_client/api/uploads/update_upload.py
diff --git a/funkwhale_api_client/api/users/users_change_email_create.py b/funkwhale_api_client/api/users/change_email.py
similarity index 100%
rename from funkwhale_api_client/api/users/users_change_email_create.py
rename to funkwhale_api_client/api/users/change_email.py
diff --git a/funkwhale_api_client/api/users/users_subsonic_token_create.py b/funkwhale_api_client/api/users/create_user_subsonic_token.py
similarity index 100%
rename from funkwhale_api_client/api/users/users_subsonic_token_create.py
rename to funkwhale_api_client/api/users/create_user_subsonic_token.py
diff --git a/funkwhale_api_client/api/users/users_me_destroy.py b/funkwhale_api_client/api/users/delete_authenticated_user.py
similarity index 100%
rename from funkwhale_api_client/api/users/users_me_destroy.py
rename to funkwhale_api_client/api/users/delete_authenticated_user.py
diff --git a/funkwhale_api_client/api/users/users_subsonic_token_destroy.py b/funkwhale_api_client/api/users/delete_user_subsonic_token.py
similarity index 100%
rename from funkwhale_api_client/api/users/users_subsonic_token_destroy.py
rename to funkwhale_api_client/api/users/delete_user_subsonic_token.py
diff --git a/funkwhale_api_client/api/users/users_me_retrieve.py b/funkwhale_api_client/api/users/get_authenticated_user.py
similarity index 100%
rename from funkwhale_api_client/api/users/users_me_retrieve.py
rename to funkwhale_api_client/api/users/get_authenticated_user.py
diff --git a/funkwhale_api_client/api/users/users_subsonic_token_retrieve.py b/funkwhale_api_client/api/users/get_user_subsonic_token.py
similarity index 100%
rename from funkwhale_api_client/api/users/users_subsonic_token_retrieve.py
rename to funkwhale_api_client/api/users/get_user_subsonic_token.py
diff --git a/funkwhale_api_client/api/users/users_partial_update.py b/funkwhale_api_client/api/users/partial_update_user.py
similarity index 100%
rename from funkwhale_api_client/api/users/users_partial_update.py
rename to funkwhale_api_client/api/users/partial_update_user.py
diff --git a/funkwhale_api_client/api/users/users_settings_create.py b/funkwhale_api_client/api/users/update_settings.py
similarity index 100%
rename from funkwhale_api_client/api/users/users_settings_create.py
rename to funkwhale_api_client/api/users/update_settings.py
diff --git a/funkwhale_api_client/api/users/users_update.py b/funkwhale_api_client/api/users/update_user.py
similarity index 100%
rename from funkwhale_api_client/api/users/users_update.py
rename to funkwhale_api_client/api/users/update_user.py
diff --git a/funkwhale_api_client/api/users/users_users_change_email_create.py b/funkwhale_api_client/api/users/users_users_change_email_create.py
deleted file mode 100644
index 8966e5a..0000000
--- a/funkwhale_api_client/api/users/users_users_change_email_create.py
+++ /dev/null
@@ -1,161 +0,0 @@
-from typing import Any, Dict, Optional
-
-import httpx
-
-from ...client import AuthenticatedClient
-from ...models.user_write import UserWrite
-from ...models.user_write_request import UserWriteRequest
-from ...types import Response
-
-
-def _get_kwargs(
-    *,
-    client: AuthenticatedClient,
-    form_data: UserWriteRequest,
-    multipart_data: UserWriteRequest,
-    json_body: UserWriteRequest,
-) -> Dict[str, Any]:
-    url = "{}/api/v1/users/users/change-email/".format(client.base_url)
-
-    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[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]:
-    return Response(
-        status_code=response.status_code,
-        content=response.content,
-        headers=response.headers,
-        parsed=_parse_response(response=response),
-    )
-
-
-def sync_detailed(
-    *,
-    client: AuthenticatedClient,
-    form_data: UserWriteRequest,
-    multipart_data: UserWriteRequest,
-    json_body: UserWriteRequest,
-) -> Response[UserWrite]:
-    """
-    Args:
-        multipart_data (UserWriteRequest):
-        json_body (UserWriteRequest):
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    kwargs = _get_kwargs(
-        client=client,
-        form_data=form_data,
-        multipart_data=multipart_data,
-        json_body=json_body,
-    )
-
-    response = httpx.request(
-        verify=client.verify_ssl,
-        **kwargs,
-    )
-
-    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]:
-    """
-    Args:
-        multipart_data (UserWriteRequest):
-        json_body (UserWriteRequest):
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    kwargs = _get_kwargs(
-        client=client,
-        form_data=form_data,
-        multipart_data=multipart_data,
-        json_body=json_body,
-    )
-
-    async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
-        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/api/users/users_users_me_destroy.py b/funkwhale_api_client/api/users/users_users_me_destroy.py
deleted file mode 100644
index 244842c..0000000
--- a/funkwhale_api_client/api/users/users_users_me_destroy.py
+++ /dev/null
@@ -1,75 +0,0 @@
-from typing import Any, Dict
-
-import httpx
-
-from ...client import AuthenticatedClient
-from ...types import Response
-
-
-def _get_kwargs(
-    *,
-    client: AuthenticatedClient,
-) -> Dict[str, Any]:
-    url = "{}/api/v1/users/users/me/".format(client.base_url)
-
-    headers: Dict[str, str] = client.get_headers()
-    cookies: Dict[str, Any] = client.get_cookies()
-
-    return {
-        "method": "delete",
-        "url": url,
-        "headers": headers,
-        "cookies": cookies,
-        "timeout": client.get_timeout(),
-    }
-
-
-def _build_response(*, response: httpx.Response) -> Response[Any]:
-    return Response(
-        status_code=response.status_code,
-        content=response.content,
-        headers=response.headers,
-        parsed=None,
-    )
-
-
-def sync_detailed(
-    *,
-    client: AuthenticatedClient,
-) -> Response[Any]:
-    """Return information about the current user or delete it
-
-    Returns:
-        Response[Any]
-    """
-
-    kwargs = _get_kwargs(
-        client=client,
-    )
-
-    response = httpx.request(
-        verify=client.verify_ssl,
-        **kwargs,
-    )
-
-    return _build_response(response=response)
-
-
-async def asyncio_detailed(
-    *,
-    client: AuthenticatedClient,
-) -> Response[Any]:
-    """Return information about the current user or delete it
-
-    Returns:
-        Response[Any]
-    """
-
-    kwargs = _get_kwargs(
-        client=client,
-    )
-
-    async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
-        response = await _client.request(**kwargs)
-
-    return _build_response(response=response)
diff --git a/funkwhale_api_client/api/users/users_users_me_retrieve.py b/funkwhale_api_client/api/users/users_users_me_retrieve.py
deleted file mode 100644
index 235d91d..0000000
--- a/funkwhale_api_client/api/users/users_users_me_retrieve.py
+++ /dev/null
@@ -1,116 +0,0 @@
-from typing import Any, Dict, Optional
-
-import httpx
-
-from ...client import AuthenticatedClient
-from ...models.user_write import UserWrite
-from ...types import Response
-
-
-def _get_kwargs(
-    *,
-    client: AuthenticatedClient,
-) -> Dict[str, Any]:
-    url = "{}/api/v1/users/users/me/".format(client.base_url)
-
-    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[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]:
-    return Response(
-        status_code=response.status_code,
-        content=response.content,
-        headers=response.headers,
-        parsed=_parse_response(response=response),
-    )
-
-
-def sync_detailed(
-    *,
-    client: AuthenticatedClient,
-) -> Response[UserWrite]:
-    """Return information about the current user or delete it
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    kwargs = _get_kwargs(
-        client=client,
-    )
-
-    response = httpx.request(
-        verify=client.verify_ssl,
-        **kwargs,
-    )
-
-    return _build_response(response=response)
-
-
-def sync(
-    *,
-    client: AuthenticatedClient,
-) -> Optional[UserWrite]:
-    """Return information about the current user or delete it
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    return sync_detailed(
-        client=client,
-    ).parsed
-
-
-async def asyncio_detailed(
-    *,
-    client: AuthenticatedClient,
-) -> Response[UserWrite]:
-    """Return information about the current user or delete it
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    kwargs = _get_kwargs(
-        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(
-    *,
-    client: AuthenticatedClient,
-) -> Optional[UserWrite]:
-    """Return information about the current user or delete it
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    return (
-        await asyncio_detailed(
-            client=client,
-        )
-    ).parsed
diff --git a/funkwhale_api_client/api/users/users_users_partial_update.py b/funkwhale_api_client/api/users/users_users_partial_update.py
deleted file mode 100644
index 0b42a89..0000000
--- a/funkwhale_api_client/api/users/users_users_partial_update.py
+++ /dev/null
@@ -1,174 +0,0 @@
-from typing import Any, Dict, Optional
-
-import httpx
-
-from ...client import AuthenticatedClient
-from ...models.patched_user_write_request import PatchedUserWriteRequest
-from ...models.user_write import UserWrite
-from ...types import Response
-
-
-def _get_kwargs(
-    username: str,
-    *,
-    client: AuthenticatedClient,
-    form_data: PatchedUserWriteRequest,
-    multipart_data: PatchedUserWriteRequest,
-    json_body: PatchedUserWriteRequest,
-) -> Dict[str, Any]:
-    url = "{}/api/v1/users/users/{username}/".format(client.base_url, username=username)
-
-    headers: Dict[str, str] = client.get_headers()
-    cookies: Dict[str, Any] = client.get_cookies()
-
-    json_body.to_dict()
-
-    multipart_data.to_multipart()
-
-    return {
-        "method": "patch",
-        "url": url,
-        "headers": headers,
-        "cookies": cookies,
-        "timeout": client.get_timeout(),
-        "data": form_data.to_dict(),
-    }
-
-
-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]:
-    return Response(
-        status_code=response.status_code,
-        content=response.content,
-        headers=response.headers,
-        parsed=_parse_response(response=response),
-    )
-
-
-def sync_detailed(
-    username: str,
-    *,
-    client: AuthenticatedClient,
-    form_data: PatchedUserWriteRequest,
-    multipart_data: PatchedUserWriteRequest,
-    json_body: PatchedUserWriteRequest,
-) -> Response[UserWrite]:
-    """
-    Args:
-        username (str):
-        multipart_data (PatchedUserWriteRequest):
-        json_body (PatchedUserWriteRequest):
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    kwargs = _get_kwargs(
-        username=username,
-        client=client,
-        form_data=form_data,
-        multipart_data=multipart_data,
-        json_body=json_body,
-    )
-
-    response = httpx.request(
-        verify=client.verify_ssl,
-        **kwargs,
-    )
-
-    return _build_response(response=response)
-
-
-def sync(
-    username: str,
-    *,
-    client: AuthenticatedClient,
-    form_data: PatchedUserWriteRequest,
-    multipart_data: PatchedUserWriteRequest,
-    json_body: PatchedUserWriteRequest,
-) -> Optional[UserWrite]:
-    """
-    Args:
-        username (str):
-        multipart_data (PatchedUserWriteRequest):
-        json_body (PatchedUserWriteRequest):
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    return sync_detailed(
-        username=username,
-        client=client,
-        form_data=form_data,
-        multipart_data=multipart_data,
-        json_body=json_body,
-    ).parsed
-
-
-async def asyncio_detailed(
-    username: str,
-    *,
-    client: AuthenticatedClient,
-    form_data: PatchedUserWriteRequest,
-    multipart_data: PatchedUserWriteRequest,
-    json_body: PatchedUserWriteRequest,
-) -> Response[UserWrite]:
-    """
-    Args:
-        username (str):
-        multipart_data (PatchedUserWriteRequest):
-        json_body (PatchedUserWriteRequest):
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    kwargs = _get_kwargs(
-        username=username,
-        client=client,
-        form_data=form_data,
-        multipart_data=multipart_data,
-        json_body=json_body,
-    )
-
-    async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
-        response = await _client.request(**kwargs)
-
-    return _build_response(response=response)
-
-
-async def asyncio(
-    username: str,
-    *,
-    client: AuthenticatedClient,
-    form_data: PatchedUserWriteRequest,
-    multipart_data: PatchedUserWriteRequest,
-    json_body: PatchedUserWriteRequest,
-) -> Optional[UserWrite]:
-    """
-    Args:
-        username (str):
-        multipart_data (PatchedUserWriteRequest):
-        json_body (PatchedUserWriteRequest):
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    return (
-        await asyncio_detailed(
-            username=username,
-            client=client,
-            form_data=form_data,
-            multipart_data=multipart_data,
-            json_body=json_body,
-        )
-    ).parsed
diff --git a/funkwhale_api_client/api/users/users_users_settings_create.py b/funkwhale_api_client/api/users/users_users_settings_create.py
deleted file mode 100644
index e166e7d..0000000
--- a/funkwhale_api_client/api/users/users_users_settings_create.py
+++ /dev/null
@@ -1,165 +0,0 @@
-from typing import Any, Dict, Optional
-
-import httpx
-
-from ...client import AuthenticatedClient
-from ...models.user_write import UserWrite
-from ...models.user_write_request import UserWriteRequest
-from ...types import Response
-
-
-def _get_kwargs(
-    *,
-    client: AuthenticatedClient,
-    form_data: UserWriteRequest,
-    multipart_data: UserWriteRequest,
-    json_body: UserWriteRequest,
-) -> Dict[str, Any]:
-    url = "{}/api/v1/users/users/settings/".format(client.base_url)
-
-    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[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]:
-    return Response(
-        status_code=response.status_code,
-        content=response.content,
-        headers=response.headers,
-        parsed=_parse_response(response=response),
-    )
-
-
-def sync_detailed(
-    *,
-    client: AuthenticatedClient,
-    form_data: UserWriteRequest,
-    multipart_data: UserWriteRequest,
-    json_body: UserWriteRequest,
-) -> Response[UserWrite]:
-    """Return information about the current user or delete it
-
-    Args:
-        multipart_data (UserWriteRequest):
-        json_body (UserWriteRequest):
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    kwargs = _get_kwargs(
-        client=client,
-        form_data=form_data,
-        multipart_data=multipart_data,
-        json_body=json_body,
-    )
-
-    response = httpx.request(
-        verify=client.verify_ssl,
-        **kwargs,
-    )
-
-    return _build_response(response=response)
-
-
-def sync(
-    *,
-    client: AuthenticatedClient,
-    form_data: UserWriteRequest,
-    multipart_data: UserWriteRequest,
-    json_body: UserWriteRequest,
-) -> Optional[UserWrite]:
-    """Return information about the current user or delete it
-
-    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]:
-    """Return information about the current user or delete it
-
-    Args:
-        multipart_data (UserWriteRequest):
-        json_body (UserWriteRequest):
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    kwargs = _get_kwargs(
-        client=client,
-        form_data=form_data,
-        multipart_data=multipart_data,
-        json_body=json_body,
-    )
-
-    async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
-        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]:
-    """Return information about the current user or delete it
-
-    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/api/users/users_users_subsonic_token_create.py b/funkwhale_api_client/api/users/users_users_subsonic_token_create.py
deleted file mode 100644
index 36e905f..0000000
--- a/funkwhale_api_client/api/users/users_users_subsonic_token_create.py
+++ /dev/null
@@ -1,174 +0,0 @@
-from typing import Any, Dict, Optional
-
-import httpx
-
-from ...client import AuthenticatedClient
-from ...models.user_write import UserWrite
-from ...models.user_write_request import UserWriteRequest
-from ...types import Response
-
-
-def _get_kwargs(
-    username: str,
-    *,
-    client: AuthenticatedClient,
-    form_data: UserWriteRequest,
-    multipart_data: UserWriteRequest,
-    json_body: UserWriteRequest,
-) -> Dict[str, Any]:
-    url = "{}/api/v1/users/users/{username}/subsonic-token/".format(client.base_url, username=username)
-
-    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[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]:
-    return Response(
-        status_code=response.status_code,
-        content=response.content,
-        headers=response.headers,
-        parsed=_parse_response(response=response),
-    )
-
-
-def sync_detailed(
-    username: str,
-    *,
-    client: AuthenticatedClient,
-    form_data: UserWriteRequest,
-    multipart_data: UserWriteRequest,
-    json_body: UserWriteRequest,
-) -> Response[UserWrite]:
-    """
-    Args:
-        username (str):
-        multipart_data (UserWriteRequest):
-        json_body (UserWriteRequest):
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    kwargs = _get_kwargs(
-        username=username,
-        client=client,
-        form_data=form_data,
-        multipart_data=multipart_data,
-        json_body=json_body,
-    )
-
-    response = httpx.request(
-        verify=client.verify_ssl,
-        **kwargs,
-    )
-
-    return _build_response(response=response)
-
-
-def sync(
-    username: str,
-    *,
-    client: AuthenticatedClient,
-    form_data: UserWriteRequest,
-    multipart_data: UserWriteRequest,
-    json_body: UserWriteRequest,
-) -> Optional[UserWrite]:
-    """
-    Args:
-        username (str):
-        multipart_data (UserWriteRequest):
-        json_body (UserWriteRequest):
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    return sync_detailed(
-        username=username,
-        client=client,
-        form_data=form_data,
-        multipart_data=multipart_data,
-        json_body=json_body,
-    ).parsed
-
-
-async def asyncio_detailed(
-    username: str,
-    *,
-    client: AuthenticatedClient,
-    form_data: UserWriteRequest,
-    multipart_data: UserWriteRequest,
-    json_body: UserWriteRequest,
-) -> Response[UserWrite]:
-    """
-    Args:
-        username (str):
-        multipart_data (UserWriteRequest):
-        json_body (UserWriteRequest):
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    kwargs = _get_kwargs(
-        username=username,
-        client=client,
-        form_data=form_data,
-        multipart_data=multipart_data,
-        json_body=json_body,
-    )
-
-    async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
-        response = await _client.request(**kwargs)
-
-    return _build_response(response=response)
-
-
-async def asyncio(
-    username: str,
-    *,
-    client: AuthenticatedClient,
-    form_data: UserWriteRequest,
-    multipart_data: UserWriteRequest,
-    json_body: UserWriteRequest,
-) -> Optional[UserWrite]:
-    """
-    Args:
-        username (str):
-        multipart_data (UserWriteRequest):
-        json_body (UserWriteRequest):
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    return (
-        await asyncio_detailed(
-            username=username,
-            client=client,
-            form_data=form_data,
-            multipart_data=multipart_data,
-            json_body=json_body,
-        )
-    ).parsed
diff --git a/funkwhale_api_client/api/users/users_users_subsonic_token_destroy.py b/funkwhale_api_client/api/users/users_users_subsonic_token_destroy.py
deleted file mode 100644
index 77031e6..0000000
--- a/funkwhale_api_client/api/users/users_users_subsonic_token_destroy.py
+++ /dev/null
@@ -1,84 +0,0 @@
-from typing import Any, Dict
-
-import httpx
-
-from ...client import AuthenticatedClient
-from ...types import Response
-
-
-def _get_kwargs(
-    username: str,
-    *,
-    client: AuthenticatedClient,
-) -> Dict[str, Any]:
-    url = "{}/api/v1/users/users/{username}/subsonic-token/".format(client.base_url, username=username)
-
-    headers: Dict[str, str] = client.get_headers()
-    cookies: Dict[str, Any] = client.get_cookies()
-
-    return {
-        "method": "delete",
-        "url": url,
-        "headers": headers,
-        "cookies": cookies,
-        "timeout": client.get_timeout(),
-    }
-
-
-def _build_response(*, response: httpx.Response) -> Response[Any]:
-    return Response(
-        status_code=response.status_code,
-        content=response.content,
-        headers=response.headers,
-        parsed=None,
-    )
-
-
-def sync_detailed(
-    username: str,
-    *,
-    client: AuthenticatedClient,
-) -> Response[Any]:
-    """
-    Args:
-        username (str):
-
-    Returns:
-        Response[Any]
-    """
-
-    kwargs = _get_kwargs(
-        username=username,
-        client=client,
-    )
-
-    response = httpx.request(
-        verify=client.verify_ssl,
-        **kwargs,
-    )
-
-    return _build_response(response=response)
-
-
-async def asyncio_detailed(
-    username: str,
-    *,
-    client: AuthenticatedClient,
-) -> Response[Any]:
-    """
-    Args:
-        username (str):
-
-    Returns:
-        Response[Any]
-    """
-
-    kwargs = _get_kwargs(
-        username=username,
-        client=client,
-    )
-
-    async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
-        response = await _client.request(**kwargs)
-
-    return _build_response(response=response)
diff --git a/funkwhale_api_client/api/users/users_users_subsonic_token_retrieve.py b/funkwhale_api_client/api/users/users_users_subsonic_token_retrieve.py
deleted file mode 100644
index ca2358b..0000000
--- a/funkwhale_api_client/api/users/users_users_subsonic_token_retrieve.py
+++ /dev/null
@@ -1,133 +0,0 @@
-from typing import Any, Dict, Optional
-
-import httpx
-
-from ...client import AuthenticatedClient
-from ...models.user_write import UserWrite
-from ...types import Response
-
-
-def _get_kwargs(
-    username: str,
-    *,
-    client: AuthenticatedClient,
-) -> Dict[str, Any]:
-    url = "{}/api/v1/users/users/{username}/subsonic-token/".format(client.base_url, username=username)
-
-    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[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]:
-    return Response(
-        status_code=response.status_code,
-        content=response.content,
-        headers=response.headers,
-        parsed=_parse_response(response=response),
-    )
-
-
-def sync_detailed(
-    username: str,
-    *,
-    client: AuthenticatedClient,
-) -> Response[UserWrite]:
-    """
-    Args:
-        username (str):
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    kwargs = _get_kwargs(
-        username=username,
-        client=client,
-    )
-
-    response = httpx.request(
-        verify=client.verify_ssl,
-        **kwargs,
-    )
-
-    return _build_response(response=response)
-
-
-def sync(
-    username: str,
-    *,
-    client: AuthenticatedClient,
-) -> Optional[UserWrite]:
-    """
-    Args:
-        username (str):
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    return sync_detailed(
-        username=username,
-        client=client,
-    ).parsed
-
-
-async def asyncio_detailed(
-    username: str,
-    *,
-    client: AuthenticatedClient,
-) -> Response[UserWrite]:
-    """
-    Args:
-        username (str):
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    kwargs = _get_kwargs(
-        username=username,
-        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(
-    username: str,
-    *,
-    client: AuthenticatedClient,
-) -> Optional[UserWrite]:
-    """
-    Args:
-        username (str):
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    return (
-        await asyncio_detailed(
-            username=username,
-            client=client,
-        )
-    ).parsed
diff --git a/funkwhale_api_client/api/users/users_users_update.py b/funkwhale_api_client/api/users/users_users_update.py
deleted file mode 100644
index 79c3851..0000000
--- a/funkwhale_api_client/api/users/users_users_update.py
+++ /dev/null
@@ -1,174 +0,0 @@
-from typing import Any, Dict, Optional
-
-import httpx
-
-from ...client import AuthenticatedClient
-from ...models.user_write import UserWrite
-from ...models.user_write_request import UserWriteRequest
-from ...types import Response
-
-
-def _get_kwargs(
-    username: str,
-    *,
-    client: AuthenticatedClient,
-    form_data: UserWriteRequest,
-    multipart_data: UserWriteRequest,
-    json_body: UserWriteRequest,
-) -> Dict[str, Any]:
-    url = "{}/api/v1/users/users/{username}/".format(client.base_url, username=username)
-
-    headers: Dict[str, str] = client.get_headers()
-    cookies: Dict[str, Any] = client.get_cookies()
-
-    json_body.to_dict()
-
-    multipart_data.to_multipart()
-
-    return {
-        "method": "put",
-        "url": url,
-        "headers": headers,
-        "cookies": cookies,
-        "timeout": client.get_timeout(),
-        "data": form_data.to_dict(),
-    }
-
-
-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]:
-    return Response(
-        status_code=response.status_code,
-        content=response.content,
-        headers=response.headers,
-        parsed=_parse_response(response=response),
-    )
-
-
-def sync_detailed(
-    username: str,
-    *,
-    client: AuthenticatedClient,
-    form_data: UserWriteRequest,
-    multipart_data: UserWriteRequest,
-    json_body: UserWriteRequest,
-) -> Response[UserWrite]:
-    """
-    Args:
-        username (str):
-        multipart_data (UserWriteRequest):
-        json_body (UserWriteRequest):
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    kwargs = _get_kwargs(
-        username=username,
-        client=client,
-        form_data=form_data,
-        multipart_data=multipart_data,
-        json_body=json_body,
-    )
-
-    response = httpx.request(
-        verify=client.verify_ssl,
-        **kwargs,
-    )
-
-    return _build_response(response=response)
-
-
-def sync(
-    username: str,
-    *,
-    client: AuthenticatedClient,
-    form_data: UserWriteRequest,
-    multipart_data: UserWriteRequest,
-    json_body: UserWriteRequest,
-) -> Optional[UserWrite]:
-    """
-    Args:
-        username (str):
-        multipart_data (UserWriteRequest):
-        json_body (UserWriteRequest):
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    return sync_detailed(
-        username=username,
-        client=client,
-        form_data=form_data,
-        multipart_data=multipart_data,
-        json_body=json_body,
-    ).parsed
-
-
-async def asyncio_detailed(
-    username: str,
-    *,
-    client: AuthenticatedClient,
-    form_data: UserWriteRequest,
-    multipart_data: UserWriteRequest,
-    json_body: UserWriteRequest,
-) -> Response[UserWrite]:
-    """
-    Args:
-        username (str):
-        multipart_data (UserWriteRequest):
-        json_body (UserWriteRequest):
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    kwargs = _get_kwargs(
-        username=username,
-        client=client,
-        form_data=form_data,
-        multipart_data=multipart_data,
-        json_body=json_body,
-    )
-
-    async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
-        response = await _client.request(**kwargs)
-
-    return _build_response(response=response)
-
-
-async def asyncio(
-    username: str,
-    *,
-    client: AuthenticatedClient,
-    form_data: UserWriteRequest,
-    multipart_data: UserWriteRequest,
-    json_body: UserWriteRequest,
-) -> Optional[UserWrite]:
-    """
-    Args:
-        username (str):
-        multipart_data (UserWriteRequest):
-        json_body (UserWriteRequest):
-
-    Returns:
-        Response[UserWrite]
-    """
-
-    return (
-        await asyncio_detailed(
-            username=username,
-            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 11420e6..470c9ca 100644
--- a/funkwhale_api_client/models/__init__.py
+++ b/funkwhale_api_client/models/__init__.py
@@ -7,16 +7,26 @@ from .activity_related_object import ActivityRelatedObject
 from .activity_request import ActivityRequest
 from .activity_request_payload import ActivityRequestPayload
 from .activity_target import ActivityTarget
+from .admin_get_accounts_type import AdminGetAccountsType
+from .admin_get_artists_content_category import AdminGetArtistsContentCategory
+from .admin_get_libraries_ordering_item import AdminGetLibrariesOrderingItem
+from .admin_get_libraries_privacy_level import AdminGetLibrariesPrivacyLevel
+from .admin_get_uploads_import_status import AdminGetUploadsImportStatus
+from .admin_get_uploads_ordering_item import AdminGetUploadsOrderingItem
+from .admin_get_users_privacy_level import AdminGetUsersPrivacyLevel
 from .album import Album
 from .album_create import AlbumCreate
 from .album_create_request import AlbumCreateRequest
 from .album_request import AlbumRequest
-from .albums_list_ordering_item import AlbumsListOrderingItem
 from .all_favorite import AllFavorite
 from .all_subscriptions import AllSubscriptions
 from .allow_list_stat import AllowListStat
 from .api_actor import APIActor
 from .api_actor_request import APIActorRequest
+from .api_mutation import APIMutation
+from .api_mutation_payload import APIMutationPayload
+from .api_mutation_previous_state import APIMutationPreviousState
+from .api_mutation_target import APIMutationTarget
 from .application import Application
 from .application_request import ApplicationRequest
 from .artist_album import ArtistAlbum
@@ -25,7 +35,6 @@ from .artist_with_albums import ArtistWithAlbums
 from .artist_with_albums_inline_channel import ArtistWithAlbumsInlineChannel
 from .artist_with_albums_inline_channel_request import ArtistWithAlbumsInlineChannelRequest
 from .artist_with_albums_request import ArtistWithAlbumsRequest
-from .artists_list_ordering_item import ArtistsListOrderingItem
 from .attachment import Attachment
 from .attachment_request import AttachmentRequest
 from .attachment_urls import AttachmentUrls
@@ -39,7 +48,6 @@ 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 .channels_list_ordering_item import ChannelsListOrderingItem
 from .content import Content
 from .content_category_enum import ContentCategoryEnum
 from .content_request import ContentRequest
@@ -57,6 +65,22 @@ from .fetch_detail import FetchDetail
 from .fetch_request import FetchRequest
 from .fetch_status_enum import FetchStatusEnum
 from .full_actor import FullActor
+from .get_album_fetches_ordering_item import GetAlbumFetchesOrderingItem
+from .get_album_libraries_ordering_item import GetAlbumLibrariesOrderingItem
+from .get_album_mutations_ordering_item import GetAlbumMutationsOrderingItem
+from .get_albums_ordering_item import GetAlbumsOrderingItem
+from .get_artist_fetches_ordering_item import GetArtistFetchesOrderingItem
+from .get_artist_libraries_ordering_item import GetArtistLibrariesOrderingItem
+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_tags_ordering_item import GetTagsOrderingItem
+from .get_track_fetches_ordering_item import GetTrackFetchesOrderingItem
+from .get_track_libraries_ordering_item import GetTrackLibrariesOrderingItem
+from .get_track_mutations_ordering_item import GetTrackMutationsOrderingItem
+from .get_tracks_ordering_item import GetTracksOrderingItem
+from .get_uploads_import_status_item import GetUploadsImportStatusItem
 from .global_preference import GlobalPreference
 from .global_preference_request import GlobalPreferenceRequest
 from .ident import Ident
@@ -67,7 +91,6 @@ from .inbox_item_type_enum import InboxItemTypeEnum
 from .inline_actor import InlineActor
 from .inline_actor_request import InlineActorRequest
 from .inline_subscription import InlineSubscription
-from .libraries_list_privacy_level import LibrariesListPrivacyLevel
 from .library import Library
 from .library_follow import LibraryFollow
 from .library_follow_request import LibraryFollowRequest
@@ -81,7 +104,6 @@ from .license_ import License
 from .listening import Listening
 from .listening_write import ListeningWrite
 from .listening_write_request import ListeningWriteRequest
-from .manage_accounts_list_type import ManageAccountsListType
 from .manage_actor import ManageActor
 from .manage_actor_request import ManageActorRequest
 from .manage_album import ManageAlbum
@@ -104,15 +126,7 @@ from .manage_instance_policy_request import ManageInstancePolicyRequest
 from .manage_invitation import ManageInvitation
 from .manage_invitation_request import ManageInvitationRequest
 from .manage_library import ManageLibrary
-from .manage_library_artists_list_content_category import ManageLibraryArtistsListContentCategory
-from .manage_library_libraries_list_ordering_item import ManageLibraryLibrariesListOrderingItem
-from .manage_library_libraries_list_privacy_level import ManageLibraryLibrariesListPrivacyLevel
 from .manage_library_request import ManageLibraryRequest
-from .manage_library_uploads_list_import_status import ManageLibraryUploadsListImportStatus
-from .manage_library_uploads_list_ordering_item import ManageLibraryUploadsListOrderingItem
-from .manage_moderation_reports_list_type import ManageModerationReportsListType
-from .manage_moderation_requests_list_status import ManageModerationRequestsListStatus
-from .manage_moderation_requests_list_type import ManageModerationRequestsListType
 from .manage_nested_artist import ManageNestedArtist
 from .manage_nested_artist_request import ManageNestedArtistRequest
 from .manage_nested_library import ManageNestedLibrary
@@ -153,10 +167,12 @@ from .manage_user_request_status_enum import ManageUserRequestStatusEnum
 from .manage_user_request_type_enum import ManageUserRequestTypeEnum
 from .manage_user_simple import ManageUserSimple
 from .manage_user_simple_request import ManageUserSimpleRequest
-from .manage_users_users_list_privacy_level import ManageUsersUsersListPrivacyLevel
 from .metadata import Metadata
 from .metadata_usage import MetadataUsage
 from .metadata_usage_favorite import MetadataUsageFavorite
+from .moderation_get_reports_type import ModerationGetReportsType
+from .moderation_get_requests_status import ModerationGetRequestsStatus
+from .moderation_get_requests_type import ModerationGetRequestsType
 from .moderation_target import ModerationTarget
 from .moderation_target_request import ModerationTargetRequest
 from .moderation_target_type_enum import ModerationTargetTypeEnum
@@ -164,13 +180,16 @@ from .nested_library_follow import NestedLibraryFollow
 from .nested_library_follow_request import NestedLibraryFollowRequest
 from .node_info_20 import NodeInfo20
 from .paginated_album_list import PaginatedAlbumList
+from .paginated_api_mutation_list import PaginatedAPIMutationList
 from .paginated_application_list import PaginatedApplicationList
 from .paginated_artist_with_albums_list import PaginatedArtistWithAlbumsList
 from .paginated_channel_list import PaginatedChannelList
 from .paginated_domain_list import PaginatedDomainList
+from .paginated_fetch_list import PaginatedFetchList
 from .paginated_inbox_item_list import PaginatedInboxItemList
 from .paginated_library_follow_list import PaginatedLibraryFollowList
 from .paginated_library_for_owner_list import PaginatedLibraryForOwnerList
+from .paginated_library_list import PaginatedLibraryList
 from .paginated_license_list import PaginatedLicenseList
 from .paginated_listening_list import PaginatedListeningList
 from .paginated_manage_actor_list import PaginatedManageActorList
@@ -189,6 +208,7 @@ from .paginated_manage_upload_list import PaginatedManageUploadList
 from .paginated_manage_user_list import PaginatedManageUserList
 from .paginated_manage_user_request_list import PaginatedManageUserRequestList
 from .paginated_playlist_list import PaginatedPlaylistList
+from .paginated_playlist_track_list import PaginatedPlaylistTrackList
 from .paginated_radio_list import PaginatedRadioList
 from .paginated_subscription_list import PaginatedSubscriptionList
 from .paginated_tag_list import PaginatedTagList
@@ -224,7 +244,9 @@ from .patched_upload_for_owner_request_import_metadata import PatchedUploadForOw
 from .patched_user_details_request import PatchedUserDetailsRequest
 from .patched_user_write_request import PatchedUserWriteRequest
 from .playlist import Playlist
+from .playlist_add_many_request import PlaylistAddManyRequest
 from .playlist_request import PlaylistRequest
+from .playlist_track import PlaylistTrack
 from .privacy_level_enum import PrivacyLevelEnum
 from .radio import Radio
 from .radio_config import RadioConfig
@@ -253,7 +275,6 @@ from .simple_favorite import SimpleFavorite
 from .software import Software
 from .subscription import Subscription
 from .tag import Tag
-from .tags_list_ordering_item import TagsListOrderingItem
 from .total_count import TotalCount
 from .track import Track
 from .track_album import TrackAlbum
@@ -261,14 +282,12 @@ from .track_album_request import TrackAlbumRequest
 from .track_metadata import TrackMetadata
 from .track_request import TrackRequest
 from .track_uploads_item import TrackUploadsItem
-from .tracks_list_ordering_item import TracksListOrderingItem
 from .upload_for_owner import UploadForOwner
 from .upload_for_owner_import_details import UploadForOwnerImportDetails
 from .upload_for_owner_import_metadata import UploadForOwnerImportMetadata
 from .upload_for_owner_metadata import UploadForOwnerMetadata
 from .upload_for_owner_request import UploadForOwnerRequest
 from .upload_for_owner_request_import_metadata import UploadForOwnerRequestImportMetadata
-from .uploads_list_import_status_item import UploadsListImportStatusItem
 from .usage import Usage
 from .user_basic import UserBasic
 from .user_basic_request import UserBasicRequest
diff --git a/funkwhale_api_client/models/manage_accounts_list_type.py b/funkwhale_api_client/models/admin_get_accounts_type.py
similarity index 85%
rename from funkwhale_api_client/models/manage_accounts_list_type.py
rename to funkwhale_api_client/models/admin_get_accounts_type.py
index 90ae248..52821ed 100644
--- a/funkwhale_api_client/models/manage_accounts_list_type.py
+++ b/funkwhale_api_client/models/admin_get_accounts_type.py
@@ -1,7 +1,7 @@
 from enum import Enum
 
 
-class ManageAccountsListType(str, Enum):
+class AdminGetAccountsType(str, Enum):
     APPLICATION = "Application"
     GROUP = "Group"
     ORGANIZATION = "Organization"
diff --git a/funkwhale_api_client/models/manage_library_artists_list_content_category.py b/funkwhale_api_client/models/admin_get_artists_content_category.py
similarity index 72%
rename from funkwhale_api_client/models/manage_library_artists_list_content_category.py
rename to funkwhale_api_client/models/admin_get_artists_content_category.py
index bb664e8..2a8e22b 100644
--- a/funkwhale_api_client/models/manage_library_artists_list_content_category.py
+++ b/funkwhale_api_client/models/admin_get_artists_content_category.py
@@ -1,7 +1,7 @@
 from enum import Enum
 
 
-class ManageLibraryArtistsListContentCategory(str, Enum):
+class AdminGetArtistsContentCategory(str, Enum):
     MUSIC = "music"
     OTHER = "other"
     PODCAST = "podcast"
diff --git a/funkwhale_api_client/models/manage_library_libraries_list_ordering_item.py b/funkwhale_api_client/models/admin_get_libraries_ordering_item.py
similarity index 83%
rename from funkwhale_api_client/models/manage_library_libraries_list_ordering_item.py
rename to funkwhale_api_client/models/admin_get_libraries_ordering_item.py
index c9c78d4..fa2f1cb 100644
--- a/funkwhale_api_client/models/manage_library_libraries_list_ordering_item.py
+++ b/funkwhale_api_client/models/admin_get_libraries_ordering_item.py
@@ -1,7 +1,7 @@
 from enum import Enum
 
 
-class ManageLibraryLibrariesListOrderingItem(str, Enum):
+class AdminGetLibrariesOrderingItem(str, Enum):
     VALUE_0 = "-creation_date"
     VALUE_1 = "-followers_count"
     VALUE_2 = "-uploads_count"
diff --git a/funkwhale_api_client/models/manage_library_libraries_list_privacy_level.py b/funkwhale_api_client/models/admin_get_libraries_privacy_level.py
similarity index 72%
rename from funkwhale_api_client/models/manage_library_libraries_list_privacy_level.py
rename to funkwhale_api_client/models/admin_get_libraries_privacy_level.py
index 5dca27f..3667db4 100644
--- a/funkwhale_api_client/models/manage_library_libraries_list_privacy_level.py
+++ b/funkwhale_api_client/models/admin_get_libraries_privacy_level.py
@@ -1,7 +1,7 @@
 from enum import Enum
 
 
-class ManageLibraryLibrariesListPrivacyLevel(str, Enum):
+class AdminGetLibrariesPrivacyLevel(str, Enum):
     EVERYONE = "everyone"
     INSTANCE = "instance"
     ME = "me"
diff --git a/funkwhale_api_client/models/uploads_list_import_status_item.py b/funkwhale_api_client/models/admin_get_uploads_import_status.py
similarity index 81%
rename from funkwhale_api_client/models/uploads_list_import_status_item.py
rename to funkwhale_api_client/models/admin_get_uploads_import_status.py
index 3612a03..3564fcf 100644
--- a/funkwhale_api_client/models/uploads_list_import_status_item.py
+++ b/funkwhale_api_client/models/admin_get_uploads_import_status.py
@@ -1,7 +1,7 @@
 from enum import Enum
 
 
-class UploadsListImportStatusItem(str, Enum):
+class AdminGetUploadsImportStatus(str, Enum):
     DRAFT = "draft"
     ERRORED = "errored"
     FINISHED = "finished"
diff --git a/funkwhale_api_client/models/manage_library_uploads_list_ordering_item.py b/funkwhale_api_client/models/admin_get_uploads_ordering_item.py
similarity index 88%
rename from funkwhale_api_client/models/manage_library_uploads_list_ordering_item.py
rename to funkwhale_api_client/models/admin_get_uploads_ordering_item.py
index 0777adc..13a2b21 100644
--- a/funkwhale_api_client/models/manage_library_uploads_list_ordering_item.py
+++ b/funkwhale_api_client/models/admin_get_uploads_ordering_item.py
@@ -1,7 +1,7 @@
 from enum import Enum
 
 
-class ManageLibraryUploadsListOrderingItem(str, Enum):
+class AdminGetUploadsOrderingItem(str, Enum):
     VALUE_0 = "-accessed_date"
     VALUE_1 = "-bitrate"
     VALUE_2 = "-creation_date"
diff --git a/funkwhale_api_client/models/manage_users_users_list_privacy_level.py b/funkwhale_api_client/models/admin_get_users_privacy_level.py
similarity index 77%
rename from funkwhale_api_client/models/manage_users_users_list_privacy_level.py
rename to funkwhale_api_client/models/admin_get_users_privacy_level.py
index 7ba90a4..bd438f0 100644
--- a/funkwhale_api_client/models/manage_users_users_list_privacy_level.py
+++ b/funkwhale_api_client/models/admin_get_users_privacy_level.py
@@ -1,7 +1,7 @@
 from enum import Enum
 
 
-class ManageUsersUsersListPrivacyLevel(str, Enum):
+class AdminGetUsersPrivacyLevel(str, Enum):
     EVERYONE = "everyone"
     FOLLOWERS = "followers"
     INSTANCE = "instance"
diff --git a/funkwhale_api_client/models/api_mutation.py b/funkwhale_api_client/models/api_mutation.py
new file mode 100644
index 0000000..53ca7fd
--- /dev/null
+++ b/funkwhale_api_client/models/api_mutation.py
@@ -0,0 +1,171 @@
+import datetime
+from typing import Any, Dict, List, Optional, Type, TypeVar, Union
+
+import attr
+from dateutil.parser import isoparse
+
+from ..models.api_actor import APIActor
+from ..models.api_mutation_payload import APIMutationPayload
+from ..models.api_mutation_previous_state import APIMutationPreviousState
+from ..models.api_mutation_target import APIMutationTarget
+from ..types import UNSET, Unset
+
+T = TypeVar("T", bound="APIMutation")
+
+
+@attr.s(auto_attribs=True)
+class APIMutation:
+    """
+    Attributes:
+        fid (str):
+        uuid (str):
+        type (str):
+        creation_date (datetime.datetime):
+        created_by (APIActor):
+        payload (APIMutationPayload):
+        target (APIMutationTarget):
+        applied_date (Union[Unset, None, datetime.datetime]):
+        is_approved (Union[Unset, None, bool]):
+        is_applied (Optional[bool]):
+        approved_by (Optional[int]):
+        summary (Union[Unset, None, str]):
+        previous_state (Optional[APIMutationPreviousState]):
+    """
+
+    fid: str
+    uuid: str
+    type: str
+    creation_date: datetime.datetime
+    created_by: APIActor
+    payload: APIMutationPayload
+    target: APIMutationTarget
+    is_applied: Optional[bool]
+    approved_by: Optional[int]
+    previous_state: Optional[APIMutationPreviousState]
+    applied_date: Union[Unset, None, datetime.datetime] = UNSET
+    is_approved: Union[Unset, None, bool] = UNSET
+    summary: Union[Unset, None, str] = UNSET
+    additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
+
+    def to_dict(self) -> Dict[str, Any]:
+        fid = self.fid
+        uuid = self.uuid
+        type = self.type
+        creation_date = self.creation_date.isoformat()
+
+        created_by = self.created_by.to_dict()
+
+        payload = self.payload.to_dict()
+
+        target = self.target.to_dict()
+
+        applied_date: Union[Unset, None, str] = UNSET
+        if not isinstance(self.applied_date, Unset):
+            applied_date = self.applied_date.isoformat() if self.applied_date else None
+
+        is_approved = self.is_approved
+        is_applied = self.is_applied
+        approved_by = self.approved_by
+        summary = self.summary
+        previous_state = self.previous_state.to_dict() if self.previous_state else None
+
+        field_dict: Dict[str, Any] = {}
+        field_dict.update(self.additional_properties)
+        field_dict.update(
+            {
+                "fid": fid,
+                "uuid": uuid,
+                "type": type,
+                "creation_date": creation_date,
+                "created_by": created_by,
+                "payload": payload,
+                "target": target,
+                "is_applied": is_applied,
+                "approved_by": approved_by,
+                "previous_state": previous_state,
+            }
+        )
+        if applied_date is not UNSET:
+            field_dict["applied_date"] = applied_date
+        if is_approved is not UNSET:
+            field_dict["is_approved"] = is_approved
+        if summary is not UNSET:
+            field_dict["summary"] = summary
+
+        return field_dict
+
+    @classmethod
+    def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
+        d = src_dict.copy()
+        fid = d.pop("fid")
+
+        uuid = d.pop("uuid")
+
+        type = d.pop("type")
+
+        creation_date = isoparse(d.pop("creation_date"))
+
+        created_by = APIActor.from_dict(d.pop("created_by"))
+
+        payload = APIMutationPayload.from_dict(d.pop("payload"))
+
+        target = APIMutationTarget.from_dict(d.pop("target"))
+
+        _applied_date = d.pop("applied_date", UNSET)
+        applied_date: Union[Unset, None, datetime.datetime]
+        if _applied_date is None:
+            applied_date = None
+        elif isinstance(_applied_date, Unset):
+            applied_date = UNSET
+        else:
+            applied_date = isoparse(_applied_date)
+
+        is_approved = d.pop("is_approved", UNSET)
+
+        is_applied = d.pop("is_applied")
+
+        approved_by = d.pop("approved_by")
+
+        summary = d.pop("summary", UNSET)
+
+        _previous_state = d.pop("previous_state")
+        previous_state: Optional[APIMutationPreviousState]
+        if _previous_state is None:
+            previous_state = None
+        else:
+            previous_state = APIMutationPreviousState.from_dict(_previous_state)
+
+        api_mutation = cls(
+            fid=fid,
+            uuid=uuid,
+            type=type,
+            creation_date=creation_date,
+            created_by=created_by,
+            payload=payload,
+            target=target,
+            applied_date=applied_date,
+            is_approved=is_approved,
+            is_applied=is_applied,
+            approved_by=approved_by,
+            summary=summary,
+            previous_state=previous_state,
+        )
+
+        api_mutation.additional_properties = d
+        return api_mutation
+
+    @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/api_mutation_payload.py b/funkwhale_api_client/models/api_mutation_payload.py
new file mode 100644
index 0000000..5c59ff8
--- /dev/null
+++ b/funkwhale_api_client/models/api_mutation_payload.py
@@ -0,0 +1,44 @@
+from typing import Any, Dict, List, Type, TypeVar
+
+import attr
+
+T = TypeVar("T", bound="APIMutationPayload")
+
+
+@attr.s(auto_attribs=True)
+class APIMutationPayload:
+    """ """
+
+    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()
+        api_mutation_payload = cls()
+
+        api_mutation_payload.additional_properties = d
+        return api_mutation_payload
+
+    @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/api_mutation_previous_state.py b/funkwhale_api_client/models/api_mutation_previous_state.py
new file mode 100644
index 0000000..b8e609e
--- /dev/null
+++ b/funkwhale_api_client/models/api_mutation_previous_state.py
@@ -0,0 +1,44 @@
+from typing import Any, Dict, List, Type, TypeVar
+
+import attr
+
+T = TypeVar("T", bound="APIMutationPreviousState")
+
+
+@attr.s(auto_attribs=True)
+class APIMutationPreviousState:
+    """ """
+
+    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()
+        api_mutation_previous_state = cls()
+
+        api_mutation_previous_state.additional_properties = d
+        return api_mutation_previous_state
+
+    @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/api_mutation_target.py b/funkwhale_api_client/models/api_mutation_target.py
new file mode 100644
index 0000000..37518b2
--- /dev/null
+++ b/funkwhale_api_client/models/api_mutation_target.py
@@ -0,0 +1,44 @@
+from typing import Any, Dict, List, Type, TypeVar
+
+import attr
+
+T = TypeVar("T", bound="APIMutationTarget")
+
+
+@attr.s(auto_attribs=True)
+class APIMutationTarget:
+    """ """
+
+    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()
+        api_mutation_target = cls()
+
+        api_mutation_target.additional_properties = d
+        return api_mutation_target
+
+    @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/get_album_fetches_ordering_item.py b/funkwhale_api_client/models/get_album_fetches_ordering_item.py
new file mode 100644
index 0000000..ef0031d
--- /dev/null
+++ b/funkwhale_api_client/models/get_album_fetches_ordering_item.py
@@ -0,0 +1,19 @@
+from enum import Enum
+
+
+class GetAlbumFetchesOrderingItem(str, Enum):
+    VALUE_0 = "-artist__modification_date"
+    VALUE_1 = "-creation_date"
+    VALUE_2 = "-random"
+    VALUE_3 = "-related"
+    VALUE_4 = "-release_date"
+    VALUE_5 = "-title"
+    ARTIST_MODIFICATION_DATE = "artist__modification_date"
+    CREATION_DATE = "creation_date"
+    RANDOM = "random"
+    RELATED = "related"
+    RELEASE_DATE = "release_date"
+    TITLE = "title"
+
+    def __str__(self) -> str:
+        return str(self.value)
diff --git a/funkwhale_api_client/models/get_album_libraries_ordering_item.py b/funkwhale_api_client/models/get_album_libraries_ordering_item.py
new file mode 100644
index 0000000..a5e65de
--- /dev/null
+++ b/funkwhale_api_client/models/get_album_libraries_ordering_item.py
@@ -0,0 +1,19 @@
+from enum import Enum
+
+
+class GetAlbumLibrariesOrderingItem(str, Enum):
+    VALUE_0 = "-artist__modification_date"
+    VALUE_1 = "-creation_date"
+    VALUE_2 = "-random"
+    VALUE_3 = "-related"
+    VALUE_4 = "-release_date"
+    VALUE_5 = "-title"
+    ARTIST_MODIFICATION_DATE = "artist__modification_date"
+    CREATION_DATE = "creation_date"
+    RANDOM = "random"
+    RELATED = "related"
+    RELEASE_DATE = "release_date"
+    TITLE = "title"
+
+    def __str__(self) -> str:
+        return str(self.value)
diff --git a/funkwhale_api_client/models/get_album_mutations_ordering_item.py b/funkwhale_api_client/models/get_album_mutations_ordering_item.py
new file mode 100644
index 0000000..acb5ce7
--- /dev/null
+++ b/funkwhale_api_client/models/get_album_mutations_ordering_item.py
@@ -0,0 +1,19 @@
+from enum import Enum
+
+
+class GetAlbumMutationsOrderingItem(str, Enum):
+    VALUE_0 = "-artist__modification_date"
+    VALUE_1 = "-creation_date"
+    VALUE_2 = "-random"
+    VALUE_3 = "-related"
+    VALUE_4 = "-release_date"
+    VALUE_5 = "-title"
+    ARTIST_MODIFICATION_DATE = "artist__modification_date"
+    CREATION_DATE = "creation_date"
+    RANDOM = "random"
+    RELATED = "related"
+    RELEASE_DATE = "release_date"
+    TITLE = "title"
+
+    def __str__(self) -> str:
+        return str(self.value)
diff --git a/funkwhale_api_client/models/albums_list_ordering_item.py b/funkwhale_api_client/models/get_albums_ordering_item.py
similarity index 91%
rename from funkwhale_api_client/models/albums_list_ordering_item.py
rename to funkwhale_api_client/models/get_albums_ordering_item.py
index 7469d1d..9ca14ca 100644
--- a/funkwhale_api_client/models/albums_list_ordering_item.py
+++ b/funkwhale_api_client/models/get_albums_ordering_item.py
@@ -1,7 +1,7 @@
 from enum import Enum
 
 
-class AlbumsListOrderingItem(str, Enum):
+class GetAlbumsOrderingItem(str, Enum):
     VALUE_0 = "-artist__modification_date"
     VALUE_1 = "-creation_date"
     VALUE_2 = "-random"
diff --git a/funkwhale_api_client/models/get_artist_fetches_ordering_item.py b/funkwhale_api_client/models/get_artist_fetches_ordering_item.py
new file mode 100644
index 0000000..15c6114
--- /dev/null
+++ b/funkwhale_api_client/models/get_artist_fetches_ordering_item.py
@@ -0,0 +1,19 @@
+from enum import Enum
+
+
+class GetArtistFetchesOrderingItem(str, Enum):
+    VALUE_0 = "-creation_date"
+    VALUE_1 = "-id"
+    VALUE_2 = "-modification_date"
+    VALUE_3 = "-name"
+    VALUE_4 = "-random"
+    VALUE_5 = "-related"
+    CREATION_DATE = "creation_date"
+    ID = "id"
+    MODIFICATION_DATE = "modification_date"
+    NAME = "name"
+    RANDOM = "random"
+    RELATED = "related"
+
+    def __str__(self) -> str:
+        return str(self.value)
diff --git a/funkwhale_api_client/models/get_artist_libraries_ordering_item.py b/funkwhale_api_client/models/get_artist_libraries_ordering_item.py
new file mode 100644
index 0000000..887cbe7
--- /dev/null
+++ b/funkwhale_api_client/models/get_artist_libraries_ordering_item.py
@@ -0,0 +1,19 @@
+from enum import Enum
+
+
+class GetArtistLibrariesOrderingItem(str, Enum):
+    VALUE_0 = "-creation_date"
+    VALUE_1 = "-id"
+    VALUE_2 = "-modification_date"
+    VALUE_3 = "-name"
+    VALUE_4 = "-random"
+    VALUE_5 = "-related"
+    CREATION_DATE = "creation_date"
+    ID = "id"
+    MODIFICATION_DATE = "modification_date"
+    NAME = "name"
+    RANDOM = "random"
+    RELATED = "related"
+
+    def __str__(self) -> str:
+        return str(self.value)
diff --git a/funkwhale_api_client/models/get_artist_mutations_ordering_item.py b/funkwhale_api_client/models/get_artist_mutations_ordering_item.py
new file mode 100644
index 0000000..0560400
--- /dev/null
+++ b/funkwhale_api_client/models/get_artist_mutations_ordering_item.py
@@ -0,0 +1,19 @@
+from enum import Enum
+
+
+class GetArtistMutationsOrderingItem(str, Enum):
+    VALUE_0 = "-creation_date"
+    VALUE_1 = "-id"
+    VALUE_2 = "-modification_date"
+    VALUE_3 = "-name"
+    VALUE_4 = "-random"
+    VALUE_5 = "-related"
+    CREATION_DATE = "creation_date"
+    ID = "id"
+    MODIFICATION_DATE = "modification_date"
+    NAME = "name"
+    RANDOM = "random"
+    RELATED = "related"
+
+    def __str__(self) -> str:
+        return str(self.value)
diff --git a/funkwhale_api_client/models/artists_list_ordering_item.py b/funkwhale_api_client/models/get_artists_ordering_item.py
similarity index 90%
rename from funkwhale_api_client/models/artists_list_ordering_item.py
rename to funkwhale_api_client/models/get_artists_ordering_item.py
index 3b85801..2283595 100644
--- a/funkwhale_api_client/models/artists_list_ordering_item.py
+++ b/funkwhale_api_client/models/get_artists_ordering_item.py
@@ -1,7 +1,7 @@
 from enum import Enum
 
 
-class ArtistsListOrderingItem(str, Enum):
+class GetArtistsOrderingItem(str, Enum):
     VALUE_0 = "-creation_date"
     VALUE_1 = "-id"
     VALUE_2 = "-modification_date"
diff --git a/funkwhale_api_client/models/channels_list_ordering_item.py b/funkwhale_api_client/models/get_channels_ordering_item.py
similarity index 86%
rename from funkwhale_api_client/models/channels_list_ordering_item.py
rename to funkwhale_api_client/models/get_channels_ordering_item.py
index 15a2345..22d5b6b 100644
--- a/funkwhale_api_client/models/channels_list_ordering_item.py
+++ b/funkwhale_api_client/models/get_channels_ordering_item.py
@@ -1,7 +1,7 @@
 from enum import Enum
 
 
-class ChannelsListOrderingItem(str, Enum):
+class GetChannelsOrderingItem(str, Enum):
     VALUE_0 = "-creation_date"
     VALUE_1 = "-modification_date"
     VALUE_2 = "-random"
diff --git a/funkwhale_api_client/models/libraries_list_privacy_level.py b/funkwhale_api_client/models/get_libraries_privacy_level.py
similarity index 77%
rename from funkwhale_api_client/models/libraries_list_privacy_level.py
rename to funkwhale_api_client/models/get_libraries_privacy_level.py
index 6a80ac3..37d94cc 100644
--- a/funkwhale_api_client/models/libraries_list_privacy_level.py
+++ b/funkwhale_api_client/models/get_libraries_privacy_level.py
@@ -1,7 +1,7 @@
 from enum import Enum
 
 
-class LibrariesListPrivacyLevel(str, Enum):
+class GetLibrariesPrivacyLevel(str, Enum):
     EVERYONE = "everyone"
     INSTANCE = "instance"
     ME = "me"
diff --git a/funkwhale_api_client/models/tags_list_ordering_item.py b/funkwhale_api_client/models/get_tags_ordering_item.py
similarity index 85%
rename from funkwhale_api_client/models/tags_list_ordering_item.py
rename to funkwhale_api_client/models/get_tags_ordering_item.py
index f2bdfdf..0d30e09 100644
--- a/funkwhale_api_client/models/tags_list_ordering_item.py
+++ b/funkwhale_api_client/models/get_tags_ordering_item.py
@@ -1,7 +1,7 @@
 from enum import Enum
 
 
-class TagsListOrderingItem(str, Enum):
+class GetTagsOrderingItem(str, Enum):
     VALUE_0 = "-creation_date"
     VALUE_1 = "-length"
     VALUE_2 = "-name"
diff --git a/funkwhale_api_client/models/get_track_fetches_ordering_item.py b/funkwhale_api_client/models/get_track_fetches_ordering_item.py
new file mode 100644
index 0000000..292adf9
--- /dev/null
+++ b/funkwhale_api_client/models/get_track_fetches_ordering_item.py
@@ -0,0 +1,29 @@
+from enum import Enum
+
+
+class GetTrackFetchesOrderingItem(str, Enum):
+    VALUE_0 = "-album__release_date"
+    VALUE_1 = "-album__title"
+    VALUE_2 = "-artist__modification_date"
+    VALUE_3 = "-artist__name"
+    VALUE_4 = "-creation_date"
+    VALUE_5 = "-disc_number"
+    VALUE_6 = "-position"
+    VALUE_7 = "-random"
+    VALUE_8 = "-related"
+    VALUE_9 = "-size"
+    VALUE_10 = "-title"
+    ALBUM_RELEASE_DATE = "album__release_date"
+    ALBUM_TITLE = "album__title"
+    ARTIST_MODIFICATION_DATE = "artist__modification_date"
+    ARTIST_NAME = "artist__name"
+    CREATION_DATE = "creation_date"
+    DISC_NUMBER = "disc_number"
+    POSITION = "position"
+    RANDOM = "random"
+    RELATED = "related"
+    SIZE = "size"
+    TITLE = "title"
+
+    def __str__(self) -> str:
+        return str(self.value)
diff --git a/funkwhale_api_client/models/get_track_libraries_ordering_item.py b/funkwhale_api_client/models/get_track_libraries_ordering_item.py
new file mode 100644
index 0000000..65dd808
--- /dev/null
+++ b/funkwhale_api_client/models/get_track_libraries_ordering_item.py
@@ -0,0 +1,29 @@
+from enum import Enum
+
+
+class GetTrackLibrariesOrderingItem(str, Enum):
+    VALUE_0 = "-album__release_date"
+    VALUE_1 = "-album__title"
+    VALUE_2 = "-artist__modification_date"
+    VALUE_3 = "-artist__name"
+    VALUE_4 = "-creation_date"
+    VALUE_5 = "-disc_number"
+    VALUE_6 = "-position"
+    VALUE_7 = "-random"
+    VALUE_8 = "-related"
+    VALUE_9 = "-size"
+    VALUE_10 = "-title"
+    ALBUM_RELEASE_DATE = "album__release_date"
+    ALBUM_TITLE = "album__title"
+    ARTIST_MODIFICATION_DATE = "artist__modification_date"
+    ARTIST_NAME = "artist__name"
+    CREATION_DATE = "creation_date"
+    DISC_NUMBER = "disc_number"
+    POSITION = "position"
+    RANDOM = "random"
+    RELATED = "related"
+    SIZE = "size"
+    TITLE = "title"
+
+    def __str__(self) -> str:
+        return str(self.value)
diff --git a/funkwhale_api_client/models/get_track_mutations_ordering_item.py b/funkwhale_api_client/models/get_track_mutations_ordering_item.py
new file mode 100644
index 0000000..235e6d0
--- /dev/null
+++ b/funkwhale_api_client/models/get_track_mutations_ordering_item.py
@@ -0,0 +1,29 @@
+from enum import Enum
+
+
+class GetTrackMutationsOrderingItem(str, Enum):
+    VALUE_0 = "-album__release_date"
+    VALUE_1 = "-album__title"
+    VALUE_2 = "-artist__modification_date"
+    VALUE_3 = "-artist__name"
+    VALUE_4 = "-creation_date"
+    VALUE_5 = "-disc_number"
+    VALUE_6 = "-position"
+    VALUE_7 = "-random"
+    VALUE_8 = "-related"
+    VALUE_9 = "-size"
+    VALUE_10 = "-title"
+    ALBUM_RELEASE_DATE = "album__release_date"
+    ALBUM_TITLE = "album__title"
+    ARTIST_MODIFICATION_DATE = "artist__modification_date"
+    ARTIST_NAME = "artist__name"
+    CREATION_DATE = "creation_date"
+    DISC_NUMBER = "disc_number"
+    POSITION = "position"
+    RANDOM = "random"
+    RELATED = "related"
+    SIZE = "size"
+    TITLE = "title"
+
+    def __str__(self) -> str:
+        return str(self.value)
diff --git a/funkwhale_api_client/models/tracks_list_ordering_item.py b/funkwhale_api_client/models/get_tracks_ordering_item.py
similarity index 94%
rename from funkwhale_api_client/models/tracks_list_ordering_item.py
rename to funkwhale_api_client/models/get_tracks_ordering_item.py
index 805bfc1..dec4ec4 100644
--- a/funkwhale_api_client/models/tracks_list_ordering_item.py
+++ b/funkwhale_api_client/models/get_tracks_ordering_item.py
@@ -1,7 +1,7 @@
 from enum import Enum
 
 
-class TracksListOrderingItem(str, Enum):
+class GetTracksOrderingItem(str, Enum):
     VALUE_0 = "-album__release_date"
     VALUE_1 = "-album__title"
     VALUE_2 = "-artist__modification_date"
diff --git a/funkwhale_api_client/models/manage_library_uploads_list_import_status.py b/funkwhale_api_client/models/get_uploads_import_status_item.py
similarity index 78%
rename from funkwhale_api_client/models/manage_library_uploads_list_import_status.py
rename to funkwhale_api_client/models/get_uploads_import_status_item.py
index f606352..f6d1b29 100644
--- a/funkwhale_api_client/models/manage_library_uploads_list_import_status.py
+++ b/funkwhale_api_client/models/get_uploads_import_status_item.py
@@ -1,7 +1,7 @@
 from enum import Enum
 
 
-class ManageLibraryUploadsListImportStatus(str, Enum):
+class GetUploadsImportStatusItem(str, Enum):
     DRAFT = "draft"
     ERRORED = "errored"
     FINISHED = "finished"
diff --git a/funkwhale_api_client/models/manage_moderation_reports_list_type.py b/funkwhale_api_client/models/moderation_get_reports_type.py
similarity index 84%
rename from funkwhale_api_client/models/manage_moderation_reports_list_type.py
rename to funkwhale_api_client/models/moderation_get_reports_type.py
index 5cd4174..3cf40f1 100644
--- a/funkwhale_api_client/models/manage_moderation_reports_list_type.py
+++ b/funkwhale_api_client/models/moderation_get_reports_type.py
@@ -1,7 +1,7 @@
 from enum import Enum
 
 
-class ManageModerationReportsListType(str, Enum):
+class ModerationGetReportsType(str, Enum):
     ILLEGAL_CONTENT = "illegal_content"
     INVALID_METADATA = "invalid_metadata"
     OFFENSIVE_CONTENT = "offensive_content"
diff --git a/funkwhale_api_client/models/manage_moderation_requests_list_status.py b/funkwhale_api_client/models/moderation_get_requests_status.py
similarity index 75%
rename from funkwhale_api_client/models/manage_moderation_requests_list_status.py
rename to funkwhale_api_client/models/moderation_get_requests_status.py
index f99d18f..c550efb 100644
--- a/funkwhale_api_client/models/manage_moderation_requests_list_status.py
+++ b/funkwhale_api_client/models/moderation_get_requests_status.py
@@ -1,7 +1,7 @@
 from enum import Enum
 
 
-class ManageModerationRequestsListStatus(str, Enum):
+class ModerationGetRequestsStatus(str, Enum):
     APPROVED = "approved"
     PENDING = "pending"
     REFUSED = "refused"
diff --git a/funkwhale_api_client/models/manage_moderation_requests_list_type.py b/funkwhale_api_client/models/moderation_get_requests_type.py
similarity index 67%
rename from funkwhale_api_client/models/manage_moderation_requests_list_type.py
rename to funkwhale_api_client/models/moderation_get_requests_type.py
index be3caef..95396e2 100644
--- a/funkwhale_api_client/models/manage_moderation_requests_list_type.py
+++ b/funkwhale_api_client/models/moderation_get_requests_type.py
@@ -1,7 +1,7 @@
 from enum import Enum
 
 
-class ManageModerationRequestsListType(str, Enum):
+class ModerationGetRequestsType(str, Enum):
     SIGNUP = "signup"
 
     def __str__(self) -> str:
diff --git a/funkwhale_api_client/models/paginated_api_mutation_list.py b/funkwhale_api_client/models/paginated_api_mutation_list.py
new file mode 100644
index 0000000..c15d9dd
--- /dev/null
+++ b/funkwhale_api_client/models/paginated_api_mutation_list.py
@@ -0,0 +1,93 @@
+from typing import Any, Dict, List, Type, TypeVar, Union
+
+import attr
+
+from ..models.api_mutation import APIMutation
+from ..types import UNSET, Unset
+
+T = TypeVar("T", bound="PaginatedAPIMutationList")
+
+
+@attr.s(auto_attribs=True)
+class PaginatedAPIMutationList:
+    """
+    Attributes:
+        count (Union[Unset, int]):  Example: 123.
+        next_ (Union[Unset, None, str]):  Example: http://api.example.org/accounts/?page=4.
+        previous (Union[Unset, None, str]):  Example: http://api.example.org/accounts/?page=2.
+        results (Union[Unset, List[APIMutation]]):
+    """
+
+    count: Union[Unset, int] = UNSET
+    next_: Union[Unset, None, str] = UNSET
+    previous: Union[Unset, None, str] = UNSET
+    results: Union[Unset, List[APIMutation]] = UNSET
+    additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
+
+    def to_dict(self) -> Dict[str, Any]:
+        count = self.count
+        next_ = self.next_
+        previous = self.previous
+        results: Union[Unset, List[Dict[str, Any]]] = UNSET
+        if not isinstance(self.results, Unset):
+            results = []
+            for results_item_data in self.results:
+                results_item = results_item_data.to_dict()
+
+                results.append(results_item)
+
+        field_dict: Dict[str, Any] = {}
+        field_dict.update(self.additional_properties)
+        field_dict.update({})
+        if count is not UNSET:
+            field_dict["count"] = count
+        if next_ is not UNSET:
+            field_dict["next"] = next_
+        if previous is not UNSET:
+            field_dict["previous"] = previous
+        if results is not UNSET:
+            field_dict["results"] = results
+
+        return field_dict
+
+    @classmethod
+    def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
+        d = src_dict.copy()
+        count = d.pop("count", UNSET)
+
+        next_ = d.pop("next", UNSET)
+
+        previous = d.pop("previous", UNSET)
+
+        results = []
+        _results = d.pop("results", UNSET)
+        for results_item_data in _results or []:
+            results_item = APIMutation.from_dict(results_item_data)
+
+            results.append(results_item)
+
+        paginated_api_mutation_list = cls(
+            count=count,
+            next_=next_,
+            previous=previous,
+            results=results,
+        )
+
+        paginated_api_mutation_list.additional_properties = d
+        return paginated_api_mutation_list
+
+    @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/paginated_fetch_list.py b/funkwhale_api_client/models/paginated_fetch_list.py
new file mode 100644
index 0000000..baa118d
--- /dev/null
+++ b/funkwhale_api_client/models/paginated_fetch_list.py
@@ -0,0 +1,93 @@
+from typing import Any, Dict, List, Type, TypeVar, Union
+
+import attr
+
+from ..models.fetch import Fetch
+from ..types import UNSET, Unset
+
+T = TypeVar("T", bound="PaginatedFetchList")
+
+
+@attr.s(auto_attribs=True)
+class PaginatedFetchList:
+    """
+    Attributes:
+        count (Union[Unset, int]):  Example: 123.
+        next_ (Union[Unset, None, str]):  Example: http://api.example.org/accounts/?page=4.
+        previous (Union[Unset, None, str]):  Example: http://api.example.org/accounts/?page=2.
+        results (Union[Unset, List[Fetch]]):
+    """
+
+    count: Union[Unset, int] = UNSET
+    next_: Union[Unset, None, str] = UNSET
+    previous: Union[Unset, None, str] = UNSET
+    results: Union[Unset, List[Fetch]] = UNSET
+    additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
+
+    def to_dict(self) -> Dict[str, Any]:
+        count = self.count
+        next_ = self.next_
+        previous = self.previous
+        results: Union[Unset, List[Dict[str, Any]]] = UNSET
+        if not isinstance(self.results, Unset):
+            results = []
+            for results_item_data in self.results:
+                results_item = results_item_data.to_dict()
+
+                results.append(results_item)
+
+        field_dict: Dict[str, Any] = {}
+        field_dict.update(self.additional_properties)
+        field_dict.update({})
+        if count is not UNSET:
+            field_dict["count"] = count
+        if next_ is not UNSET:
+            field_dict["next"] = next_
+        if previous is not UNSET:
+            field_dict["previous"] = previous
+        if results is not UNSET:
+            field_dict["results"] = results
+
+        return field_dict
+
+    @classmethod
+    def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
+        d = src_dict.copy()
+        count = d.pop("count", UNSET)
+
+        next_ = d.pop("next", UNSET)
+
+        previous = d.pop("previous", UNSET)
+
+        results = []
+        _results = d.pop("results", UNSET)
+        for results_item_data in _results or []:
+            results_item = Fetch.from_dict(results_item_data)
+
+            results.append(results_item)
+
+        paginated_fetch_list = cls(
+            count=count,
+            next_=next_,
+            previous=previous,
+            results=results,
+        )
+
+        paginated_fetch_list.additional_properties = d
+        return paginated_fetch_list
+
+    @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/paginated_library_list.py b/funkwhale_api_client/models/paginated_library_list.py
new file mode 100644
index 0000000..9ad8957
--- /dev/null
+++ b/funkwhale_api_client/models/paginated_library_list.py
@@ -0,0 +1,93 @@
+from typing import Any, Dict, List, Type, TypeVar, Union
+
+import attr
+
+from ..models.library import Library
+from ..types import UNSET, Unset
+
+T = TypeVar("T", bound="PaginatedLibraryList")
+
+
+@attr.s(auto_attribs=True)
+class PaginatedLibraryList:
+    """
+    Attributes:
+        count (Union[Unset, int]):  Example: 123.
+        next_ (Union[Unset, None, str]):  Example: http://api.example.org/accounts/?page=4.
+        previous (Union[Unset, None, str]):  Example: http://api.example.org/accounts/?page=2.
+        results (Union[Unset, List[Library]]):
+    """
+
+    count: Union[Unset, int] = UNSET
+    next_: Union[Unset, None, str] = UNSET
+    previous: Union[Unset, None, str] = UNSET
+    results: Union[Unset, List[Library]] = UNSET
+    additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
+
+    def to_dict(self) -> Dict[str, Any]:
+        count = self.count
+        next_ = self.next_
+        previous = self.previous
+        results: Union[Unset, List[Dict[str, Any]]] = UNSET
+        if not isinstance(self.results, Unset):
+            results = []
+            for results_item_data in self.results:
+                results_item = results_item_data.to_dict()
+
+                results.append(results_item)
+
+        field_dict: Dict[str, Any] = {}
+        field_dict.update(self.additional_properties)
+        field_dict.update({})
+        if count is not UNSET:
+            field_dict["count"] = count
+        if next_ is not UNSET:
+            field_dict["next"] = next_
+        if previous is not UNSET:
+            field_dict["previous"] = previous
+        if results is not UNSET:
+            field_dict["results"] = results
+
+        return field_dict
+
+    @classmethod
+    def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
+        d = src_dict.copy()
+        count = d.pop("count", UNSET)
+
+        next_ = d.pop("next", UNSET)
+
+        previous = d.pop("previous", UNSET)
+
+        results = []
+        _results = d.pop("results", UNSET)
+        for results_item_data in _results or []:
+            results_item = Library.from_dict(results_item_data)
+
+            results.append(results_item)
+
+        paginated_library_list = cls(
+            count=count,
+            next_=next_,
+            previous=previous,
+            results=results,
+        )
+
+        paginated_library_list.additional_properties = d
+        return paginated_library_list
+
+    @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/paginated_playlist_track_list.py b/funkwhale_api_client/models/paginated_playlist_track_list.py
new file mode 100644
index 0000000..3a276d6
--- /dev/null
+++ b/funkwhale_api_client/models/paginated_playlist_track_list.py
@@ -0,0 +1,93 @@
+from typing import Any, Dict, List, Type, TypeVar, Union
+
+import attr
+
+from ..models.playlist_track import PlaylistTrack
+from ..types import UNSET, Unset
+
+T = TypeVar("T", bound="PaginatedPlaylistTrackList")
+
+
+@attr.s(auto_attribs=True)
+class PaginatedPlaylistTrackList:
+    """
+    Attributes:
+        count (Union[Unset, int]):  Example: 123.
+        next_ (Union[Unset, None, str]):  Example: http://api.example.org/accounts/?page=4.
+        previous (Union[Unset, None, str]):  Example: http://api.example.org/accounts/?page=2.
+        results (Union[Unset, List[PlaylistTrack]]):
+    """
+
+    count: Union[Unset, int] = UNSET
+    next_: Union[Unset, None, str] = UNSET
+    previous: Union[Unset, None, str] = UNSET
+    results: Union[Unset, List[PlaylistTrack]] = UNSET
+    additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
+
+    def to_dict(self) -> Dict[str, Any]:
+        count = self.count
+        next_ = self.next_
+        previous = self.previous
+        results: Union[Unset, List[Dict[str, Any]]] = UNSET
+        if not isinstance(self.results, Unset):
+            results = []
+            for results_item_data in self.results:
+                results_item = results_item_data.to_dict()
+
+                results.append(results_item)
+
+        field_dict: Dict[str, Any] = {}
+        field_dict.update(self.additional_properties)
+        field_dict.update({})
+        if count is not UNSET:
+            field_dict["count"] = count
+        if next_ is not UNSET:
+            field_dict["next"] = next_
+        if previous is not UNSET:
+            field_dict["previous"] = previous
+        if results is not UNSET:
+            field_dict["results"] = results
+
+        return field_dict
+
+    @classmethod
+    def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
+        d = src_dict.copy()
+        count = d.pop("count", UNSET)
+
+        next_ = d.pop("next", UNSET)
+
+        previous = d.pop("previous", UNSET)
+
+        results = []
+        _results = d.pop("results", UNSET)
+        for results_item_data in _results or []:
+            results_item = PlaylistTrack.from_dict(results_item_data)
+
+            results.append(results_item)
+
+        paginated_playlist_track_list = cls(
+            count=count,
+            next_=next_,
+            previous=previous,
+            results=results,
+        )
+
+        paginated_playlist_track_list.additional_properties = d
+        return paginated_playlist_track_list
+
+    @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/playlist_add_many_request.py b/funkwhale_api_client/models/playlist_add_many_request.py
new file mode 100644
index 0000000..cbd28b3
--- /dev/null
+++ b/funkwhale_api_client/models/playlist_add_many_request.py
@@ -0,0 +1,93 @@
+import json
+from typing import Any, Dict, List, Type, TypeVar, Union, cast
+
+import attr
+
+from ..types import UNSET, Unset
+
+T = TypeVar("T", bound="PlaylistAddManyRequest")
+
+
+@attr.s(auto_attribs=True)
+class PlaylistAddManyRequest:
+    """
+    Attributes:
+        tracks (List[int]):
+        allow_duplicates (Union[Unset, bool]):
+    """
+
+    tracks: List[int]
+    allow_duplicates: Union[Unset, bool] = UNSET
+    additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
+
+    def to_dict(self) -> Dict[str, Any]:
+        tracks = self.tracks
+
+        allow_duplicates = self.allow_duplicates
+
+        field_dict: Dict[str, Any] = {}
+        field_dict.update(self.additional_properties)
+        field_dict.update(
+            {
+                "tracks": tracks,
+            }
+        )
+        if allow_duplicates is not UNSET:
+            field_dict["allow_duplicates"] = allow_duplicates
+
+        return field_dict
+
+    def to_multipart(self) -> Dict[str, Any]:
+        _temp_tracks = self.tracks
+        tracks = (None, json.dumps(_temp_tracks).encode(), "application/json")
+
+        allow_duplicates = (
+            self.allow_duplicates
+            if isinstance(self.allow_duplicates, Unset)
+            else (None, str(self.allow_duplicates).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(
+            {
+                "tracks": tracks,
+            }
+        )
+        if allow_duplicates is not UNSET:
+            field_dict["allow_duplicates"] = allow_duplicates
+
+        return field_dict
+
+    @classmethod
+    def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
+        d = src_dict.copy()
+        tracks = cast(List[int], d.pop("tracks"))
+
+        allow_duplicates = d.pop("allow_duplicates", UNSET)
+
+        playlist_add_many_request = cls(
+            tracks=tracks,
+            allow_duplicates=allow_duplicates,
+        )
+
+        playlist_add_many_request.additional_properties = d
+        return playlist_add_many_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/playlist_track.py b/funkwhale_api_client/models/playlist_track.py
new file mode 100644
index 0000000..e733cb2
--- /dev/null
+++ b/funkwhale_api_client/models/playlist_track.py
@@ -0,0 +1,84 @@
+import datetime
+from typing import Any, Dict, List, Type, TypeVar, Union
+
+import attr
+from dateutil.parser import isoparse
+
+from ..types import UNSET, Unset
+
+T = TypeVar("T", bound="PlaylistTrack")
+
+
+@attr.s(auto_attribs=True)
+class PlaylistTrack:
+    """
+    Attributes:
+        track (str):
+        index (Union[Unset, None, int]):
+        creation_date (Union[Unset, datetime.datetime]):
+    """
+
+    track: str
+    index: Union[Unset, None, int] = UNSET
+    creation_date: Union[Unset, datetime.datetime] = UNSET
+    additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
+
+    def to_dict(self) -> Dict[str, Any]:
+        track = self.track
+        index = self.index
+        creation_date: Union[Unset, str] = UNSET
+        if not isinstance(self.creation_date, Unset):
+            creation_date = self.creation_date.isoformat()
+
+        field_dict: Dict[str, Any] = {}
+        field_dict.update(self.additional_properties)
+        field_dict.update(
+            {
+                "track": track,
+            }
+        )
+        if index is not UNSET:
+            field_dict["index"] = index
+        if creation_date is not UNSET:
+            field_dict["creation_date"] = creation_date
+
+        return field_dict
+
+    @classmethod
+    def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
+        d = src_dict.copy()
+        track = d.pop("track")
+
+        index = d.pop("index", 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)
+
+        playlist_track = cls(
+            track=track,
+            index=index,
+            creation_date=creation_date,
+        )
+
+        playlist_track.additional_properties = d
+        return playlist_track
+
+    @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
-- 
GitLab